diff options
| author | Niall Sheridan <nsheridan@gmail.com> | 2017-10-18 13:15:14 +0100 | 
|---|---|---|
| committer | Niall Sheridan <niall@intercom.io> | 2017-10-18 13:25:46 +0100 | 
| commit | 7b320119ba532fd409ec7dade7ad02011c309599 (patch) | |
| tree | a39860f35b55e6cc499f8f5bfa969138c5dd6b73 /vendor/github.com/golang | |
| parent | 7c99874c7a3e7a89716f3ee0cdf696532e35ae35 (diff) | |
Update dependencies
Diffstat (limited to 'vendor/github.com/golang')
26 files changed, 3475 insertions, 296 deletions
diff --git a/vendor/github.com/golang/protobuf/proto/encode.go b/vendor/github.com/golang/protobuf/proto/encode.go index 2b30f84..8b84d1b 100644 --- a/vendor/github.com/golang/protobuf/proto/encode.go +++ b/vendor/github.com/golang/protobuf/proto/encode.go @@ -174,11 +174,11 @@ func sizeFixed32(x uint64) int {  // This is the format used for the sint64 protocol buffer type.  func (p *Buffer) EncodeZigzag64(x uint64) error {  	// use signed number to get arithmetic right shift. -	return p.EncodeVarint(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +	return p.EncodeVarint((x << 1) ^ uint64((int64(x) >> 63)))  }  func sizeZigzag64(x uint64) int { -	return sizeVarint(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +	return sizeVarint((x << 1) ^ uint64((int64(x) >> 63)))  }  // EncodeZigzag32 writes a zigzag-encoded 32-bit integer diff --git a/vendor/github.com/golang/protobuf/proto/lib.go b/vendor/github.com/golang/protobuf/proto/lib.go index ac4ddbc..1c22550 100644 --- a/vendor/github.com/golang/protobuf/proto/lib.go +++ b/vendor/github.com/golang/protobuf/proto/lib.go @@ -73,7 +73,6 @@ for a protocol buffer variable v:  When the .proto file specifies `syntax="proto3"`, there are some differences:    - Non-repeated fields of non-message type are values instead of pointers. -  - Getters are only generated for message and oneof fields.    - Enum types do not get an Enum method.  The simplest way to describe this is to see an example. diff --git a/vendor/github.com/golang/protobuf/proto/text_parser.go b/vendor/github.com/golang/protobuf/proto/text_parser.go index 61f83c1..5e14513 100644 --- a/vendor/github.com/golang/protobuf/proto/text_parser.go +++ b/vendor/github.com/golang/protobuf/proto/text_parser.go @@ -865,7 +865,7 @@ func (p *textParser) readAny(v reflect.Value, props *Properties) error {  		return p.readStruct(fv, terminator)  	case reflect.Uint32:  		if x, err := strconv.ParseUint(tok.value, 0, 32); err == nil { -			fv.SetUint(uint64(x)) +			fv.SetUint(x)  			return nil  		}  	case reflect.Uint64: diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/Makefile b/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/Makefile index 4942418..f706871 100644 --- a/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/Makefile +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/Makefile @@ -32,8 +32,6 @@  # Not stored here, but descriptor.proto is in https://github.com/google/protobuf/  # at src/google/protobuf/descriptor.proto  regenerate: -	echo WARNING! THIS RULE IS PROBABLY NOT RIGHT FOR YOUR INSTALLATION -	protoc --go_out=. -I$(HOME)/src/protobuf/src $(HOME)/src/protobuf/src/google/protobuf/descriptor.proto && \ -		sed 's,^package google_protobuf,package descriptor,' google/protobuf/descriptor.pb.go > \ -		$(GOPATH)/src/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go && \ -		rm -f google/protobuf/descriptor.pb.go +	@echo WARNING! THIS RULE IS PROBABLY NOT RIGHT FOR YOUR INSTALLATION +	cp $(HOME)/src/protobuf/include/google/protobuf/descriptor.proto . +	protoc --go_out=../../../../.. -I$(HOME)/src/protobuf/include $(HOME)/src/protobuf/include/google/protobuf/descriptor.proto diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go b/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go index a1d8a76..c6a91bc 100644 --- a/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT.  // source: google/protobuf/descriptor.proto -// DO NOT EDIT!  /*  Package descriptor is a generated protocol buffer package. @@ -12,6 +11,7 @@ It has these top-level messages:  	FileDescriptorSet  	FileDescriptorProto  	DescriptorProto +	ExtensionRangeOptions  	FieldDescriptorProto  	OneofDescriptorProto  	EnumDescriptorProto @@ -65,6 +65,10 @@ const (  	FieldDescriptorProto_TYPE_FIXED32 FieldDescriptorProto_Type = 7  	FieldDescriptorProto_TYPE_BOOL    FieldDescriptorProto_Type = 8  	FieldDescriptorProto_TYPE_STRING  FieldDescriptorProto_Type = 9 +	// Tag-delimited aggregate. +	// Group type is deprecated and not supported in proto3. However, Proto3 +	// implementations should still be able to parse the group wire format and +	// treat group fields as unknown fields.  	FieldDescriptorProto_TYPE_GROUP   FieldDescriptorProto_Type = 10  	FieldDescriptorProto_TYPE_MESSAGE FieldDescriptorProto_Type = 11  	// New in version 2. @@ -134,7 +138,7 @@ func (x *FieldDescriptorProto_Type) UnmarshalJSON(data []byte) error {  	*x = FieldDescriptorProto_Type(value)  	return nil  } -func (FieldDescriptorProto_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{3, 0} } +func (FieldDescriptorProto_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{4, 0} }  type FieldDescriptorProto_Label int32 @@ -173,7 +177,7 @@ func (x *FieldDescriptorProto_Label) UnmarshalJSON(data []byte) error {  	return nil  }  func (FieldDescriptorProto_Label) EnumDescriptor() ([]byte, []int) { -	return fileDescriptor0, []int{3, 1} +	return fileDescriptor0, []int{4, 1}  }  // Generated classes can be optimized for speed or code size. @@ -213,7 +217,7 @@ func (x *FileOptions_OptimizeMode) UnmarshalJSON(data []byte) error {  	*x = FileOptions_OptimizeMode(value)  	return nil  } -func (FileOptions_OptimizeMode) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{9, 0} } +func (FileOptions_OptimizeMode) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{10, 0} }  type FieldOptions_CType int32 @@ -251,7 +255,7 @@ func (x *FieldOptions_CType) UnmarshalJSON(data []byte) error {  	*x = FieldOptions_CType(value)  	return nil  } -func (FieldOptions_CType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{11, 0} } +func (FieldOptions_CType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{12, 0} }  type FieldOptions_JSType int32 @@ -291,7 +295,49 @@ func (x *FieldOptions_JSType) UnmarshalJSON(data []byte) error {  	*x = FieldOptions_JSType(value)  	return nil  } -func (FieldOptions_JSType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{11, 1} } +func (FieldOptions_JSType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{12, 1} } + +// Is this method side-effect-free (or safe in HTTP parlance), or idempotent, +// or neither? HTTP based RPC implementation may choose GET verb for safe +// methods, and PUT verb for idempotent methods instead of the default POST. +type MethodOptions_IdempotencyLevel int32 + +const ( +	MethodOptions_IDEMPOTENCY_UNKNOWN MethodOptions_IdempotencyLevel = 0 +	MethodOptions_NO_SIDE_EFFECTS     MethodOptions_IdempotencyLevel = 1 +	MethodOptions_IDEMPOTENT          MethodOptions_IdempotencyLevel = 2 +) + +var MethodOptions_IdempotencyLevel_name = map[int32]string{ +	0: "IDEMPOTENCY_UNKNOWN", +	1: "NO_SIDE_EFFECTS", +	2: "IDEMPOTENT", +} +var MethodOptions_IdempotencyLevel_value = map[string]int32{ +	"IDEMPOTENCY_UNKNOWN": 0, +	"NO_SIDE_EFFECTS":     1, +	"IDEMPOTENT":          2, +} + +func (x MethodOptions_IdempotencyLevel) Enum() *MethodOptions_IdempotencyLevel { +	p := new(MethodOptions_IdempotencyLevel) +	*p = x +	return p +} +func (x MethodOptions_IdempotencyLevel) String() string { +	return proto.EnumName(MethodOptions_IdempotencyLevel_name, int32(x)) +} +func (x *MethodOptions_IdempotencyLevel) UnmarshalJSON(data []byte) error { +	value, err := proto.UnmarshalJSONEnum(MethodOptions_IdempotencyLevel_value, data, "MethodOptions_IdempotencyLevel") +	if err != nil { +		return err +	} +	*x = MethodOptions_IdempotencyLevel(value) +	return nil +} +func (MethodOptions_IdempotencyLevel) EnumDescriptor() ([]byte, []int) { +	return fileDescriptor0, []int{17, 0} +}  // The protocol compiler can output a FileDescriptorSet containing the .proto  // files it parses. @@ -522,9 +568,10 @@ func (m *DescriptorProto) GetReservedName() []string {  }  type DescriptorProto_ExtensionRange struct { -	Start            *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` -	End              *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` -	XXX_unrecognized []byte `json:"-"` +	Start            *int32                 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` +	End              *int32                 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` +	Options          *ExtensionRangeOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` +	XXX_unrecognized []byte                 `json:"-"`  }  func (m *DescriptorProto_ExtensionRange) Reset()         { *m = DescriptorProto_ExtensionRange{} } @@ -548,6 +595,13 @@ func (m *DescriptorProto_ExtensionRange) GetEnd() int32 {  	return 0  } +func (m *DescriptorProto_ExtensionRange) GetOptions() *ExtensionRangeOptions { +	if m != nil { +		return m.Options +	} +	return nil +} +  // Range of reserved tag numbers. Reserved tag numbers may not be used by  // fields or extension ranges in the same message. Reserved ranges may  // not overlap. @@ -578,6 +632,33 @@ func (m *DescriptorProto_ReservedRange) GetEnd() int32 {  	return 0  } +type ExtensionRangeOptions struct { +	// The parser stores options it doesn't recognize here. See above. +	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` +	proto.XXX_InternalExtensions `json:"-"` +	XXX_unrecognized             []byte `json:"-"` +} + +func (m *ExtensionRangeOptions) Reset()                    { *m = ExtensionRangeOptions{} } +func (m *ExtensionRangeOptions) String() string            { return proto.CompactTextString(m) } +func (*ExtensionRangeOptions) ProtoMessage()               {} +func (*ExtensionRangeOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +var extRange_ExtensionRangeOptions = []proto.ExtensionRange{ +	{1000, 536870911}, +} + +func (*ExtensionRangeOptions) ExtensionRangeArray() []proto.ExtensionRange { +	return extRange_ExtensionRangeOptions +} + +func (m *ExtensionRangeOptions) GetUninterpretedOption() []*UninterpretedOption { +	if m != nil { +		return m.UninterpretedOption +	} +	return nil +} +  // Describes a field within a message.  type FieldDescriptorProto struct {  	Name   *string                     `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` @@ -616,7 +697,7 @@ type FieldDescriptorProto struct {  func (m *FieldDescriptorProto) Reset()                    { *m = FieldDescriptorProto{} }  func (m *FieldDescriptorProto) String() string            { return proto.CompactTextString(m) }  func (*FieldDescriptorProto) ProtoMessage()               {} -func (*FieldDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } +func (*FieldDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }  func (m *FieldDescriptorProto) GetName() string {  	if m != nil && m.Name != nil { @@ -698,7 +779,7 @@ type OneofDescriptorProto struct {  func (m *OneofDescriptorProto) Reset()                    { *m = OneofDescriptorProto{} }  func (m *OneofDescriptorProto) String() string            { return proto.CompactTextString(m) }  func (*OneofDescriptorProto) ProtoMessage()               {} -func (*OneofDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } +func (*OneofDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }  func (m *OneofDescriptorProto) GetName() string {  	if m != nil && m.Name != nil { @@ -725,7 +806,7 @@ type EnumDescriptorProto struct {  func (m *EnumDescriptorProto) Reset()                    { *m = EnumDescriptorProto{} }  func (m *EnumDescriptorProto) String() string            { return proto.CompactTextString(m) }  func (*EnumDescriptorProto) ProtoMessage()               {} -func (*EnumDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } +func (*EnumDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }  func (m *EnumDescriptorProto) GetName() string {  	if m != nil && m.Name != nil { @@ -759,7 +840,7 @@ type EnumValueDescriptorProto struct {  func (m *EnumValueDescriptorProto) Reset()                    { *m = EnumValueDescriptorProto{} }  func (m *EnumValueDescriptorProto) String() string            { return proto.CompactTextString(m) }  func (*EnumValueDescriptorProto) ProtoMessage()               {} -func (*EnumValueDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } +func (*EnumValueDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }  func (m *EnumValueDescriptorProto) GetName() string {  	if m != nil && m.Name != nil { @@ -793,7 +874,7 @@ type ServiceDescriptorProto struct {  func (m *ServiceDescriptorProto) Reset()                    { *m = ServiceDescriptorProto{} }  func (m *ServiceDescriptorProto) String() string            { return proto.CompactTextString(m) }  func (*ServiceDescriptorProto) ProtoMessage()               {} -func (*ServiceDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } +func (*ServiceDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }  func (m *ServiceDescriptorProto) GetName() string {  	if m != nil && m.Name != nil { @@ -834,7 +915,7 @@ type MethodDescriptorProto struct {  func (m *MethodDescriptorProto) Reset()                    { *m = MethodDescriptorProto{} }  func (m *MethodDescriptorProto) String() string            { return proto.CompactTextString(m) }  func (*MethodDescriptorProto) ProtoMessage()               {} -func (*MethodDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } +func (*MethodDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }  const Default_MethodDescriptorProto_ClientStreaming bool = false  const Default_MethodDescriptorProto_ServerStreaming bool = false @@ -929,6 +1010,7 @@ type FileOptions struct {  	CcGenericServices   *bool `protobuf:"varint,16,opt,name=cc_generic_services,json=ccGenericServices,def=0" json:"cc_generic_services,omitempty"`  	JavaGenericServices *bool `protobuf:"varint,17,opt,name=java_generic_services,json=javaGenericServices,def=0" json:"java_generic_services,omitempty"`  	PyGenericServices   *bool `protobuf:"varint,18,opt,name=py_generic_services,json=pyGenericServices,def=0" json:"py_generic_services,omitempty"` +	PhpGenericServices  *bool `protobuf:"varint,42,opt,name=php_generic_services,json=phpGenericServices,def=0" json:"php_generic_services,omitempty"`  	// Is this file deprecated?  	// Depending on the target platform, this can emit Deprecated annotations  	// for everything in the file, or it will be completely ignored; in the very @@ -942,6 +1024,18 @@ type FileOptions struct {  	ObjcClassPrefix *string `protobuf:"bytes,36,opt,name=objc_class_prefix,json=objcClassPrefix" json:"objc_class_prefix,omitempty"`  	// Namespace for generated classes; defaults to the package.  	CsharpNamespace *string `protobuf:"bytes,37,opt,name=csharp_namespace,json=csharpNamespace" json:"csharp_namespace,omitempty"` +	// By default Swift generators will take the proto package and CamelCase it +	// replacing '.' with underscore and use that to prefix the types/symbols +	// defined. When this options is provided, they will use this value instead +	// to prefix the types/symbols defined. +	SwiftPrefix *string `protobuf:"bytes,39,opt,name=swift_prefix,json=swiftPrefix" json:"swift_prefix,omitempty"` +	// Sets the php class prefix which is prepended to all php generated classes +	// from this .proto. Default is empty. +	PhpClassPrefix *string `protobuf:"bytes,40,opt,name=php_class_prefix,json=phpClassPrefix" json:"php_class_prefix,omitempty"` +	// Use this option to change the namespace of php generated classes. Default +	// is empty. When this option is empty, the package name will be used for +	// determining the namespace. +	PhpNamespace *string `protobuf:"bytes,41,opt,name=php_namespace,json=phpNamespace" json:"php_namespace,omitempty"`  	// The parser stores options it doesn't recognize here. See above.  	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`  	proto.XXX_InternalExtensions `json:"-"` @@ -951,7 +1045,7 @@ type FileOptions struct {  func (m *FileOptions) Reset()                    { *m = FileOptions{} }  func (m *FileOptions) String() string            { return proto.CompactTextString(m) }  func (*FileOptions) ProtoMessage()               {} -func (*FileOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } +func (*FileOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }  var extRange_FileOptions = []proto.ExtensionRange{  	{1000, 536870911}, @@ -967,6 +1061,7 @@ const Default_FileOptions_OptimizeFor FileOptions_OptimizeMode = FileOptions_SPE  const Default_FileOptions_CcGenericServices bool = false  const Default_FileOptions_JavaGenericServices bool = false  const Default_FileOptions_PyGenericServices bool = false +const Default_FileOptions_PhpGenericServices bool = false  const Default_FileOptions_Deprecated bool = false  const Default_FileOptions_CcEnableArenas bool = false @@ -1040,6 +1135,13 @@ func (m *FileOptions) GetPyGenericServices() bool {  	return Default_FileOptions_PyGenericServices  } +func (m *FileOptions) GetPhpGenericServices() bool { +	if m != nil && m.PhpGenericServices != nil { +		return *m.PhpGenericServices +	} +	return Default_FileOptions_PhpGenericServices +} +  func (m *FileOptions) GetDeprecated() bool {  	if m != nil && m.Deprecated != nil {  		return *m.Deprecated @@ -1068,6 +1170,27 @@ func (m *FileOptions) GetCsharpNamespace() string {  	return ""  } +func (m *FileOptions) GetSwiftPrefix() string { +	if m != nil && m.SwiftPrefix != nil { +		return *m.SwiftPrefix +	} +	return "" +} + +func (m *FileOptions) GetPhpClassPrefix() string { +	if m != nil && m.PhpClassPrefix != nil { +		return *m.PhpClassPrefix +	} +	return "" +} + +func (m *FileOptions) GetPhpNamespace() string { +	if m != nil && m.PhpNamespace != nil { +		return *m.PhpNamespace +	} +	return "" +} +  func (m *FileOptions) GetUninterpretedOption() []*UninterpretedOption {  	if m != nil {  		return m.UninterpretedOption @@ -1135,7 +1258,7 @@ type MessageOptions struct {  func (m *MessageOptions) Reset()                    { *m = MessageOptions{} }  func (m *MessageOptions) String() string            { return proto.CompactTextString(m) }  func (*MessageOptions) ProtoMessage()               {} -func (*MessageOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } +func (*MessageOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }  var extRange_MessageOptions = []proto.ExtensionRange{  	{1000, 536870911}, @@ -1198,13 +1321,15 @@ type FieldOptions struct {  	Packed *bool `protobuf:"varint,2,opt,name=packed" json:"packed,omitempty"`  	// The jstype option determines the JavaScript type used for values of the  	// field.  The option is permitted only for 64 bit integral and fixed types -	// (int64, uint64, sint64, fixed64, sfixed64).  By default these types are -	// represented as JavaScript strings.  This avoids loss of precision that can -	// happen when a large value is converted to a floating point JavaScript -	// numbers.  Specifying JS_NUMBER for the jstype causes the generated -	// JavaScript code to use the JavaScript "number" type instead of strings. -	// This option is an enum to permit additional types to be added, -	// e.g. goog.math.Integer. +	// (int64, uint64, sint64, fixed64, sfixed64).  A field with jstype JS_STRING +	// is represented as JavaScript string, which avoids loss of precision that +	// can happen when a large value is converted to a floating point JavaScript. +	// Specifying JS_NUMBER for the jstype causes the generated JavaScript code to +	// use the JavaScript "number" type.  The behavior of the default option +	// JS_NORMAL is implementation dependent. +	// +	// This option is an enum to permit additional types to be added, e.g. +	// goog.math.Integer.  	Jstype *FieldOptions_JSType `protobuf:"varint,6,opt,name=jstype,enum=google.protobuf.FieldOptions_JSType,def=0" json:"jstype,omitempty"`  	// Should this field be parsed lazily?  Lazy applies only to message-type  	// fields.  It means that when the outer message is initially parsed, the @@ -1251,7 +1376,7 @@ type FieldOptions struct {  func (m *FieldOptions) Reset()                    { *m = FieldOptions{} }  func (m *FieldOptions) String() string            { return proto.CompactTextString(m) }  func (*FieldOptions) ProtoMessage()               {} -func (*FieldOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } +func (*FieldOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }  var extRange_FieldOptions = []proto.ExtensionRange{  	{1000, 536870911}, @@ -1326,7 +1451,7 @@ type OneofOptions struct {  func (m *OneofOptions) Reset()                    { *m = OneofOptions{} }  func (m *OneofOptions) String() string            { return proto.CompactTextString(m) }  func (*OneofOptions) ProtoMessage()               {} -func (*OneofOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } +func (*OneofOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} }  var extRange_OneofOptions = []proto.ExtensionRange{  	{1000, 536870911}, @@ -1361,7 +1486,7 @@ type EnumOptions struct {  func (m *EnumOptions) Reset()                    { *m = EnumOptions{} }  func (m *EnumOptions) String() string            { return proto.CompactTextString(m) }  func (*EnumOptions) ProtoMessage()               {} -func (*EnumOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } +func (*EnumOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }  var extRange_EnumOptions = []proto.ExtensionRange{  	{1000, 536870911}, @@ -1409,7 +1534,7 @@ type EnumValueOptions struct {  func (m *EnumValueOptions) Reset()                    { *m = EnumValueOptions{} }  func (m *EnumValueOptions) String() string            { return proto.CompactTextString(m) }  func (*EnumValueOptions) ProtoMessage()               {} -func (*EnumValueOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } +func (*EnumValueOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} }  var extRange_EnumValueOptions = []proto.ExtensionRange{  	{1000, 536870911}, @@ -1450,7 +1575,7 @@ type ServiceOptions struct {  func (m *ServiceOptions) Reset()                    { *m = ServiceOptions{} }  func (m *ServiceOptions) String() string            { return proto.CompactTextString(m) }  func (*ServiceOptions) ProtoMessage()               {} -func (*ServiceOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } +func (*ServiceOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} }  var extRange_ServiceOptions = []proto.ExtensionRange{  	{1000, 536870911}, @@ -1481,7 +1606,8 @@ type MethodOptions struct {  	// Depending on the target platform, this can emit Deprecated annotations  	// for the method, or it will be completely ignored; in the very least,  	// this is a formalization for deprecating methods. -	Deprecated *bool `protobuf:"varint,33,opt,name=deprecated,def=0" json:"deprecated,omitempty"` +	Deprecated       *bool                           `protobuf:"varint,33,opt,name=deprecated,def=0" json:"deprecated,omitempty"` +	IdempotencyLevel *MethodOptions_IdempotencyLevel `protobuf:"varint,34,opt,name=idempotency_level,json=idempotencyLevel,enum=google.protobuf.MethodOptions_IdempotencyLevel,def=0" json:"idempotency_level,omitempty"`  	// The parser stores options it doesn't recognize here. See above.  	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`  	proto.XXX_InternalExtensions `json:"-"` @@ -1491,7 +1617,7 @@ type MethodOptions struct {  func (m *MethodOptions) Reset()                    { *m = MethodOptions{} }  func (m *MethodOptions) String() string            { return proto.CompactTextString(m) }  func (*MethodOptions) ProtoMessage()               {} -func (*MethodOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } +func (*MethodOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} }  var extRange_MethodOptions = []proto.ExtensionRange{  	{1000, 536870911}, @@ -1502,6 +1628,7 @@ func (*MethodOptions) ExtensionRangeArray() []proto.ExtensionRange {  }  const Default_MethodOptions_Deprecated bool = false +const Default_MethodOptions_IdempotencyLevel MethodOptions_IdempotencyLevel = MethodOptions_IDEMPOTENCY_UNKNOWN  func (m *MethodOptions) GetDeprecated() bool {  	if m != nil && m.Deprecated != nil { @@ -1510,6 +1637,13 @@ func (m *MethodOptions) GetDeprecated() bool {  	return Default_MethodOptions_Deprecated  } +func (m *MethodOptions) GetIdempotencyLevel() MethodOptions_IdempotencyLevel { +	if m != nil && m.IdempotencyLevel != nil { +		return *m.IdempotencyLevel +	} +	return Default_MethodOptions_IdempotencyLevel +} +  func (m *MethodOptions) GetUninterpretedOption() []*UninterpretedOption {  	if m != nil {  		return m.UninterpretedOption @@ -1539,7 +1673,7 @@ type UninterpretedOption struct {  func (m *UninterpretedOption) Reset()                    { *m = UninterpretedOption{} }  func (m *UninterpretedOption) String() string            { return proto.CompactTextString(m) }  func (*UninterpretedOption) ProtoMessage()               {} -func (*UninterpretedOption) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } +func (*UninterpretedOption) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} }  func (m *UninterpretedOption) GetName() []*UninterpretedOption_NamePart {  	if m != nil { @@ -1605,7 +1739,7 @@ func (m *UninterpretedOption_NamePart) Reset()         { *m = UninterpretedOptio  func (m *UninterpretedOption_NamePart) String() string { return proto.CompactTextString(m) }  func (*UninterpretedOption_NamePart) ProtoMessage()    {}  func (*UninterpretedOption_NamePart) Descriptor() ([]byte, []int) { -	return fileDescriptor0, []int{17, 0} +	return fileDescriptor0, []int{18, 0}  }  func (m *UninterpretedOption_NamePart) GetNamePart() string { @@ -1675,7 +1809,7 @@ type SourceCodeInfo struct {  func (m *SourceCodeInfo) Reset()                    { *m = SourceCodeInfo{} }  func (m *SourceCodeInfo) String() string            { return proto.CompactTextString(m) }  func (*SourceCodeInfo) ProtoMessage()               {} -func (*SourceCodeInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } +func (*SourceCodeInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} }  func (m *SourceCodeInfo) GetLocation() []*SourceCodeInfo_Location {  	if m != nil { @@ -1771,7 +1905,7 @@ type SourceCodeInfo_Location struct {  func (m *SourceCodeInfo_Location) Reset()                    { *m = SourceCodeInfo_Location{} }  func (m *SourceCodeInfo_Location) String() string            { return proto.CompactTextString(m) }  func (*SourceCodeInfo_Location) ProtoMessage()               {} -func (*SourceCodeInfo_Location) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18, 0} } +func (*SourceCodeInfo_Location) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19, 0} }  func (m *SourceCodeInfo_Location) GetPath() []int32 {  	if m != nil { @@ -1821,7 +1955,7 @@ type GeneratedCodeInfo struct {  func (m *GeneratedCodeInfo) Reset()                    { *m = GeneratedCodeInfo{} }  func (m *GeneratedCodeInfo) String() string            { return proto.CompactTextString(m) }  func (*GeneratedCodeInfo) ProtoMessage()               {} -func (*GeneratedCodeInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } +func (*GeneratedCodeInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} }  func (m *GeneratedCodeInfo) GetAnnotation() []*GeneratedCodeInfo_Annotation {  	if m != nil { @@ -1850,7 +1984,7 @@ func (m *GeneratedCodeInfo_Annotation) Reset()         { *m = GeneratedCodeInfo_  func (m *GeneratedCodeInfo_Annotation) String() string { return proto.CompactTextString(m) }  func (*GeneratedCodeInfo_Annotation) ProtoMessage()    {}  func (*GeneratedCodeInfo_Annotation) Descriptor() ([]byte, []int) { -	return fileDescriptor0, []int{19, 0} +	return fileDescriptor0, []int{20, 0}  }  func (m *GeneratedCodeInfo_Annotation) GetPath() []int32 { @@ -1887,6 +2021,7 @@ func init() {  	proto.RegisterType((*DescriptorProto)(nil), "google.protobuf.DescriptorProto")  	proto.RegisterType((*DescriptorProto_ExtensionRange)(nil), "google.protobuf.DescriptorProto.ExtensionRange")  	proto.RegisterType((*DescriptorProto_ReservedRange)(nil), "google.protobuf.DescriptorProto.ReservedRange") +	proto.RegisterType((*ExtensionRangeOptions)(nil), "google.protobuf.ExtensionRangeOptions")  	proto.RegisterType((*FieldDescriptorProto)(nil), "google.protobuf.FieldDescriptorProto")  	proto.RegisterType((*OneofDescriptorProto)(nil), "google.protobuf.OneofDescriptorProto")  	proto.RegisterType((*EnumDescriptorProto)(nil), "google.protobuf.EnumDescriptorProto") @@ -1912,154 +2047,169 @@ func init() {  	proto.RegisterEnum("google.protobuf.FileOptions_OptimizeMode", FileOptions_OptimizeMode_name, FileOptions_OptimizeMode_value)  	proto.RegisterEnum("google.protobuf.FieldOptions_CType", FieldOptions_CType_name, FieldOptions_CType_value)  	proto.RegisterEnum("google.protobuf.FieldOptions_JSType", FieldOptions_JSType_name, FieldOptions_JSType_value) +	proto.RegisterEnum("google.protobuf.MethodOptions_IdempotencyLevel", MethodOptions_IdempotencyLevel_name, MethodOptions_IdempotencyLevel_value)  }  func init() { proto.RegisterFile("google/protobuf/descriptor.proto", fileDescriptor0) }  var fileDescriptor0 = []byte{ -	// 2295 bytes of a gzipped FileDescriptorProto -	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xcc, 0x59, 0x4f, 0x6f, 0x1b, 0xc7, -	0x15, 0xcf, 0xf2, 0x9f, 0xc8, 0x47, 0x8a, 0x1a, 0x8d, 0x14, 0x67, 0xad, 0xfc, 0xb1, 0xcc, 0xd8, -	0xb1, 0x6c, 0xb7, 0x74, 0x20, 0xff, 0x89, 0xa3, 0x14, 0x29, 0x28, 0x71, 0xad, 0xd0, 0x90, 0x44, -	0x76, 0x29, 0xb5, 0x4e, 0x2e, 0x8b, 0xd1, 0xee, 0x90, 0x5a, 0x7b, 0x39, 0xbb, 0xdd, 0x5d, 0xda, -	0x56, 0x4e, 0x06, 0x7a, 0xea, 0xa5, 0xe7, 0xa2, 0x2d, 0x7a, 0xc8, 0x25, 0x40, 0x3f, 0x40, 0x0f, -	0xfd, 0x0a, 0x05, 0x0a, 0xf4, 0x2b, 0x14, 0x05, 0xda, 0x6f, 0xd0, 0x6b, 0x31, 0x33, 0xbb, 0xcb, -	0x5d, 0xfe, 0x89, 0xd5, 0x00, 0x49, 0x7a, 0x12, 0xe7, 0xf7, 0x7e, 0xef, 0xcd, 0x9b, 0x37, 0x6f, -	0xde, 0xbc, 0x1d, 0xc1, 0xe6, 0xd0, 0x75, 0x87, 0x0e, 0xbd, 0xe3, 0xf9, 0x6e, 0xe8, 0x9e, 0x8e, -	0x07, 0x77, 0x2c, 0x1a, 0x98, 0xbe, 0xed, 0x85, 0xae, 0xdf, 0x14, 0x18, 0x5e, 0x91, 0x8c, 0x66, -	0xcc, 0x68, 0x1c, 0xc2, 0xea, 0x23, 0xdb, 0xa1, 0xed, 0x84, 0xd8, 0xa7, 0x21, 0x7e, 0x08, 0x85, -	0x81, 0xed, 0x50, 0x55, 0xd9, 0xcc, 0x6f, 0x55, 0xb7, 0xaf, 0x35, 0xa7, 0x94, 0x9a, 0x59, 0x8d, -	0x1e, 0x87, 0x75, 0xa1, 0xd1, 0xf8, 0x67, 0x01, 0xd6, 0xe6, 0x48, 0x31, 0x86, 0x02, 0x23, 0x23, -	0x6e, 0x51, 0xd9, 0xaa, 0xe8, 0xe2, 0x37, 0x56, 0x61, 0xc9, 0x23, 0xe6, 0x33, 0x32, 0xa4, 0x6a, -	0x4e, 0xc0, 0xf1, 0x10, 0xbf, 0x07, 0x60, 0x51, 0x8f, 0x32, 0x8b, 0x32, 0xf3, 0x5c, 0xcd, 0x6f, -	0xe6, 0xb7, 0x2a, 0x7a, 0x0a, 0xc1, 0xb7, 0x61, 0xd5, 0x1b, 0x9f, 0x3a, 0xb6, 0x69, 0xa4, 0x68, -	0xb0, 0x99, 0xdf, 0x2a, 0xea, 0x48, 0x0a, 0xda, 0x13, 0xf2, 0x0d, 0x58, 0x79, 0x41, 0xc9, 0xb3, -	0x34, 0xb5, 0x2a, 0xa8, 0x75, 0x0e, 0xa7, 0x88, 0x7b, 0x50, 0x1b, 0xd1, 0x20, 0x20, 0x43, 0x6a, -	0x84, 0xe7, 0x1e, 0x55, 0x0b, 0x62, 0xf5, 0x9b, 0x33, 0xab, 0x9f, 0x5e, 0x79, 0x35, 0xd2, 0x3a, -	0x3e, 0xf7, 0x28, 0x6e, 0x41, 0x85, 0xb2, 0xf1, 0x48, 0x5a, 0x28, 0x2e, 0x88, 0x9f, 0xc6, 0xc6, -	0xa3, 0x69, 0x2b, 0x65, 0xae, 0x16, 0x99, 0x58, 0x0a, 0xa8, 0xff, 0xdc, 0x36, 0xa9, 0x5a, 0x12, -	0x06, 0x6e, 0xcc, 0x18, 0xe8, 0x4b, 0xf9, 0xb4, 0x8d, 0x58, 0x0f, 0xef, 0x41, 0x85, 0xbe, 0x0c, -	0x29, 0x0b, 0x6c, 0x97, 0xa9, 0x4b, 0xc2, 0xc8, 0xf5, 0x39, 0xbb, 0x48, 0x1d, 0x6b, 0xda, 0xc4, -	0x44, 0x0f, 0x3f, 0x80, 0x25, 0xd7, 0x0b, 0x6d, 0x97, 0x05, 0x6a, 0x79, 0x53, 0xd9, 0xaa, 0x6e, -	0xbf, 0x33, 0x37, 0x11, 0xba, 0x92, 0xa3, 0xc7, 0x64, 0xdc, 0x01, 0x14, 0xb8, 0x63, 0xdf, 0xa4, -	0x86, 0xe9, 0x5a, 0xd4, 0xb0, 0xd9, 0xc0, 0x55, 0x2b, 0xc2, 0xc0, 0x95, 0xd9, 0x85, 0x08, 0xe2, -	0x9e, 0x6b, 0xd1, 0x0e, 0x1b, 0xb8, 0x7a, 0x3d, 0xc8, 0x8c, 0xf1, 0x25, 0x28, 0x05, 0xe7, 0x2c, -	0x24, 0x2f, 0xd5, 0x9a, 0xc8, 0x90, 0x68, 0xd4, 0xf8, 0x4f, 0x11, 0x56, 0x2e, 0x92, 0x62, 0x9f, -	0x40, 0x71, 0xc0, 0x57, 0xa9, 0xe6, 0xfe, 0x97, 0x18, 0x48, 0x9d, 0x6c, 0x10, 0x4b, 0xdf, 0x32, -	0x88, 0x2d, 0xa8, 0x32, 0x1a, 0x84, 0xd4, 0x92, 0x19, 0x91, 0xbf, 0x60, 0x4e, 0x81, 0x54, 0x9a, -	0x4d, 0xa9, 0xc2, 0xb7, 0x4a, 0xa9, 0x27, 0xb0, 0x92, 0xb8, 0x64, 0xf8, 0x84, 0x0d, 0xe3, 0xdc, -	0xbc, 0xf3, 0x3a, 0x4f, 0x9a, 0x5a, 0xac, 0xa7, 0x73, 0x35, 0xbd, 0x4e, 0x33, 0x63, 0xdc, 0x06, -	0x70, 0x19, 0x75, 0x07, 0x86, 0x45, 0x4d, 0x47, 0x2d, 0x2f, 0x88, 0x52, 0x97, 0x53, 0x66, 0xa2, -	0xe4, 0x4a, 0xd4, 0x74, 0xf0, 0xc7, 0x93, 0x54, 0x5b, 0x5a, 0x90, 0x29, 0x87, 0xf2, 0x90, 0xcd, -	0x64, 0xdb, 0x09, 0xd4, 0x7d, 0xca, 0xf3, 0x9e, 0x5a, 0xd1, 0xca, 0x2a, 0xc2, 0x89, 0xe6, 0x6b, -	0x57, 0xa6, 0x47, 0x6a, 0x72, 0x61, 0xcb, 0x7e, 0x7a, 0x88, 0xdf, 0x87, 0x04, 0x30, 0x44, 0x5a, -	0x81, 0xa8, 0x42, 0xb5, 0x18, 0x3c, 0x22, 0x23, 0xba, 0xf1, 0x10, 0xea, 0xd9, 0xf0, 0xe0, 0x75, -	0x28, 0x06, 0x21, 0xf1, 0x43, 0x91, 0x85, 0x45, 0x5d, 0x0e, 0x30, 0x82, 0x3c, 0x65, 0x96, 0xa8, -	0x72, 0x45, 0x9d, 0xff, 0xdc, 0xf8, 0x08, 0x96, 0x33, 0xd3, 0x5f, 0x54, 0xb1, 0xf1, 0xdb, 0x12, -	0xac, 0xcf, 0xcb, 0xb9, 0xb9, 0xe9, 0x7f, 0x09, 0x4a, 0x6c, 0x3c, 0x3a, 0xa5, 0xbe, 0x9a, 0x17, -	0x16, 0xa2, 0x11, 0x6e, 0x41, 0xd1, 0x21, 0xa7, 0xd4, 0x51, 0x0b, 0x9b, 0xca, 0x56, 0x7d, 0xfb, -	0xf6, 0x85, 0xb2, 0xba, 0x79, 0xc0, 0x55, 0x74, 0xa9, 0x89, 0x3f, 0x85, 0x42, 0x54, 0xe2, 0xb8, -	0x85, 0x5b, 0x17, 0xb3, 0xc0, 0x73, 0x51, 0x17, 0x7a, 0xf8, 0x6d, 0xa8, 0xf0, 0xbf, 0x32, 0xb6, -	0x25, 0xe1, 0x73, 0x99, 0x03, 0x3c, 0xae, 0x78, 0x03, 0xca, 0x22, 0xcd, 0x2c, 0x1a, 0x5f, 0x0d, -	0xc9, 0x98, 0x6f, 0x8c, 0x45, 0x07, 0x64, 0xec, 0x84, 0xc6, 0x73, 0xe2, 0x8c, 0xa9, 0x48, 0x98, -	0x8a, 0x5e, 0x8b, 0xc0, 0x9f, 0x73, 0x0c, 0x5f, 0x81, 0xaa, 0xcc, 0x4a, 0x9b, 0x59, 0xf4, 0xa5, -	0xa8, 0x3e, 0x45, 0x5d, 0x26, 0x6a, 0x87, 0x23, 0x7c, 0xfa, 0xa7, 0x81, 0xcb, 0xe2, 0xad, 0x15, -	0x53, 0x70, 0x40, 0x4c, 0xff, 0xd1, 0x74, 0xe1, 0x7b, 0x77, 0xfe, 0xf2, 0xa6, 0x73, 0xb1, 0xf1, -	0xe7, 0x1c, 0x14, 0xc4, 0x79, 0x5b, 0x81, 0xea, 0xf1, 0xe7, 0x3d, 0xcd, 0x68, 0x77, 0x4f, 0x76, -	0x0f, 0x34, 0xa4, 0xe0, 0x3a, 0x80, 0x00, 0x1e, 0x1d, 0x74, 0x5b, 0xc7, 0x28, 0x97, 0x8c, 0x3b, -	0x47, 0xc7, 0x0f, 0xee, 0xa1, 0x7c, 0xa2, 0x70, 0x22, 0x81, 0x42, 0x9a, 0x70, 0x77, 0x1b, 0x15, -	0x31, 0x82, 0x9a, 0x34, 0xd0, 0x79, 0xa2, 0xb5, 0x1f, 0xdc, 0x43, 0xa5, 0x2c, 0x72, 0x77, 0x1b, -	0x2d, 0xe1, 0x65, 0xa8, 0x08, 0x64, 0xb7, 0xdb, 0x3d, 0x40, 0xe5, 0xc4, 0x66, 0xff, 0x58, 0xef, -	0x1c, 0xed, 0xa3, 0x4a, 0x62, 0x73, 0x5f, 0xef, 0x9e, 0xf4, 0x10, 0x24, 0x16, 0x0e, 0xb5, 0x7e, -	0xbf, 0xb5, 0xaf, 0xa1, 0x6a, 0xc2, 0xd8, 0xfd, 0xfc, 0x58, 0xeb, 0xa3, 0x5a, 0xc6, 0xad, 0xbb, -	0xdb, 0x68, 0x39, 0x99, 0x42, 0x3b, 0x3a, 0x39, 0x44, 0x75, 0xbc, 0x0a, 0xcb, 0x72, 0x8a, 0xd8, -	0x89, 0x95, 0x29, 0xe8, 0xc1, 0x3d, 0x84, 0x26, 0x8e, 0x48, 0x2b, 0xab, 0x19, 0xe0, 0xc1, 0x3d, -	0x84, 0x1b, 0x7b, 0x50, 0x14, 0xd9, 0x85, 0x31, 0xd4, 0x0f, 0x5a, 0xbb, 0xda, 0x81, 0xd1, 0xed, -	0x1d, 0x77, 0xba, 0x47, 0xad, 0x03, 0xa4, 0x4c, 0x30, 0x5d, 0xfb, 0xd9, 0x49, 0x47, 0xd7, 0xda, -	0x28, 0x97, 0xc6, 0x7a, 0x5a, 0xeb, 0x58, 0x6b, 0xa3, 0x7c, 0xc3, 0x84, 0xf5, 0x79, 0x75, 0x66, -	0xee, 0xc9, 0x48, 0x6d, 0x71, 0x6e, 0xc1, 0x16, 0x0b, 0x5b, 0x33, 0x5b, 0xfc, 0x95, 0x02, 0x6b, -	0x73, 0x6a, 0xed, 0xdc, 0x49, 0x7e, 0x0a, 0x45, 0x99, 0xa2, 0xf2, 0xf6, 0xb9, 0x39, 0xb7, 0x68, -	0x8b, 0x84, 0x9d, 0xb9, 0x81, 0x84, 0x5e, 0xfa, 0x06, 0xce, 0x2f, 0xb8, 0x81, 0xb9, 0x89, 0x19, -	0x27, 0x7f, 0xa5, 0x80, 0xba, 0xc8, 0xf6, 0x6b, 0x0a, 0x45, 0x2e, 0x53, 0x28, 0x3e, 0x99, 0x76, -	0xe0, 0xea, 0xe2, 0x35, 0xcc, 0x78, 0xf1, 0xb5, 0x02, 0x97, 0xe6, 0x37, 0x2a, 0x73, 0x7d, 0xf8, -	0x14, 0x4a, 0x23, 0x1a, 0x9e, 0xb9, 0xf1, 0x65, 0xfd, 0xc1, 0x9c, 0x2b, 0x80, 0x8b, 0xa7, 0x63, -	0x15, 0x69, 0xa5, 0xef, 0x90, 0xfc, 0xa2, 0x6e, 0x43, 0x7a, 0x33, 0xe3, 0xe9, 0xaf, 0x73, 0xf0, -	0xe6, 0x5c, 0xe3, 0x73, 0x1d, 0x7d, 0x17, 0xc0, 0x66, 0xde, 0x38, 0x94, 0x17, 0xb2, 0xac, 0x4f, -	0x15, 0x81, 0x88, 0xb3, 0xcf, 0x6b, 0xcf, 0x38, 0x4c, 0xe4, 0x79, 0x21, 0x07, 0x09, 0x09, 0xc2, -	0xc3, 0x89, 0xa3, 0x05, 0xe1, 0xe8, 0x7b, 0x0b, 0x56, 0x3a, 0x73, 0xd7, 0x7d, 0x08, 0xc8, 0x74, -	0x6c, 0xca, 0x42, 0x23, 0x08, 0x7d, 0x4a, 0x46, 0x36, 0x1b, 0x8a, 0x02, 0x5c, 0xde, 0x29, 0x0e, -	0x88, 0x13, 0x50, 0x7d, 0x45, 0x8a, 0xfb, 0xb1, 0x94, 0x6b, 0x88, 0x5b, 0xc6, 0x4f, 0x69, 0x94, -	0x32, 0x1a, 0x52, 0x9c, 0x68, 0x34, 0x7e, 0xb3, 0x04, 0xd5, 0x54, 0x5b, 0x87, 0xaf, 0x42, 0xed, -	0x29, 0x79, 0x4e, 0x8c, 0xb8, 0x55, 0x97, 0x91, 0xa8, 0x72, 0xac, 0x17, 0xb5, 0xeb, 0x1f, 0xc2, -	0xba, 0xa0, 0xb8, 0xe3, 0x90, 0xfa, 0x86, 0xe9, 0x90, 0x20, 0x10, 0x41, 0x2b, 0x0b, 0x2a, 0xe6, -	0xb2, 0x2e, 0x17, 0xed, 0xc5, 0x12, 0x7c, 0x1f, 0xd6, 0x84, 0xc6, 0x68, 0xec, 0x84, 0xb6, 0xe7, -	0x50, 0x83, 0x7f, 0x3c, 0x04, 0xa2, 0x10, 0x27, 0x9e, 0xad, 0x72, 0xc6, 0x61, 0x44, 0xe0, 0x1e, -	0x05, 0xb8, 0x0d, 0xef, 0x0a, 0xb5, 0x21, 0x65, 0xd4, 0x27, 0x21, 0x35, 0xe8, 0x2f, 0xc7, 0xc4, -	0x09, 0x0c, 0xc2, 0x2c, 0xe3, 0x8c, 0x04, 0x67, 0xea, 0x3a, 0x37, 0xb0, 0x9b, 0x53, 0x15, 0xfd, -	0x32, 0x27, 0xee, 0x47, 0x3c, 0x4d, 0xd0, 0x5a, 0xcc, 0xfa, 0x8c, 0x04, 0x67, 0x78, 0x07, 0x2e, -	0x09, 0x2b, 0x41, 0xe8, 0xdb, 0x6c, 0x68, 0x98, 0x67, 0xd4, 0x7c, 0x66, 0x8c, 0xc3, 0xc1, 0x43, -	0xf5, 0xed, 0xf4, 0xfc, 0xc2, 0xc3, 0xbe, 0xe0, 0xec, 0x71, 0xca, 0x49, 0x38, 0x78, 0x88, 0xfb, -	0x50, 0xe3, 0x9b, 0x31, 0xb2, 0xbf, 0xa4, 0xc6, 0xc0, 0xf5, 0xc5, 0xcd, 0x52, 0x9f, 0x73, 0xb2, -	0x53, 0x11, 0x6c, 0x76, 0x23, 0x85, 0x43, 0xd7, 0xa2, 0x3b, 0xc5, 0x7e, 0x4f, 0xd3, 0xda, 0x7a, -	0x35, 0xb6, 0xf2, 0xc8, 0xf5, 0x79, 0x42, 0x0d, 0xdd, 0x24, 0xc0, 0x55, 0x99, 0x50, 0x43, 0x37, -	0x0e, 0xef, 0x7d, 0x58, 0x33, 0x4d, 0xb9, 0x66, 0xdb, 0x34, 0xa2, 0x16, 0x3f, 0x50, 0x51, 0x26, -	0x58, 0xa6, 0xb9, 0x2f, 0x09, 0x51, 0x8e, 0x07, 0xf8, 0x63, 0x78, 0x73, 0x12, 0xac, 0xb4, 0xe2, -	0xea, 0xcc, 0x2a, 0xa7, 0x55, 0xef, 0xc3, 0x9a, 0x77, 0x3e, 0xab, 0x88, 0x33, 0x33, 0x7a, 0xe7, -	0xd3, 0x6a, 0xd7, 0xc5, 0x67, 0x9b, 0x4f, 0x4d, 0x12, 0x52, 0x4b, 0x7d, 0x2b, 0xcd, 0x4e, 0x09, -	0xf0, 0x1d, 0x40, 0xa6, 0x69, 0x50, 0x46, 0x4e, 0x1d, 0x6a, 0x10, 0x9f, 0x32, 0x12, 0xa8, 0x57, -	0xd2, 0xe4, 0xba, 0x69, 0x6a, 0x42, 0xda, 0x12, 0x42, 0x7c, 0x0b, 0x56, 0xdd, 0xd3, 0xa7, 0xa6, -	0xcc, 0x2c, 0xc3, 0xf3, 0xe9, 0xc0, 0x7e, 0xa9, 0x5e, 0x13, 0x61, 0x5a, 0xe1, 0x02, 0x91, 0x57, -	0x3d, 0x01, 0xe3, 0x9b, 0x80, 0xcc, 0xe0, 0x8c, 0xf8, 0x9e, 0xb8, 0xda, 0x03, 0x8f, 0x98, 0x54, -	0xbd, 0x2e, 0xa9, 0x12, 0x3f, 0x8a, 0x61, 0xfc, 0x04, 0xd6, 0xc7, 0xcc, 0x66, 0x21, 0xf5, 0x3d, -	0x9f, 0xf2, 0x0e, 0x5d, 0x1e, 0x33, 0xf5, 0x5f, 0x4b, 0x0b, 0x7a, 0xec, 0x93, 0x34, 0x5b, 0xee, -	0xae, 0xbe, 0x36, 0x9e, 0x05, 0x1b, 0x3b, 0x50, 0x4b, 0x6f, 0x3a, 0xae, 0x80, 0xdc, 0x76, 0xa4, -	0xf0, 0x0b, 0x74, 0xaf, 0xdb, 0xe6, 0x57, 0xdf, 0x17, 0x1a, 0xca, 0xf1, 0x2b, 0xf8, 0xa0, 0x73, -	0xac, 0x19, 0xfa, 0xc9, 0xd1, 0x71, 0xe7, 0x50, 0x43, 0xf9, 0x5b, 0x95, 0xf2, 0xbf, 0x97, 0xd0, -	0xab, 0x57, 0xaf, 0x5e, 0xe5, 0x1e, 0x17, 0xca, 0x1f, 0xa0, 0x1b, 0x8d, 0xbf, 0xe6, 0xa0, 0x9e, -	0x6d, 0x7e, 0xf1, 0x4f, 0xe0, 0xad, 0xf8, 0x4b, 0x35, 0xa0, 0xa1, 0xf1, 0xc2, 0xf6, 0x45, 0x36, -	0x8e, 0x88, 0x6c, 0x1f, 0x93, 0x40, 0xae, 0x47, 0xac, 0x3e, 0x0d, 0x7f, 0x61, 0xfb, 0x3c, 0xd7, -	0x46, 0x24, 0xc4, 0x07, 0x70, 0x85, 0xb9, 0x46, 0x10, 0x12, 0x66, 0x11, 0xdf, 0x32, 0x26, 0x6f, -	0x04, 0x06, 0x31, 0x4d, 0x1a, 0x04, 0xae, 0xbc, 0x05, 0x12, 0x2b, 0xef, 0x30, 0xb7, 0x1f, 0x91, -	0x27, 0xe5, 0xb1, 0x15, 0x51, 0xa7, 0x36, 0x3d, 0xbf, 0x68, 0xd3, 0xdf, 0x86, 0xca, 0x88, 0x78, -	0x06, 0x65, 0xa1, 0x7f, 0x2e, 0x5a, 0xb6, 0xb2, 0x5e, 0x1e, 0x11, 0x4f, 0xe3, 0xe3, 0xef, 0x6e, -	0x27, 0xb2, 0xd1, 0x2c, 0xa3, 0x4a, 0xe3, 0x1f, 0x79, 0xa8, 0xa5, 0x9b, 0x37, 0xde, 0x0b, 0x9b, -	0xa2, 0x50, 0x2b, 0xe2, 0x28, 0xbf, 0xff, 0x8d, 0xad, 0x5e, 0x73, 0x8f, 0x57, 0xf0, 0x9d, 0x92, -	0x6c, 0xa9, 0x74, 0xa9, 0xc9, 0x6f, 0x4f, 0x7e, 0x78, 0xa9, 0x6c, 0xd4, 0xcb, 0x7a, 0x34, 0xc2, -	0xfb, 0x50, 0x7a, 0x1a, 0x08, 0xdb, 0x25, 0x61, 0xfb, 0xda, 0x37, 0xdb, 0x7e, 0xdc, 0x17, 0xc6, -	0x2b, 0x8f, 0xfb, 0xc6, 0x51, 0x57, 0x3f, 0x6c, 0x1d, 0xe8, 0x91, 0x3a, 0xbe, 0x0c, 0x05, 0x87, -	0x7c, 0x79, 0x9e, 0xad, 0xf5, 0x02, 0xba, 0x68, 0xf8, 0x2f, 0x43, 0xe1, 0x05, 0x25, 0xcf, 0xb2, -	0x15, 0x56, 0x40, 0xdf, 0xe1, 0x31, 0xb8, 0x03, 0x45, 0x11, 0x2f, 0x0c, 0x10, 0x45, 0x0c, 0xbd, -	0x81, 0xcb, 0x50, 0xd8, 0xeb, 0xea, 0xfc, 0x28, 0x20, 0xa8, 0x49, 0xd4, 0xe8, 0x75, 0xb4, 0x3d, -	0x0d, 0xe5, 0x1a, 0xf7, 0xa1, 0x24, 0x83, 0xc0, 0x8f, 0x49, 0x12, 0x06, 0xf4, 0x46, 0x34, 0x8c, -	0x6c, 0x28, 0xb1, 0xf4, 0xe4, 0x70, 0x57, 0xd3, 0x51, 0x2e, 0xbb, 0xc9, 0x05, 0x54, 0x6c, 0x04, -	0x50, 0x4b, 0x77, 0x6f, 0xdf, 0x4b, 0x7e, 0x35, 0xfe, 0xa2, 0x40, 0x35, 0xd5, 0x8d, 0xf1, 0x3e, -	0x80, 0x38, 0x8e, 0xfb, 0xc2, 0x20, 0x8e, 0x4d, 0x82, 0x28, 0x35, 0x40, 0x40, 0x2d, 0x8e, 0x5c, -	0x74, 0xeb, 0xbe, 0x17, 0xe7, 0xff, 0xa8, 0x00, 0x9a, 0xee, 0xe4, 0xa6, 0x1c, 0x54, 0x7e, 0x50, -	0x07, 0xff, 0xa0, 0x40, 0x3d, 0xdb, 0xbe, 0x4d, 0xb9, 0x77, 0xf5, 0x07, 0x75, 0xef, 0xf7, 0x0a, -	0x2c, 0x67, 0x9a, 0xb6, 0xff, 0x2b, 0xef, 0x7e, 0x97, 0x87, 0xb5, 0x39, 0x7a, 0xb8, 0x15, 0x75, -	0xb7, 0xb2, 0xe1, 0xfe, 0xf1, 0x45, 0xe6, 0x6a, 0xf2, 0xfb, 0xb3, 0x47, 0xfc, 0x30, 0x6a, 0x86, -	0x6f, 0x02, 0xb2, 0x2d, 0xca, 0x42, 0x7b, 0x60, 0x53, 0x3f, 0xfa, 0x22, 0x97, 0x2d, 0xef, 0xca, -	0x04, 0x97, 0x1f, 0xe5, 0x3f, 0x02, 0xec, 0xb9, 0x81, 0x1d, 0xda, 0xcf, 0xa9, 0x61, 0xb3, 0xf8, -	0xf3, 0x9d, 0xb7, 0xc0, 0x05, 0x1d, 0xc5, 0x92, 0x0e, 0x0b, 0x13, 0x36, 0xa3, 0x43, 0x32, 0xc5, -	0xe6, 0x15, 0x30, 0xaf, 0xa3, 0x58, 0x92, 0xb0, 0xaf, 0x42, 0xcd, 0x72, 0xc7, 0xbc, 0xa1, 0x90, -	0x3c, 0x5e, 0x70, 0x15, 0xbd, 0x2a, 0xb1, 0x84, 0x12, 0x75, 0x7c, 0x93, 0x77, 0x83, 0x9a, 0x5e, -	0x95, 0x98, 0xa4, 0xdc, 0x80, 0x15, 0x32, 0x1c, 0xfa, 0xdc, 0x78, 0x6c, 0x48, 0xf6, 0xb0, 0xf5, -	0x04, 0x16, 0xc4, 0x8d, 0xc7, 0x50, 0x8e, 0xe3, 0xc0, 0x6f, 0x36, 0x1e, 0x09, 0xc3, 0x93, 0xaf, -	0x37, 0xb9, 0xad, 0x8a, 0x5e, 0x66, 0xb1, 0xf0, 0x2a, 0xd4, 0xec, 0xc0, 0x98, 0x3c, 0x23, 0xe6, -	0x36, 0x73, 0x5b, 0x65, 0xbd, 0x6a, 0x07, 0xc9, 0xbb, 0x51, 0xe3, 0xeb, 0x1c, 0xd4, 0xb3, 0xcf, -	0xa0, 0xb8, 0x0d, 0x65, 0xc7, 0x35, 0x89, 0x48, 0x04, 0xf9, 0x06, 0xbf, 0xf5, 0x9a, 0x97, 0xd3, -	0xe6, 0x41, 0xc4, 0xd7, 0x13, 0xcd, 0x8d, 0xbf, 0x29, 0x50, 0x8e, 0x61, 0x7c, 0x09, 0x0a, 0x1e, -	0x09, 0xcf, 0x84, 0xb9, 0xe2, 0x6e, 0x0e, 0x29, 0xba, 0x18, 0x73, 0x3c, 0xf0, 0x08, 0x13, 0x29, -	0x10, 0xe1, 0x7c, 0xcc, 0xf7, 0xd5, 0xa1, 0xc4, 0x12, 0x0d, 0xb2, 0x3b, 0x1a, 0x51, 0x16, 0x06, -	0xf1, 0xbe, 0x46, 0xf8, 0x5e, 0x04, 0xe3, 0xdb, 0xb0, 0x1a, 0xfa, 0xc4, 0x76, 0x32, 0xdc, 0x82, -	0xe0, 0xa2, 0x58, 0x90, 0x90, 0x77, 0xe0, 0x72, 0x6c, 0xd7, 0xa2, 0x21, 0x31, 0xcf, 0xa8, 0x35, -	0x51, 0x2a, 0x89, 0x37, 0xb6, 0xb7, 0x22, 0x42, 0x3b, 0x92, 0xc7, 0xba, 0x8d, 0xbf, 0x2b, 0xb0, -	0x1a, 0xb7, 0xf4, 0x56, 0x12, 0xac, 0x43, 0x00, 0xc2, 0x98, 0x1b, 0xa6, 0xc3, 0x35, 0x9b, 0xca, -	0x33, 0x7a, 0xcd, 0x56, 0xa2, 0xa4, 0xa7, 0x0c, 0x6c, 0x8c, 0x00, 0x26, 0x92, 0x85, 0x61, 0xbb, -	0x02, 0xd5, 0xe8, 0x8d, 0x5b, 0xfc, 0xa3, 0x44, 0x7e, 0x04, 0x82, 0x84, 0x78, 0xef, 0x8f, 0xd7, -	0xa1, 0x78, 0x4a, 0x87, 0x36, 0x8b, 0x5e, 0xde, 0xe4, 0x20, 0x7e, 0xcf, 0x2b, 0x24, 0xef, 0x79, -	0xbb, 0x4f, 0x60, 0xcd, 0x74, 0x47, 0xd3, 0xee, 0xee, 0xa2, 0xa9, 0x0f, 0xd1, 0xe0, 0x33, 0xe5, -	0x0b, 0x98, 0x74, 0x6a, 0x5f, 0xe5, 0xf2, 0xfb, 0xbd, 0xdd, 0x3f, 0xe5, 0x36, 0xf6, 0xa5, 0x5e, -	0x2f, 0x5e, 0xa6, 0x4e, 0x07, 0x0e, 0x35, 0xb9, 0xeb, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x5f, -	0x1c, 0x48, 0x4f, 0x0d, 0x1a, 0x00, 0x00, +	// 2519 bytes of a gzipped FileDescriptorProto +	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0xdd, 0x6e, 0x1b, 0xc7, +	0x15, 0x0e, 0x7f, 0x45, 0x1e, 0x52, 0xd4, 0x68, 0xa4, 0xd8, 0x6b, 0xe5, 0xc7, 0x32, 0xf3, 0x63, +	0xd9, 0x69, 0xa8, 0x40, 0xb1, 0x1d, 0x47, 0x29, 0xd2, 0x52, 0xe4, 0x5a, 0xa1, 0x4a, 0x91, 0xec, +	0x92, 0x6a, 0x7e, 0x6e, 0x16, 0xa3, 0xdd, 0x21, 0xb9, 0xf6, 0x72, 0x77, 0xb3, 0xbb, 0xb4, 0xad, +	0xa0, 0x17, 0x06, 0x7a, 0x55, 0xa0, 0x0f, 0x50, 0x14, 0x45, 0x2f, 0x72, 0x13, 0xa0, 0x0f, 0x50, +	0x20, 0x77, 0x7d, 0x82, 0x02, 0x79, 0x83, 0xa2, 0x28, 0xd0, 0x3e, 0x46, 0x31, 0x33, 0xbb, 0xcb, +	0x5d, 0xfe, 0xc4, 0x6a, 0x80, 0x38, 0x57, 0xe4, 0x7c, 0xe7, 0x3b, 0x67, 0xce, 0x9c, 0x39, 0x33, +	0x73, 0x66, 0x16, 0x76, 0x47, 0xb6, 0x3d, 0x32, 0xe9, 0xbe, 0xe3, 0xda, 0xbe, 0x7d, 0x3e, 0x1d, +	0xee, 0xeb, 0xd4, 0xd3, 0x5c, 0xc3, 0xf1, 0x6d, 0xb7, 0xc6, 0x31, 0xbc, 0x21, 0x18, 0xb5, 0x90, +	0x51, 0x3d, 0x85, 0xcd, 0x07, 0x86, 0x49, 0x9b, 0x11, 0xb1, 0x4f, 0x7d, 0x7c, 0x1f, 0xb2, 0x43, +	0xc3, 0xa4, 0x52, 0x6a, 0x37, 0xb3, 0x57, 0x3a, 0x78, 0xb3, 0x36, 0xa7, 0x54, 0x4b, 0x6a, 0xf4, +	0x18, 0xac, 0x70, 0x8d, 0xea, 0xbf, 0xb3, 0xb0, 0xb5, 0x44, 0x8a, 0x31, 0x64, 0x2d, 0x32, 0x61, +	0x16, 0x53, 0x7b, 0x45, 0x85, 0xff, 0xc7, 0x12, 0xac, 0x39, 0x44, 0x7b, 0x44, 0x46, 0x54, 0x4a, +	0x73, 0x38, 0x6c, 0xe2, 0xd7, 0x01, 0x74, 0xea, 0x50, 0x4b, 0xa7, 0x96, 0x76, 0x21, 0x65, 0x76, +	0x33, 0x7b, 0x45, 0x25, 0x86, 0xe0, 0x77, 0x60, 0xd3, 0x99, 0x9e, 0x9b, 0x86, 0xa6, 0xc6, 0x68, +	0xb0, 0x9b, 0xd9, 0xcb, 0x29, 0x48, 0x08, 0x9a, 0x33, 0xf2, 0x4d, 0xd8, 0x78, 0x42, 0xc9, 0xa3, +	0x38, 0xb5, 0xc4, 0xa9, 0x15, 0x06, 0xc7, 0x88, 0x0d, 0x28, 0x4f, 0xa8, 0xe7, 0x91, 0x11, 0x55, +	0xfd, 0x0b, 0x87, 0x4a, 0x59, 0x3e, 0xfa, 0xdd, 0x85, 0xd1, 0xcf, 0x8f, 0xbc, 0x14, 0x68, 0x0d, +	0x2e, 0x1c, 0x8a, 0xeb, 0x50, 0xa4, 0xd6, 0x74, 0x22, 0x2c, 0xe4, 0x56, 0xc4, 0x4f, 0xb6, 0xa6, +	0x93, 0x79, 0x2b, 0x05, 0xa6, 0x16, 0x98, 0x58, 0xf3, 0xa8, 0xfb, 0xd8, 0xd0, 0xa8, 0x94, 0xe7, +	0x06, 0x6e, 0x2e, 0x18, 0xe8, 0x0b, 0xf9, 0xbc, 0x8d, 0x50, 0x0f, 0x37, 0xa0, 0x48, 0x9f, 0xfa, +	0xd4, 0xf2, 0x0c, 0xdb, 0x92, 0xd6, 0xb8, 0x91, 0xb7, 0x96, 0xcc, 0x22, 0x35, 0xf5, 0x79, 0x13, +	0x33, 0x3d, 0x7c, 0x0f, 0xd6, 0x6c, 0xc7, 0x37, 0x6c, 0xcb, 0x93, 0x0a, 0xbb, 0xa9, 0xbd, 0xd2, +	0xc1, 0xab, 0x4b, 0x13, 0xa1, 0x2b, 0x38, 0x4a, 0x48, 0xc6, 0x2d, 0x40, 0x9e, 0x3d, 0x75, 0x35, +	0xaa, 0x6a, 0xb6, 0x4e, 0x55, 0xc3, 0x1a, 0xda, 0x52, 0x91, 0x1b, 0xb8, 0xbe, 0x38, 0x10, 0x4e, +	0x6c, 0xd8, 0x3a, 0x6d, 0x59, 0x43, 0x5b, 0xa9, 0x78, 0x89, 0x36, 0xbe, 0x02, 0x79, 0xef, 0xc2, +	0xf2, 0xc9, 0x53, 0xa9, 0xcc, 0x33, 0x24, 0x68, 0x55, 0xbf, 0xcd, 0xc3, 0xc6, 0x65, 0x52, 0xec, +	0x23, 0xc8, 0x0d, 0xd9, 0x28, 0xa5, 0xf4, 0xff, 0x13, 0x03, 0xa1, 0x93, 0x0c, 0x62, 0xfe, 0x07, +	0x06, 0xb1, 0x0e, 0x25, 0x8b, 0x7a, 0x3e, 0xd5, 0x45, 0x46, 0x64, 0x2e, 0x99, 0x53, 0x20, 0x94, +	0x16, 0x53, 0x2a, 0xfb, 0x83, 0x52, 0xea, 0x33, 0xd8, 0x88, 0x5c, 0x52, 0x5d, 0x62, 0x8d, 0xc2, +	0xdc, 0xdc, 0x7f, 0x9e, 0x27, 0x35, 0x39, 0xd4, 0x53, 0x98, 0x9a, 0x52, 0xa1, 0x89, 0x36, 0x6e, +	0x02, 0xd8, 0x16, 0xb5, 0x87, 0xaa, 0x4e, 0x35, 0x53, 0x2a, 0xac, 0x88, 0x52, 0x97, 0x51, 0x16, +	0xa2, 0x64, 0x0b, 0x54, 0x33, 0xf1, 0x87, 0xb3, 0x54, 0x5b, 0x5b, 0x91, 0x29, 0xa7, 0x62, 0x91, +	0x2d, 0x64, 0xdb, 0x19, 0x54, 0x5c, 0xca, 0xf2, 0x9e, 0xea, 0xc1, 0xc8, 0x8a, 0xdc, 0x89, 0xda, +	0x73, 0x47, 0xa6, 0x04, 0x6a, 0x62, 0x60, 0xeb, 0x6e, 0xbc, 0x89, 0xdf, 0x80, 0x08, 0x50, 0x79, +	0x5a, 0x01, 0xdf, 0x85, 0xca, 0x21, 0xd8, 0x21, 0x13, 0xba, 0xf3, 0x15, 0x54, 0x92, 0xe1, 0xc1, +	0xdb, 0x90, 0xf3, 0x7c, 0xe2, 0xfa, 0x3c, 0x0b, 0x73, 0x8a, 0x68, 0x60, 0x04, 0x19, 0x6a, 0xe9, +	0x7c, 0x97, 0xcb, 0x29, 0xec, 0x2f, 0xfe, 0xe5, 0x6c, 0xc0, 0x19, 0x3e, 0xe0, 0xb7, 0x17, 0x67, +	0x34, 0x61, 0x79, 0x7e, 0xdc, 0x3b, 0x1f, 0xc0, 0x7a, 0x62, 0x00, 0x97, 0xed, 0xba, 0xfa, 0x5b, +	0x78, 0x79, 0xa9, 0x69, 0xfc, 0x19, 0x6c, 0x4f, 0x2d, 0xc3, 0xf2, 0xa9, 0xeb, 0xb8, 0x94, 0x65, +	0xac, 0xe8, 0x4a, 0xfa, 0xcf, 0xda, 0x8a, 0x9c, 0x3b, 0x8b, 0xb3, 0x85, 0x15, 0x65, 0x6b, 0xba, +	0x08, 0xde, 0x2e, 0x16, 0xfe, 0xbb, 0x86, 0x9e, 0x3d, 0x7b, 0xf6, 0x2c, 0x5d, 0xfd, 0x63, 0x1e, +	0xb6, 0x97, 0xad, 0x99, 0xa5, 0xcb, 0xf7, 0x0a, 0xe4, 0xad, 0xe9, 0xe4, 0x9c, 0xba, 0x3c, 0x48, +	0x39, 0x25, 0x68, 0xe1, 0x3a, 0xe4, 0x4c, 0x72, 0x4e, 0x4d, 0x29, 0xbb, 0x9b, 0xda, 0xab, 0x1c, +	0xbc, 0x73, 0xa9, 0x55, 0x59, 0x6b, 0x33, 0x15, 0x45, 0x68, 0xe2, 0x8f, 0x21, 0x1b, 0x6c, 0xd1, +	0xcc, 0xc2, 0xed, 0xcb, 0x59, 0x60, 0x6b, 0x49, 0xe1, 0x7a, 0xf8, 0x15, 0x28, 0xb2, 0x5f, 0x91, +	0x1b, 0x79, 0xee, 0x73, 0x81, 0x01, 0x2c, 0x2f, 0xf0, 0x0e, 0x14, 0xf8, 0x32, 0xd1, 0x69, 0x78, +	0xb4, 0x45, 0x6d, 0x96, 0x58, 0x3a, 0x1d, 0x92, 0xa9, 0xe9, 0xab, 0x8f, 0x89, 0x39, 0xa5, 0x3c, +	0xe1, 0x8b, 0x4a, 0x39, 0x00, 0x7f, 0xc3, 0x30, 0x7c, 0x1d, 0x4a, 0x62, 0x55, 0x19, 0x96, 0x4e, +	0x9f, 0xf2, 0xdd, 0x33, 0xa7, 0x88, 0x85, 0xd6, 0x62, 0x08, 0xeb, 0xfe, 0xa1, 0x67, 0x5b, 0x61, +	0x6a, 0xf2, 0x2e, 0x18, 0xc0, 0xbb, 0xff, 0x60, 0x7e, 0xe3, 0x7e, 0x6d, 0xf9, 0xf0, 0xe6, 0x73, +	0xaa, 0xfa, 0xb7, 0x34, 0x64, 0xf9, 0x7e, 0xb1, 0x01, 0xa5, 0xc1, 0xe7, 0x3d, 0x59, 0x6d, 0x76, +	0xcf, 0x8e, 0xda, 0x32, 0x4a, 0xe1, 0x0a, 0x00, 0x07, 0x1e, 0xb4, 0xbb, 0xf5, 0x01, 0x4a, 0x47, +	0xed, 0x56, 0x67, 0x70, 0xef, 0x0e, 0xca, 0x44, 0x0a, 0x67, 0x02, 0xc8, 0xc6, 0x09, 0xef, 0x1f, +	0xa0, 0x1c, 0x46, 0x50, 0x16, 0x06, 0x5a, 0x9f, 0xc9, 0xcd, 0x7b, 0x77, 0x50, 0x3e, 0x89, 0xbc, +	0x7f, 0x80, 0xd6, 0xf0, 0x3a, 0x14, 0x39, 0x72, 0xd4, 0xed, 0xb6, 0x51, 0x21, 0xb2, 0xd9, 0x1f, +	0x28, 0xad, 0xce, 0x31, 0x2a, 0x46, 0x36, 0x8f, 0x95, 0xee, 0x59, 0x0f, 0x41, 0x64, 0xe1, 0x54, +	0xee, 0xf7, 0xeb, 0xc7, 0x32, 0x2a, 0x45, 0x8c, 0xa3, 0xcf, 0x07, 0x72, 0x1f, 0x95, 0x13, 0x6e, +	0xbd, 0x7f, 0x80, 0xd6, 0xa3, 0x2e, 0xe4, 0xce, 0xd9, 0x29, 0xaa, 0xe0, 0x4d, 0x58, 0x17, 0x5d, +	0x84, 0x4e, 0x6c, 0xcc, 0x41, 0xf7, 0xee, 0x20, 0x34, 0x73, 0x44, 0x58, 0xd9, 0x4c, 0x00, 0xf7, +	0xee, 0x20, 0x5c, 0x6d, 0x40, 0x8e, 0x67, 0x17, 0xc6, 0x50, 0x69, 0xd7, 0x8f, 0xe4, 0xb6, 0xda, +	0xed, 0x0d, 0x5a, 0xdd, 0x4e, 0xbd, 0x8d, 0x52, 0x33, 0x4c, 0x91, 0x7f, 0x7d, 0xd6, 0x52, 0xe4, +	0x26, 0x4a, 0xc7, 0xb1, 0x9e, 0x5c, 0x1f, 0xc8, 0x4d, 0x94, 0xa9, 0x6a, 0xb0, 0xbd, 0x6c, 0x9f, +	0x5c, 0xba, 0x32, 0x62, 0x53, 0x9c, 0x5e, 0x31, 0xc5, 0xdc, 0xd6, 0xc2, 0x14, 0x7f, 0x9d, 0x82, +	0xad, 0x25, 0x67, 0xc5, 0xd2, 0x4e, 0x7e, 0x01, 0x39, 0x91, 0xa2, 0xe2, 0xf4, 0xbc, 0xb5, 0xf4, +	0xd0, 0xe1, 0x09, 0xbb, 0x70, 0x82, 0x72, 0xbd, 0x78, 0x05, 0x91, 0x59, 0x51, 0x41, 0x30, 0x13, +	0x0b, 0x4e, 0xfe, 0x2e, 0x05, 0xd2, 0x2a, 0xdb, 0xcf, 0xd9, 0x28, 0xd2, 0x89, 0x8d, 0xe2, 0xa3, +	0x79, 0x07, 0x6e, 0xac, 0x1e, 0xc3, 0x82, 0x17, 0xdf, 0xa4, 0xe0, 0xca, 0xf2, 0x42, 0x6b, 0xa9, +	0x0f, 0x1f, 0x43, 0x7e, 0x42, 0xfd, 0xb1, 0x1d, 0x16, 0x1b, 0x6f, 0x2f, 0x39, 0xc2, 0x98, 0x78, +	0x3e, 0x56, 0x81, 0x56, 0xfc, 0x0c, 0xcc, 0xac, 0xaa, 0x96, 0x84, 0x37, 0x0b, 0x9e, 0xfe, 0x3e, +	0x0d, 0x2f, 0x2f, 0x35, 0xbe, 0xd4, 0xd1, 0xd7, 0x00, 0x0c, 0xcb, 0x99, 0xfa, 0xa2, 0xa0, 0x10, +	0xfb, 0x53, 0x91, 0x23, 0x7c, 0xed, 0xb3, 0xbd, 0x67, 0xea, 0x47, 0xf2, 0x0c, 0x97, 0x83, 0x80, +	0x38, 0xe1, 0xfe, 0xcc, 0xd1, 0x2c, 0x77, 0xf4, 0xf5, 0x15, 0x23, 0x5d, 0x38, 0xab, 0xdf, 0x03, +	0xa4, 0x99, 0x06, 0xb5, 0x7c, 0xd5, 0xf3, 0x5d, 0x4a, 0x26, 0x86, 0x35, 0xe2, 0x1b, 0x70, 0xe1, +	0x30, 0x37, 0x24, 0xa6, 0x47, 0x95, 0x0d, 0x21, 0xee, 0x87, 0x52, 0xa6, 0xc1, 0xcf, 0x38, 0x37, +	0xa6, 0x91, 0x4f, 0x68, 0x08, 0x71, 0xa4, 0x51, 0xfd, 0xb6, 0x00, 0xa5, 0x58, 0x59, 0x8a, 0x6f, +	0x40, 0xf9, 0x21, 0x79, 0x4c, 0xd4, 0xf0, 0xaa, 0x21, 0x22, 0x51, 0x62, 0x58, 0x2f, 0xb8, 0x6e, +	0xbc, 0x07, 0xdb, 0x9c, 0x62, 0x4f, 0x7d, 0xea, 0xaa, 0x9a, 0x49, 0x3c, 0x8f, 0x07, 0xad, 0xc0, +	0xa9, 0x98, 0xc9, 0xba, 0x4c, 0xd4, 0x08, 0x25, 0xf8, 0x2e, 0x6c, 0x71, 0x8d, 0xc9, 0xd4, 0xf4, +	0x0d, 0xc7, 0xa4, 0x2a, 0xbb, 0xfc, 0x78, 0x7c, 0x23, 0x8e, 0x3c, 0xdb, 0x64, 0x8c, 0xd3, 0x80, +	0xc0, 0x3c, 0xf2, 0x70, 0x13, 0x5e, 0xe3, 0x6a, 0x23, 0x6a, 0x51, 0x97, 0xf8, 0x54, 0xa5, 0x5f, +	0x4e, 0x89, 0xe9, 0xa9, 0xc4, 0xd2, 0xd5, 0x31, 0xf1, 0xc6, 0xd2, 0x36, 0x33, 0x70, 0x94, 0x96, +	0x52, 0xca, 0x35, 0x46, 0x3c, 0x0e, 0x78, 0x32, 0xa7, 0xd5, 0x2d, 0xfd, 0x13, 0xe2, 0x8d, 0xf1, +	0x21, 0x5c, 0xe1, 0x56, 0x3c, 0xdf, 0x35, 0xac, 0x91, 0xaa, 0x8d, 0xa9, 0xf6, 0x48, 0x9d, 0xfa, +	0xc3, 0xfb, 0xd2, 0x2b, 0xf1, 0xfe, 0xb9, 0x87, 0x7d, 0xce, 0x69, 0x30, 0xca, 0x99, 0x3f, 0xbc, +	0x8f, 0xfb, 0x50, 0x66, 0x93, 0x31, 0x31, 0xbe, 0xa2, 0xea, 0xd0, 0x76, 0xf9, 0xc9, 0x52, 0x59, +	0xb2, 0xb2, 0x63, 0x11, 0xac, 0x75, 0x03, 0x85, 0x53, 0x5b, 0xa7, 0x87, 0xb9, 0x7e, 0x4f, 0x96, +	0x9b, 0x4a, 0x29, 0xb4, 0xf2, 0xc0, 0x76, 0x59, 0x42, 0x8d, 0xec, 0x28, 0xc0, 0x25, 0x91, 0x50, +	0x23, 0x3b, 0x0c, 0xef, 0x5d, 0xd8, 0xd2, 0x34, 0x31, 0x66, 0x43, 0x53, 0x83, 0x2b, 0x8a, 0x27, +	0xa1, 0x44, 0xb0, 0x34, 0xed, 0x58, 0x10, 0x82, 0x1c, 0xf7, 0xf0, 0x87, 0xf0, 0xf2, 0x2c, 0x58, +	0x71, 0xc5, 0xcd, 0x85, 0x51, 0xce, 0xab, 0xde, 0x85, 0x2d, 0xe7, 0x62, 0x51, 0x11, 0x27, 0x7a, +	0x74, 0x2e, 0xe6, 0xd5, 0x3e, 0x80, 0x6d, 0x67, 0xec, 0x2c, 0xea, 0xdd, 0x8e, 0xeb, 0x61, 0x67, +	0xec, 0xcc, 0x2b, 0xbe, 0xc5, 0xef, 0xab, 0x2e, 0xd5, 0x88, 0x4f, 0x75, 0xe9, 0x6a, 0x9c, 0x1e, +	0x13, 0xe0, 0x7d, 0x40, 0x9a, 0xa6, 0x52, 0x8b, 0x9c, 0x9b, 0x54, 0x25, 0x2e, 0xb5, 0x88, 0x27, +	0x5d, 0x8f, 0x93, 0x2b, 0x9a, 0x26, 0x73, 0x69, 0x9d, 0x0b, 0xf1, 0x6d, 0xd8, 0xb4, 0xcf, 0x1f, +	0x6a, 0x22, 0x25, 0x55, 0xc7, 0xa5, 0x43, 0xe3, 0xa9, 0xf4, 0x26, 0x8f, 0xef, 0x06, 0x13, 0xf0, +	0x84, 0xec, 0x71, 0x18, 0xdf, 0x02, 0xa4, 0x79, 0x63, 0xe2, 0x3a, 0xbc, 0x26, 0xf0, 0x1c, 0xa2, +	0x51, 0xe9, 0x2d, 0x41, 0x15, 0x78, 0x27, 0x84, 0xd9, 0x92, 0xf0, 0x9e, 0x18, 0x43, 0x3f, 0xb4, +	0x78, 0x53, 0x2c, 0x09, 0x8e, 0x05, 0xd6, 0xf6, 0x00, 0xb1, 0x50, 0x24, 0x3a, 0xde, 0xe3, 0xb4, +	0x8a, 0x33, 0x76, 0xe2, 0xfd, 0xbe, 0x01, 0xeb, 0x8c, 0x39, 0xeb, 0xf4, 0x96, 0xa8, 0x67, 0x9c, +	0x71, 0xac, 0xc7, 0x1f, 0xad, 0xb4, 0xac, 0x1e, 0x42, 0x39, 0x9e, 0x9f, 0xb8, 0x08, 0x22, 0x43, +	0x51, 0x8a, 0x9d, 0xf5, 0x8d, 0x6e, 0x93, 0x9d, 0xd2, 0x5f, 0xc8, 0x28, 0xcd, 0xaa, 0x85, 0x76, +	0x6b, 0x20, 0xab, 0xca, 0x59, 0x67, 0xd0, 0x3a, 0x95, 0x51, 0x26, 0x56, 0x96, 0x9e, 0x64, 0x0b, +	0x6f, 0xa3, 0x9b, 0xd5, 0xef, 0xd2, 0x50, 0x49, 0xde, 0x33, 0xf0, 0xcf, 0xe1, 0x6a, 0xf8, 0x28, +	0xe0, 0x51, 0x5f, 0x7d, 0x62, 0xb8, 0x7c, 0xe1, 0x4c, 0x88, 0xa8, 0xb3, 0xa3, 0xa9, 0xdb, 0x0e, +	0x58, 0x7d, 0xea, 0x7f, 0x6a, 0xb8, 0x6c, 0x59, 0x4c, 0x88, 0x8f, 0xdb, 0x70, 0xdd, 0xb2, 0x55, +	0xcf, 0x27, 0x96, 0x4e, 0x5c, 0x5d, 0x9d, 0x3d, 0xc7, 0xa8, 0x44, 0xd3, 0xa8, 0xe7, 0xd9, 0xe2, +	0xc0, 0x8a, 0xac, 0xbc, 0x6a, 0xd9, 0xfd, 0x80, 0x3c, 0xdb, 0xc9, 0xeb, 0x01, 0x75, 0x2e, 0xcd, +	0x32, 0xab, 0xd2, 0xec, 0x15, 0x28, 0x4e, 0x88, 0xa3, 0x52, 0xcb, 0x77, 0x2f, 0x78, 0x75, 0x59, +	0x50, 0x0a, 0x13, 0xe2, 0xc8, 0xac, 0xfd, 0x42, 0x8a, 0xfc, 0x93, 0x6c, 0xa1, 0x80, 0x8a, 0x27, +	0xd9, 0x42, 0x11, 0x41, 0xf5, 0x5f, 0x19, 0x28, 0xc7, 0xab, 0x4d, 0x56, 0xbc, 0x6b, 0xfc, 0x64, +	0x49, 0xf1, 0xbd, 0xe7, 0x8d, 0xef, 0xad, 0x4d, 0x6b, 0x0d, 0x76, 0xe4, 0x1c, 0xe6, 0x45, 0x0d, +	0xa8, 0x08, 0x4d, 0x76, 0xdc, 0xb3, 0xdd, 0x86, 0x8a, 0x7b, 0x4d, 0x41, 0x09, 0x5a, 0xf8, 0x18, +	0xf2, 0x0f, 0x3d, 0x6e, 0x3b, 0xcf, 0x6d, 0xbf, 0xf9, 0xfd, 0xb6, 0x4f, 0xfa, 0xdc, 0x78, 0xf1, +	0xa4, 0xaf, 0x76, 0xba, 0xca, 0x69, 0xbd, 0xad, 0x04, 0xea, 0xf8, 0x1a, 0x64, 0x4d, 0xf2, 0xd5, +	0x45, 0xf2, 0x70, 0xe2, 0xd0, 0x65, 0x27, 0xe1, 0x1a, 0x64, 0x9f, 0x50, 0xf2, 0x28, 0x79, 0x24, +	0x70, 0xe8, 0x47, 0x5c, 0x0c, 0xfb, 0x90, 0xe3, 0xf1, 0xc2, 0x00, 0x41, 0xc4, 0xd0, 0x4b, 0xb8, +	0x00, 0xd9, 0x46, 0x57, 0x61, 0x0b, 0x02, 0x41, 0x59, 0xa0, 0x6a, 0xaf, 0x25, 0x37, 0x64, 0x94, +	0xae, 0xde, 0x85, 0xbc, 0x08, 0x02, 0x5b, 0x2c, 0x51, 0x18, 0xd0, 0x4b, 0x41, 0x33, 0xb0, 0x91, +	0x0a, 0xa5, 0x67, 0xa7, 0x47, 0xb2, 0x82, 0xd2, 0xc9, 0xa9, 0xce, 0xa2, 0x5c, 0xd5, 0x83, 0x72, +	0xbc, 0xdc, 0x7c, 0x31, 0x57, 0xc9, 0xbf, 0xa7, 0xa0, 0x14, 0x2b, 0x1f, 0x59, 0xe1, 0x42, 0x4c, +	0xd3, 0x7e, 0xa2, 0x12, 0xd3, 0x20, 0x5e, 0x90, 0x1a, 0xc0, 0xa1, 0x3a, 0x43, 0x2e, 0x3b, 0x75, +	0x2f, 0x68, 0x89, 0xe4, 0x50, 0xbe, 0xfa, 0x97, 0x14, 0xa0, 0xf9, 0x02, 0x74, 0xce, 0xcd, 0xd4, +	0x4f, 0xe9, 0x66, 0xf5, 0xcf, 0x29, 0xa8, 0x24, 0xab, 0xce, 0x39, 0xf7, 0x6e, 0xfc, 0xa4, 0xee, +	0xfd, 0x33, 0x0d, 0xeb, 0x89, 0x5a, 0xf3, 0xb2, 0xde, 0x7d, 0x09, 0x9b, 0x86, 0x4e, 0x27, 0x8e, +	0xed, 0x53, 0x4b, 0xbb, 0x50, 0x4d, 0xfa, 0x98, 0x9a, 0x52, 0x95, 0x6f, 0x1a, 0xfb, 0xdf, 0x5f, +	0xcd, 0xd6, 0x5a, 0x33, 0xbd, 0x36, 0x53, 0x3b, 0xdc, 0x6a, 0x35, 0xe5, 0xd3, 0x5e, 0x77, 0x20, +	0x77, 0x1a, 0x9f, 0xab, 0x67, 0x9d, 0x5f, 0x75, 0xba, 0x9f, 0x76, 0x14, 0x64, 0xcc, 0xd1, 0x7e, +	0xc4, 0x65, 0xdf, 0x03, 0x34, 0xef, 0x14, 0xbe, 0x0a, 0xcb, 0xdc, 0x42, 0x2f, 0xe1, 0x2d, 0xd8, +	0xe8, 0x74, 0xd5, 0x7e, 0xab, 0x29, 0xab, 0xf2, 0x83, 0x07, 0x72, 0x63, 0xd0, 0x17, 0xd7, 0xfb, +	0x88, 0x3d, 0x48, 0x2c, 0xf0, 0xea, 0x9f, 0x32, 0xb0, 0xb5, 0xc4, 0x13, 0x5c, 0x0f, 0x6e, 0x16, +	0xe2, 0xb2, 0xf3, 0xee, 0x65, 0xbc, 0xaf, 0xb1, 0x82, 0xa0, 0x47, 0x5c, 0x3f, 0xb8, 0x88, 0xdc, +	0x02, 0x16, 0x25, 0xcb, 0x37, 0x86, 0x06, 0x75, 0x83, 0xd7, 0x10, 0x71, 0xdd, 0xd8, 0x98, 0xe1, +	0xe2, 0x41, 0xe4, 0x67, 0x80, 0x1d, 0xdb, 0x33, 0x7c, 0xe3, 0x31, 0x55, 0x0d, 0x2b, 0x7c, 0x3a, +	0x61, 0xd7, 0x8f, 0xac, 0x82, 0x42, 0x49, 0xcb, 0xf2, 0x23, 0xb6, 0x45, 0x47, 0x64, 0x8e, 0xcd, +	0x36, 0xf3, 0x8c, 0x82, 0x42, 0x49, 0xc4, 0xbe, 0x01, 0x65, 0xdd, 0x9e, 0xb2, 0x9a, 0x4c, 0xf0, +	0xd8, 0xd9, 0x91, 0x52, 0x4a, 0x02, 0x8b, 0x28, 0x41, 0xb5, 0x3d, 0x7b, 0xb3, 0x29, 0x2b, 0x25, +	0x81, 0x09, 0xca, 0x4d, 0xd8, 0x20, 0xa3, 0x91, 0xcb, 0x8c, 0x87, 0x86, 0xc4, 0xfd, 0xa1, 0x12, +	0xc1, 0x9c, 0xb8, 0x73, 0x02, 0x85, 0x30, 0x0e, 0xec, 0xa8, 0x66, 0x91, 0x50, 0x1d, 0xf1, 0x6e, +	0x97, 0xde, 0x2b, 0x2a, 0x05, 0x2b, 0x14, 0xde, 0x80, 0xb2, 0xe1, 0xa9, 0xb3, 0x27, 0xe8, 0xf4, +	0x6e, 0x7a, 0xaf, 0xa0, 0x94, 0x0c, 0x2f, 0x7a, 0xbe, 0xab, 0x7e, 0x93, 0x86, 0x4a, 0xf2, 0x09, +	0x1d, 0x37, 0xa1, 0x60, 0xda, 0x1a, 0xe1, 0xa9, 0x25, 0xbe, 0xdf, 0xec, 0x3d, 0xe7, 0xd5, 0xbd, +	0xd6, 0x0e, 0xf8, 0x4a, 0xa4, 0xb9, 0xf3, 0x8f, 0x14, 0x14, 0x42, 0x18, 0x5f, 0x81, 0xac, 0x43, +	0xfc, 0x31, 0x37, 0x97, 0x3b, 0x4a, 0xa3, 0x94, 0xc2, 0xdb, 0x0c, 0xf7, 0x1c, 0x62, 0xf1, 0x14, +	0x08, 0x70, 0xd6, 0x66, 0xf3, 0x6a, 0x52, 0xa2, 0xf3, 0xcb, 0x89, 0x3d, 0x99, 0x50, 0xcb, 0xf7, +	0xc2, 0x79, 0x0d, 0xf0, 0x46, 0x00, 0xe3, 0x77, 0x60, 0xd3, 0x77, 0x89, 0x61, 0x26, 0xb8, 0x59, +	0xce, 0x45, 0xa1, 0x20, 0x22, 0x1f, 0xc2, 0xb5, 0xd0, 0xae, 0x4e, 0x7d, 0xa2, 0x8d, 0xa9, 0x3e, +	0x53, 0xca, 0xf3, 0xf7, 0xd9, 0xab, 0x01, 0xa1, 0x19, 0xc8, 0x43, 0xdd, 0xea, 0x77, 0x29, 0xd8, +	0x0c, 0xaf, 0x53, 0x7a, 0x14, 0xac, 0x53, 0x00, 0x62, 0x59, 0xb6, 0x1f, 0x0f, 0xd7, 0x62, 0x2a, +	0x2f, 0xe8, 0xd5, 0xea, 0x91, 0x92, 0x12, 0x33, 0xb0, 0x33, 0x01, 0x98, 0x49, 0x56, 0x86, 0xed, +	0x3a, 0x94, 0x82, 0xef, 0x23, 0xfc, 0x23, 0x9b, 0xb8, 0x80, 0x83, 0x80, 0xd8, 0xbd, 0x0b, 0x6f, +	0x43, 0xee, 0x9c, 0x8e, 0x0c, 0x2b, 0x78, 0xf5, 0x14, 0x8d, 0xf0, 0x25, 0x37, 0x1b, 0xbd, 0xe4, +	0x1e, 0xfd, 0x21, 0x05, 0x5b, 0x9a, 0x3d, 0x99, 0xf7, 0xf7, 0x08, 0xcd, 0xbd, 0x02, 0x78, 0x9f, +	0xa4, 0xbe, 0xf8, 0x78, 0x64, 0xf8, 0xe3, 0xe9, 0x79, 0x4d, 0xb3, 0x27, 0xfb, 0x23, 0xdb, 0x24, +	0xd6, 0x68, 0xf6, 0x95, 0x90, 0xff, 0xd1, 0xde, 0x1d, 0x51, 0xeb, 0xdd, 0x91, 0x1d, 0xfb, 0x66, +	0xf8, 0xd1, 0xec, 0xef, 0xd7, 0xe9, 0xcc, 0x71, 0xef, 0xe8, 0xaf, 0xe9, 0x9d, 0x63, 0xd1, 0x57, +	0x2f, 0x8c, 0x8d, 0x42, 0x87, 0x26, 0xd5, 0xd8, 0x78, 0xff, 0x17, 0x00, 0x00, 0xff, 0xff, 0x0c, +	0xab, 0xb6, 0x37, 0x7e, 0x1c, 0x00, 0x00,  } diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.proto b/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.proto new file mode 100644 index 0000000..4d4fb37 --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.proto @@ -0,0 +1,849 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc.  All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +//     * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +//     * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +//     * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +//  Based on original Protocol Buffers design by +//  Sanjay Ghemawat, Jeff Dean, and others. +// +// The messages in this file describe the definitions found in .proto files. +// A valid .proto file can be translated directly to a FileDescriptorProto +// without any other information (e.g. without reading its imports). + + +syntax = "proto2"; + +package google.protobuf; +option go_package = "github.com/golang/protobuf/protoc-gen-go/descriptor;descriptor"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "DescriptorProtos"; +option csharp_namespace = "Google.Protobuf.Reflection"; +option objc_class_prefix = "GPB"; + +// descriptor.proto must be optimized for speed because reflection-based +// algorithms don't work during bootstrapping. +option optimize_for = SPEED; + +// The protocol compiler can output a FileDescriptorSet containing the .proto +// files it parses. +message FileDescriptorSet { +  repeated FileDescriptorProto file = 1; +} + +// Describes a complete .proto file. +message FileDescriptorProto { +  optional string name = 1;       // file name, relative to root of source tree +  optional string package = 2;    // e.g. "foo", "foo.bar", etc. + +  // Names of files imported by this file. +  repeated string dependency = 3; +  // Indexes of the public imported files in the dependency list above. +  repeated int32 public_dependency = 10; +  // Indexes of the weak imported files in the dependency list. +  // For Google-internal migration only. Do not use. +  repeated int32 weak_dependency = 11; + +  // All top-level definitions in this file. +  repeated DescriptorProto message_type = 4; +  repeated EnumDescriptorProto enum_type = 5; +  repeated ServiceDescriptorProto service = 6; +  repeated FieldDescriptorProto extension = 7; + +  optional FileOptions options = 8; + +  // This field contains optional information about the original source code. +  // You may safely remove this entire field without harming runtime +  // functionality of the descriptors -- the information is needed only by +  // development tools. +  optional SourceCodeInfo source_code_info = 9; + +  // The syntax of the proto file. +  // The supported values are "proto2" and "proto3". +  optional string syntax = 12; +} + +// Describes a message type. +message DescriptorProto { +  optional string name = 1; + +  repeated FieldDescriptorProto field = 2; +  repeated FieldDescriptorProto extension = 6; + +  repeated DescriptorProto nested_type = 3; +  repeated EnumDescriptorProto enum_type = 4; + +  message ExtensionRange { +    optional int32 start = 1; +    optional int32 end = 2; + +    optional ExtensionRangeOptions options = 3; +  } +  repeated ExtensionRange extension_range = 5; + +  repeated OneofDescriptorProto oneof_decl = 8; + +  optional MessageOptions options = 7; + +  // Range of reserved tag numbers. Reserved tag numbers may not be used by +  // fields or extension ranges in the same message. Reserved ranges may +  // not overlap. +  message ReservedRange { +    optional int32 start = 1; // Inclusive. +    optional int32 end = 2;   // Exclusive. +  } +  repeated ReservedRange reserved_range = 9; +  // Reserved field names, which may not be used by fields in the same message. +  // A given name may only be reserved once. +  repeated string reserved_name = 10; +} + +message ExtensionRangeOptions { +  // The parser stores options it doesn't recognize here. See above. +  repeated UninterpretedOption uninterpreted_option = 999; + +  // Clients can define custom options in extensions of this message. See above. +  extensions 1000 to max; +} + +// Describes a field within a message. +message FieldDescriptorProto { +  enum Type { +    // 0 is reserved for errors. +    // Order is weird for historical reasons. +    TYPE_DOUBLE         = 1; +    TYPE_FLOAT          = 2; +    // Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT64 if +    // negative values are likely. +    TYPE_INT64          = 3; +    TYPE_UINT64         = 4; +    // Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT32 if +    // negative values are likely. +    TYPE_INT32          = 5; +    TYPE_FIXED64        = 6; +    TYPE_FIXED32        = 7; +    TYPE_BOOL           = 8; +    TYPE_STRING         = 9; +    // Tag-delimited aggregate. +    // Group type is deprecated and not supported in proto3. However, Proto3 +    // implementations should still be able to parse the group wire format and +    // treat group fields as unknown fields. +    TYPE_GROUP          = 10; +    TYPE_MESSAGE        = 11;  // Length-delimited aggregate. + +    // New in version 2. +    TYPE_BYTES          = 12; +    TYPE_UINT32         = 13; +    TYPE_ENUM           = 14; +    TYPE_SFIXED32       = 15; +    TYPE_SFIXED64       = 16; +    TYPE_SINT32         = 17;  // Uses ZigZag encoding. +    TYPE_SINT64         = 18;  // Uses ZigZag encoding. +  }; + +  enum Label { +    // 0 is reserved for errors +    LABEL_OPTIONAL      = 1; +    LABEL_REQUIRED      = 2; +    LABEL_REPEATED      = 3; +  }; + +  optional string name = 1; +  optional int32 number = 3; +  optional Label label = 4; + +  // If type_name is set, this need not be set.  If both this and type_name +  // are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP. +  optional Type type = 5; + +  // For message and enum types, this is the name of the type.  If the name +  // starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping +  // rules are used to find the type (i.e. first the nested types within this +  // message are searched, then within the parent, on up to the root +  // namespace). +  optional string type_name = 6; + +  // For extensions, this is the name of the type being extended.  It is +  // resolved in the same manner as type_name. +  optional string extendee = 2; + +  // For numeric types, contains the original text representation of the value. +  // For booleans, "true" or "false". +  // For strings, contains the default text contents (not escaped in any way). +  // For bytes, contains the C escaped value.  All bytes >= 128 are escaped. +  // TODO(kenton):  Base-64 encode? +  optional string default_value = 7; + +  // If set, gives the index of a oneof in the containing type's oneof_decl +  // list.  This field is a member of that oneof. +  optional int32 oneof_index = 9; + +  // JSON name of this field. The value is set by protocol compiler. If the +  // user has set a "json_name" option on this field, that option's value +  // will be used. Otherwise, it's deduced from the field's name by converting +  // it to camelCase. +  optional string json_name = 10; + +  optional FieldOptions options = 8; +} + +// Describes a oneof. +message OneofDescriptorProto { +  optional string name = 1; +  optional OneofOptions options = 2; +} + +// Describes an enum type. +message EnumDescriptorProto { +  optional string name = 1; + +  repeated EnumValueDescriptorProto value = 2; + +  optional EnumOptions options = 3; +} + +// Describes a value within an enum. +message EnumValueDescriptorProto { +  optional string name = 1; +  optional int32 number = 2; + +  optional EnumValueOptions options = 3; +} + +// Describes a service. +message ServiceDescriptorProto { +  optional string name = 1; +  repeated MethodDescriptorProto method = 2; + +  optional ServiceOptions options = 3; +} + +// Describes a method of a service. +message MethodDescriptorProto { +  optional string name = 1; + +  // Input and output type names.  These are resolved in the same way as +  // FieldDescriptorProto.type_name, but must refer to a message type. +  optional string input_type = 2; +  optional string output_type = 3; + +  optional MethodOptions options = 4; + +  // Identifies if client streams multiple client messages +  optional bool client_streaming = 5 [default=false]; +  // Identifies if server streams multiple server messages +  optional bool server_streaming = 6 [default=false]; +} + + +// =================================================================== +// Options + +// Each of the definitions above may have "options" attached.  These are +// just annotations which may cause code to be generated slightly differently +// or may contain hints for code that manipulates protocol messages. +// +// Clients may define custom options as extensions of the *Options messages. +// These extensions may not yet be known at parsing time, so the parser cannot +// store the values in them.  Instead it stores them in a field in the *Options +// message called uninterpreted_option. This field must have the same name +// across all *Options messages. We then use this field to populate the +// extensions when we build a descriptor, at which point all protos have been +// parsed and so all extensions are known. +// +// Extension numbers for custom options may be chosen as follows: +// * For options which will only be used within a single application or +//   organization, or for experimental options, use field numbers 50000 +//   through 99999.  It is up to you to ensure that you do not use the +//   same number for multiple options. +// * For options which will be published and used publicly by multiple +//   independent entities, e-mail protobuf-global-extension-registry@google.com +//   to reserve extension numbers. Simply provide your project name (e.g. +//   Objective-C plugin) and your project website (if available) -- there's no +//   need to explain how you intend to use them. Usually you only need one +//   extension number. You can declare multiple options with only one extension +//   number by putting them in a sub-message. See the Custom Options section of +//   the docs for examples: +//   https://developers.google.com/protocol-buffers/docs/proto#options +//   If this turns out to be popular, a web service will be set up +//   to automatically assign option numbers. + + +message FileOptions { + +  // Sets the Java package where classes generated from this .proto will be +  // placed.  By default, the proto package is used, but this is often +  // inappropriate because proto packages do not normally start with backwards +  // domain names. +  optional string java_package = 1; + + +  // If set, all the classes from the .proto file are wrapped in a single +  // outer class with the given name.  This applies to both Proto1 +  // (equivalent to the old "--one_java_file" option) and Proto2 (where +  // a .proto always translates to a single class, but you may want to +  // explicitly choose the class name). +  optional string java_outer_classname = 8; + +  // If set true, then the Java code generator will generate a separate .java +  // file for each top-level message, enum, and service defined in the .proto +  // file.  Thus, these types will *not* be nested inside the outer class +  // named by java_outer_classname.  However, the outer class will still be +  // generated to contain the file's getDescriptor() method as well as any +  // top-level extensions defined in the file. +  optional bool java_multiple_files = 10 [default=false]; + +  // This option does nothing. +  optional bool java_generate_equals_and_hash = 20 [deprecated=true]; + +  // If set true, then the Java2 code generator will generate code that +  // throws an exception whenever an attempt is made to assign a non-UTF-8 +  // byte sequence to a string field. +  // Message reflection will do the same. +  // However, an extension field still accepts non-UTF-8 byte sequences. +  // This option has no effect on when used with the lite runtime. +  optional bool java_string_check_utf8 = 27 [default=false]; + + +  // Generated classes can be optimized for speed or code size. +  enum OptimizeMode { +    SPEED = 1;        // Generate complete code for parsing, serialization, +                      // etc. +    CODE_SIZE = 2;    // Use ReflectionOps to implement these methods. +    LITE_RUNTIME = 3; // Generate code using MessageLite and the lite runtime. +  } +  optional OptimizeMode optimize_for = 9 [default=SPEED]; + +  // Sets the Go package where structs generated from this .proto will be +  // placed. If omitted, the Go package will be derived from the following: +  //   - The basename of the package import path, if provided. +  //   - Otherwise, the package statement in the .proto file, if present. +  //   - Otherwise, the basename of the .proto file, without extension. +  optional string go_package = 11; + + + +  // Should generic services be generated in each language?  "Generic" services +  // are not specific to any particular RPC system.  They are generated by the +  // main code generators in each language (without additional plugins). +  // Generic services were the only kind of service generation supported by +  // early versions of google.protobuf. +  // +  // Generic services are now considered deprecated in favor of using plugins +  // that generate code specific to your particular RPC system.  Therefore, +  // these default to false.  Old code which depends on generic services should +  // explicitly set them to true. +  optional bool cc_generic_services = 16 [default=false]; +  optional bool java_generic_services = 17 [default=false]; +  optional bool py_generic_services = 18 [default=false]; +  optional bool php_generic_services = 42 [default=false]; + +  // Is this file deprecated? +  // Depending on the target platform, this can emit Deprecated annotations +  // for everything in the file, or it will be completely ignored; in the very +  // least, this is a formalization for deprecating files. +  optional bool deprecated = 23 [default=false]; + +  // Enables the use of arenas for the proto messages in this file. This applies +  // only to generated classes for C++. +  optional bool cc_enable_arenas = 31 [default=false]; + + +  // Sets the objective c class prefix which is prepended to all objective c +  // generated classes from this .proto. There is no default. +  optional string objc_class_prefix = 36; + +  // Namespace for generated classes; defaults to the package. +  optional string csharp_namespace = 37; + +  // By default Swift generators will take the proto package and CamelCase it +  // replacing '.' with underscore and use that to prefix the types/symbols +  // defined. When this options is provided, they will use this value instead +  // to prefix the types/symbols defined. +  optional string swift_prefix = 39; + +  // Sets the php class prefix which is prepended to all php generated classes +  // from this .proto. Default is empty. +  optional string php_class_prefix = 40; + +  // Use this option to change the namespace of php generated classes. Default +  // is empty. When this option is empty, the package name will be used for +  // determining the namespace. +  optional string php_namespace = 41; + +  // The parser stores options it doesn't recognize here. See above. +  repeated UninterpretedOption uninterpreted_option = 999; + +  // Clients can define custom options in extensions of this message. See above. +  extensions 1000 to max; + +  reserved 38; +} + +message MessageOptions { +  // Set true to use the old proto1 MessageSet wire format for extensions. +  // This is provided for backwards-compatibility with the MessageSet wire +  // format.  You should not use this for any other reason:  It's less +  // efficient, has fewer features, and is more complicated. +  // +  // The message must be defined exactly as follows: +  //   message Foo { +  //     option message_set_wire_format = true; +  //     extensions 4 to max; +  //   } +  // Note that the message cannot have any defined fields; MessageSets only +  // have extensions. +  // +  // All extensions of your type must be singular messages; e.g. they cannot +  // be int32s, enums, or repeated messages. +  // +  // Because this is an option, the above two restrictions are not enforced by +  // the protocol compiler. +  optional bool message_set_wire_format = 1 [default=false]; + +  // Disables the generation of the standard "descriptor()" accessor, which can +  // conflict with a field of the same name.  This is meant to make migration +  // from proto1 easier; new code should avoid fields named "descriptor". +  optional bool no_standard_descriptor_accessor = 2 [default=false]; + +  // Is this message deprecated? +  // Depending on the target platform, this can emit Deprecated annotations +  // for the message, or it will be completely ignored; in the very least, +  // this is a formalization for deprecating messages. +  optional bool deprecated = 3 [default=false]; + +  // Whether the message is an automatically generated map entry type for the +  // maps field. +  // +  // For maps fields: +  //     map<KeyType, ValueType> map_field = 1; +  // The parsed descriptor looks like: +  //     message MapFieldEntry { +  //         option map_entry = true; +  //         optional KeyType key = 1; +  //         optional ValueType value = 2; +  //     } +  //     repeated MapFieldEntry map_field = 1; +  // +  // Implementations may choose not to generate the map_entry=true message, but +  // use a native map in the target language to hold the keys and values. +  // The reflection APIs in such implementions still need to work as +  // if the field is a repeated message field. +  // +  // NOTE: Do not set the option in .proto files. Always use the maps syntax +  // instead. The option should only be implicitly set by the proto compiler +  // parser. +  optional bool map_entry = 7; + +  reserved 8;  // javalite_serializable +  reserved 9;  // javanano_as_lite + +  // The parser stores options it doesn't recognize here. See above. +  repeated UninterpretedOption uninterpreted_option = 999; + +  // Clients can define custom options in extensions of this message. See above. +  extensions 1000 to max; +} + +message FieldOptions { +  // The ctype option instructs the C++ code generator to use a different +  // representation of the field than it normally would.  See the specific +  // options below.  This option is not yet implemented in the open source +  // release -- sorry, we'll try to include it in a future version! +  optional CType ctype = 1 [default = STRING]; +  enum CType { +    // Default mode. +    STRING = 0; + +    CORD = 1; + +    STRING_PIECE = 2; +  } +  // The packed option can be enabled for repeated primitive fields to enable +  // a more efficient representation on the wire. Rather than repeatedly +  // writing the tag and type for each element, the entire array is encoded as +  // a single length-delimited blob. In proto3, only explicit setting it to +  // false will avoid using packed encoding. +  optional bool packed = 2; + +  // The jstype option determines the JavaScript type used for values of the +  // field.  The option is permitted only for 64 bit integral and fixed types +  // (int64, uint64, sint64, fixed64, sfixed64).  A field with jstype JS_STRING +  // is represented as JavaScript string, which avoids loss of precision that +  // can happen when a large value is converted to a floating point JavaScript. +  // Specifying JS_NUMBER for the jstype causes the generated JavaScript code to +  // use the JavaScript "number" type.  The behavior of the default option +  // JS_NORMAL is implementation dependent. +  // +  // This option is an enum to permit additional types to be added, e.g. +  // goog.math.Integer. +  optional JSType jstype = 6 [default = JS_NORMAL]; +  enum JSType { +    // Use the default type. +    JS_NORMAL = 0; + +    // Use JavaScript strings. +    JS_STRING = 1; + +    // Use JavaScript numbers. +    JS_NUMBER = 2; +  } + +  // Should this field be parsed lazily?  Lazy applies only to message-type +  // fields.  It means that when the outer message is initially parsed, the +  // inner message's contents will not be parsed but instead stored in encoded +  // form.  The inner message will actually be parsed when it is first accessed. +  // +  // This is only a hint.  Implementations are free to choose whether to use +  // eager or lazy parsing regardless of the value of this option.  However, +  // setting this option true suggests that the protocol author believes that +  // using lazy parsing on this field is worth the additional bookkeeping +  // overhead typically needed to implement it. +  // +  // This option does not affect the public interface of any generated code; +  // all method signatures remain the same.  Furthermore, thread-safety of the +  // interface is not affected by this option; const methods remain safe to +  // call from multiple threads concurrently, while non-const methods continue +  // to require exclusive access. +  // +  // +  // Note that implementations may choose not to check required fields within +  // a lazy sub-message.  That is, calling IsInitialized() on the outer message +  // may return true even if the inner message has missing required fields. +  // This is necessary because otherwise the inner message would have to be +  // parsed in order to perform the check, defeating the purpose of lazy +  // parsing.  An implementation which chooses not to check required fields +  // must be consistent about it.  That is, for any particular sub-message, the +  // implementation must either *always* check its required fields, or *never* +  // check its required fields, regardless of whether or not the message has +  // been parsed. +  optional bool lazy = 5 [default=false]; + +  // Is this field deprecated? +  // Depending on the target platform, this can emit Deprecated annotations +  // for accessors, or it will be completely ignored; in the very least, this +  // is a formalization for deprecating fields. +  optional bool deprecated = 3 [default=false]; + +  // For Google-internal migration only. Do not use. +  optional bool weak = 10 [default=false]; + + +  // The parser stores options it doesn't recognize here. See above. +  repeated UninterpretedOption uninterpreted_option = 999; + +  // Clients can define custom options in extensions of this message. See above. +  extensions 1000 to max; + +  reserved 4;  // removed jtype +} + +message OneofOptions { +  // The parser stores options it doesn't recognize here. See above. +  repeated UninterpretedOption uninterpreted_option = 999; + +  // Clients can define custom options in extensions of this message. See above. +  extensions 1000 to max; +} + +message EnumOptions { + +  // Set this option to true to allow mapping different tag names to the same +  // value. +  optional bool allow_alias = 2; + +  // Is this enum deprecated? +  // Depending on the target platform, this can emit Deprecated annotations +  // for the enum, or it will be completely ignored; in the very least, this +  // is a formalization for deprecating enums. +  optional bool deprecated = 3 [default=false]; + +  reserved 5;  // javanano_as_lite + +  // The parser stores options it doesn't recognize here. See above. +  repeated UninterpretedOption uninterpreted_option = 999; + +  // Clients can define custom options in extensions of this message. See above. +  extensions 1000 to max; +} + +message EnumValueOptions { +  // Is this enum value deprecated? +  // Depending on the target platform, this can emit Deprecated annotations +  // for the enum value, or it will be completely ignored; in the very least, +  // this is a formalization for deprecating enum values. +  optional bool deprecated = 1 [default=false]; + +  // The parser stores options it doesn't recognize here. See above. +  repeated UninterpretedOption uninterpreted_option = 999; + +  // Clients can define custom options in extensions of this message. See above. +  extensions 1000 to max; +} + +message ServiceOptions { + +  // Note:  Field numbers 1 through 32 are reserved for Google's internal RPC +  //   framework.  We apologize for hoarding these numbers to ourselves, but +  //   we were already using them long before we decided to release Protocol +  //   Buffers. + +  // Is this service deprecated? +  // Depending on the target platform, this can emit Deprecated annotations +  // for the service, or it will be completely ignored; in the very least, +  // this is a formalization for deprecating services. +  optional bool deprecated = 33 [default=false]; + +  // The parser stores options it doesn't recognize here. See above. +  repeated UninterpretedOption uninterpreted_option = 999; + +  // Clients can define custom options in extensions of this message. See above. +  extensions 1000 to max; +} + +message MethodOptions { + +  // Note:  Field numbers 1 through 32 are reserved for Google's internal RPC +  //   framework.  We apologize for hoarding these numbers to ourselves, but +  //   we were already using them long before we decided to release Protocol +  //   Buffers. + +  // Is this method deprecated? +  // Depending on the target platform, this can emit Deprecated annotations +  // for the method, or it will be completely ignored; in the very least, +  // this is a formalization for deprecating methods. +  optional bool deprecated = 33 [default=false]; + +  // Is this method side-effect-free (or safe in HTTP parlance), or idempotent, +  // or neither? HTTP based RPC implementation may choose GET verb for safe +  // methods, and PUT verb for idempotent methods instead of the default POST. +  enum IdempotencyLevel { +    IDEMPOTENCY_UNKNOWN = 0; +    NO_SIDE_EFFECTS     = 1; // implies idempotent +    IDEMPOTENT          = 2; // idempotent, but may have side effects +  } +  optional IdempotencyLevel idempotency_level = +      34 [default=IDEMPOTENCY_UNKNOWN]; + +  // The parser stores options it doesn't recognize here. See above. +  repeated UninterpretedOption uninterpreted_option = 999; + +  // Clients can define custom options in extensions of this message. See above. +  extensions 1000 to max; +} + + +// A message representing a option the parser does not recognize. This only +// appears in options protos created by the compiler::Parser class. +// DescriptorPool resolves these when building Descriptor objects. Therefore, +// options protos in descriptor objects (e.g. returned by Descriptor::options(), +// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions +// in them. +message UninterpretedOption { +  // The name of the uninterpreted option.  Each string represents a segment in +  // a dot-separated name.  is_extension is true iff a segment represents an +  // extension (denoted with parentheses in options specs in .proto files). +  // E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents +  // "foo.(bar.baz).qux". +  message NamePart { +    required string name_part = 1; +    required bool is_extension = 2; +  } +  repeated NamePart name = 2; + +  // The value of the uninterpreted option, in whatever type the tokenizer +  // identified it as during parsing. Exactly one of these should be set. +  optional string identifier_value = 3; +  optional uint64 positive_int_value = 4; +  optional int64 negative_int_value = 5; +  optional double double_value = 6; +  optional bytes string_value = 7; +  optional string aggregate_value = 8; +} + +// =================================================================== +// Optional source code info + +// Encapsulates information about the original source file from which a +// FileDescriptorProto was generated. +message SourceCodeInfo { +  // A Location identifies a piece of source code in a .proto file which +  // corresponds to a particular definition.  This information is intended +  // to be useful to IDEs, code indexers, documentation generators, and similar +  // tools. +  // +  // For example, say we have a file like: +  //   message Foo { +  //     optional string foo = 1; +  //   } +  // Let's look at just the field definition: +  //   optional string foo = 1; +  //   ^       ^^     ^^  ^  ^^^ +  //   a       bc     de  f  ghi +  // We have the following locations: +  //   span   path               represents +  //   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition. +  //   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional). +  //   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string). +  //   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo). +  //   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1). +  // +  // Notes: +  // - A location may refer to a repeated field itself (i.e. not to any +  //   particular index within it).  This is used whenever a set of elements are +  //   logically enclosed in a single code segment.  For example, an entire +  //   extend block (possibly containing multiple extension definitions) will +  //   have an outer location whose path refers to the "extensions" repeated +  //   field without an index. +  // - Multiple locations may have the same path.  This happens when a single +  //   logical declaration is spread out across multiple places.  The most +  //   obvious example is the "extend" block again -- there may be multiple +  //   extend blocks in the same scope, each of which will have the same path. +  // - A location's span is not always a subset of its parent's span.  For +  //   example, the "extendee" of an extension declaration appears at the +  //   beginning of the "extend" block and is shared by all extensions within +  //   the block. +  // - Just because a location's span is a subset of some other location's span +  //   does not mean that it is a descendent.  For example, a "group" defines +  //   both a type and a field in a single declaration.  Thus, the locations +  //   corresponding to the type and field and their components will overlap. +  // - Code which tries to interpret locations should probably be designed to +  //   ignore those that it doesn't understand, as more types of locations could +  //   be recorded in the future. +  repeated Location location = 1; +  message Location { +    // Identifies which part of the FileDescriptorProto was defined at this +    // location. +    // +    // Each element is a field number or an index.  They form a path from +    // the root FileDescriptorProto to the place where the definition.  For +    // example, this path: +    //   [ 4, 3, 2, 7, 1 ] +    // refers to: +    //   file.message_type(3)  // 4, 3 +    //       .field(7)         // 2, 7 +    //       .name()           // 1 +    // This is because FileDescriptorProto.message_type has field number 4: +    //   repeated DescriptorProto message_type = 4; +    // and DescriptorProto.field has field number 2: +    //   repeated FieldDescriptorProto field = 2; +    // and FieldDescriptorProto.name has field number 1: +    //   optional string name = 1; +    // +    // Thus, the above path gives the location of a field name.  If we removed +    // the last element: +    //   [ 4, 3, 2, 7 ] +    // this path refers to the whole field declaration (from the beginning +    // of the label to the terminating semicolon). +    repeated int32 path = 1 [packed=true]; + +    // Always has exactly three or four elements: start line, start column, +    // end line (optional, otherwise assumed same as start line), end column. +    // These are packed into a single field for efficiency.  Note that line +    // and column numbers are zero-based -- typically you will want to add +    // 1 to each before displaying to a user. +    repeated int32 span = 2 [packed=true]; + +    // If this SourceCodeInfo represents a complete declaration, these are any +    // comments appearing before and after the declaration which appear to be +    // attached to the declaration. +    // +    // A series of line comments appearing on consecutive lines, with no other +    // tokens appearing on those lines, will be treated as a single comment. +    // +    // leading_detached_comments will keep paragraphs of comments that appear +    // before (but not connected to) the current element. Each paragraph, +    // separated by empty lines, will be one comment element in the repeated +    // field. +    // +    // Only the comment content is provided; comment markers (e.g. //) are +    // stripped out.  For block comments, leading whitespace and an asterisk +    // will be stripped from the beginning of each line other than the first. +    // Newlines are included in the output. +    // +    // Examples: +    // +    //   optional int32 foo = 1;  // Comment attached to foo. +    //   // Comment attached to bar. +    //   optional int32 bar = 2; +    // +    //   optional string baz = 3; +    //   // Comment attached to baz. +    //   // Another line attached to baz. +    // +    //   // Comment attached to qux. +    //   // +    //   // Another line attached to qux. +    //   optional double qux = 4; +    // +    //   // Detached comment for corge. This is not leading or trailing comments +    //   // to qux or corge because there are blank lines separating it from +    //   // both. +    // +    //   // Detached comment for corge paragraph 2. +    // +    //   optional string corge = 5; +    //   /* Block comment attached +    //    * to corge.  Leading asterisks +    //    * will be removed. */ +    //   /* Block comment attached to +    //    * grault. */ +    //   optional int32 grault = 6; +    // +    //   // ignored detached comments. +    optional string leading_comments = 3; +    optional string trailing_comments = 4; +    repeated string leading_detached_comments = 6; +  } +} + +// Describes the relationship between generated code and its original source +// file. A GeneratedCodeInfo message is associated with only one generated +// source file, but may contain references to different source .proto files. +message GeneratedCodeInfo { +  // An Annotation connects some span of text in generated code to an element +  // of its generating .proto file. +  repeated Annotation annotation = 1; +  message Annotation { +    // Identifies the element in the original source .proto file. This field +    // is formatted the same as SourceCodeInfo.Location.path. +    repeated int32 path = 1 [packed=true]; + +    // Identifies the filesystem path to the original source .proto. +    optional string source_file = 2; + +    // Identifies the starting offset in bytes in the generated code +    // that relates to the identified object. +    optional int32 begin = 3; + +    // Identifies the ending offset in bytes in the generated code that +    // relates to the identified offset. The end offset should be one past +    // the last relevant byte (so the length of the text = end - begin). +    optional int32 end = 4; +  } +} diff --git a/vendor/github.com/golang/protobuf/ptypes/any.go b/vendor/github.com/golang/protobuf/ptypes/any.go index 89e07ae..b2af97f 100644 --- a/vendor/github.com/golang/protobuf/ptypes/any.go +++ b/vendor/github.com/golang/protobuf/ptypes/any.go @@ -51,6 +51,9 @@ const googleApis = "type.googleapis.com/"  // function. AnyMessageName is provided for less common use cases like filtering a  // sequence of Any messages based on a set of allowed message type names.  func AnyMessageName(any *any.Any) (string, error) { +	if any == nil { +		return "", fmt.Errorf("message is nil") +	}  	slash := strings.LastIndex(any.TypeUrl, "/")  	if slash < 0 {  		return "", fmt.Errorf("message type url %q is invalid", any.TypeUrl) diff --git a/vendor/github.com/golang/protobuf/ptypes/any/any.pb.go b/vendor/github.com/golang/protobuf/ptypes/any/any.pb.go index f2c6906..f346017 100644 --- a/vendor/github.com/golang/protobuf/ptypes/any/any.pb.go +++ b/vendor/github.com/golang/protobuf/ptypes/any/any.pb.go @@ -1,12 +1,11 @@ -// Code generated by protoc-gen-go. -// source: github.com/golang/protobuf/ptypes/any/any.proto -// DO NOT EDIT! +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/protobuf/any.proto  /*  Package any is a generated protocol buffer package.  It is generated from these files: -	github.com/golang/protobuf/ptypes/any/any.proto +	google/protobuf/any.proto  It has these top-level messages:  	Any @@ -63,6 +62,16 @@ const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package  //       any.Unpack(foo)  //       ...  // +//  Example 4: Pack and unpack a message in Go +// +//      foo := &pb.Foo{...} +//      any, err := ptypes.MarshalAny(foo) +//      ... +//      foo := &pb.Foo{} +//      if err := ptypes.UnmarshalAny(any, foo); err != nil { +//        ... +//      } +//  // The pack methods provided by protobuf library will by default use  // 'type.googleapis.com/full.type.name' as the type URL and the unpack  // methods only use the fully qualified type name after the last '/' @@ -132,24 +141,38 @@ func (*Any) ProtoMessage()               {}  func (*Any) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }  func (*Any) XXX_WellKnownType() string   { return "Any" } +func (m *Any) GetTypeUrl() string { +	if m != nil { +		return m.TypeUrl +	} +	return "" +} + +func (m *Any) GetValue() []byte { +	if m != nil { +		return m.Value +	} +	return nil +} +  func init() {  	proto.RegisterType((*Any)(nil), "google.protobuf.Any")  } -func init() { proto.RegisterFile("github.com/golang/protobuf/ptypes/any/any.proto", fileDescriptor0) } +func init() { proto.RegisterFile("google/protobuf/any.proto", fileDescriptor0) }  var fileDescriptor0 = []byte{ -	// 187 bytes of a gzipped FileDescriptorProto -	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xd2, 0x4f, 0xcf, 0x2c, 0xc9, -	0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xcf, 0xcf, 0x49, 0xcc, 0x4b, 0xd7, 0x2f, 0x28, -	0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x2f, 0x28, 0xa9, 0x2c, 0x48, 0x2d, 0xd6, 0x4f, 0xcc, -	0xab, 0x04, 0x61, 0x3d, 0xb0, 0xb8, 0x10, 0x7f, 0x7a, 0x7e, 0x7e, 0x7a, 0x4e, 0xaa, 0x1e, 0x4c, -	0x95, 0x92, 0x19, 0x17, 0xb3, 0x63, 0x5e, 0xa5, 0x90, 0x24, 0x17, 0x07, 0x48, 0x79, 0x7c, 0x69, -	0x51, 0x8e, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0x67, 0x10, 0x3b, 0x88, 0x1f, 0x5a, 0x94, 0x23, 0x24, -	0xc2, 0xc5, 0x5a, 0x96, 0x98, 0x53, 0x9a, 0x2a, 0xc1, 0xa4, 0xc0, 0xa8, 0xc1, 0x13, 0x04, 0xe1, -	0x38, 0x15, 0x71, 0x09, 0x27, 0xe7, 0xe7, 0xea, 0xa1, 0x19, 0xe7, 0xc4, 0xe1, 0x98, 0x57, 0x19, -	0x00, 0xe2, 0x04, 0x30, 0x46, 0xa9, 0x12, 0xe5, 0xb8, 0x05, 0x8c, 0x8c, 0x8b, 0x98, 0x98, 0xdd, -	0x03, 0x9c, 0x56, 0x31, 0xc9, 0xb9, 0x43, 0x4c, 0x0b, 0x80, 0xaa, 0xd2, 0x0b, 0x4f, 0xcd, 0xc9, -	0xf1, 0xce, 0xcb, 0x2f, 0xcf, 0x0b, 0x01, 0xa9, 0x4e, 0x62, 0x03, 0x6b, 0x37, 0x06, 0x04, 0x00, -	0x00, 0xff, 0xff, 0xc6, 0x4d, 0x03, 0x23, 0xf6, 0x00, 0x00, 0x00, +	// 185 bytes of a gzipped FileDescriptorProto +	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4c, 0xcf, 0xcf, 0x4f, +	0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x4f, 0xcc, 0xab, 0xd4, +	0x03, 0x73, 0x84, 0xf8, 0x21, 0x52, 0x7a, 0x30, 0x29, 0x25, 0x33, 0x2e, 0x66, 0xc7, 0xbc, 0x4a, +	0x21, 0x49, 0x2e, 0x8e, 0x92, 0xca, 0x82, 0xd4, 0xf8, 0xd2, 0xa2, 0x1c, 0x09, 0x46, 0x05, 0x46, +	0x0d, 0xce, 0x20, 0x76, 0x10, 0x3f, 0xb4, 0x28, 0x47, 0x48, 0x84, 0x8b, 0xb5, 0x2c, 0x31, 0xa7, +	0x34, 0x55, 0x82, 0x49, 0x81, 0x51, 0x83, 0x27, 0x08, 0xc2, 0x71, 0xca, 0xe7, 0x12, 0x4e, 0xce, +	0xcf, 0xd5, 0x43, 0x33, 0xce, 0x89, 0xc3, 0x31, 0xaf, 0x32, 0x00, 0xc4, 0x09, 0x60, 0x8c, 0x52, +	0x4d, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xcf, 0xcf, 0x49, 0xcc, +	0x4b, 0x47, 0xb8, 0xa8, 0x00, 0x64, 0x7a, 0x31, 0xc8, 0x61, 0x8b, 0x98, 0x98, 0xdd, 0x03, 0x9c, +	0x56, 0x31, 0xc9, 0xb9, 0x43, 0x8c, 0x0a, 0x80, 0x2a, 0xd1, 0x0b, 0x4f, 0xcd, 0xc9, 0xf1, 0xce, +	0xcb, 0x2f, 0xcf, 0x0b, 0x01, 0x29, 0x4d, 0x62, 0x03, 0xeb, 0x35, 0x06, 0x04, 0x00, 0x00, 0xff, +	0xff, 0x13, 0xf8, 0xe8, 0x42, 0xdd, 0x00, 0x00, 0x00,  } diff --git a/vendor/github.com/golang/protobuf/ptypes/any/any.proto b/vendor/github.com/golang/protobuf/ptypes/any/any.proto index 81dcf46..c748667 100644 --- a/vendor/github.com/golang/protobuf/ptypes/any/any.proto +++ b/vendor/github.com/golang/protobuf/ptypes/any/any.proto @@ -37,7 +37,6 @@ option go_package = "github.com/golang/protobuf/ptypes/any";  option java_package = "com.google.protobuf";  option java_outer_classname = "AnyProto";  option java_multiple_files = true; -option java_generate_equals_and_hash = true;  option objc_class_prefix = "GPB";  // `Any` contains an arbitrary serialized protocol buffer message along with a @@ -75,6 +74,16 @@ option objc_class_prefix = "GPB";  //       any.Unpack(foo)  //       ...  // +//  Example 4: Pack and unpack a message in Go +// +//      foo := &pb.Foo{...} +//      any, err := ptypes.MarshalAny(foo) +//      ... +//      foo := &pb.Foo{} +//      if err := ptypes.UnmarshalAny(any, foo); err != nil { +//        ... +//      } +//  // The pack methods provided by protobuf library will by default use  // 'type.googleapis.com/full.type.name' as the type URL and the unpack  // methods only use the fully qualified type name after the last '/' diff --git a/vendor/github.com/golang/protobuf/ptypes/duration/duration.pb.go b/vendor/github.com/golang/protobuf/ptypes/duration/duration.pb.go index 5697483..b2410a0 100644 --- a/vendor/github.com/golang/protobuf/ptypes/duration/duration.pb.go +++ b/vendor/github.com/golang/protobuf/ptypes/duration/duration.pb.go @@ -1,12 +1,11 @@ -// Code generated by protoc-gen-go. -// source: github.com/golang/protobuf/ptypes/duration/duration.proto -// DO NOT EDIT! +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/protobuf/duration.proto  /*  Package duration is a generated protocol buffer package.  It is generated from these files: -	github.com/golang/protobuf/ptypes/duration/duration.proto +	google/protobuf/duration.proto  It has these top-level messages:  	Duration @@ -35,6 +34,8 @@ const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package  // two Timestamp values is a Duration and it can be added or subtracted  // from a Timestamp. Range is approximately +-10,000 years.  // +// # Examples +//  // Example 1: Compute Duration from two Timestamps in pseudo code.  //  //     Timestamp start = ...; @@ -69,10 +70,27 @@ const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package  //       end.nanos -= 1000000000;  //     }  // +// Example 3: Compute Duration from datetime.timedelta in Python. +// +//     td = datetime.timedelta(days=3, minutes=10) +//     duration = Duration() +//     duration.FromTimedelta(td) +// +// # JSON Mapping +// +// In JSON format, the Duration type is encoded as a string rather than an +// object, where the string ends in the suffix "s" (indicating seconds) and +// is preceded by the number of seconds, with nanoseconds expressed as +// fractional seconds. For example, 3 seconds with 0 nanoseconds should be +// encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should +// be expressed in JSON format as "3.000000001s", and 3 seconds and 1 +// microsecond should be expressed in JSON format as "3.000001s". +//  //  type Duration struct {  	// Signed seconds of the span of time. Must be from -315,576,000,000 -	// to +315,576,000,000 inclusive. +	// to +315,576,000,000 inclusive. Note: these bounds are computed from: +	// 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years  	Seconds int64 `protobuf:"varint,1,opt,name=seconds" json:"seconds,omitempty"`  	// Signed fractions of a second at nanosecond resolution of the span  	// of time. Durations less than one second are represented with a 0 @@ -89,26 +107,38 @@ func (*Duration) ProtoMessage()               {}  func (*Duration) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }  func (*Duration) XXX_WellKnownType() string   { return "Duration" } -func init() { -	proto.RegisterType((*Duration)(nil), "google.protobuf.Duration") +func (m *Duration) GetSeconds() int64 { +	if m != nil { +		return m.Seconds +	} +	return 0 +} + +func (m *Duration) GetNanos() int32 { +	if m != nil { +		return m.Nanos +	} +	return 0  }  func init() { -	proto.RegisterFile("github.com/golang/protobuf/ptypes/duration/duration.proto", fileDescriptor0) +	proto.RegisterType((*Duration)(nil), "google.protobuf.Duration")  } +func init() { proto.RegisterFile("google/protobuf/duration.proto", fileDescriptor0) } +  var fileDescriptor0 = []byte{ -	// 189 bytes of a gzipped FileDescriptorProto -	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xb2, 0x4c, 0xcf, 0x2c, 0xc9, -	0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xcf, 0xcf, 0x49, 0xcc, 0x4b, 0xd7, 0x2f, 0x28, -	0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x2f, 0x28, 0xa9, 0x2c, 0x48, 0x2d, 0xd6, 0x4f, 0x29, -	0x2d, 0x4a, 0x2c, 0xc9, 0xcc, 0xcf, 0x83, 0x33, 0xf4, 0xc0, 0x2a, 0x84, 0xf8, 0xd3, 0xf3, 0xf3, -	0xd3, 0x73, 0x52, 0xf5, 0x60, 0xea, 0x95, 0xac, 0xb8, 0x38, 0x5c, 0xa0, 0x4a, 0x84, 0x24, 0xb8, -	0xd8, 0x8b, 0x53, 0x93, 0xf3, 0xf3, 0x52, 0x8a, 0x25, 0x18, 0x15, 0x18, 0x35, 0x98, 0x83, 0x60, -	0x5c, 0x21, 0x11, 0x2e, 0xd6, 0xbc, 0xc4, 0xbc, 0xfc, 0x62, 0x09, 0x26, 0x05, 0x46, 0x0d, 0xd6, -	0x20, 0x08, 0xc7, 0xa9, 0x86, 0x4b, 0x38, 0x39, 0x3f, 0x57, 0x0f, 0xcd, 0x48, 0x27, 0x5e, 0x98, -	0x81, 0x01, 0x20, 0x91, 0x00, 0xc6, 0x28, 0x2d, 0xe2, 0xdd, 0xbb, 0x80, 0x91, 0x71, 0x11, 0x13, -	0xb3, 0x7b, 0x80, 0xd3, 0x2a, 0x26, 0x39, 0x77, 0x88, 0xb9, 0x01, 0x50, 0xa5, 0x7a, 0xe1, 0xa9, -	0x39, 0x39, 0xde, 0x79, 0xf9, 0xe5, 0x79, 0x21, 0x20, 0x2d, 0x49, 0x6c, 0x60, 0x33, 0x8c, 0x01, -	0x01, 0x00, 0x00, 0xff, 0xff, 0x62, 0xfb, 0xb1, 0x51, 0x0e, 0x01, 0x00, 0x00, +	// 190 bytes of a gzipped FileDescriptorProto +	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4b, 0xcf, 0xcf, 0x4f, +	0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x4f, 0x29, 0x2d, 0x4a, +	0x2c, 0xc9, 0xcc, 0xcf, 0xd3, 0x03, 0x8b, 0x08, 0xf1, 0x43, 0xe4, 0xf5, 0x60, 0xf2, 0x4a, 0x56, +	0x5c, 0x1c, 0x2e, 0x50, 0x25, 0x42, 0x12, 0x5c, 0xec, 0xc5, 0xa9, 0xc9, 0xf9, 0x79, 0x29, 0xc5, +	0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0xcc, 0x41, 0x30, 0xae, 0x90, 0x08, 0x17, 0x6b, 0x5e, 0x62, 0x5e, +	0x7e, 0xb1, 0x04, 0x93, 0x02, 0xa3, 0x06, 0x6b, 0x10, 0x84, 0xe3, 0x54, 0xc3, 0x25, 0x9c, 0x9c, +	0x9f, 0xab, 0x87, 0x66, 0xa4, 0x13, 0x2f, 0xcc, 0xc0, 0x00, 0x90, 0x48, 0x00, 0x63, 0x94, 0x56, +	0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x7e, 0x7a, 0x7e, 0x4e, 0x62, 0x5e, +	0x3a, 0xc2, 0x7d, 0x05, 0x25, 0x95, 0x05, 0xa9, 0xc5, 0x70, 0x67, 0xfe, 0x60, 0x64, 0x5c, 0xc4, +	0xc4, 0xec, 0x1e, 0xe0, 0xb4, 0x8a, 0x49, 0xce, 0x1d, 0x62, 0x6e, 0x00, 0x54, 0xa9, 0x5e, 0x78, +	0x6a, 0x4e, 0x8e, 0x77, 0x5e, 0x7e, 0x79, 0x5e, 0x08, 0x48, 0x4b, 0x12, 0x1b, 0xd8, 0x0c, 0x63, +	0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdc, 0x84, 0x30, 0xff, 0xf3, 0x00, 0x00, 0x00,  } diff --git a/vendor/github.com/golang/protobuf/ptypes/duration/duration.proto b/vendor/github.com/golang/protobuf/ptypes/duration/duration.proto index 96c1796..975fce4 100644 --- a/vendor/github.com/golang/protobuf/ptypes/duration/duration.proto +++ b/vendor/github.com/golang/protobuf/ptypes/duration/duration.proto @@ -33,11 +33,11 @@ syntax = "proto3";  package google.protobuf;  option csharp_namespace = "Google.Protobuf.WellKnownTypes"; +option cc_enable_arenas = true;  option go_package = "github.com/golang/protobuf/ptypes/duration";  option java_package = "com.google.protobuf";  option java_outer_classname = "DurationProto";  option java_multiple_files = true; -option java_generate_equals_and_hash = true;  option objc_class_prefix = "GPB";  // A Duration represents a signed, fixed-length span of time represented @@ -47,6 +47,8 @@ option objc_class_prefix = "GPB";  // two Timestamp values is a Duration and it can be added or subtracted  // from a Timestamp. Range is approximately +-10,000 years.  // +// # Examples +//  // Example 1: Compute Duration from two Timestamps in pseudo code.  //  //     Timestamp start = ...; @@ -81,11 +83,28 @@ option objc_class_prefix = "GPB";  //       end.nanos -= 1000000000;  //     }  // +// Example 3: Compute Duration from datetime.timedelta in Python. +// +//     td = datetime.timedelta(days=3, minutes=10) +//     duration = Duration() +//     duration.FromTimedelta(td) +// +// # JSON Mapping +// +// In JSON format, the Duration type is encoded as a string rather than an +// object, where the string ends in the suffix "s" (indicating seconds) and +// is preceded by the number of seconds, with nanoseconds expressed as +// fractional seconds. For example, 3 seconds with 0 nanoseconds should be +// encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should +// be expressed in JSON format as "3.000000001s", and 3 seconds and 1 +// microsecond should be expressed in JSON format as "3.000001s". +//  //  message Duration {    // Signed seconds of the span of time. Must be from -315,576,000,000 -  // to +315,576,000,000 inclusive. +  // to +315,576,000,000 inclusive. Note: these bounds are computed from: +  // 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years    int64 seconds = 1;    // Signed fractions of a second at nanosecond resolution of the span diff --git a/vendor/github.com/golang/protobuf/ptypes/regen.sh b/vendor/github.com/golang/protobuf/ptypes/regen.sh index 2a5b4e8..b50a941 100755 --- a/vendor/github.com/golang/protobuf/ptypes/regen.sh +++ b/vendor/github.com/golang/protobuf/ptypes/regen.sh @@ -8,14 +8,7 @@  PKG=github.com/golang/protobuf/ptypes  UPSTREAM=https://github.com/google/protobuf  UPSTREAM_SUBDIR=src/google/protobuf -PROTO_FILES=' -  any.proto -  duration.proto -  empty.proto -  struct.proto -  timestamp.proto -  wrappers.proto -' +PROTO_FILES=(any duration empty struct timestamp wrappers)  function die() {    echo 1>&2 $* @@ -36,31 +29,15 @@ pkgdir=$(go list -f '{{.Dir}}' $PKG)  echo 1>&2 $pkgdir  base=$(echo $pkgdir | sed "s,/$PKG\$,,")  echo 1>&2 "base: $base" -cd $base +cd "$base"  echo 1>&2 "fetching latest protos... "  git clone -q $UPSTREAM $tmpdir -# Pass 1: build mapping from upstream filename to our filename. -declare -A filename_map -for f in $(cd $PKG && find * -name '*.proto'); do -  echo -n 1>&2 "looking for latest version of $f... " -  up=$(cd $tmpdir/$UPSTREAM_SUBDIR && find * -name $(basename $f) | grep -v /testdata/) -  echo 1>&2 $up -  if [ $(echo $up | wc -w) != "1" ]; then -    die "not exactly one match" -  fi -  filename_map[$up]=$f -done -# Pass 2: copy files -for up in "${!filename_map[@]}"; do -  f=${filename_map[$up]} -  shortname=$(basename $f | sed 's,\.proto$,,') -  cp $tmpdir/$UPSTREAM_SUBDIR/$up $PKG/$f -done -# Run protoc once per package. -for dir in $(find $PKG -name '*.proto' | xargs dirname | sort | uniq); do -  echo 1>&2 "* $dir" -  protoc --go_out=. $dir/*.proto +for file in ${PROTO_FILES[@]}; do +  echo 1>&2 "* $file" +  protoc --go_out=. -I$tmpdir/src $tmpdir/src/google/protobuf/$file.proto || die +  cp $tmpdir/src/google/protobuf/$file.proto $PKG/$file  done +  echo 1>&2 "All OK" diff --git a/vendor/github.com/golang/protobuf/ptypes/timestamp.go b/vendor/github.com/golang/protobuf/ptypes/timestamp.go index 1b36576..47f10db 100644 --- a/vendor/github.com/golang/protobuf/ptypes/timestamp.go +++ b/vendor/github.com/golang/protobuf/ptypes/timestamp.go @@ -99,6 +99,15 @@ func Timestamp(ts *tspb.Timestamp) (time.Time, error) {  	return t, validateTimestamp(ts)  } +// TimestampNow returns a google.protobuf.Timestamp for the current time. +func TimestampNow() *tspb.Timestamp { +	ts, err := TimestampProto(time.Now()) +	if err != nil { +		panic("ptypes: time.Now() out of Timestamp range") +	} +	return ts +} +  // TimestampProto converts the time.Time to a google.protobuf.Timestamp proto.  // It returns an error if the resulting Timestamp is invalid.  func TimestampProto(t time.Time) (*tspb.Timestamp, error) { diff --git a/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go b/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go index ffcc515..e23e4a2 100644 --- a/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go +++ b/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go @@ -1,12 +1,11 @@ -// Code generated by protoc-gen-go. -// source: github.com/golang/protobuf/ptypes/timestamp/timestamp.proto -// DO NOT EDIT! +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/protobuf/timestamp.proto  /*  Package timestamp is a generated protocol buffer package.  It is generated from these files: -	github.com/golang/protobuf/ptypes/timestamp/timestamp.proto +	google/protobuf/timestamp.proto  It has these top-level messages:  	Timestamp @@ -40,6 +39,8 @@ const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package  // and from  RFC 3339 date strings.  // See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt).  // +// # Examples +//  // Example 1: Compute Timestamp from POSIX `time()`.  //  //     Timestamp timestamp; @@ -77,15 +78,36 @@ const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package  //  // Example 5: Compute Timestamp from current time in Python.  // -//     now = time.time() -//     seconds = int(now) -//     nanos = int((now - seconds) * 10**9) -//     timestamp = Timestamp(seconds=seconds, nanos=nanos) +//     timestamp = Timestamp() +//     timestamp.GetCurrentTime() +// +// # JSON Mapping +// +// In JSON format, the Timestamp type is encoded as a string in the +// [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the +// format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" +// where {year} is always expressed using four digits while {month}, {day}, +// {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional +// seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), +// are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone +// is required, though only UTC (as indicated by "Z") is presently supported. +// +// For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past +// 01:30 UTC on January 15, 2017. +// +// In JavaScript, one can convert a Date object to this format using the +// standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString] +// method. In Python, a standard `datetime.datetime` object can be converted +// to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) +// with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one +// can use the Joda Time's [`ISODateTimeFormat.dateTime()`]( +// http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()) +// to obtain a formatter capable of generating timestamps in this format.  //  //  type Timestamp struct {  	// Represents seconds of UTC time since Unix epoch -	// 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to +	// 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to  	// 9999-12-31T23:59:59Z inclusive.  	Seconds int64 `protobuf:"varint,1,opt,name=seconds" json:"seconds,omitempty"`  	// Non-negative fractions of a second at nanosecond resolution. Negative @@ -101,27 +123,38 @@ func (*Timestamp) ProtoMessage()               {}  func (*Timestamp) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }  func (*Timestamp) XXX_WellKnownType() string   { return "Timestamp" } -func init() { -	proto.RegisterType((*Timestamp)(nil), "google.protobuf.Timestamp") +func (m *Timestamp) GetSeconds() int64 { +	if m != nil { +		return m.Seconds +	} +	return 0 +} + +func (m *Timestamp) GetNanos() int32 { +	if m != nil { +		return m.Nanos +	} +	return 0  }  func init() { -	proto.RegisterFile("github.com/golang/protobuf/ptypes/timestamp/timestamp.proto", fileDescriptor0) +	proto.RegisterType((*Timestamp)(nil), "google.protobuf.Timestamp")  } +func init() { proto.RegisterFile("google/protobuf/timestamp.proto", fileDescriptor0) } +  var fileDescriptor0 = []byte{ -	// 194 bytes of a gzipped FileDescriptorProto -	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xb2, 0x4e, 0xcf, 0x2c, 0xc9, -	0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xcf, 0xcf, 0x49, 0xcc, 0x4b, 0xd7, 0x2f, 0x28, -	0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x2f, 0x28, 0xa9, 0x2c, 0x48, 0x2d, 0xd6, 0x2f, 0xc9, -	0xcc, 0x4d, 0x2d, 0x2e, 0x49, 0xcc, 0x2d, 0x40, 0xb0, 0xf4, 0xc0, 0x6a, 0x84, 0xf8, 0xd3, 0xf3, -	0xf3, 0xd3, 0x73, 0x52, 0xf5, 0x60, 0x3a, 0x94, 0xac, 0xb9, 0x38, 0x43, 0x60, 0x6a, 0x84, 0x24, -	0xb8, 0xd8, 0x8b, 0x53, 0x93, 0xf3, 0xf3, 0x52, 0x8a, 0x25, 0x18, 0x15, 0x18, 0x35, 0x98, 0x83, -	0x60, 0x5c, 0x21, 0x11, 0x2e, 0xd6, 0xbc, 0xc4, 0xbc, 0xfc, 0x62, 0x09, 0x26, 0x05, 0x46, 0x0d, -	0xd6, 0x20, 0x08, 0xc7, 0xa9, 0x91, 0x91, 0x4b, 0x38, 0x39, 0x3f, 0x57, 0x0f, 0xcd, 0x50, 0x27, -	0x3e, 0xb8, 0x91, 0x01, 0x20, 0xa1, 0x00, 0xc6, 0x28, 0x6d, 0x12, 0x1c, 0xbd, 0x80, 0x91, 0xf1, -	0x07, 0x23, 0xe3, 0x22, 0x26, 0x66, 0xf7, 0x00, 0xa7, 0x55, 0x4c, 0x72, 0xee, 0x10, 0xc3, 0x03, -	0xa0, 0xca, 0xf5, 0xc2, 0x53, 0x73, 0x72, 0xbc, 0xf3, 0xf2, 0xcb, 0xf3, 0x42, 0x40, 0xda, 0x92, -	0xd8, 0xc0, 0xe6, 0x18, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x17, 0x5f, 0xb7, 0xdc, 0x17, 0x01, -	0x00, 0x00, +	// 191 bytes of a gzipped FileDescriptorProto +	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4f, 0xcf, 0xcf, 0x4f, +	0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x2f, 0xc9, 0xcc, 0x4d, +	0x2d, 0x2e, 0x49, 0xcc, 0x2d, 0xd0, 0x03, 0x0b, 0x09, 0xf1, 0x43, 0x14, 0xe8, 0xc1, 0x14, 0x28, +	0x59, 0x73, 0x71, 0x86, 0xc0, 0xd4, 0x08, 0x49, 0x70, 0xb1, 0x17, 0xa7, 0x26, 0xe7, 0xe7, 0xa5, +	0x14, 0x4b, 0x30, 0x2a, 0x30, 0x6a, 0x30, 0x07, 0xc1, 0xb8, 0x42, 0x22, 0x5c, 0xac, 0x79, 0x89, +	0x79, 0xf9, 0xc5, 0x12, 0x4c, 0x0a, 0x8c, 0x1a, 0xac, 0x41, 0x10, 0x8e, 0x53, 0x1d, 0x97, 0x70, +	0x72, 0x7e, 0xae, 0x1e, 0x9a, 0x99, 0x4e, 0x7c, 0x70, 0x13, 0x03, 0x40, 0x42, 0x01, 0x8c, 0x51, +	0xda, 0xe9, 0x99, 0x25, 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0xe9, 0xf9, 0x39, 0x89, +	0x79, 0xe9, 0x08, 0x27, 0x16, 0x94, 0x54, 0x16, 0xa4, 0x16, 0x23, 0x5c, 0xfa, 0x83, 0x91, 0x71, +	0x11, 0x13, 0xb3, 0x7b, 0x80, 0xd3, 0x2a, 0x26, 0x39, 0x77, 0x88, 0xc9, 0x01, 0x50, 0xb5, 0x7a, +	0xe1, 0xa9, 0x39, 0x39, 0xde, 0x79, 0xf9, 0xe5, 0x79, 0x21, 0x20, 0x3d, 0x49, 0x6c, 0x60, 0x43, +	0x8c, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xbc, 0x77, 0x4a, 0x07, 0xf7, 0x00, 0x00, 0x00,  } diff --git a/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.proto b/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.proto index 7992a85..b7cbd17 100644 --- a/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.proto +++ b/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.proto @@ -38,7 +38,6 @@ option go_package = "github.com/golang/protobuf/ptypes/timestamp";  option java_package = "com.google.protobuf";  option java_outer_classname = "TimestampProto";  option java_multiple_files = true; -option java_generate_equals_and_hash = true;  option objc_class_prefix = "GPB";  // A Timestamp represents a point in time independent of any time zone @@ -53,6 +52,8 @@ option objc_class_prefix = "GPB";  // and from  RFC 3339 date strings.  // See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt).  // +// # Examples +//  // Example 1: Compute Timestamp from POSIX `time()`.  //  //     Timestamp timestamp; @@ -90,16 +91,37 @@ option objc_class_prefix = "GPB";  //  // Example 5: Compute Timestamp from current time in Python.  // -//     now = time.time() -//     seconds = int(now) -//     nanos = int((now - seconds) * 10**9) -//     timestamp = Timestamp(seconds=seconds, nanos=nanos) +//     timestamp = Timestamp() +//     timestamp.GetCurrentTime() +// +// # JSON Mapping +// +// In JSON format, the Timestamp type is encoded as a string in the +// [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the +// format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" +// where {year} is always expressed using four digits while {month}, {day}, +// {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional +// seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), +// are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone +// is required, though only UTC (as indicated by "Z") is presently supported. +// +// For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past +// 01:30 UTC on January 15, 2017. +// +// In JavaScript, one can convert a Date object to this format using the +// standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString] +// method. In Python, a standard `datetime.datetime` object can be converted +// to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) +// with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one +// can use the Joda Time's [`ISODateTimeFormat.dateTime()`]( +// http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()) +// to obtain a formatter capable of generating timestamps in this format.  //  //  message Timestamp {    // Represents seconds of UTC time since Unix epoch -  // 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to +  // 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to    // 9999-12-31T23:59:59Z inclusive.    int64 seconds = 1; diff --git a/vendor/github.com/golang/snappy/AUTHORS b/vendor/github.com/golang/snappy/AUTHORS new file mode 100644 index 0000000..bcfa195 --- /dev/null +++ b/vendor/github.com/golang/snappy/AUTHORS @@ -0,0 +1,15 @@ +# This is the official list of Snappy-Go authors for copyright purposes. +# This file is distinct from the CONTRIBUTORS files. +# See the latter for an explanation. + +# Names should be added to this file as +#	Name or Organization <email address> +# The email address is not required for organizations. + +# Please keep the list sorted. + +Damian Gryski <dgryski@gmail.com> +Google Inc. +Jan Mercl <0xjnml@gmail.com> +Rodolfo Carvalho <rhcarvalho@gmail.com> +Sebastien Binet <seb.binet@gmail.com> diff --git a/vendor/github.com/golang/snappy/CONTRIBUTORS b/vendor/github.com/golang/snappy/CONTRIBUTORS new file mode 100644 index 0000000..931ae31 --- /dev/null +++ b/vendor/github.com/golang/snappy/CONTRIBUTORS @@ -0,0 +1,37 @@ +# This is the official list of people who can contribute +# (and typically have contributed) code to the Snappy-Go repository. +# The AUTHORS file lists the copyright holders; this file +# lists people.  For example, Google employees are listed here +# but not in AUTHORS, because Google holds the copyright. +# +# The submission process automatically checks to make sure +# that people submitting code are listed in this file (by email address). +# +# Names should be added to this file only after verifying that +# the individual or the individual's organization has agreed to +# the appropriate Contributor License Agreement, found here: +# +#     http://code.google.com/legal/individual-cla-v1.0.html +#     http://code.google.com/legal/corporate-cla-v1.0.html +# +# The agreement for individuals can be filled out on the web. +# +# When adding J Random Contributor's name to this file, +# either J's name or J's organization's name should be +# added to the AUTHORS file, depending on whether the +# individual or corporate CLA was used. + +# Names should be added to this file like so: +#     Name <email address> + +# Please keep the list sorted. + +Damian Gryski <dgryski@gmail.com> +Jan Mercl <0xjnml@gmail.com> +Kai Backman <kaib@golang.org> +Marc-Antoine Ruel <maruel@chromium.org> +Nigel Tao <nigeltao@golang.org> +Rob Pike <r@golang.org> +Rodolfo Carvalho <rhcarvalho@gmail.com> +Russ Cox <rsc@golang.org> +Sebastien Binet <seb.binet@gmail.com> diff --git a/vendor/github.com/golang/snappy/LICENSE b/vendor/github.com/golang/snappy/LICENSE new file mode 100644 index 0000000..6050c10 --- /dev/null +++ b/vendor/github.com/golang/snappy/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2011 The Snappy-Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +   * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +   * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. +   * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/golang/snappy/README b/vendor/github.com/golang/snappy/README new file mode 100644 index 0000000..cea1287 --- /dev/null +++ b/vendor/github.com/golang/snappy/README @@ -0,0 +1,107 @@ +The Snappy compression format in the Go programming language. + +To download and install from source: +$ go get github.com/golang/snappy + +Unless otherwise noted, the Snappy-Go source files are distributed +under the BSD-style license found in the LICENSE file. + + + +Benchmarks. + +The golang/snappy benchmarks include compressing (Z) and decompressing (U) ten +or so files, the same set used by the C++ Snappy code (github.com/google/snappy +and note the "google", not "golang"). On an "Intel(R) Core(TM) i7-3770 CPU @ +3.40GHz", Go's GOARCH=amd64 numbers as of 2016-05-29: + +"go test -test.bench=." + +_UFlat0-8         2.19GB/s ± 0%  html +_UFlat1-8         1.41GB/s ± 0%  urls +_UFlat2-8         23.5GB/s ± 2%  jpg +_UFlat3-8         1.91GB/s ± 0%  jpg_200 +_UFlat4-8         14.0GB/s ± 1%  pdf +_UFlat5-8         1.97GB/s ± 0%  html4 +_UFlat6-8          814MB/s ± 0%  txt1 +_UFlat7-8          785MB/s ± 0%  txt2 +_UFlat8-8          857MB/s ± 0%  txt3 +_UFlat9-8          719MB/s ± 1%  txt4 +_UFlat10-8        2.84GB/s ± 0%  pb +_UFlat11-8        1.05GB/s ± 0%  gaviota + +_ZFlat0-8         1.04GB/s ± 0%  html +_ZFlat1-8          534MB/s ± 0%  urls +_ZFlat2-8         15.7GB/s ± 1%  jpg +_ZFlat3-8          740MB/s ± 3%  jpg_200 +_ZFlat4-8         9.20GB/s ± 1%  pdf +_ZFlat5-8          991MB/s ± 0%  html4 +_ZFlat6-8          379MB/s ± 0%  txt1 +_ZFlat7-8          352MB/s ± 0%  txt2 +_ZFlat8-8          396MB/s ± 1%  txt3 +_ZFlat9-8          327MB/s ± 1%  txt4 +_ZFlat10-8        1.33GB/s ± 1%  pb +_ZFlat11-8         605MB/s ± 1%  gaviota + + + +"go test -test.bench=. -tags=noasm" + +_UFlat0-8          621MB/s ± 2%  html +_UFlat1-8          494MB/s ± 1%  urls +_UFlat2-8         23.2GB/s ± 1%  jpg +_UFlat3-8         1.12GB/s ± 1%  jpg_200 +_UFlat4-8         4.35GB/s ± 1%  pdf +_UFlat5-8          609MB/s ± 0%  html4 +_UFlat6-8          296MB/s ± 0%  txt1 +_UFlat7-8          288MB/s ± 0%  txt2 +_UFlat8-8          309MB/s ± 1%  txt3 +_UFlat9-8          280MB/s ± 1%  txt4 +_UFlat10-8         753MB/s ± 0%  pb +_UFlat11-8         400MB/s ± 0%  gaviota + +_ZFlat0-8          409MB/s ± 1%  html +_ZFlat1-8          250MB/s ± 1%  urls +_ZFlat2-8         12.3GB/s ± 1%  jpg +_ZFlat3-8          132MB/s ± 0%  jpg_200 +_ZFlat4-8         2.92GB/s ± 0%  pdf +_ZFlat5-8          405MB/s ± 1%  html4 +_ZFlat6-8          179MB/s ± 1%  txt1 +_ZFlat7-8          170MB/s ± 1%  txt2 +_ZFlat8-8          189MB/s ± 1%  txt3 +_ZFlat9-8          164MB/s ± 1%  txt4 +_ZFlat10-8         479MB/s ± 1%  pb +_ZFlat11-8         270MB/s ± 1%  gaviota + + + +For comparison (Go's encoded output is byte-for-byte identical to C++'s), here +are the numbers from C++ Snappy's + +make CXXFLAGS="-O2 -DNDEBUG -g" clean snappy_unittest.log && cat snappy_unittest.log + +BM_UFlat/0     2.4GB/s  html +BM_UFlat/1     1.4GB/s  urls +BM_UFlat/2    21.8GB/s  jpg +BM_UFlat/3     1.5GB/s  jpg_200 +BM_UFlat/4    13.3GB/s  pdf +BM_UFlat/5     2.1GB/s  html4 +BM_UFlat/6     1.0GB/s  txt1 +BM_UFlat/7   959.4MB/s  txt2 +BM_UFlat/8     1.0GB/s  txt3 +BM_UFlat/9   864.5MB/s  txt4 +BM_UFlat/10    2.9GB/s  pb +BM_UFlat/11    1.2GB/s  gaviota + +BM_ZFlat/0   944.3MB/s  html (22.31 %) +BM_ZFlat/1   501.6MB/s  urls (47.78 %) +BM_ZFlat/2    14.3GB/s  jpg (99.95 %) +BM_ZFlat/3   538.3MB/s  jpg_200 (73.00 %) +BM_ZFlat/4     8.3GB/s  pdf (83.30 %) +BM_ZFlat/5   903.5MB/s  html4 (22.52 %) +BM_ZFlat/6   336.0MB/s  txt1 (57.88 %) +BM_ZFlat/7   312.3MB/s  txt2 (61.91 %) +BM_ZFlat/8   353.1MB/s  txt3 (54.99 %) +BM_ZFlat/9   289.9MB/s  txt4 (66.26 %) +BM_ZFlat/10    1.2GB/s  pb (19.68 %) +BM_ZFlat/11  527.4MB/s  gaviota (37.72 %) diff --git a/vendor/github.com/golang/snappy/decode.go b/vendor/github.com/golang/snappy/decode.go new file mode 100644 index 0000000..72efb03 --- /dev/null +++ b/vendor/github.com/golang/snappy/decode.go @@ -0,0 +1,237 @@ +// Copyright 2011 The Snappy-Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package snappy + +import ( +	"encoding/binary" +	"errors" +	"io" +) + +var ( +	// ErrCorrupt reports that the input is invalid. +	ErrCorrupt = errors.New("snappy: corrupt input") +	// ErrTooLarge reports that the uncompressed length is too large. +	ErrTooLarge = errors.New("snappy: decoded block is too large") +	// ErrUnsupported reports that the input isn't supported. +	ErrUnsupported = errors.New("snappy: unsupported input") + +	errUnsupportedLiteralLength = errors.New("snappy: unsupported literal length") +) + +// DecodedLen returns the length of the decoded block. +func DecodedLen(src []byte) (int, error) { +	v, _, err := decodedLen(src) +	return v, err +} + +// decodedLen returns the length of the decoded block and the number of bytes +// that the length header occupied. +func decodedLen(src []byte) (blockLen, headerLen int, err error) { +	v, n := binary.Uvarint(src) +	if n <= 0 || v > 0xffffffff { +		return 0, 0, ErrCorrupt +	} + +	const wordSize = 32 << (^uint(0) >> 32 & 1) +	if wordSize == 32 && v > 0x7fffffff { +		return 0, 0, ErrTooLarge +	} +	return int(v), n, nil +} + +const ( +	decodeErrCodeCorrupt                  = 1 +	decodeErrCodeUnsupportedLiteralLength = 2 +) + +// Decode returns the decoded form of src. The returned slice may be a sub- +// slice of dst if dst was large enough to hold the entire decoded block. +// Otherwise, a newly allocated slice will be returned. +// +// The dst and src must not overlap. It is valid to pass a nil dst. +func Decode(dst, src []byte) ([]byte, error) { +	dLen, s, err := decodedLen(src) +	if err != nil { +		return nil, err +	} +	if dLen <= len(dst) { +		dst = dst[:dLen] +	} else { +		dst = make([]byte, dLen) +	} +	switch decode(dst, src[s:]) { +	case 0: +		return dst, nil +	case decodeErrCodeUnsupportedLiteralLength: +		return nil, errUnsupportedLiteralLength +	} +	return nil, ErrCorrupt +} + +// NewReader returns a new Reader that decompresses from r, using the framing +// format described at +// https://github.com/google/snappy/blob/master/framing_format.txt +func NewReader(r io.Reader) *Reader { +	return &Reader{ +		r:       r, +		decoded: make([]byte, maxBlockSize), +		buf:     make([]byte, maxEncodedLenOfMaxBlockSize+checksumSize), +	} +} + +// Reader is an io.Reader that can read Snappy-compressed bytes. +type Reader struct { +	r       io.Reader +	err     error +	decoded []byte +	buf     []byte +	// decoded[i:j] contains decoded bytes that have not yet been passed on. +	i, j       int +	readHeader bool +} + +// Reset discards any buffered data, resets all state, and switches the Snappy +// reader to read from r. This permits reusing a Reader rather than allocating +// a new one. +func (r *Reader) Reset(reader io.Reader) { +	r.r = reader +	r.err = nil +	r.i = 0 +	r.j = 0 +	r.readHeader = false +} + +func (r *Reader) readFull(p []byte, allowEOF bool) (ok bool) { +	if _, r.err = io.ReadFull(r.r, p); r.err != nil { +		if r.err == io.ErrUnexpectedEOF || (r.err == io.EOF && !allowEOF) { +			r.err = ErrCorrupt +		} +		return false +	} +	return true +} + +// Read satisfies the io.Reader interface. +func (r *Reader) Read(p []byte) (int, error) { +	if r.err != nil { +		return 0, r.err +	} +	for { +		if r.i < r.j { +			n := copy(p, r.decoded[r.i:r.j]) +			r.i += n +			return n, nil +		} +		if !r.readFull(r.buf[:4], true) { +			return 0, r.err +		} +		chunkType := r.buf[0] +		if !r.readHeader { +			if chunkType != chunkTypeStreamIdentifier { +				r.err = ErrCorrupt +				return 0, r.err +			} +			r.readHeader = true +		} +		chunkLen := int(r.buf[1]) | int(r.buf[2])<<8 | int(r.buf[3])<<16 +		if chunkLen > len(r.buf) { +			r.err = ErrUnsupported +			return 0, r.err +		} + +		// The chunk types are specified at +		// https://github.com/google/snappy/blob/master/framing_format.txt +		switch chunkType { +		case chunkTypeCompressedData: +			// Section 4.2. Compressed data (chunk type 0x00). +			if chunkLen < checksumSize { +				r.err = ErrCorrupt +				return 0, r.err +			} +			buf := r.buf[:chunkLen] +			if !r.readFull(buf, false) { +				return 0, r.err +			} +			checksum := uint32(buf[0]) | uint32(buf[1])<<8 | uint32(buf[2])<<16 | uint32(buf[3])<<24 +			buf = buf[checksumSize:] + +			n, err := DecodedLen(buf) +			if err != nil { +				r.err = err +				return 0, r.err +			} +			if n > len(r.decoded) { +				r.err = ErrCorrupt +				return 0, r.err +			} +			if _, err := Decode(r.decoded, buf); err != nil { +				r.err = err +				return 0, r.err +			} +			if crc(r.decoded[:n]) != checksum { +				r.err = ErrCorrupt +				return 0, r.err +			} +			r.i, r.j = 0, n +			continue + +		case chunkTypeUncompressedData: +			// Section 4.3. Uncompressed data (chunk type 0x01). +			if chunkLen < checksumSize { +				r.err = ErrCorrupt +				return 0, r.err +			} +			buf := r.buf[:checksumSize] +			if !r.readFull(buf, false) { +				return 0, r.err +			} +			checksum := uint32(buf[0]) | uint32(buf[1])<<8 | uint32(buf[2])<<16 | uint32(buf[3])<<24 +			// Read directly into r.decoded instead of via r.buf. +			n := chunkLen - checksumSize +			if n > len(r.decoded) { +				r.err = ErrCorrupt +				return 0, r.err +			} +			if !r.readFull(r.decoded[:n], false) { +				return 0, r.err +			} +			if crc(r.decoded[:n]) != checksum { +				r.err = ErrCorrupt +				return 0, r.err +			} +			r.i, r.j = 0, n +			continue + +		case chunkTypeStreamIdentifier: +			// Section 4.1. Stream identifier (chunk type 0xff). +			if chunkLen != len(magicBody) { +				r.err = ErrCorrupt +				return 0, r.err +			} +			if !r.readFull(r.buf[:len(magicBody)], false) { +				return 0, r.err +			} +			for i := 0; i < len(magicBody); i++ { +				if r.buf[i] != magicBody[i] { +					r.err = ErrCorrupt +					return 0, r.err +				} +			} +			continue +		} + +		if chunkType <= 0x7f { +			// Section 4.5. Reserved unskippable chunks (chunk types 0x02-0x7f). +			r.err = ErrUnsupported +			return 0, r.err +		} +		// Section 4.4 Padding (chunk type 0xfe). +		// Section 4.6. Reserved skippable chunks (chunk types 0x80-0xfd). +		if !r.readFull(r.buf[:chunkLen], false) { +			return 0, r.err +		} +	} +} diff --git a/vendor/github.com/golang/snappy/decode_amd64.go b/vendor/github.com/golang/snappy/decode_amd64.go new file mode 100644 index 0000000..fcd192b --- /dev/null +++ b/vendor/github.com/golang/snappy/decode_amd64.go @@ -0,0 +1,14 @@ +// Copyright 2016 The Snappy-Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !appengine +// +build gc +// +build !noasm + +package snappy + +// decode has the same semantics as in decode_other.go. +// +//go:noescape +func decode(dst, src []byte) int diff --git a/vendor/github.com/golang/snappy/decode_amd64.s b/vendor/github.com/golang/snappy/decode_amd64.s new file mode 100644 index 0000000..e6179f6 --- /dev/null +++ b/vendor/github.com/golang/snappy/decode_amd64.s @@ -0,0 +1,490 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !appengine +// +build gc +// +build !noasm + +#include "textflag.h" + +// The asm code generally follows the pure Go code in decode_other.go, except +// where marked with a "!!!". + +// func decode(dst, src []byte) int +// +// All local variables fit into registers. The non-zero stack size is only to +// spill registers and push args when issuing a CALL. The register allocation: +//	- AX	scratch +//	- BX	scratch +//	- CX	length or x +//	- DX	offset +//	- SI	&src[s] +//	- DI	&dst[d] +//	+ R8	dst_base +//	+ R9	dst_len +//	+ R10	dst_base + dst_len +//	+ R11	src_base +//	+ R12	src_len +//	+ R13	src_base + src_len +//	- R14	used by doCopy +//	- R15	used by doCopy +// +// The registers R8-R13 (marked with a "+") are set at the start of the +// function, and after a CALL returns, and are not otherwise modified. +// +// The d variable is implicitly DI - R8,  and len(dst)-d is R10 - DI. +// The s variable is implicitly SI - R11, and len(src)-s is R13 - SI. +TEXT ·decode(SB), NOSPLIT, $48-56 +	// Initialize SI, DI and R8-R13. +	MOVQ dst_base+0(FP), R8 +	MOVQ dst_len+8(FP), R9 +	MOVQ R8, DI +	MOVQ R8, R10 +	ADDQ R9, R10 +	MOVQ src_base+24(FP), R11 +	MOVQ src_len+32(FP), R12 +	MOVQ R11, SI +	MOVQ R11, R13 +	ADDQ R12, R13 + +loop: +	// for s < len(src) +	CMPQ SI, R13 +	JEQ  end + +	// CX = uint32(src[s]) +	// +	// switch src[s] & 0x03 +	MOVBLZX (SI), CX +	MOVL    CX, BX +	ANDL    $3, BX +	CMPL    BX, $1 +	JAE     tagCopy + +	// ---------------------------------------- +	// The code below handles literal tags. + +	// case tagLiteral: +	// x := uint32(src[s] >> 2) +	// switch +	SHRL $2, CX +	CMPL CX, $60 +	JAE  tagLit60Plus + +	// case x < 60: +	// s++ +	INCQ SI + +doLit: +	// This is the end of the inner "switch", when we have a literal tag. +	// +	// We assume that CX == x and x fits in a uint32, where x is the variable +	// used in the pure Go decode_other.go code. + +	// length = int(x) + 1 +	// +	// Unlike the pure Go code, we don't need to check if length <= 0 because +	// CX can hold 64 bits, so the increment cannot overflow. +	INCQ CX + +	// Prepare to check if copying length bytes will run past the end of dst or +	// src. +	// +	// AX = len(dst) - d +	// BX = len(src) - s +	MOVQ R10, AX +	SUBQ DI, AX +	MOVQ R13, BX +	SUBQ SI, BX + +	// !!! Try a faster technique for short (16 or fewer bytes) copies. +	// +	// if length > 16 || len(dst)-d < 16 || len(src)-s < 16 { +	//   goto callMemmove // Fall back on calling runtime·memmove. +	// } +	// +	// The C++ snappy code calls this TryFastAppend. It also checks len(src)-s +	// against 21 instead of 16, because it cannot assume that all of its input +	// is contiguous in memory and so it needs to leave enough source bytes to +	// read the next tag without refilling buffers, but Go's Decode assumes +	// contiguousness (the src argument is a []byte). +	CMPQ CX, $16 +	JGT  callMemmove +	CMPQ AX, $16 +	JLT  callMemmove +	CMPQ BX, $16 +	JLT  callMemmove + +	// !!! Implement the copy from src to dst as a 16-byte load and store. +	// (Decode's documentation says that dst and src must not overlap.) +	// +	// This always copies 16 bytes, instead of only length bytes, but that's +	// OK. If the input is a valid Snappy encoding then subsequent iterations +	// will fix up the overrun. Otherwise, Decode returns a nil []byte (and a +	// non-nil error), so the overrun will be ignored. +	// +	// Note that on amd64, it is legal and cheap to issue unaligned 8-byte or +	// 16-byte loads and stores. This technique probably wouldn't be as +	// effective on architectures that are fussier about alignment. +	MOVOU 0(SI), X0 +	MOVOU X0, 0(DI) + +	// d += length +	// s += length +	ADDQ CX, DI +	ADDQ CX, SI +	JMP  loop + +callMemmove: +	// if length > len(dst)-d || length > len(src)-s { etc } +	CMPQ CX, AX +	JGT  errCorrupt +	CMPQ CX, BX +	JGT  errCorrupt + +	// copy(dst[d:], src[s:s+length]) +	// +	// This means calling runtime·memmove(&dst[d], &src[s], length), so we push +	// DI, SI and CX as arguments. Coincidentally, we also need to spill those +	// three registers to the stack, to save local variables across the CALL. +	MOVQ DI, 0(SP) +	MOVQ SI, 8(SP) +	MOVQ CX, 16(SP) +	MOVQ DI, 24(SP) +	MOVQ SI, 32(SP) +	MOVQ CX, 40(SP) +	CALL runtime·memmove(SB) + +	// Restore local variables: unspill registers from the stack and +	// re-calculate R8-R13. +	MOVQ 24(SP), DI +	MOVQ 32(SP), SI +	MOVQ 40(SP), CX +	MOVQ dst_base+0(FP), R8 +	MOVQ dst_len+8(FP), R9 +	MOVQ R8, R10 +	ADDQ R9, R10 +	MOVQ src_base+24(FP), R11 +	MOVQ src_len+32(FP), R12 +	MOVQ R11, R13 +	ADDQ R12, R13 + +	// d += length +	// s += length +	ADDQ CX, DI +	ADDQ CX, SI +	JMP  loop + +tagLit60Plus: +	// !!! This fragment does the +	// +	// s += x - 58; if uint(s) > uint(len(src)) { etc } +	// +	// checks. In the asm version, we code it once instead of once per switch case. +	ADDQ CX, SI +	SUBQ $58, SI +	MOVQ SI, BX +	SUBQ R11, BX +	CMPQ BX, R12 +	JA   errCorrupt + +	// case x == 60: +	CMPL CX, $61 +	JEQ  tagLit61 +	JA   tagLit62Plus + +	// x = uint32(src[s-1]) +	MOVBLZX -1(SI), CX +	JMP     doLit + +tagLit61: +	// case x == 61: +	// x = uint32(src[s-2]) | uint32(src[s-1])<<8 +	MOVWLZX -2(SI), CX +	JMP     doLit + +tagLit62Plus: +	CMPL CX, $62 +	JA   tagLit63 + +	// case x == 62: +	// x = uint32(src[s-3]) | uint32(src[s-2])<<8 | uint32(src[s-1])<<16 +	MOVWLZX -3(SI), CX +	MOVBLZX -1(SI), BX +	SHLL    $16, BX +	ORL     BX, CX +	JMP     doLit + +tagLit63: +	// case x == 63: +	// x = uint32(src[s-4]) | uint32(src[s-3])<<8 | uint32(src[s-2])<<16 | uint32(src[s-1])<<24 +	MOVL -4(SI), CX +	JMP  doLit + +// The code above handles literal tags. +// ---------------------------------------- +// The code below handles copy tags. + +tagCopy4: +	// case tagCopy4: +	// s += 5 +	ADDQ $5, SI + +	// if uint(s) > uint(len(src)) { etc } +	MOVQ SI, BX +	SUBQ R11, BX +	CMPQ BX, R12 +	JA   errCorrupt + +	// length = 1 + int(src[s-5])>>2 +	SHRQ $2, CX +	INCQ CX + +	// offset = int(uint32(src[s-4]) | uint32(src[s-3])<<8 | uint32(src[s-2])<<16 | uint32(src[s-1])<<24) +	MOVLQZX -4(SI), DX +	JMP     doCopy + +tagCopy2: +	// case tagCopy2: +	// s += 3 +	ADDQ $3, SI + +	// if uint(s) > uint(len(src)) { etc } +	MOVQ SI, BX +	SUBQ R11, BX +	CMPQ BX, R12 +	JA   errCorrupt + +	// length = 1 + int(src[s-3])>>2 +	SHRQ $2, CX +	INCQ CX + +	// offset = int(uint32(src[s-2]) | uint32(src[s-1])<<8) +	MOVWQZX -2(SI), DX +	JMP     doCopy + +tagCopy: +	// We have a copy tag. We assume that: +	//	- BX == src[s] & 0x03 +	//	- CX == src[s] +	CMPQ BX, $2 +	JEQ  tagCopy2 +	JA   tagCopy4 + +	// case tagCopy1: +	// s += 2 +	ADDQ $2, SI + +	// if uint(s) > uint(len(src)) { etc } +	MOVQ SI, BX +	SUBQ R11, BX +	CMPQ BX, R12 +	JA   errCorrupt + +	// offset = int(uint32(src[s-2])&0xe0<<3 | uint32(src[s-1])) +	MOVQ    CX, DX +	ANDQ    $0xe0, DX +	SHLQ    $3, DX +	MOVBQZX -1(SI), BX +	ORQ     BX, DX + +	// length = 4 + int(src[s-2])>>2&0x7 +	SHRQ $2, CX +	ANDQ $7, CX +	ADDQ $4, CX + +doCopy: +	// This is the end of the outer "switch", when we have a copy tag. +	// +	// We assume that: +	//	- CX == length && CX > 0 +	//	- DX == offset + +	// if offset <= 0 { etc } +	CMPQ DX, $0 +	JLE  errCorrupt + +	// if d < offset { etc } +	MOVQ DI, BX +	SUBQ R8, BX +	CMPQ BX, DX +	JLT  errCorrupt + +	// if length > len(dst)-d { etc } +	MOVQ R10, BX +	SUBQ DI, BX +	CMPQ CX, BX +	JGT  errCorrupt + +	// forwardCopy(dst[d:d+length], dst[d-offset:]); d += length +	// +	// Set: +	//	- R14 = len(dst)-d +	//	- R15 = &dst[d-offset] +	MOVQ R10, R14 +	SUBQ DI, R14 +	MOVQ DI, R15 +	SUBQ DX, R15 + +	// !!! Try a faster technique for short (16 or fewer bytes) forward copies. +	// +	// First, try using two 8-byte load/stores, similar to the doLit technique +	// above. Even if dst[d:d+length] and dst[d-offset:] can overlap, this is +	// still OK if offset >= 8. Note that this has to be two 8-byte load/stores +	// and not one 16-byte load/store, and the first store has to be before the +	// second load, due to the overlap if offset is in the range [8, 16). +	// +	// if length > 16 || offset < 8 || len(dst)-d < 16 { +	//   goto slowForwardCopy +	// } +	// copy 16 bytes +	// d += length +	CMPQ CX, $16 +	JGT  slowForwardCopy +	CMPQ DX, $8 +	JLT  slowForwardCopy +	CMPQ R14, $16 +	JLT  slowForwardCopy +	MOVQ 0(R15), AX +	MOVQ AX, 0(DI) +	MOVQ 8(R15), BX +	MOVQ BX, 8(DI) +	ADDQ CX, DI +	JMP  loop + +slowForwardCopy: +	// !!! If the forward copy is longer than 16 bytes, or if offset < 8, we +	// can still try 8-byte load stores, provided we can overrun up to 10 extra +	// bytes. As above, the overrun will be fixed up by subsequent iterations +	// of the outermost loop. +	// +	// The C++ snappy code calls this technique IncrementalCopyFastPath. Its +	// commentary says: +	// +	// ---- +	// +	// The main part of this loop is a simple copy of eight bytes at a time +	// until we've copied (at least) the requested amount of bytes.  However, +	// if d and d-offset are less than eight bytes apart (indicating a +	// repeating pattern of length < 8), we first need to expand the pattern in +	// order to get the correct results. For instance, if the buffer looks like +	// this, with the eight-byte <d-offset> and <d> patterns marked as +	// intervals: +	// +	//    abxxxxxxxxxxxx +	//    [------]           d-offset +	//      [------]         d +	// +	// a single eight-byte copy from <d-offset> to <d> will repeat the pattern +	// once, after which we can move <d> two bytes without moving <d-offset>: +	// +	//    ababxxxxxxxxxx +	//    [------]           d-offset +	//        [------]       d +	// +	// and repeat the exercise until the two no longer overlap. +	// +	// This allows us to do very well in the special case of one single byte +	// repeated many times, without taking a big hit for more general cases. +	// +	// The worst case of extra writing past the end of the match occurs when +	// offset == 1 and length == 1; the last copy will read from byte positions +	// [0..7] and write to [4..11], whereas it was only supposed to write to +	// position 1. Thus, ten excess bytes. +	// +	// ---- +	// +	// That "10 byte overrun" worst case is confirmed by Go's +	// TestSlowForwardCopyOverrun, which also tests the fixUpSlowForwardCopy +	// and finishSlowForwardCopy algorithm. +	// +	// if length > len(dst)-d-10 { +	//   goto verySlowForwardCopy +	// } +	SUBQ $10, R14 +	CMPQ CX, R14 +	JGT  verySlowForwardCopy + +makeOffsetAtLeast8: +	// !!! As above, expand the pattern so that offset >= 8 and we can use +	// 8-byte load/stores. +	// +	// for offset < 8 { +	//   copy 8 bytes from dst[d-offset:] to dst[d:] +	//   length -= offset +	//   d      += offset +	//   offset += offset +	//   // The two previous lines together means that d-offset, and therefore +	//   // R15, is unchanged. +	// } +	CMPQ DX, $8 +	JGE  fixUpSlowForwardCopy +	MOVQ (R15), BX +	MOVQ BX, (DI) +	SUBQ DX, CX +	ADDQ DX, DI +	ADDQ DX, DX +	JMP  makeOffsetAtLeast8 + +fixUpSlowForwardCopy: +	// !!! Add length (which might be negative now) to d (implied by DI being +	// &dst[d]) so that d ends up at the right place when we jump back to the +	// top of the loop. Before we do that, though, we save DI to AX so that, if +	// length is positive, copying the remaining length bytes will write to the +	// right place. +	MOVQ DI, AX +	ADDQ CX, DI + +finishSlowForwardCopy: +	// !!! Repeat 8-byte load/stores until length <= 0. Ending with a negative +	// length means that we overrun, but as above, that will be fixed up by +	// subsequent iterations of the outermost loop. +	CMPQ CX, $0 +	JLE  loop +	MOVQ (R15), BX +	MOVQ BX, (AX) +	ADDQ $8, R15 +	ADDQ $8, AX +	SUBQ $8, CX +	JMP  finishSlowForwardCopy + +verySlowForwardCopy: +	// verySlowForwardCopy is a simple implementation of forward copy. In C +	// parlance, this is a do/while loop instead of a while loop, since we know +	// that length > 0. In Go syntax: +	// +	// for { +	//   dst[d] = dst[d - offset] +	//   d++ +	//   length-- +	//   if length == 0 { +	//     break +	//   } +	// } +	MOVB (R15), BX +	MOVB BX, (DI) +	INCQ R15 +	INCQ DI +	DECQ CX +	JNZ  verySlowForwardCopy +	JMP  loop + +// The code above handles copy tags. +// ---------------------------------------- + +end: +	// This is the end of the "for s < len(src)". +	// +	// if d != len(dst) { etc } +	CMPQ DI, R10 +	JNE  errCorrupt + +	// return 0 +	MOVQ $0, ret+48(FP) +	RET + +errCorrupt: +	// return decodeErrCodeCorrupt +	MOVQ $1, ret+48(FP) +	RET diff --git a/vendor/github.com/golang/snappy/encode.go b/vendor/github.com/golang/snappy/encode.go new file mode 100644 index 0000000..8d393e9 --- /dev/null +++ b/vendor/github.com/golang/snappy/encode.go @@ -0,0 +1,285 @@ +// Copyright 2011 The Snappy-Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package snappy + +import ( +	"encoding/binary" +	"errors" +	"io" +) + +// Encode returns the encoded form of src. The returned slice may be a sub- +// slice of dst if dst was large enough to hold the entire encoded block. +// Otherwise, a newly allocated slice will be returned. +// +// The dst and src must not overlap. It is valid to pass a nil dst. +func Encode(dst, src []byte) []byte { +	if n := MaxEncodedLen(len(src)); n < 0 { +		panic(ErrTooLarge) +	} else if len(dst) < n { +		dst = make([]byte, n) +	} + +	// The block starts with the varint-encoded length of the decompressed bytes. +	d := binary.PutUvarint(dst, uint64(len(src))) + +	for len(src) > 0 { +		p := src +		src = nil +		if len(p) > maxBlockSize { +			p, src = p[:maxBlockSize], p[maxBlockSize:] +		} +		if len(p) < minNonLiteralBlockSize { +			d += emitLiteral(dst[d:], p) +		} else { +			d += encodeBlock(dst[d:], p) +		} +	} +	return dst[:d] +} + +// inputMargin is the minimum number of extra input bytes to keep, inside +// encodeBlock's inner loop. On some architectures, this margin lets us +// implement a fast path for emitLiteral, where the copy of short (<= 16 byte) +// literals can be implemented as a single load to and store from a 16-byte +// register. That literal's actual length can be as short as 1 byte, so this +// can copy up to 15 bytes too much, but that's OK as subsequent iterations of +// the encoding loop will fix up the copy overrun, and this inputMargin ensures +// that we don't overrun the dst and src buffers. +const inputMargin = 16 - 1 + +// minNonLiteralBlockSize is the minimum size of the input to encodeBlock that +// could be encoded with a copy tag. This is the minimum with respect to the +// algorithm used by encodeBlock, not a minimum enforced by the file format. +// +// The encoded output must start with at least a 1 byte literal, as there are +// no previous bytes to copy. A minimal (1 byte) copy after that, generated +// from an emitCopy call in encodeBlock's main loop, would require at least +// another inputMargin bytes, for the reason above: we want any emitLiteral +// calls inside encodeBlock's main loop to use the fast path if possible, which +// requires being able to overrun by inputMargin bytes. Thus, +// minNonLiteralBlockSize equals 1 + 1 + inputMargin. +// +// The C++ code doesn't use this exact threshold, but it could, as discussed at +// https://groups.google.com/d/topic/snappy-compression/oGbhsdIJSJ8/discussion +// The difference between Go (2+inputMargin) and C++ (inputMargin) is purely an +// optimization. It should not affect the encoded form. This is tested by +// TestSameEncodingAsCppShortCopies. +const minNonLiteralBlockSize = 1 + 1 + inputMargin + +// MaxEncodedLen returns the maximum length of a snappy block, given its +// uncompressed length. +// +// It will return a negative value if srcLen is too large to encode. +func MaxEncodedLen(srcLen int) int { +	n := uint64(srcLen) +	if n > 0xffffffff { +		return -1 +	} +	// Compressed data can be defined as: +	//    compressed := item* literal* +	//    item       := literal* copy +	// +	// The trailing literal sequence has a space blowup of at most 62/60 +	// since a literal of length 60 needs one tag byte + one extra byte +	// for length information. +	// +	// Item blowup is trickier to measure. Suppose the "copy" op copies +	// 4 bytes of data. Because of a special check in the encoding code, +	// we produce a 4-byte copy only if the offset is < 65536. Therefore +	// the copy op takes 3 bytes to encode, and this type of item leads +	// to at most the 62/60 blowup for representing literals. +	// +	// Suppose the "copy" op copies 5 bytes of data. If the offset is big +	// enough, it will take 5 bytes to encode the copy op. Therefore the +	// worst case here is a one-byte literal followed by a five-byte copy. +	// That is, 6 bytes of input turn into 7 bytes of "compressed" data. +	// +	// This last factor dominates the blowup, so the final estimate is: +	n = 32 + n + n/6 +	if n > 0xffffffff { +		return -1 +	} +	return int(n) +} + +var errClosed = errors.New("snappy: Writer is closed") + +// NewWriter returns a new Writer that compresses to w. +// +// The Writer returned does not buffer writes. There is no need to Flush or +// Close such a Writer. +// +// Deprecated: the Writer returned is not suitable for many small writes, only +// for few large writes. Use NewBufferedWriter instead, which is efficient +// regardless of the frequency and shape of the writes, and remember to Close +// that Writer when done. +func NewWriter(w io.Writer) *Writer { +	return &Writer{ +		w:    w, +		obuf: make([]byte, obufLen), +	} +} + +// NewBufferedWriter returns a new Writer that compresses to w, using the +// framing format described at +// https://github.com/google/snappy/blob/master/framing_format.txt +// +// The Writer returned buffers writes. Users must call Close to guarantee all +// data has been forwarded to the underlying io.Writer. They may also call +// Flush zero or more times before calling Close. +func NewBufferedWriter(w io.Writer) *Writer { +	return &Writer{ +		w:    w, +		ibuf: make([]byte, 0, maxBlockSize), +		obuf: make([]byte, obufLen), +	} +} + +// Writer is an io.Writer that can write Snappy-compressed bytes. +type Writer struct { +	w   io.Writer +	err error + +	// ibuf is a buffer for the incoming (uncompressed) bytes. +	// +	// Its use is optional. For backwards compatibility, Writers created by the +	// NewWriter function have ibuf == nil, do not buffer incoming bytes, and +	// therefore do not need to be Flush'ed or Close'd. +	ibuf []byte + +	// obuf is a buffer for the outgoing (compressed) bytes. +	obuf []byte + +	// wroteStreamHeader is whether we have written the stream header. +	wroteStreamHeader bool +} + +// Reset discards the writer's state and switches the Snappy writer to write to +// w. This permits reusing a Writer rather than allocating a new one. +func (w *Writer) Reset(writer io.Writer) { +	w.w = writer +	w.err = nil +	if w.ibuf != nil { +		w.ibuf = w.ibuf[:0] +	} +	w.wroteStreamHeader = false +} + +// Write satisfies the io.Writer interface. +func (w *Writer) Write(p []byte) (nRet int, errRet error) { +	if w.ibuf == nil { +		// Do not buffer incoming bytes. This does not perform or compress well +		// if the caller of Writer.Write writes many small slices. This +		// behavior is therefore deprecated, but still supported for backwards +		// compatibility with code that doesn't explicitly Flush or Close. +		return w.write(p) +	} + +	// The remainder of this method is based on bufio.Writer.Write from the +	// standard library. + +	for len(p) > (cap(w.ibuf)-len(w.ibuf)) && w.err == nil { +		var n int +		if len(w.ibuf) == 0 { +			// Large write, empty buffer. +			// Write directly from p to avoid copy. +			n, _ = w.write(p) +		} else { +			n = copy(w.ibuf[len(w.ibuf):cap(w.ibuf)], p) +			w.ibuf = w.ibuf[:len(w.ibuf)+n] +			w.Flush() +		} +		nRet += n +		p = p[n:] +	} +	if w.err != nil { +		return nRet, w.err +	} +	n := copy(w.ibuf[len(w.ibuf):cap(w.ibuf)], p) +	w.ibuf = w.ibuf[:len(w.ibuf)+n] +	nRet += n +	return nRet, nil +} + +func (w *Writer) write(p []byte) (nRet int, errRet error) { +	if w.err != nil { +		return 0, w.err +	} +	for len(p) > 0 { +		obufStart := len(magicChunk) +		if !w.wroteStreamHeader { +			w.wroteStreamHeader = true +			copy(w.obuf, magicChunk) +			obufStart = 0 +		} + +		var uncompressed []byte +		if len(p) > maxBlockSize { +			uncompressed, p = p[:maxBlockSize], p[maxBlockSize:] +		} else { +			uncompressed, p = p, nil +		} +		checksum := crc(uncompressed) + +		// Compress the buffer, discarding the result if the improvement +		// isn't at least 12.5%. +		compressed := Encode(w.obuf[obufHeaderLen:], uncompressed) +		chunkType := uint8(chunkTypeCompressedData) +		chunkLen := 4 + len(compressed) +		obufEnd := obufHeaderLen + len(compressed) +		if len(compressed) >= len(uncompressed)-len(uncompressed)/8 { +			chunkType = chunkTypeUncompressedData +			chunkLen = 4 + len(uncompressed) +			obufEnd = obufHeaderLen +		} + +		// Fill in the per-chunk header that comes before the body. +		w.obuf[len(magicChunk)+0] = chunkType +		w.obuf[len(magicChunk)+1] = uint8(chunkLen >> 0) +		w.obuf[len(magicChunk)+2] = uint8(chunkLen >> 8) +		w.obuf[len(magicChunk)+3] = uint8(chunkLen >> 16) +		w.obuf[len(magicChunk)+4] = uint8(checksum >> 0) +		w.obuf[len(magicChunk)+5] = uint8(checksum >> 8) +		w.obuf[len(magicChunk)+6] = uint8(checksum >> 16) +		w.obuf[len(magicChunk)+7] = uint8(checksum >> 24) + +		if _, err := w.w.Write(w.obuf[obufStart:obufEnd]); err != nil { +			w.err = err +			return nRet, err +		} +		if chunkType == chunkTypeUncompressedData { +			if _, err := w.w.Write(uncompressed); err != nil { +				w.err = err +				return nRet, err +			} +		} +		nRet += len(uncompressed) +	} +	return nRet, nil +} + +// Flush flushes the Writer to its underlying io.Writer. +func (w *Writer) Flush() error { +	if w.err != nil { +		return w.err +	} +	if len(w.ibuf) == 0 { +		return nil +	} +	w.write(w.ibuf) +	w.ibuf = w.ibuf[:0] +	return w.err +} + +// Close calls Flush and then closes the Writer. +func (w *Writer) Close() error { +	w.Flush() +	ret := w.err +	if w.err == nil { +		w.err = errClosed +	} +	return ret +} diff --git a/vendor/github.com/golang/snappy/encode_amd64.go b/vendor/github.com/golang/snappy/encode_amd64.go new file mode 100644 index 0000000..150d91b --- /dev/null +++ b/vendor/github.com/golang/snappy/encode_amd64.go @@ -0,0 +1,29 @@ +// Copyright 2016 The Snappy-Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !appengine +// +build gc +// +build !noasm + +package snappy + +// emitLiteral has the same semantics as in encode_other.go. +// +//go:noescape +func emitLiteral(dst, lit []byte) int + +// emitCopy has the same semantics as in encode_other.go. +// +//go:noescape +func emitCopy(dst []byte, offset, length int) int + +// extendMatch has the same semantics as in encode_other.go. +// +//go:noescape +func extendMatch(src []byte, i, j int) int + +// encodeBlock has the same semantics as in encode_other.go. +// +//go:noescape +func encodeBlock(dst, src []byte) (d int) diff --git a/vendor/github.com/golang/snappy/encode_amd64.s b/vendor/github.com/golang/snappy/encode_amd64.s new file mode 100644 index 0000000..adfd979 --- /dev/null +++ b/vendor/github.com/golang/snappy/encode_amd64.s @@ -0,0 +1,730 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !appengine +// +build gc +// +build !noasm + +#include "textflag.h" + +// The XXX lines assemble on Go 1.4, 1.5 and 1.7, but not 1.6, due to a +// Go toolchain regression. See https://github.com/golang/go/issues/15426 and +// https://github.com/golang/snappy/issues/29 +// +// As a workaround, the package was built with a known good assembler, and +// those instructions were disassembled by "objdump -d" to yield the +//	4e 0f b7 7c 5c 78       movzwq 0x78(%rsp,%r11,2),%r15 +// style comments, in AT&T asm syntax. Note that rsp here is a physical +// register, not Go/asm's SP pseudo-register (see https://golang.org/doc/asm). +// The instructions were then encoded as "BYTE $0x.." sequences, which assemble +// fine on Go 1.6. + +// The asm code generally follows the pure Go code in encode_other.go, except +// where marked with a "!!!". + +// ---------------------------------------------------------------------------- + +// func emitLiteral(dst, lit []byte) int +// +// All local variables fit into registers. The register allocation: +//	- AX	len(lit) +//	- BX	n +//	- DX	return value +//	- DI	&dst[i] +//	- R10	&lit[0] +// +// The 24 bytes of stack space is to call runtime·memmove. +// +// The unusual register allocation of local variables, such as R10 for the +// source pointer, matches the allocation used at the call site in encodeBlock, +// which makes it easier to manually inline this function. +TEXT ·emitLiteral(SB), NOSPLIT, $24-56 +	MOVQ dst_base+0(FP), DI +	MOVQ lit_base+24(FP), R10 +	MOVQ lit_len+32(FP), AX +	MOVQ AX, DX +	MOVL AX, BX +	SUBL $1, BX + +	CMPL BX, $60 +	JLT  oneByte +	CMPL BX, $256 +	JLT  twoBytes + +threeBytes: +	MOVB $0xf4, 0(DI) +	MOVW BX, 1(DI) +	ADDQ $3, DI +	ADDQ $3, DX +	JMP  memmove + +twoBytes: +	MOVB $0xf0, 0(DI) +	MOVB BX, 1(DI) +	ADDQ $2, DI +	ADDQ $2, DX +	JMP  memmove + +oneByte: +	SHLB $2, BX +	MOVB BX, 0(DI) +	ADDQ $1, DI +	ADDQ $1, DX + +memmove: +	MOVQ DX, ret+48(FP) + +	// copy(dst[i:], lit) +	// +	// This means calling runtime·memmove(&dst[i], &lit[0], len(lit)), so we push +	// DI, R10 and AX as arguments. +	MOVQ DI, 0(SP) +	MOVQ R10, 8(SP) +	MOVQ AX, 16(SP) +	CALL runtime·memmove(SB) +	RET + +// ---------------------------------------------------------------------------- + +// func emitCopy(dst []byte, offset, length int) int +// +// All local variables fit into registers. The register allocation: +//	- AX	length +//	- SI	&dst[0] +//	- DI	&dst[i] +//	- R11	offset +// +// The unusual register allocation of local variables, such as R11 for the +// offset, matches the allocation used at the call site in encodeBlock, which +// makes it easier to manually inline this function. +TEXT ·emitCopy(SB), NOSPLIT, $0-48 +	MOVQ dst_base+0(FP), DI +	MOVQ DI, SI +	MOVQ offset+24(FP), R11 +	MOVQ length+32(FP), AX + +loop0: +	// for length >= 68 { etc } +	CMPL AX, $68 +	JLT  step1 + +	// Emit a length 64 copy, encoded as 3 bytes. +	MOVB $0xfe, 0(DI) +	MOVW R11, 1(DI) +	ADDQ $3, DI +	SUBL $64, AX +	JMP  loop0 + +step1: +	// if length > 64 { etc } +	CMPL AX, $64 +	JLE  step2 + +	// Emit a length 60 copy, encoded as 3 bytes. +	MOVB $0xee, 0(DI) +	MOVW R11, 1(DI) +	ADDQ $3, DI +	SUBL $60, AX + +step2: +	// if length >= 12 || offset >= 2048 { goto step3 } +	CMPL AX, $12 +	JGE  step3 +	CMPL R11, $2048 +	JGE  step3 + +	// Emit the remaining copy, encoded as 2 bytes. +	MOVB R11, 1(DI) +	SHRL $8, R11 +	SHLB $5, R11 +	SUBB $4, AX +	SHLB $2, AX +	ORB  AX, R11 +	ORB  $1, R11 +	MOVB R11, 0(DI) +	ADDQ $2, DI + +	// Return the number of bytes written. +	SUBQ SI, DI +	MOVQ DI, ret+40(FP) +	RET + +step3: +	// Emit the remaining copy, encoded as 3 bytes. +	SUBL $1, AX +	SHLB $2, AX +	ORB  $2, AX +	MOVB AX, 0(DI) +	MOVW R11, 1(DI) +	ADDQ $3, DI + +	// Return the number of bytes written. +	SUBQ SI, DI +	MOVQ DI, ret+40(FP) +	RET + +// ---------------------------------------------------------------------------- + +// func extendMatch(src []byte, i, j int) int +// +// All local variables fit into registers. The register allocation: +//	- DX	&src[0] +//	- SI	&src[j] +//	- R13	&src[len(src) - 8] +//	- R14	&src[len(src)] +//	- R15	&src[i] +// +// The unusual register allocation of local variables, such as R15 for a source +// pointer, matches the allocation used at the call site in encodeBlock, which +// makes it easier to manually inline this function. +TEXT ·extendMatch(SB), NOSPLIT, $0-48 +	MOVQ src_base+0(FP), DX +	MOVQ src_len+8(FP), R14 +	MOVQ i+24(FP), R15 +	MOVQ j+32(FP), SI +	ADDQ DX, R14 +	ADDQ DX, R15 +	ADDQ DX, SI +	MOVQ R14, R13 +	SUBQ $8, R13 + +cmp8: +	// As long as we are 8 or more bytes before the end of src, we can load and +	// compare 8 bytes at a time. If those 8 bytes are equal, repeat. +	CMPQ SI, R13 +	JA   cmp1 +	MOVQ (R15), AX +	MOVQ (SI), BX +	CMPQ AX, BX +	JNE  bsf +	ADDQ $8, R15 +	ADDQ $8, SI +	JMP  cmp8 + +bsf: +	// If those 8 bytes were not equal, XOR the two 8 byte values, and return +	// the index of the first byte that differs. The BSF instruction finds the +	// least significant 1 bit, the amd64 architecture is little-endian, and +	// the shift by 3 converts a bit index to a byte index. +	XORQ AX, BX +	BSFQ BX, BX +	SHRQ $3, BX +	ADDQ BX, SI + +	// Convert from &src[ret] to ret. +	SUBQ DX, SI +	MOVQ SI, ret+40(FP) +	RET + +cmp1: +	// In src's tail, compare 1 byte at a time. +	CMPQ SI, R14 +	JAE  extendMatchEnd +	MOVB (R15), AX +	MOVB (SI), BX +	CMPB AX, BX +	JNE  extendMatchEnd +	ADDQ $1, R15 +	ADDQ $1, SI +	JMP  cmp1 + +extendMatchEnd: +	// Convert from &src[ret] to ret. +	SUBQ DX, SI +	MOVQ SI, ret+40(FP) +	RET + +// ---------------------------------------------------------------------------- + +// func encodeBlock(dst, src []byte) (d int) +// +// All local variables fit into registers, other than "var table". The register +// allocation: +//	- AX	.	. +//	- BX	.	. +//	- CX	56	shift (note that amd64 shifts by non-immediates must use CX). +//	- DX	64	&src[0], tableSize +//	- SI	72	&src[s] +//	- DI	80	&dst[d] +//	- R9	88	sLimit +//	- R10	.	&src[nextEmit] +//	- R11	96	prevHash, currHash, nextHash, offset +//	- R12	104	&src[base], skip +//	- R13	.	&src[nextS], &src[len(src) - 8] +//	- R14	.	len(src), bytesBetweenHashLookups, &src[len(src)], x +//	- R15	112	candidate +// +// The second column (56, 64, etc) is the stack offset to spill the registers +// when calling other functions. We could pack this slightly tighter, but it's +// simpler to have a dedicated spill map independent of the function called. +// +// "var table [maxTableSize]uint16" takes up 32768 bytes of stack space. An +// extra 56 bytes, to call other functions, and an extra 64 bytes, to spill +// local variables (registers) during calls gives 32768 + 56 + 64 = 32888. +TEXT ·encodeBlock(SB), 0, $32888-56 +	MOVQ dst_base+0(FP), DI +	MOVQ src_base+24(FP), SI +	MOVQ src_len+32(FP), R14 + +	// shift, tableSize := uint32(32-8), 1<<8 +	MOVQ $24, CX +	MOVQ $256, DX + +calcShift: +	// for ; tableSize < maxTableSize && tableSize < len(src); tableSize *= 2 { +	//	shift-- +	// } +	CMPQ DX, $16384 +	JGE  varTable +	CMPQ DX, R14 +	JGE  varTable +	SUBQ $1, CX +	SHLQ $1, DX +	JMP  calcShift + +varTable: +	// var table [maxTableSize]uint16 +	// +	// In the asm code, unlike the Go code, we can zero-initialize only the +	// first tableSize elements. Each uint16 element is 2 bytes and each MOVOU +	// writes 16 bytes, so we can do only tableSize/8 writes instead of the +	// 2048 writes that would zero-initialize all of table's 32768 bytes. +	SHRQ $3, DX +	LEAQ table-32768(SP), BX +	PXOR X0, X0 + +memclr: +	MOVOU X0, 0(BX) +	ADDQ  $16, BX +	SUBQ  $1, DX +	JNZ   memclr + +	// !!! DX = &src[0] +	MOVQ SI, DX + +	// sLimit := len(src) - inputMargin +	MOVQ R14, R9 +	SUBQ $15, R9 + +	// !!! Pre-emptively spill CX, DX and R9 to the stack. Their values don't +	// change for the rest of the function. +	MOVQ CX, 56(SP) +	MOVQ DX, 64(SP) +	MOVQ R9, 88(SP) + +	// nextEmit := 0 +	MOVQ DX, R10 + +	// s := 1 +	ADDQ $1, SI + +	// nextHash := hash(load32(src, s), shift) +	MOVL  0(SI), R11 +	IMULL $0x1e35a7bd, R11 +	SHRL  CX, R11 + +outer: +	// for { etc } + +	// skip := 32 +	MOVQ $32, R12 + +	// nextS := s +	MOVQ SI, R13 + +	// candidate := 0 +	MOVQ $0, R15 + +inner0: +	// for { etc } + +	// s := nextS +	MOVQ R13, SI + +	// bytesBetweenHashLookups := skip >> 5 +	MOVQ R12, R14 +	SHRQ $5, R14 + +	// nextS = s + bytesBetweenHashLookups +	ADDQ R14, R13 + +	// skip += bytesBetweenHashLookups +	ADDQ R14, R12 + +	// if nextS > sLimit { goto emitRemainder } +	MOVQ R13, AX +	SUBQ DX, AX +	CMPQ AX, R9 +	JA   emitRemainder + +	// candidate = int(table[nextHash]) +	// XXX: MOVWQZX table-32768(SP)(R11*2), R15 +	// XXX: 4e 0f b7 7c 5c 78       movzwq 0x78(%rsp,%r11,2),%r15 +	BYTE $0x4e +	BYTE $0x0f +	BYTE $0xb7 +	BYTE $0x7c +	BYTE $0x5c +	BYTE $0x78 + +	// table[nextHash] = uint16(s) +	MOVQ SI, AX +	SUBQ DX, AX + +	// XXX: MOVW AX, table-32768(SP)(R11*2) +	// XXX: 66 42 89 44 5c 78       mov    %ax,0x78(%rsp,%r11,2) +	BYTE $0x66 +	BYTE $0x42 +	BYTE $0x89 +	BYTE $0x44 +	BYTE $0x5c +	BYTE $0x78 + +	// nextHash = hash(load32(src, nextS), shift) +	MOVL  0(R13), R11 +	IMULL $0x1e35a7bd, R11 +	SHRL  CX, R11 + +	// if load32(src, s) != load32(src, candidate) { continue } break +	MOVL 0(SI), AX +	MOVL (DX)(R15*1), BX +	CMPL AX, BX +	JNE  inner0 + +fourByteMatch: +	// As per the encode_other.go code: +	// +	// A 4-byte match has been found. We'll later see etc. + +	// !!! Jump to a fast path for short (<= 16 byte) literals. See the comment +	// on inputMargin in encode.go. +	MOVQ SI, AX +	SUBQ R10, AX +	CMPQ AX, $16 +	JLE  emitLiteralFastPath + +	// ---------------------------------------- +	// Begin inline of the emitLiteral call. +	// +	// d += emitLiteral(dst[d:], src[nextEmit:s]) + +	MOVL AX, BX +	SUBL $1, BX + +	CMPL BX, $60 +	JLT  inlineEmitLiteralOneByte +	CMPL BX, $256 +	JLT  inlineEmitLiteralTwoBytes + +inlineEmitLiteralThreeBytes: +	MOVB $0xf4, 0(DI) +	MOVW BX, 1(DI) +	ADDQ $3, DI +	JMP  inlineEmitLiteralMemmove + +inlineEmitLiteralTwoBytes: +	MOVB $0xf0, 0(DI) +	MOVB BX, 1(DI) +	ADDQ $2, DI +	JMP  inlineEmitLiteralMemmove + +inlineEmitLiteralOneByte: +	SHLB $2, BX +	MOVB BX, 0(DI) +	ADDQ $1, DI + +inlineEmitLiteralMemmove: +	// Spill local variables (registers) onto the stack; call; unspill. +	// +	// copy(dst[i:], lit) +	// +	// This means calling runtime·memmove(&dst[i], &lit[0], len(lit)), so we push +	// DI, R10 and AX as arguments. +	MOVQ DI, 0(SP) +	MOVQ R10, 8(SP) +	MOVQ AX, 16(SP) +	ADDQ AX, DI              // Finish the "d +=" part of "d += emitLiteral(etc)". +	MOVQ SI, 72(SP) +	MOVQ DI, 80(SP) +	MOVQ R15, 112(SP) +	CALL runtime·memmove(SB) +	MOVQ 56(SP), CX +	MOVQ 64(SP), DX +	MOVQ 72(SP), SI +	MOVQ 80(SP), DI +	MOVQ 88(SP), R9 +	MOVQ 112(SP), R15 +	JMP  inner1 + +inlineEmitLiteralEnd: +	// End inline of the emitLiteral call. +	// ---------------------------------------- + +emitLiteralFastPath: +	// !!! Emit the 1-byte encoding "uint8(len(lit)-1)<<2". +	MOVB AX, BX +	SUBB $1, BX +	SHLB $2, BX +	MOVB BX, (DI) +	ADDQ $1, DI + +	// !!! Implement the copy from lit to dst as a 16-byte load and store. +	// (Encode's documentation says that dst and src must not overlap.) +	// +	// This always copies 16 bytes, instead of only len(lit) bytes, but that's +	// OK. Subsequent iterations will fix up the overrun. +	// +	// Note that on amd64, it is legal and cheap to issue unaligned 8-byte or +	// 16-byte loads and stores. This technique probably wouldn't be as +	// effective on architectures that are fussier about alignment. +	MOVOU 0(R10), X0 +	MOVOU X0, 0(DI) +	ADDQ  AX, DI + +inner1: +	// for { etc } + +	// base := s +	MOVQ SI, R12 + +	// !!! offset := base - candidate +	MOVQ R12, R11 +	SUBQ R15, R11 +	SUBQ DX, R11 + +	// ---------------------------------------- +	// Begin inline of the extendMatch call. +	// +	// s = extendMatch(src, candidate+4, s+4) + +	// !!! R14 = &src[len(src)] +	MOVQ src_len+32(FP), R14 +	ADDQ DX, R14 + +	// !!! R13 = &src[len(src) - 8] +	MOVQ R14, R13 +	SUBQ $8, R13 + +	// !!! R15 = &src[candidate + 4] +	ADDQ $4, R15 +	ADDQ DX, R15 + +	// !!! s += 4 +	ADDQ $4, SI + +inlineExtendMatchCmp8: +	// As long as we are 8 or more bytes before the end of src, we can load and +	// compare 8 bytes at a time. If those 8 bytes are equal, repeat. +	CMPQ SI, R13 +	JA   inlineExtendMatchCmp1 +	MOVQ (R15), AX +	MOVQ (SI), BX +	CMPQ AX, BX +	JNE  inlineExtendMatchBSF +	ADDQ $8, R15 +	ADDQ $8, SI +	JMP  inlineExtendMatchCmp8 + +inlineExtendMatchBSF: +	// If those 8 bytes were not equal, XOR the two 8 byte values, and return +	// the index of the first byte that differs. The BSF instruction finds the +	// least significant 1 bit, the amd64 architecture is little-endian, and +	// the shift by 3 converts a bit index to a byte index. +	XORQ AX, BX +	BSFQ BX, BX +	SHRQ $3, BX +	ADDQ BX, SI +	JMP  inlineExtendMatchEnd + +inlineExtendMatchCmp1: +	// In src's tail, compare 1 byte at a time. +	CMPQ SI, R14 +	JAE  inlineExtendMatchEnd +	MOVB (R15), AX +	MOVB (SI), BX +	CMPB AX, BX +	JNE  inlineExtendMatchEnd +	ADDQ $1, R15 +	ADDQ $1, SI +	JMP  inlineExtendMatchCmp1 + +inlineExtendMatchEnd: +	// End inline of the extendMatch call. +	// ---------------------------------------- + +	// ---------------------------------------- +	// Begin inline of the emitCopy call. +	// +	// d += emitCopy(dst[d:], base-candidate, s-base) + +	// !!! length := s - base +	MOVQ SI, AX +	SUBQ R12, AX + +inlineEmitCopyLoop0: +	// for length >= 68 { etc } +	CMPL AX, $68 +	JLT  inlineEmitCopyStep1 + +	// Emit a length 64 copy, encoded as 3 bytes. +	MOVB $0xfe, 0(DI) +	MOVW R11, 1(DI) +	ADDQ $3, DI +	SUBL $64, AX +	JMP  inlineEmitCopyLoop0 + +inlineEmitCopyStep1: +	// if length > 64 { etc } +	CMPL AX, $64 +	JLE  inlineEmitCopyStep2 + +	// Emit a length 60 copy, encoded as 3 bytes. +	MOVB $0xee, 0(DI) +	MOVW R11, 1(DI) +	ADDQ $3, DI +	SUBL $60, AX + +inlineEmitCopyStep2: +	// if length >= 12 || offset >= 2048 { goto inlineEmitCopyStep3 } +	CMPL AX, $12 +	JGE  inlineEmitCopyStep3 +	CMPL R11, $2048 +	JGE  inlineEmitCopyStep3 + +	// Emit the remaining copy, encoded as 2 bytes. +	MOVB R11, 1(DI) +	SHRL $8, R11 +	SHLB $5, R11 +	SUBB $4, AX +	SHLB $2, AX +	ORB  AX, R11 +	ORB  $1, R11 +	MOVB R11, 0(DI) +	ADDQ $2, DI +	JMP  inlineEmitCopyEnd + +inlineEmitCopyStep3: +	// Emit the remaining copy, encoded as 3 bytes. +	SUBL $1, AX +	SHLB $2, AX +	ORB  $2, AX +	MOVB AX, 0(DI) +	MOVW R11, 1(DI) +	ADDQ $3, DI + +inlineEmitCopyEnd: +	// End inline of the emitCopy call. +	// ---------------------------------------- + +	// nextEmit = s +	MOVQ SI, R10 + +	// if s >= sLimit { goto emitRemainder } +	MOVQ SI, AX +	SUBQ DX, AX +	CMPQ AX, R9 +	JAE  emitRemainder + +	// As per the encode_other.go code: +	// +	// We could immediately etc. + +	// x := load64(src, s-1) +	MOVQ -1(SI), R14 + +	// prevHash := hash(uint32(x>>0), shift) +	MOVL  R14, R11 +	IMULL $0x1e35a7bd, R11 +	SHRL  CX, R11 + +	// table[prevHash] = uint16(s-1) +	MOVQ SI, AX +	SUBQ DX, AX +	SUBQ $1, AX + +	// XXX: MOVW AX, table-32768(SP)(R11*2) +	// XXX: 66 42 89 44 5c 78       mov    %ax,0x78(%rsp,%r11,2) +	BYTE $0x66 +	BYTE $0x42 +	BYTE $0x89 +	BYTE $0x44 +	BYTE $0x5c +	BYTE $0x78 + +	// currHash := hash(uint32(x>>8), shift) +	SHRQ  $8, R14 +	MOVL  R14, R11 +	IMULL $0x1e35a7bd, R11 +	SHRL  CX, R11 + +	// candidate = int(table[currHash]) +	// XXX: MOVWQZX table-32768(SP)(R11*2), R15 +	// XXX: 4e 0f b7 7c 5c 78       movzwq 0x78(%rsp,%r11,2),%r15 +	BYTE $0x4e +	BYTE $0x0f +	BYTE $0xb7 +	BYTE $0x7c +	BYTE $0x5c +	BYTE $0x78 + +	// table[currHash] = uint16(s) +	ADDQ $1, AX + +	// XXX: MOVW AX, table-32768(SP)(R11*2) +	// XXX: 66 42 89 44 5c 78       mov    %ax,0x78(%rsp,%r11,2) +	BYTE $0x66 +	BYTE $0x42 +	BYTE $0x89 +	BYTE $0x44 +	BYTE $0x5c +	BYTE $0x78 + +	// if uint32(x>>8) == load32(src, candidate) { continue } +	MOVL (DX)(R15*1), BX +	CMPL R14, BX +	JEQ  inner1 + +	// nextHash = hash(uint32(x>>16), shift) +	SHRQ  $8, R14 +	MOVL  R14, R11 +	IMULL $0x1e35a7bd, R11 +	SHRL  CX, R11 + +	// s++ +	ADDQ $1, SI + +	// break out of the inner1 for loop, i.e. continue the outer loop. +	JMP outer + +emitRemainder: +	// if nextEmit < len(src) { etc } +	MOVQ src_len+32(FP), AX +	ADDQ DX, AX +	CMPQ R10, AX +	JEQ  encodeBlockEnd + +	// d += emitLiteral(dst[d:], src[nextEmit:]) +	// +	// Push args. +	MOVQ DI, 0(SP) +	MOVQ $0, 8(SP)   // Unnecessary, as the callee ignores it, but conservative. +	MOVQ $0, 16(SP)  // Unnecessary, as the callee ignores it, but conservative. +	MOVQ R10, 24(SP) +	SUBQ R10, AX +	MOVQ AX, 32(SP) +	MOVQ AX, 40(SP)  // Unnecessary, as the callee ignores it, but conservative. + +	// Spill local variables (registers) onto the stack; call; unspill. +	MOVQ DI, 80(SP) +	CALL ·emitLiteral(SB) +	MOVQ 80(SP), DI + +	// Finish the "d +=" part of "d += emitLiteral(etc)". +	ADDQ 48(SP), DI + +encodeBlockEnd: +	MOVQ dst_base+0(FP), AX +	SUBQ AX, DI +	MOVQ DI, d+48(FP) +	RET diff --git a/vendor/github.com/golang/snappy/snappy.go b/vendor/github.com/golang/snappy/snappy.go new file mode 100644 index 0000000..0cf5e37 --- /dev/null +++ b/vendor/github.com/golang/snappy/snappy.go @@ -0,0 +1,87 @@ +// Copyright 2011 The Snappy-Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package snappy implements the snappy block-based compression format. +// It aims for very high speeds and reasonable compression. +// +// The C++ snappy implementation is at https://github.com/google/snappy +package snappy // import "github.com/golang/snappy" + +import ( +	"hash/crc32" +) + +/* +Each encoded block begins with the varint-encoded length of the decoded data, +followed by a sequence of chunks. Chunks begin and end on byte boundaries. The +first byte of each chunk is broken into its 2 least and 6 most significant bits +called l and m: l ranges in [0, 4) and m ranges in [0, 64). l is the chunk tag. +Zero means a literal tag. All other values mean a copy tag. + +For literal tags: +  - If m < 60, the next 1 + m bytes are literal bytes. +  - Otherwise, let n be the little-endian unsigned integer denoted by the next +    m - 59 bytes. The next 1 + n bytes after that are literal bytes. + +For copy tags, length bytes are copied from offset bytes ago, in the style of +Lempel-Ziv compression algorithms. In particular: +  - For l == 1, the offset ranges in [0, 1<<11) and the length in [4, 12). +    The length is 4 + the low 3 bits of m. The high 3 bits of m form bits 8-10 +    of the offset. The next byte is bits 0-7 of the offset. +  - For l == 2, the offset ranges in [0, 1<<16) and the length in [1, 65). +    The length is 1 + m. The offset is the little-endian unsigned integer +    denoted by the next 2 bytes. +  - For l == 3, this tag is a legacy format that is no longer issued by most +    encoders. Nonetheless, the offset ranges in [0, 1<<32) and the length in +    [1, 65). The length is 1 + m. The offset is the little-endian unsigned +    integer denoted by the next 4 bytes. +*/ +const ( +	tagLiteral = 0x00 +	tagCopy1   = 0x01 +	tagCopy2   = 0x02 +	tagCopy4   = 0x03 +) + +const ( +	checksumSize    = 4 +	chunkHeaderSize = 4 +	magicChunk      = "\xff\x06\x00\x00" + magicBody +	magicBody       = "sNaPpY" + +	// maxBlockSize is the maximum size of the input to encodeBlock. It is not +	// part of the wire format per se, but some parts of the encoder assume +	// that an offset fits into a uint16. +	// +	// Also, for the framing format (Writer type instead of Encode function), +	// https://github.com/google/snappy/blob/master/framing_format.txt says +	// that "the uncompressed data in a chunk must be no longer than 65536 +	// bytes". +	maxBlockSize = 65536 + +	// maxEncodedLenOfMaxBlockSize equals MaxEncodedLen(maxBlockSize), but is +	// hard coded to be a const instead of a variable, so that obufLen can also +	// be a const. Their equivalence is confirmed by +	// TestMaxEncodedLenOfMaxBlockSize. +	maxEncodedLenOfMaxBlockSize = 76490 + +	obufHeaderLen = len(magicChunk) + checksumSize + chunkHeaderSize +	obufLen       = obufHeaderLen + maxEncodedLenOfMaxBlockSize +) + +const ( +	chunkTypeCompressedData   = 0x00 +	chunkTypeUncompressedData = 0x01 +	chunkTypePadding          = 0xfe +	chunkTypeStreamIdentifier = 0xff +) + +var crcTable = crc32.MakeTable(crc32.Castagnoli) + +// crc implements the checksum specified in section 3 of +// https://github.com/google/snappy/blob/master/framing_format.txt +func crc(b []byte) uint32 { +	c := crc32.Update(0, crcTable, b) +	return uint32(c>>15|c<<17) + 0xa282ead8 +}  | 
