From 11de0a6409ecb25bad49b04f22492d71c756ecce Mon Sep 17 00:00:00 2001 From: Lasse Folger Date: Wed, 21 Feb 2024 16:09:10 +0100 Subject: [PATCH] all: add editions support for extensions Before this change the implementation would ignore editions options set on extension declarations. This change also add much more coverage for valid messages. Change-Id: I0e7029b1430a39859cdd4a93667ac20c7e0ff20e Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/565396 LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Stapelberg Auto-Submit: Lasse Folger --- internal/filedesc/desc.go | 9 +- internal/filedesc/desc_lazy.go | 14 + internal/testprotos/testeditions/test.pb.go | 1252 +++++++++++++++---- internal/testprotos/testeditions/test.proto | 75 ++ proto/testmessages_test.go | 196 ++- 5 files changed, 1279 insertions(+), 267 deletions(-) diff --git a/internal/filedesc/desc.go b/internal/filedesc/desc.go index 1da75cd29..d9d080a0a 100644 --- a/internal/filedesc/desc.go +++ b/internal/filedesc/desc.go @@ -420,10 +420,11 @@ type ( L2 *ExtensionL2 // protected by fileDesc.once } ExtensionL1 struct { - Number protoreflect.FieldNumber - Extendee protoreflect.MessageDescriptor - Cardinality protoreflect.Cardinality - Kind protoreflect.Kind + Number protoreflect.FieldNumber + Extendee protoreflect.MessageDescriptor + Cardinality protoreflect.Cardinality + Kind protoreflect.Kind + EditionFeatures EditionFeatures } ExtensionL2 struct { Options func() protoreflect.ProtoMessage diff --git a/internal/filedesc/desc_lazy.go b/internal/filedesc/desc_lazy.go index bf5d2e279..84a14d563 100644 --- a/internal/filedesc/desc_lazy.go +++ b/internal/filedesc/desc_lazy.go @@ -556,6 +556,7 @@ func (od *Oneof) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd protoref func (xd *Extension) unmarshalFull(b []byte, sb *strs.Builder) { var rawTypeName []byte var rawOptions []byte + xd.L1.EditionFeatures = featuresFromParentDesc(xd.L1.Extendee) xd.L2 = new(ExtensionL2) for len(b) > 0 { num, typ, n := protowire.ConsumeTag(b) @@ -587,6 +588,12 @@ func (xd *Extension) unmarshalFull(b []byte, sb *strs.Builder) { b = b[m:] } } + if xd.Syntax() == protoreflect.Editions && xd.L1.Kind == protoreflect.MessageKind && xd.L1.EditionFeatures.IsDelimitedEncoded { + xd.L1.Kind = protoreflect.GroupKind + } + if xd.Syntax() == protoreflect.Editions && xd.L1.EditionFeatures.IsLegacyRequired { + xd.L1.Cardinality = protoreflect.Required + } if rawTypeName != nil { name := makeFullName(sb, rawTypeName) switch xd.L1.Kind { @@ -611,6 +618,13 @@ func (xd *Extension) unmarshalOptions(b []byte) { case genid.FieldOptions_Packed_field_number: xd.L2.IsPacked = protowire.DecodeBool(v) } + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case genid.FieldOptions_Features_field_number: + xd.L1.EditionFeatures = unmarshalFeatureSet(v, xd.L1.EditionFeatures) + } default: m := protowire.ConsumeFieldValue(num, typ, b) b = b[m:] diff --git a/internal/testprotos/testeditions/test.pb.go b/internal/testprotos/testeditions/test.pb.go index 4888f8772..a5322da8f 100644 --- a/internal/testprotos/testeditions/test.pb.go +++ b/internal/testprotos/testeditions/test.pb.go @@ -224,6 +224,7 @@ type TestAllTypes struct { // *TestAllTypes_OneofFloat // *TestAllTypes_OneofDouble // *TestAllTypes_OneofEnum + // *TestAllTypes_Oneofgroup OneofField isTestAllTypes_OneofField `protobuf_oneof:"oneof_field"` // A oneof with exactly one field. // @@ -983,6 +984,13 @@ func (x *TestAllTypes) GetOneofEnum() TestAllTypes_NestedEnum { return TestAllTypes_FOO } +func (x *TestAllTypes) GetOneofgroup() *TestAllTypes_OneofGroup { + if x, ok := x.GetOneofField().(*TestAllTypes_Oneofgroup); ok { + return x.Oneofgroup + } + return nil +} + func (m *TestAllTypes) GetOneofOptional() isTestAllTypes_OneofOptional { if m != nil { return m.OneofOptional @@ -1037,6 +1045,10 @@ type TestAllTypes_OneofEnum struct { OneofEnum TestAllTypes_NestedEnum `protobuf:"varint,119,opt,name=oneof_enum,json=oneofEnum,enum=goproto.proto.testeditions.TestAllTypes_NestedEnum,oneof"` } +type TestAllTypes_Oneofgroup struct { + Oneofgroup *TestAllTypes_OneofGroup `protobuf:"group,121,opt,name=OneofGroup,json=oneofgroup,oneof"` +} + func (*TestAllTypes_OneofUint32) isTestAllTypes_OneofField() {} func (*TestAllTypes_OneofNestedMessage) isTestAllTypes_OneofField() {} @@ -1055,6 +1067,8 @@ func (*TestAllTypes_OneofDouble) isTestAllTypes_OneofField() {} func (*TestAllTypes_OneofEnum) isTestAllTypes_OneofField() {} +func (*TestAllTypes_Oneofgroup) isTestAllTypes_OneofField() {} + type isTestAllTypes_OneofOptional interface { isTestAllTypes_OneofOptional() } @@ -1258,6 +1272,251 @@ type TestRequiredForeign_OneofMessage struct { func (*TestRequiredForeign_OneofMessage) isTestRequiredForeign_OneofField() {} +type TestRequiredGroupFields struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Optionalgroup *TestRequiredGroupFields_OptionalGroup `protobuf:"group,1,opt,name=OptionalGroup,json=optionalgroup" json:"optionalgroup,omitempty"` + Repeatedgroup []*TestRequiredGroupFields_RepeatedGroup `protobuf:"group,3,rep,name=RepeatedGroup,json=repeatedgroup" json:"repeatedgroup,omitempty"` +} + +func (x *TestRequiredGroupFields) Reset() { + *x = TestRequiredGroupFields{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_testprotos_testeditions_test_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TestRequiredGroupFields) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TestRequiredGroupFields) ProtoMessage() {} + +func (x *TestRequiredGroupFields) ProtoReflect() protoreflect.Message { + mi := &file_internal_testprotos_testeditions_test_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TestRequiredGroupFields.ProtoReflect.Descriptor instead. +func (*TestRequiredGroupFields) Descriptor() ([]byte, []int) { + return file_internal_testprotos_testeditions_test_proto_rawDescGZIP(), []int{4} +} + +func (x *TestRequiredGroupFields) GetOptionalgroup() *TestRequiredGroupFields_OptionalGroup { + if x != nil { + return x.Optionalgroup + } + return nil +} + +func (x *TestRequiredGroupFields) GetRepeatedgroup() []*TestRequiredGroupFields_RepeatedGroup { + if x != nil { + return x.Repeatedgroup + } + return nil +} + +type TestPackedTypes struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + PackedInt32 []int32 `protobuf:"varint,90,rep,packed,name=packed_int32,json=packedInt32" json:"packed_int32,omitempty"` + PackedInt64 []int64 `protobuf:"varint,91,rep,packed,name=packed_int64,json=packedInt64" json:"packed_int64,omitempty"` + PackedUint32 []uint32 `protobuf:"varint,92,rep,packed,name=packed_uint32,json=packedUint32" json:"packed_uint32,omitempty"` + PackedUint64 []uint64 `protobuf:"varint,93,rep,packed,name=packed_uint64,json=packedUint64" json:"packed_uint64,omitempty"` + PackedSint32 []int32 `protobuf:"zigzag32,94,rep,packed,name=packed_sint32,json=packedSint32" json:"packed_sint32,omitempty"` + PackedSint64 []int64 `protobuf:"zigzag64,95,rep,packed,name=packed_sint64,json=packedSint64" json:"packed_sint64,omitempty"` + PackedFixed32 []uint32 `protobuf:"fixed32,96,rep,packed,name=packed_fixed32,json=packedFixed32" json:"packed_fixed32,omitempty"` + PackedFixed64 []uint64 `protobuf:"fixed64,97,rep,packed,name=packed_fixed64,json=packedFixed64" json:"packed_fixed64,omitempty"` + PackedSfixed32 []int32 `protobuf:"fixed32,98,rep,packed,name=packed_sfixed32,json=packedSfixed32" json:"packed_sfixed32,omitempty"` + PackedSfixed64 []int64 `protobuf:"fixed64,99,rep,packed,name=packed_sfixed64,json=packedSfixed64" json:"packed_sfixed64,omitempty"` + PackedFloat []float32 `protobuf:"fixed32,100,rep,packed,name=packed_float,json=packedFloat" json:"packed_float,omitempty"` + PackedDouble []float64 `protobuf:"fixed64,101,rep,packed,name=packed_double,json=packedDouble" json:"packed_double,omitempty"` + PackedBool []bool `protobuf:"varint,102,rep,packed,name=packed_bool,json=packedBool" json:"packed_bool,omitempty"` + PackedEnum []ForeignEnum `protobuf:"varint,103,rep,packed,name=packed_enum,json=packedEnum,enum=goproto.proto.testeditions.ForeignEnum" json:"packed_enum,omitempty"` +} + +func (x *TestPackedTypes) Reset() { + *x = TestPackedTypes{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_testprotos_testeditions_test_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TestPackedTypes) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TestPackedTypes) ProtoMessage() {} + +func (x *TestPackedTypes) ProtoReflect() protoreflect.Message { + mi := &file_internal_testprotos_testeditions_test_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TestPackedTypes.ProtoReflect.Descriptor instead. +func (*TestPackedTypes) Descriptor() ([]byte, []int) { + return file_internal_testprotos_testeditions_test_proto_rawDescGZIP(), []int{5} +} + +func (x *TestPackedTypes) GetPackedInt32() []int32 { + if x != nil { + return x.PackedInt32 + } + return nil +} + +func (x *TestPackedTypes) GetPackedInt64() []int64 { + if x != nil { + return x.PackedInt64 + } + return nil +} + +func (x *TestPackedTypes) GetPackedUint32() []uint32 { + if x != nil { + return x.PackedUint32 + } + return nil +} + +func (x *TestPackedTypes) GetPackedUint64() []uint64 { + if x != nil { + return x.PackedUint64 + } + return nil +} + +func (x *TestPackedTypes) GetPackedSint32() []int32 { + if x != nil { + return x.PackedSint32 + } + return nil +} + +func (x *TestPackedTypes) GetPackedSint64() []int64 { + if x != nil { + return x.PackedSint64 + } + return nil +} + +func (x *TestPackedTypes) GetPackedFixed32() []uint32 { + if x != nil { + return x.PackedFixed32 + } + return nil +} + +func (x *TestPackedTypes) GetPackedFixed64() []uint64 { + if x != nil { + return x.PackedFixed64 + } + return nil +} + +func (x *TestPackedTypes) GetPackedSfixed32() []int32 { + if x != nil { + return x.PackedSfixed32 + } + return nil +} + +func (x *TestPackedTypes) GetPackedSfixed64() []int64 { + if x != nil { + return x.PackedSfixed64 + } + return nil +} + +func (x *TestPackedTypes) GetPackedFloat() []float32 { + if x != nil { + return x.PackedFloat + } + return nil +} + +func (x *TestPackedTypes) GetPackedDouble() []float64 { + if x != nil { + return x.PackedDouble + } + return nil +} + +func (x *TestPackedTypes) GetPackedBool() []bool { + if x != nil { + return x.PackedBool + } + return nil +} + +func (x *TestPackedTypes) GetPackedEnum() []ForeignEnum { + if x != nil { + return x.PackedEnum + } + return nil +} + +type TestPackedExtensions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + extensionFields protoimpl.ExtensionFields +} + +func (x *TestPackedExtensions) Reset() { + *x = TestPackedExtensions{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_testprotos_testeditions_test_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TestPackedExtensions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TestPackedExtensions) ProtoMessage() {} + +func (x *TestPackedExtensions) ProtoReflect() protoreflect.Message { + mi := &file_internal_testprotos_testeditions_test_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TestPackedExtensions.ProtoReflect.Descriptor instead. +func (*TestPackedExtensions) Descriptor() ([]byte, []int) { + return file_internal_testprotos_testeditions_test_proto_rawDescGZIP(), []int{6} +} + type TestAllTypes_NestedMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1270,7 +1529,7 @@ type TestAllTypes_NestedMessage struct { func (x *TestAllTypes_NestedMessage) Reset() { *x = TestAllTypes_NestedMessage{} if protoimpl.UnsafeEnabled { - mi := &file_internal_testprotos_testeditions_test_proto_msgTypes[4] + mi := &file_internal_testprotos_testeditions_test_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1283,7 +1542,7 @@ func (x *TestAllTypes_NestedMessage) String() string { func (*TestAllTypes_NestedMessage) ProtoMessage() {} func (x *TestAllTypes_NestedMessage) ProtoReflect() protoreflect.Message { - mi := &file_internal_testprotos_testeditions_test_proto_msgTypes[4] + mi := &file_internal_testprotos_testeditions_test_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1326,7 +1585,7 @@ type TestAllTypes_OptionalGroup struct { func (x *TestAllTypes_OptionalGroup) Reset() { *x = TestAllTypes_OptionalGroup{} if protoimpl.UnsafeEnabled { - mi := &file_internal_testprotos_testeditions_test_proto_msgTypes[5] + mi := &file_internal_testprotos_testeditions_test_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1339,7 +1598,7 @@ func (x *TestAllTypes_OptionalGroup) String() string { func (*TestAllTypes_OptionalGroup) ProtoMessage() {} func (x *TestAllTypes_OptionalGroup) ProtoReflect() protoreflect.Message { - mi := &file_internal_testprotos_testeditions_test_proto_msgTypes[5] + mi := &file_internal_testprotos_testeditions_test_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1387,7 +1646,7 @@ type TestAllTypes_RepeatedGroup struct { func (x *TestAllTypes_RepeatedGroup) Reset() { *x = TestAllTypes_RepeatedGroup{} if protoimpl.UnsafeEnabled { - mi := &file_internal_testprotos_testeditions_test_proto_msgTypes[6] + mi := &file_internal_testprotos_testeditions_test_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1400,7 +1659,7 @@ func (x *TestAllTypes_RepeatedGroup) String() string { func (*TestAllTypes_RepeatedGroup) ProtoMessage() {} func (x *TestAllTypes_RepeatedGroup) ProtoReflect() protoreflect.Message { - mi := &file_internal_testprotos_testeditions_test_proto_msgTypes[6] + mi := &file_internal_testprotos_testeditions_test_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1423,6 +1682,302 @@ func (x *TestAllTypes_RepeatedGroup) GetA() int32 { return 0 } +type TestAllTypes_OneofGroup struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + A *int32 `protobuf:"varint,1,opt,name=a" json:"a,omitempty"` + B *int32 `protobuf:"varint,2,opt,name=b" json:"b,omitempty"` +} + +func (x *TestAllTypes_OneofGroup) Reset() { + *x = TestAllTypes_OneofGroup{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_testprotos_testeditions_test_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TestAllTypes_OneofGroup) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TestAllTypes_OneofGroup) ProtoMessage() {} + +func (x *TestAllTypes_OneofGroup) ProtoReflect() protoreflect.Message { + mi := &file_internal_testprotos_testeditions_test_proto_msgTypes[27] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TestAllTypes_OneofGroup.ProtoReflect.Descriptor instead. +func (*TestAllTypes_OneofGroup) Descriptor() ([]byte, []int) { + return file_internal_testprotos_testeditions_test_proto_rawDescGZIP(), []int{0, 20} +} + +func (x *TestAllTypes_OneofGroup) GetA() int32 { + if x != nil && x.A != nil { + return *x.A + } + return 0 +} + +func (x *TestAllTypes_OneofGroup) GetB() int32 { + if x != nil && x.B != nil { + return *x.B + } + return 0 +} + +type TestRequiredGroupFields_OptionalGroup struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + A *int32 `protobuf:"varint,2,req,name=a" json:"a,omitempty"` +} + +func (x *TestRequiredGroupFields_OptionalGroup) Reset() { + *x = TestRequiredGroupFields_OptionalGroup{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_testprotos_testeditions_test_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TestRequiredGroupFields_OptionalGroup) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TestRequiredGroupFields_OptionalGroup) ProtoMessage() {} + +func (x *TestRequiredGroupFields_OptionalGroup) ProtoReflect() protoreflect.Message { + mi := &file_internal_testprotos_testeditions_test_proto_msgTypes[29] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TestRequiredGroupFields_OptionalGroup.ProtoReflect.Descriptor instead. +func (*TestRequiredGroupFields_OptionalGroup) Descriptor() ([]byte, []int) { + return file_internal_testprotos_testeditions_test_proto_rawDescGZIP(), []int{4, 0} +} + +func (x *TestRequiredGroupFields_OptionalGroup) GetA() int32 { + if x != nil && x.A != nil { + return *x.A + } + return 0 +} + +type TestRequiredGroupFields_RepeatedGroup struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + A *int32 `protobuf:"varint,4,req,name=a" json:"a,omitempty"` +} + +func (x *TestRequiredGroupFields_RepeatedGroup) Reset() { + *x = TestRequiredGroupFields_RepeatedGroup{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_testprotos_testeditions_test_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TestRequiredGroupFields_RepeatedGroup) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TestRequiredGroupFields_RepeatedGroup) ProtoMessage() {} + +func (x *TestRequiredGroupFields_RepeatedGroup) ProtoReflect() protoreflect.Message { + mi := &file_internal_testprotos_testeditions_test_proto_msgTypes[30] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TestRequiredGroupFields_RepeatedGroup.ProtoReflect.Descriptor instead. +func (*TestRequiredGroupFields_RepeatedGroup) Descriptor() ([]byte, []int) { + return file_internal_testprotos_testeditions_test_proto_rawDescGZIP(), []int{4, 1} +} + +func (x *TestRequiredGroupFields_RepeatedGroup) GetA() int32 { + if x != nil && x.A != nil { + return *x.A + } + return 0 +} + +var file_internal_testprotos_testeditions_test_proto_extTypes = []protoimpl.ExtensionInfo{ + { + ExtendedType: (*TestPackedExtensions)(nil), + ExtensionType: ([]int32)(nil), + Field: 90, + Name: "goproto.proto.testeditions.packed_int32", + Tag: "varint,90,rep,name=packed_int32", + Filename: "internal/testprotos/testeditions/test.proto", + }, + { + ExtendedType: (*TestPackedExtensions)(nil), + ExtensionType: ([]int64)(nil), + Field: 91, + Name: "goproto.proto.testeditions.packed_int64", + Tag: "varint,91,rep,name=packed_int64", + Filename: "internal/testprotos/testeditions/test.proto", + }, + { + ExtendedType: (*TestPackedExtensions)(nil), + ExtensionType: ([]uint32)(nil), + Field: 92, + Name: "goproto.proto.testeditions.packed_uint32", + Tag: "varint,92,rep,name=packed_uint32", + Filename: "internal/testprotos/testeditions/test.proto", + }, + { + ExtendedType: (*TestPackedExtensions)(nil), + ExtensionType: ([]uint64)(nil), + Field: 93, + Name: "goproto.proto.testeditions.packed_uint64", + Tag: "varint,93,rep,name=packed_uint64", + Filename: "internal/testprotos/testeditions/test.proto", + }, + { + ExtendedType: (*TestPackedExtensions)(nil), + ExtensionType: ([]int32)(nil), + Field: 94, + Name: "goproto.proto.testeditions.packed_sint32", + Tag: "zigzag32,94,rep,name=packed_sint32", + Filename: "internal/testprotos/testeditions/test.proto", + }, + { + ExtendedType: (*TestPackedExtensions)(nil), + ExtensionType: ([]int64)(nil), + Field: 95, + Name: "goproto.proto.testeditions.packed_sint64", + Tag: "zigzag64,95,rep,name=packed_sint64", + Filename: "internal/testprotos/testeditions/test.proto", + }, + { + ExtendedType: (*TestPackedExtensions)(nil), + ExtensionType: ([]uint32)(nil), + Field: 96, + Name: "goproto.proto.testeditions.packed_fixed32", + Tag: "fixed32,96,rep,name=packed_fixed32", + Filename: "internal/testprotos/testeditions/test.proto", + }, + { + ExtendedType: (*TestPackedExtensions)(nil), + ExtensionType: ([]uint64)(nil), + Field: 97, + Name: "goproto.proto.testeditions.packed_fixed64", + Tag: "fixed64,97,rep,name=packed_fixed64", + Filename: "internal/testprotos/testeditions/test.proto", + }, + { + ExtendedType: (*TestPackedExtensions)(nil), + ExtensionType: ([]int32)(nil), + Field: 98, + Name: "goproto.proto.testeditions.packed_sfixed32", + Tag: "fixed32,98,rep,name=packed_sfixed32", + Filename: "internal/testprotos/testeditions/test.proto", + }, + { + ExtendedType: (*TestPackedExtensions)(nil), + ExtensionType: ([]int64)(nil), + Field: 99, + Name: "goproto.proto.testeditions.packed_sfixed64", + Tag: "fixed64,99,rep,name=packed_sfixed64", + Filename: "internal/testprotos/testeditions/test.proto", + }, + { + ExtendedType: (*TestPackedExtensions)(nil), + ExtensionType: ([]float32)(nil), + Field: 100, + Name: "goproto.proto.testeditions.packed_float", + Tag: "fixed32,100,rep,name=packed_float", + Filename: "internal/testprotos/testeditions/test.proto", + }, + { + ExtendedType: (*TestPackedExtensions)(nil), + ExtensionType: ([]float64)(nil), + Field: 101, + Name: "goproto.proto.testeditions.packed_double", + Tag: "fixed64,101,rep,name=packed_double", + Filename: "internal/testprotos/testeditions/test.proto", + }, + { + ExtendedType: (*TestPackedExtensions)(nil), + ExtensionType: ([]bool)(nil), + Field: 102, + Name: "goproto.proto.testeditions.packed_bool", + Tag: "varint,102,rep,name=packed_bool", + Filename: "internal/testprotos/testeditions/test.proto", + }, + { + ExtendedType: (*TestPackedExtensions)(nil), + ExtensionType: ([]ForeignEnum)(nil), + Field: 103, + Name: "goproto.proto.testeditions.packed_enum", + Tag: "varint,103,rep,name=packed_enum,enum=goproto.proto.testeditions.ForeignEnum", + Filename: "internal/testprotos/testeditions/test.proto", + }, +} + +// Extension fields to TestPackedExtensions. +var ( + // repeated int32 packed_int32 = 90; + E_PackedInt32 = &file_internal_testprotos_testeditions_test_proto_extTypes[0] + // repeated int64 packed_int64 = 91; + E_PackedInt64 = &file_internal_testprotos_testeditions_test_proto_extTypes[1] + // repeated uint32 packed_uint32 = 92; + E_PackedUint32 = &file_internal_testprotos_testeditions_test_proto_extTypes[2] + // repeated uint64 packed_uint64 = 93; + E_PackedUint64 = &file_internal_testprotos_testeditions_test_proto_extTypes[3] + // repeated sint32 packed_sint32 = 94; + E_PackedSint32 = &file_internal_testprotos_testeditions_test_proto_extTypes[4] + // repeated sint64 packed_sint64 = 95; + E_PackedSint64 = &file_internal_testprotos_testeditions_test_proto_extTypes[5] + // repeated fixed32 packed_fixed32 = 96; + E_PackedFixed32 = &file_internal_testprotos_testeditions_test_proto_extTypes[6] + // repeated fixed64 packed_fixed64 = 97; + E_PackedFixed64 = &file_internal_testprotos_testeditions_test_proto_extTypes[7] + // repeated sfixed32 packed_sfixed32 = 98; + E_PackedSfixed32 = &file_internal_testprotos_testeditions_test_proto_extTypes[8] + // repeated sfixed64 packed_sfixed64 = 99; + E_PackedSfixed64 = &file_internal_testprotos_testeditions_test_proto_extTypes[9] + // repeated float packed_float = 100; + E_PackedFloat = &file_internal_testprotos_testeditions_test_proto_extTypes[10] + // repeated double packed_double = 101; + E_PackedDouble = &file_internal_testprotos_testeditions_test_proto_extTypes[11] + // repeated bool packed_bool = 102; + E_PackedBool = &file_internal_testprotos_testeditions_test_proto_extTypes[12] + // repeated goproto.proto.testeditions.ForeignEnum packed_enum = 103; + E_PackedEnum = &file_internal_testprotos_testeditions_test_proto_extTypes[13] +) + var File_internal_testprotos_testeditions_test_proto protoreflect.FileDescriptor var file_internal_testprotos_testeditions_test_proto_rawDesc = []byte{ @@ -1430,7 +1985,7 @@ var file_internal_testprotos_testeditions_test_proto_rawDesc = []byte{ 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xec, 0x3d, 0x0a, 0x0c, 0x54, 0x65, + 0x74, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xf4, 0x3e, 0x0a, 0x0c, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x0e, 0x73, 0x69, 0x6e, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x7c, 0x20, 0x01, 0x28, 0x05, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x08, 0x02, 0x52, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x75, @@ -1816,164 +2371,322 @@ var file_internal_testprotos_testeditions_test_proto_rawDesc = []byte{ 0x2e, 0x74, 0x65, 0x73, 0x74, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x48, 0x00, 0x52, 0x09, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x45, 0x6e, - 0x75, 0x6d, 0x12, 0x34, 0x0a, 0x15, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x78, 0x20, 0x01, 0x28, - 0x0d, 0x48, 0x01, 0x52, 0x13, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x1a, 0x69, 0x0a, 0x0d, 0x4e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0c, 0x0a, 0x01, 0x61, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x01, 0x61, 0x12, 0x4a, 0x0a, 0x0b, 0x63, 0x6f, 0x72, 0x65, 0x63, - 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, - 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, - 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x0b, 0x63, 0x6f, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, - 0x69, 0x76, 0x65, 0x1a, 0xba, 0x01, 0x0a, 0x0d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0c, 0x0a, 0x01, 0x61, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x01, 0x61, 0x12, 0x6f, 0x0a, 0x17, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, - 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xe8, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, - 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x15, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x61, 0x6d, 0x65, 0x5f, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0f, 0x73, 0x61, 0x6d, 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x1a, 0x1d, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x12, 0x0c, 0x0a, 0x01, 0x61, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x01, 0x61, 0x1a, - 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x33, 0x32, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, - 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, - 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x55, 0x69, - 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, - 0x61, 0x70, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x11, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x11, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, - 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x69, 0x6e, 0x74, - 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x12, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x12, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, - 0x32, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x07, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, - 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x06, + 0x75, 0x6d, 0x12, 0x5c, 0x0a, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x18, 0x79, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x65, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, + 0x2e, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x05, 0xaa, 0x01, 0x02, + 0x28, 0x02, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x12, 0x34, 0x0a, 0x15, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x78, 0x20, 0x01, 0x28, 0x0d, 0x48, + 0x01, 0x52, 0x13, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x1a, 0x69, 0x0a, 0x0d, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0c, 0x0a, 0x01, 0x61, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x01, 0x61, 0x12, 0x4a, 0x0a, 0x0b, 0x63, 0x6f, 0x72, 0x65, 0x63, 0x75, 0x72, + 0x73, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, + 0x79, 0x70, 0x65, 0x73, 0x52, 0x0b, 0x63, 0x6f, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, + 0x65, 0x1a, 0xba, 0x01, 0x0a, 0x0d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x12, 0x0c, 0x0a, 0x01, 0x61, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x01, + 0x61, 0x12, 0x6f, 0x0a, 0x17, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x6e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xe8, 0x07, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x15, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x61, 0x6d, 0x65, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, + 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x73, + 0x61, 0x6d, 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x1a, 0x1d, + 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, + 0x0c, 0x0a, 0x01, 0x61, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x01, 0x61, 0x1a, 0x40, 0x0a, + 0x12, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x06, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, - 0x46, 0x0a, 0x18, 0x4d, 0x61, 0x70, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x53, 0x66, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x36, 0x34, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, + 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, + 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, + 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x11, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x11, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, + 0x14, 0x4d, 0x61, 0x70, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x12, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x12, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0f, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0f, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x46, 0x0a, 0x18, 0x4d, 0x61, 0x70, 0x53, 0x66, - 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x10, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x07, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x46, 0x69, + 0x78, 0x65, 0x64, 0x36, 0x34, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x06, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x06, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x46, 0x0a, + 0x18, 0x4d, 0x61, 0x70, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x53, 0x66, 0x69, 0x78, + 0x65, 0x64, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0f, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x46, 0x0a, 0x18, 0x4d, 0x61, 0x70, 0x53, 0x66, 0x69, 0x78, + 0x65, 0x64, 0x36, 0x34, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x10, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, + 0x12, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, - 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x46, 0x6c, 0x6f, 0x61, 0x74, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x6f, 0x75, - 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3e, 0x0a, 0x10, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x42, - 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x53, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x79, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x81, 0x01, 0x0a, 0x1b, - 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4c, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, + 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x6f, 0x75, 0x62, 0x6c, + 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x1a, 0x3e, 0x0a, 0x10, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x42, 0x6f, 0x6f, + 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x42, 0x79, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x81, 0x01, 0x0a, 0x1b, 0x4d, 0x61, + 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4c, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, + 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x7b, 0x0a, + 0x18, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x49, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, + 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x28, 0x0a, 0x0a, 0x4f, 0x6e, + 0x65, 0x6f, 0x66, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0c, 0x0a, 0x01, 0x61, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x01, 0x61, 0x12, 0x0c, 0x0a, 0x01, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x01, 0x62, 0x22, 0x39, 0x0a, 0x0a, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, + 0x75, 0x6d, 0x12, 0x07, 0x0a, 0x03, 0x46, 0x4f, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x42, + 0x41, 0x52, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x42, 0x41, 0x5a, 0x10, 0x02, 0x12, 0x10, 0x0a, + 0x03, 0x4e, 0x45, 0x47, 0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x42, + 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x10, + 0x0a, 0x0e, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x22, 0x2c, 0x0a, 0x0e, 0x46, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x0c, 0x0a, 0x01, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x01, 0x63, + 0x12, 0x0c, 0x0a, 0x01, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x01, 0x64, 0x22, 0x3c, + 0x0a, 0x0c, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x2c, + 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x08, 0x03, 0x52, 0x0d, 0x72, + 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x22, 0xea, 0x03, 0x0a, + 0x13, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x46, 0x6f, 0x72, + 0x65, 0x69, 0x67, 0x6e, 0x12, 0x53, 0x0a, 0x10, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, + 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x65, 0x73, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x52, 0x0f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x53, 0x0a, 0x10, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x52, 0x0f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x60, + 0x0a, 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x46, 0x6f, 0x72, + 0x65, 0x69, 0x67, 0x6e, 0x2e, 0x4d, 0x61, 0x70, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x70, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x4f, 0x0a, 0x0d, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x65, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x64, 0x48, 0x00, 0x52, 0x0c, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x1a, 0x67, 0x0a, 0x0f, 0x4d, 0x61, 0x70, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3e, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, + 0x65, 0x6f, 0x66, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x22, 0xc5, 0x02, 0x0a, 0x17, 0x54, 0x65, + 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x46, + 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x6e, 0x0a, 0x0d, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, - 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, - 0x7b, 0x0a, 0x18, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x49, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x33, 0x2e, 0x67, + 0x74, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x46, 0x69, 0x65, 0x6c, 0x64, + 0x73, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, + 0x05, 0xaa, 0x01, 0x02, 0x28, 0x02, 0x52, 0x0d, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x6e, 0x0a, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, - 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, - 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x39, 0x0a, 0x0a, - 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x07, 0x0a, 0x03, 0x46, 0x4f, - 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x42, 0x41, 0x52, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, - 0x42, 0x41, 0x5a, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x45, 0x47, 0x10, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, - 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x10, 0x0a, 0x0e, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x22, 0x2c, 0x0a, 0x0e, 0x46, 0x6f, 0x72, 0x65, - 0x69, 0x67, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0c, 0x0a, 0x01, 0x63, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x01, 0x63, 0x12, 0x0c, 0x0a, 0x01, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x01, 0x64, 0x22, 0x3c, 0x0a, 0x0c, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x2c, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, - 0x65, 0x64, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x05, - 0xaa, 0x01, 0x02, 0x08, 0x03, 0x52, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x22, 0xea, 0x03, 0x0a, 0x13, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x69, 0x72, 0x65, 0x64, 0x46, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x12, 0x53, 0x0a, 0x10, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x74, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x46, 0x69, 0x65, 0x6c, 0x64, + 0x73, 0x2e, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, + 0x05, 0xaa, 0x01, 0x02, 0x28, 0x02, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x1a, 0x24, 0x0a, 0x0d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x13, 0x0a, 0x01, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x08, 0x03, 0x52, 0x01, 0x61, 0x1a, 0x24, 0x0a, 0x0d, 0x52, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x13, 0x0a, 0x01, + 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x08, 0x03, 0x52, 0x01, + 0x61, 0x22, 0xa0, 0x05, 0x0a, 0x0f, 0x54, 0x65, 0x73, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x64, + 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x5a, 0x20, 0x03, 0x28, 0x05, 0x42, 0x05, 0xaa, 0x01, 0x02, + 0x18, 0x01, 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, + 0x28, 0x0a, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, + 0x5b, 0x20, 0x03, 0x28, 0x03, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x18, 0x01, 0x52, 0x0b, 0x70, 0x61, + 0x63, 0x6b, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x2a, 0x0a, 0x0d, 0x70, 0x61, 0x63, + 0x6b, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x5c, 0x20, 0x03, 0x28, 0x0d, + 0x42, 0x05, 0xaa, 0x01, 0x02, 0x18, 0x01, 0x52, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x55, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x2a, 0x0a, 0x0d, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, + 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x5d, 0x20, 0x03, 0x28, 0x04, 0x42, 0x05, 0xaa, 0x01, + 0x02, 0x18, 0x01, 0x52, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, + 0x34, 0x12, 0x2a, 0x0a, 0x0d, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, + 0x33, 0x32, 0x18, 0x5e, 0x20, 0x03, 0x28, 0x11, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x18, 0x01, 0x52, + 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x2a, 0x0a, + 0x0d, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x5f, + 0x20, 0x03, 0x28, 0x12, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x18, 0x01, 0x52, 0x0c, 0x70, 0x61, 0x63, + 0x6b, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x2c, 0x0a, 0x0e, 0x70, 0x61, 0x63, + 0x6b, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0x60, 0x20, 0x03, 0x28, + 0x07, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x18, 0x01, 0x52, 0x0d, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, + 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x2c, 0x0a, 0x0e, 0x70, 0x61, 0x63, 0x6b, 0x65, + 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18, 0x61, 0x20, 0x03, 0x28, 0x06, 0x42, + 0x05, 0xaa, 0x01, 0x02, 0x18, 0x01, 0x52, 0x0d, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x46, 0x69, + 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x2e, 0x0a, 0x0f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, + 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0x62, 0x20, 0x03, 0x28, 0x0f, 0x42, 0x05, + 0xaa, 0x01, 0x02, 0x18, 0x01, 0x52, 0x0e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x66, 0x69, + 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x2e, 0x0a, 0x0f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, + 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18, 0x63, 0x20, 0x03, 0x28, 0x10, 0x42, 0x05, + 0xaa, 0x01, 0x02, 0x18, 0x01, 0x52, 0x0e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x66, 0x69, + 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x28, 0x0a, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, + 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x64, 0x20, 0x03, 0x28, 0x02, 0x42, 0x05, 0xaa, 0x01, 0x02, + 0x18, 0x01, 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, + 0x2a, 0x0a, 0x0d, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, + 0x18, 0x65, 0x20, 0x03, 0x28, 0x01, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x18, 0x01, 0x52, 0x0c, 0x70, + 0x61, 0x63, 0x6b, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x26, 0x0a, 0x0b, 0x70, + 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x66, 0x20, 0x03, 0x28, 0x08, + 0x42, 0x05, 0xaa, 0x01, 0x02, 0x18, 0x01, 0x52, 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x42, + 0x6f, 0x6f, 0x6c, 0x12, 0x4f, 0x0a, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x65, 0x6e, + 0x75, 0x6d, 0x18, 0x67, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x65, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x46, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x45, 0x6e, 0x75, + 0x6d, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x18, 0x01, 0x52, 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, + 0x45, 0x6e, 0x75, 0x6d, 0x22, 0x20, 0x0a, 0x14, 0x54, 0x65, 0x73, 0x74, 0x50, 0x61, 0x63, 0x6b, + 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2a, 0x08, 0x08, 0x01, + 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x2a, 0x52, 0x0a, 0x0b, 0x46, 0x6f, 0x72, 0x65, 0x69, 0x67, + 0x6e, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x10, 0x0a, 0x0c, 0x46, 0x4f, 0x52, 0x45, 0x49, 0x47, 0x4e, + 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x46, 0x4f, 0x52, 0x45, 0x49, + 0x47, 0x4e, 0x5f, 0x46, 0x4f, 0x4f, 0x10, 0x04, 0x12, 0x0f, 0x0a, 0x0b, 0x46, 0x4f, 0x52, 0x45, + 0x49, 0x47, 0x4e, 0x5f, 0x42, 0x41, 0x52, 0x10, 0x05, 0x12, 0x0f, 0x0a, 0x0b, 0x46, 0x4f, 0x52, + 0x45, 0x49, 0x47, 0x4e, 0x5f, 0x42, 0x41, 0x5a, 0x10, 0x06, 0x3a, 0x5a, 0x0a, 0x0c, 0x70, 0x61, + 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x50, 0x61, 0x63, 0x6b, + 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x5a, 0x20, 0x03, + 0x28, 0x05, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x18, 0x01, 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x65, + 0x64, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x3a, 0x5a, 0x0a, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, + 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x65, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, - 0x52, 0x0f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x53, 0x0a, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x69, 0x72, 0x65, 0x64, 0x52, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x60, 0x0a, 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x67, 0x6f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x69, 0x72, 0x65, 0x64, 0x46, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x2e, 0x4d, 0x61, 0x70, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, - 0x70, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4f, 0x0a, 0x0d, 0x6f, 0x6e, 0x65, 0x6f, - 0x66, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x28, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, + 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x5b, 0x20, 0x03, 0x28, 0x03, 0x42, 0x05, + 0xaa, 0x01, 0x02, 0x18, 0x01, 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x49, 0x6e, 0x74, + 0x36, 0x34, 0x3a, 0x5c, 0x0a, 0x0d, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, + 0x74, 0x33, 0x32, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x54, 0x65, 0x73, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x5c, 0x20, 0x03, 0x28, 0x0d, 0x42, 0x05, 0xaa, 0x01, 0x02, + 0x18, 0x01, 0x52, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, + 0x3a, 0x5c, 0x0a, 0x0d, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, + 0x34, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, + 0x65, 0x73, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x5d, 0x20, 0x03, 0x28, 0x04, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x18, 0x01, + 0x52, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x3a, 0x5c, + 0x0a, 0x0d, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, + 0x30, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x65, 0x73, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0c, 0x6f, 0x6e, 0x65, - 0x6f, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x67, 0x0a, 0x0f, 0x4d, 0x61, 0x70, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3e, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, + 0x74, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x5e, 0x20, 0x03, 0x28, 0x11, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x18, 0x01, 0x52, 0x0c, + 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x3a, 0x5c, 0x0a, 0x0d, + 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x2a, 0x52, 0x0a, 0x0b, 0x46, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x45, 0x6e, 0x75, 0x6d, - 0x12, 0x10, 0x0a, 0x0c, 0x46, 0x4f, 0x52, 0x45, 0x49, 0x47, 0x4e, 0x5f, 0x5a, 0x45, 0x52, 0x4f, - 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x46, 0x4f, 0x52, 0x45, 0x49, 0x47, 0x4e, 0x5f, 0x46, 0x4f, - 0x4f, 0x10, 0x04, 0x12, 0x0f, 0x0a, 0x0b, 0x46, 0x4f, 0x52, 0x45, 0x49, 0x47, 0x4e, 0x5f, 0x42, - 0x41, 0x52, 0x10, 0x05, 0x12, 0x0f, 0x0a, 0x0b, 0x46, 0x4f, 0x52, 0x45, 0x49, 0x47, 0x4e, 0x5f, - 0x42, 0x41, 0x5a, 0x10, 0x06, 0x42, 0x3d, 0x5a, 0x3b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x73, - 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x65, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x08, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x70, 0xe8, - 0x07, + 0x73, 0x74, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x50, + 0x61, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x5f, 0x20, 0x03, 0x28, 0x12, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x18, 0x01, 0x52, 0x0c, 0x70, 0x61, + 0x63, 0x6b, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x3a, 0x5e, 0x0a, 0x0e, 0x70, 0x61, + 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x30, 0x2e, 0x67, + 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x50, 0x61, + 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x60, + 0x20, 0x03, 0x28, 0x07, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x18, 0x01, 0x52, 0x0d, 0x70, 0x61, 0x63, + 0x6b, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x3a, 0x5e, 0x0a, 0x0e, 0x70, 0x61, + 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x30, 0x2e, 0x67, + 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x50, 0x61, + 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x61, + 0x20, 0x03, 0x28, 0x06, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x18, 0x01, 0x52, 0x0d, 0x70, 0x61, 0x63, + 0x6b, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x3a, 0x60, 0x0a, 0x0f, 0x70, 0x61, + 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x30, 0x2e, + 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x50, + 0x61, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x62, 0x20, 0x03, 0x28, 0x0f, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x18, 0x01, 0x52, 0x0e, 0x70, 0x61, + 0x63, 0x6b, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x3a, 0x60, 0x0a, 0x0f, + 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, + 0x30, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x74, 0x65, 0x73, 0x74, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x65, 0x73, + 0x74, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x63, 0x20, 0x03, 0x28, 0x10, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x18, 0x01, 0x52, 0x0e, + 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x3a, 0x5a, + 0x0a, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x30, + 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x65, 0x73, 0x74, + 0x50, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x64, 0x20, 0x03, 0x28, 0x02, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x18, 0x01, 0x52, 0x0b, 0x70, + 0x61, 0x63, 0x6b, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x5c, 0x0a, 0x0d, 0x70, 0x61, + 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x30, 0x2e, 0x67, 0x6f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x50, 0x61, 0x63, + 0x6b, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x65, 0x20, + 0x03, 0x28, 0x01, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x18, 0x01, 0x52, 0x0c, 0x70, 0x61, 0x63, 0x6b, + 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x3a, 0x58, 0x0a, 0x0b, 0x70, 0x61, 0x63, 0x6b, + 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x65, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x45, + 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x66, 0x20, 0x03, 0x28, 0x08, 0x42, + 0x05, 0xaa, 0x01, 0x02, 0x18, 0x01, 0x52, 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x42, 0x6f, + 0x6f, 0x6c, 0x3a, 0x81, 0x01, 0x0a, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x65, 0x6e, + 0x75, 0x6d, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x54, 0x65, 0x73, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x67, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x67, 0x6f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x46, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x45, + 0x6e, 0x75, 0x6d, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x18, 0x01, 0x52, 0x0a, 0x70, 0x61, 0x63, 0x6b, + 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x3d, 0x5a, 0x3b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, + 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x65, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x08, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x70, + 0xe8, 0x07, } var ( @@ -1989,7 +2702,7 @@ func file_internal_testprotos_testeditions_test_proto_rawDescGZIP() []byte { } var file_internal_testprotos_testeditions_test_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_internal_testprotos_testeditions_test_proto_msgTypes = make([]protoimpl.MessageInfo, 25) +var file_internal_testprotos_testeditions_test_proto_msgTypes = make([]protoimpl.MessageInfo, 31) var file_internal_testprotos_testeditions_test_proto_goTypes = []interface{}{ (ForeignEnum)(0), // 0: goproto.proto.testeditions.ForeignEnum (TestAllTypes_NestedEnum)(0), // 1: goproto.proto.testeditions.TestAllTypes.NestedEnum @@ -1997,74 +2710,99 @@ var file_internal_testprotos_testeditions_test_proto_goTypes = []interface{}{ (*ForeignMessage)(nil), // 3: goproto.proto.testeditions.ForeignMessage (*TestRequired)(nil), // 4: goproto.proto.testeditions.TestRequired (*TestRequiredForeign)(nil), // 5: goproto.proto.testeditions.TestRequiredForeign - (*TestAllTypes_NestedMessage)(nil), // 6: goproto.proto.testeditions.TestAllTypes.NestedMessage - (*TestAllTypes_OptionalGroup)(nil), // 7: goproto.proto.testeditions.TestAllTypes.OptionalGroup - (*TestAllTypes_RepeatedGroup)(nil), // 8: goproto.proto.testeditions.TestAllTypes.RepeatedGroup - nil, // 9: goproto.proto.testeditions.TestAllTypes.MapInt32Int32Entry - nil, // 10: goproto.proto.testeditions.TestAllTypes.MapInt64Int64Entry - nil, // 11: goproto.proto.testeditions.TestAllTypes.MapUint32Uint32Entry - nil, // 12: goproto.proto.testeditions.TestAllTypes.MapUint64Uint64Entry - nil, // 13: goproto.proto.testeditions.TestAllTypes.MapSint32Sint32Entry - nil, // 14: goproto.proto.testeditions.TestAllTypes.MapSint64Sint64Entry - nil, // 15: goproto.proto.testeditions.TestAllTypes.MapFixed32Fixed32Entry - nil, // 16: goproto.proto.testeditions.TestAllTypes.MapFixed64Fixed64Entry - nil, // 17: goproto.proto.testeditions.TestAllTypes.MapSfixed32Sfixed32Entry - nil, // 18: goproto.proto.testeditions.TestAllTypes.MapSfixed64Sfixed64Entry - nil, // 19: goproto.proto.testeditions.TestAllTypes.MapInt32FloatEntry - nil, // 20: goproto.proto.testeditions.TestAllTypes.MapInt32DoubleEntry - nil, // 21: goproto.proto.testeditions.TestAllTypes.MapBoolBoolEntry - nil, // 22: goproto.proto.testeditions.TestAllTypes.MapStringStringEntry - nil, // 23: goproto.proto.testeditions.TestAllTypes.MapStringBytesEntry - nil, // 24: goproto.proto.testeditions.TestAllTypes.MapStringNestedMessageEntry - nil, // 25: goproto.proto.testeditions.TestAllTypes.MapStringNestedEnumEntry - nil, // 26: goproto.proto.testeditions.TestRequiredForeign.MapMessageEntry + (*TestRequiredGroupFields)(nil), // 6: goproto.proto.testeditions.TestRequiredGroupFields + (*TestPackedTypes)(nil), // 7: goproto.proto.testeditions.TestPackedTypes + (*TestPackedExtensions)(nil), // 8: goproto.proto.testeditions.TestPackedExtensions + (*TestAllTypes_NestedMessage)(nil), // 9: goproto.proto.testeditions.TestAllTypes.NestedMessage + (*TestAllTypes_OptionalGroup)(nil), // 10: goproto.proto.testeditions.TestAllTypes.OptionalGroup + (*TestAllTypes_RepeatedGroup)(nil), // 11: goproto.proto.testeditions.TestAllTypes.RepeatedGroup + nil, // 12: goproto.proto.testeditions.TestAllTypes.MapInt32Int32Entry + nil, // 13: goproto.proto.testeditions.TestAllTypes.MapInt64Int64Entry + nil, // 14: goproto.proto.testeditions.TestAllTypes.MapUint32Uint32Entry + nil, // 15: goproto.proto.testeditions.TestAllTypes.MapUint64Uint64Entry + nil, // 16: goproto.proto.testeditions.TestAllTypes.MapSint32Sint32Entry + nil, // 17: goproto.proto.testeditions.TestAllTypes.MapSint64Sint64Entry + nil, // 18: goproto.proto.testeditions.TestAllTypes.MapFixed32Fixed32Entry + nil, // 19: goproto.proto.testeditions.TestAllTypes.MapFixed64Fixed64Entry + nil, // 20: goproto.proto.testeditions.TestAllTypes.MapSfixed32Sfixed32Entry + nil, // 21: goproto.proto.testeditions.TestAllTypes.MapSfixed64Sfixed64Entry + nil, // 22: goproto.proto.testeditions.TestAllTypes.MapInt32FloatEntry + nil, // 23: goproto.proto.testeditions.TestAllTypes.MapInt32DoubleEntry + nil, // 24: goproto.proto.testeditions.TestAllTypes.MapBoolBoolEntry + nil, // 25: goproto.proto.testeditions.TestAllTypes.MapStringStringEntry + nil, // 26: goproto.proto.testeditions.TestAllTypes.MapStringBytesEntry + nil, // 27: goproto.proto.testeditions.TestAllTypes.MapStringNestedMessageEntry + nil, // 28: goproto.proto.testeditions.TestAllTypes.MapStringNestedEnumEntry + (*TestAllTypes_OneofGroup)(nil), // 29: goproto.proto.testeditions.TestAllTypes.OneofGroup + nil, // 30: goproto.proto.testeditions.TestRequiredForeign.MapMessageEntry + (*TestRequiredGroupFields_OptionalGroup)(nil), // 31: goproto.proto.testeditions.TestRequiredGroupFields.OptionalGroup + (*TestRequiredGroupFields_RepeatedGroup)(nil), // 32: goproto.proto.testeditions.TestRequiredGroupFields.RepeatedGroup } var file_internal_testprotos_testeditions_test_proto_depIdxs = []int32{ - 7, // 0: goproto.proto.testeditions.TestAllTypes.optionalgroup:type_name -> goproto.proto.testeditions.TestAllTypes.OptionalGroup - 6, // 1: goproto.proto.testeditions.TestAllTypes.optional_nested_message:type_name -> goproto.proto.testeditions.TestAllTypes.NestedMessage + 10, // 0: goproto.proto.testeditions.TestAllTypes.optionalgroup:type_name -> goproto.proto.testeditions.TestAllTypes.OptionalGroup + 9, // 1: goproto.proto.testeditions.TestAllTypes.optional_nested_message:type_name -> goproto.proto.testeditions.TestAllTypes.NestedMessage 3, // 2: goproto.proto.testeditions.TestAllTypes.optional_foreign_message:type_name -> goproto.proto.testeditions.ForeignMessage 1, // 3: goproto.proto.testeditions.TestAllTypes.optional_nested_enum:type_name -> goproto.proto.testeditions.TestAllTypes.NestedEnum 0, // 4: goproto.proto.testeditions.TestAllTypes.optional_foreign_enum:type_name -> goproto.proto.testeditions.ForeignEnum - 8, // 5: goproto.proto.testeditions.TestAllTypes.repeatedgroup:type_name -> goproto.proto.testeditions.TestAllTypes.RepeatedGroup - 6, // 6: goproto.proto.testeditions.TestAllTypes.repeated_nested_message:type_name -> goproto.proto.testeditions.TestAllTypes.NestedMessage + 11, // 5: goproto.proto.testeditions.TestAllTypes.repeatedgroup:type_name -> goproto.proto.testeditions.TestAllTypes.RepeatedGroup + 9, // 6: goproto.proto.testeditions.TestAllTypes.repeated_nested_message:type_name -> goproto.proto.testeditions.TestAllTypes.NestedMessage 3, // 7: goproto.proto.testeditions.TestAllTypes.repeated_foreign_message:type_name -> goproto.proto.testeditions.ForeignMessage 1, // 8: goproto.proto.testeditions.TestAllTypes.repeated_nested_enum:type_name -> goproto.proto.testeditions.TestAllTypes.NestedEnum 0, // 9: goproto.proto.testeditions.TestAllTypes.repeated_foreign_enum:type_name -> goproto.proto.testeditions.ForeignEnum - 9, // 10: goproto.proto.testeditions.TestAllTypes.map_int32_int32:type_name -> goproto.proto.testeditions.TestAllTypes.MapInt32Int32Entry - 10, // 11: goproto.proto.testeditions.TestAllTypes.map_int64_int64:type_name -> goproto.proto.testeditions.TestAllTypes.MapInt64Int64Entry - 11, // 12: goproto.proto.testeditions.TestAllTypes.map_uint32_uint32:type_name -> goproto.proto.testeditions.TestAllTypes.MapUint32Uint32Entry - 12, // 13: goproto.proto.testeditions.TestAllTypes.map_uint64_uint64:type_name -> goproto.proto.testeditions.TestAllTypes.MapUint64Uint64Entry - 13, // 14: goproto.proto.testeditions.TestAllTypes.map_sint32_sint32:type_name -> goproto.proto.testeditions.TestAllTypes.MapSint32Sint32Entry - 14, // 15: goproto.proto.testeditions.TestAllTypes.map_sint64_sint64:type_name -> goproto.proto.testeditions.TestAllTypes.MapSint64Sint64Entry - 15, // 16: goproto.proto.testeditions.TestAllTypes.map_fixed32_fixed32:type_name -> goproto.proto.testeditions.TestAllTypes.MapFixed32Fixed32Entry - 16, // 17: goproto.proto.testeditions.TestAllTypes.map_fixed64_fixed64:type_name -> goproto.proto.testeditions.TestAllTypes.MapFixed64Fixed64Entry - 17, // 18: goproto.proto.testeditions.TestAllTypes.map_sfixed32_sfixed32:type_name -> goproto.proto.testeditions.TestAllTypes.MapSfixed32Sfixed32Entry - 18, // 19: goproto.proto.testeditions.TestAllTypes.map_sfixed64_sfixed64:type_name -> goproto.proto.testeditions.TestAllTypes.MapSfixed64Sfixed64Entry - 19, // 20: goproto.proto.testeditions.TestAllTypes.map_int32_float:type_name -> goproto.proto.testeditions.TestAllTypes.MapInt32FloatEntry - 20, // 21: goproto.proto.testeditions.TestAllTypes.map_int32_double:type_name -> goproto.proto.testeditions.TestAllTypes.MapInt32DoubleEntry - 21, // 22: goproto.proto.testeditions.TestAllTypes.map_bool_bool:type_name -> goproto.proto.testeditions.TestAllTypes.MapBoolBoolEntry - 22, // 23: goproto.proto.testeditions.TestAllTypes.map_string_string:type_name -> goproto.proto.testeditions.TestAllTypes.MapStringStringEntry - 23, // 24: goproto.proto.testeditions.TestAllTypes.map_string_bytes:type_name -> goproto.proto.testeditions.TestAllTypes.MapStringBytesEntry - 24, // 25: goproto.proto.testeditions.TestAllTypes.map_string_nested_message:type_name -> goproto.proto.testeditions.TestAllTypes.MapStringNestedMessageEntry - 25, // 26: goproto.proto.testeditions.TestAllTypes.map_string_nested_enum:type_name -> goproto.proto.testeditions.TestAllTypes.MapStringNestedEnumEntry + 12, // 10: goproto.proto.testeditions.TestAllTypes.map_int32_int32:type_name -> goproto.proto.testeditions.TestAllTypes.MapInt32Int32Entry + 13, // 11: goproto.proto.testeditions.TestAllTypes.map_int64_int64:type_name -> goproto.proto.testeditions.TestAllTypes.MapInt64Int64Entry + 14, // 12: goproto.proto.testeditions.TestAllTypes.map_uint32_uint32:type_name -> goproto.proto.testeditions.TestAllTypes.MapUint32Uint32Entry + 15, // 13: goproto.proto.testeditions.TestAllTypes.map_uint64_uint64:type_name -> goproto.proto.testeditions.TestAllTypes.MapUint64Uint64Entry + 16, // 14: goproto.proto.testeditions.TestAllTypes.map_sint32_sint32:type_name -> goproto.proto.testeditions.TestAllTypes.MapSint32Sint32Entry + 17, // 15: goproto.proto.testeditions.TestAllTypes.map_sint64_sint64:type_name -> goproto.proto.testeditions.TestAllTypes.MapSint64Sint64Entry + 18, // 16: goproto.proto.testeditions.TestAllTypes.map_fixed32_fixed32:type_name -> goproto.proto.testeditions.TestAllTypes.MapFixed32Fixed32Entry + 19, // 17: goproto.proto.testeditions.TestAllTypes.map_fixed64_fixed64:type_name -> goproto.proto.testeditions.TestAllTypes.MapFixed64Fixed64Entry + 20, // 18: goproto.proto.testeditions.TestAllTypes.map_sfixed32_sfixed32:type_name -> goproto.proto.testeditions.TestAllTypes.MapSfixed32Sfixed32Entry + 21, // 19: goproto.proto.testeditions.TestAllTypes.map_sfixed64_sfixed64:type_name -> goproto.proto.testeditions.TestAllTypes.MapSfixed64Sfixed64Entry + 22, // 20: goproto.proto.testeditions.TestAllTypes.map_int32_float:type_name -> goproto.proto.testeditions.TestAllTypes.MapInt32FloatEntry + 23, // 21: goproto.proto.testeditions.TestAllTypes.map_int32_double:type_name -> goproto.proto.testeditions.TestAllTypes.MapInt32DoubleEntry + 24, // 22: goproto.proto.testeditions.TestAllTypes.map_bool_bool:type_name -> goproto.proto.testeditions.TestAllTypes.MapBoolBoolEntry + 25, // 23: goproto.proto.testeditions.TestAllTypes.map_string_string:type_name -> goproto.proto.testeditions.TestAllTypes.MapStringStringEntry + 26, // 24: goproto.proto.testeditions.TestAllTypes.map_string_bytes:type_name -> goproto.proto.testeditions.TestAllTypes.MapStringBytesEntry + 27, // 25: goproto.proto.testeditions.TestAllTypes.map_string_nested_message:type_name -> goproto.proto.testeditions.TestAllTypes.MapStringNestedMessageEntry + 28, // 26: goproto.proto.testeditions.TestAllTypes.map_string_nested_enum:type_name -> goproto.proto.testeditions.TestAllTypes.MapStringNestedEnumEntry 1, // 27: goproto.proto.testeditions.TestAllTypes.default_nested_enum:type_name -> goproto.proto.testeditions.TestAllTypes.NestedEnum 0, // 28: goproto.proto.testeditions.TestAllTypes.default_foreign_enum:type_name -> goproto.proto.testeditions.ForeignEnum - 6, // 29: goproto.proto.testeditions.TestAllTypes.oneof_nested_message:type_name -> goproto.proto.testeditions.TestAllTypes.NestedMessage + 9, // 29: goproto.proto.testeditions.TestAllTypes.oneof_nested_message:type_name -> goproto.proto.testeditions.TestAllTypes.NestedMessage 1, // 30: goproto.proto.testeditions.TestAllTypes.oneof_enum:type_name -> goproto.proto.testeditions.TestAllTypes.NestedEnum - 4, // 31: goproto.proto.testeditions.TestRequiredForeign.optional_message:type_name -> goproto.proto.testeditions.TestRequired - 4, // 32: goproto.proto.testeditions.TestRequiredForeign.repeated_message:type_name -> goproto.proto.testeditions.TestRequired - 26, // 33: goproto.proto.testeditions.TestRequiredForeign.map_message:type_name -> goproto.proto.testeditions.TestRequiredForeign.MapMessageEntry - 4, // 34: goproto.proto.testeditions.TestRequiredForeign.oneof_message:type_name -> goproto.proto.testeditions.TestRequired - 2, // 35: goproto.proto.testeditions.TestAllTypes.NestedMessage.corecursive:type_name -> goproto.proto.testeditions.TestAllTypes - 6, // 36: goproto.proto.testeditions.TestAllTypes.OptionalGroup.optional_nested_message:type_name -> goproto.proto.testeditions.TestAllTypes.NestedMessage - 6, // 37: goproto.proto.testeditions.TestAllTypes.MapStringNestedMessageEntry.value:type_name -> goproto.proto.testeditions.TestAllTypes.NestedMessage - 1, // 38: goproto.proto.testeditions.TestAllTypes.MapStringNestedEnumEntry.value:type_name -> goproto.proto.testeditions.TestAllTypes.NestedEnum - 4, // 39: goproto.proto.testeditions.TestRequiredForeign.MapMessageEntry.value:type_name -> goproto.proto.testeditions.TestRequired - 40, // [40:40] is the sub-list for method output_type - 40, // [40:40] is the sub-list for method input_type - 40, // [40:40] is the sub-list for extension type_name - 40, // [40:40] is the sub-list for extension extendee - 0, // [0:40] is the sub-list for field type_name + 29, // 31: goproto.proto.testeditions.TestAllTypes.oneofgroup:type_name -> goproto.proto.testeditions.TestAllTypes.OneofGroup + 4, // 32: goproto.proto.testeditions.TestRequiredForeign.optional_message:type_name -> goproto.proto.testeditions.TestRequired + 4, // 33: goproto.proto.testeditions.TestRequiredForeign.repeated_message:type_name -> goproto.proto.testeditions.TestRequired + 30, // 34: goproto.proto.testeditions.TestRequiredForeign.map_message:type_name -> goproto.proto.testeditions.TestRequiredForeign.MapMessageEntry + 4, // 35: goproto.proto.testeditions.TestRequiredForeign.oneof_message:type_name -> goproto.proto.testeditions.TestRequired + 31, // 36: goproto.proto.testeditions.TestRequiredGroupFields.optionalgroup:type_name -> goproto.proto.testeditions.TestRequiredGroupFields.OptionalGroup + 32, // 37: goproto.proto.testeditions.TestRequiredGroupFields.repeatedgroup:type_name -> goproto.proto.testeditions.TestRequiredGroupFields.RepeatedGroup + 0, // 38: goproto.proto.testeditions.TestPackedTypes.packed_enum:type_name -> goproto.proto.testeditions.ForeignEnum + 2, // 39: goproto.proto.testeditions.TestAllTypes.NestedMessage.corecursive:type_name -> goproto.proto.testeditions.TestAllTypes + 9, // 40: goproto.proto.testeditions.TestAllTypes.OptionalGroup.optional_nested_message:type_name -> goproto.proto.testeditions.TestAllTypes.NestedMessage + 9, // 41: goproto.proto.testeditions.TestAllTypes.MapStringNestedMessageEntry.value:type_name -> goproto.proto.testeditions.TestAllTypes.NestedMessage + 1, // 42: goproto.proto.testeditions.TestAllTypes.MapStringNestedEnumEntry.value:type_name -> goproto.proto.testeditions.TestAllTypes.NestedEnum + 4, // 43: goproto.proto.testeditions.TestRequiredForeign.MapMessageEntry.value:type_name -> goproto.proto.testeditions.TestRequired + 8, // 44: goproto.proto.testeditions.packed_int32:extendee -> goproto.proto.testeditions.TestPackedExtensions + 8, // 45: goproto.proto.testeditions.packed_int64:extendee -> goproto.proto.testeditions.TestPackedExtensions + 8, // 46: goproto.proto.testeditions.packed_uint32:extendee -> goproto.proto.testeditions.TestPackedExtensions + 8, // 47: goproto.proto.testeditions.packed_uint64:extendee -> goproto.proto.testeditions.TestPackedExtensions + 8, // 48: goproto.proto.testeditions.packed_sint32:extendee -> goproto.proto.testeditions.TestPackedExtensions + 8, // 49: goproto.proto.testeditions.packed_sint64:extendee -> goproto.proto.testeditions.TestPackedExtensions + 8, // 50: goproto.proto.testeditions.packed_fixed32:extendee -> goproto.proto.testeditions.TestPackedExtensions + 8, // 51: goproto.proto.testeditions.packed_fixed64:extendee -> goproto.proto.testeditions.TestPackedExtensions + 8, // 52: goproto.proto.testeditions.packed_sfixed32:extendee -> goproto.proto.testeditions.TestPackedExtensions + 8, // 53: goproto.proto.testeditions.packed_sfixed64:extendee -> goproto.proto.testeditions.TestPackedExtensions + 8, // 54: goproto.proto.testeditions.packed_float:extendee -> goproto.proto.testeditions.TestPackedExtensions + 8, // 55: goproto.proto.testeditions.packed_double:extendee -> goproto.proto.testeditions.TestPackedExtensions + 8, // 56: goproto.proto.testeditions.packed_bool:extendee -> goproto.proto.testeditions.TestPackedExtensions + 8, // 57: goproto.proto.testeditions.packed_enum:extendee -> goproto.proto.testeditions.TestPackedExtensions + 0, // 58: goproto.proto.testeditions.packed_enum:type_name -> goproto.proto.testeditions.ForeignEnum + 59, // [59:59] is the sub-list for method output_type + 59, // [59:59] is the sub-list for method input_type + 58, // [58:59] is the sub-list for extension type_name + 44, // [44:58] is the sub-list for extension extendee + 0, // [0:44] is the sub-list for field type_name } func init() { file_internal_testprotos_testeditions_test_proto_init() } @@ -2122,7 +2860,7 @@ func file_internal_testprotos_testeditions_test_proto_init() { } } file_internal_testprotos_testeditions_test_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TestAllTypes_NestedMessage); i { + switch v := v.(*TestRequiredGroupFields); i { case 0: return &v.state case 1: @@ -2134,7 +2872,7 @@ func file_internal_testprotos_testeditions_test_proto_init() { } } file_internal_testprotos_testeditions_test_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TestAllTypes_OptionalGroup); i { + switch v := v.(*TestPackedTypes); i { case 0: return &v.state case 1: @@ -2146,6 +2884,44 @@ func file_internal_testprotos_testeditions_test_proto_init() { } } file_internal_testprotos_testeditions_test_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TestPackedExtensions); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + case 3: + return &v.extensionFields + default: + return nil + } + } + file_internal_testprotos_testeditions_test_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TestAllTypes_NestedMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_testprotos_testeditions_test_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TestAllTypes_OptionalGroup); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_testprotos_testeditions_test_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TestAllTypes_RepeatedGroup); i { case 0: return &v.state @@ -2157,6 +2933,42 @@ func file_internal_testprotos_testeditions_test_proto_init() { return nil } } + file_internal_testprotos_testeditions_test_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TestAllTypes_OneofGroup); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_testprotos_testeditions_test_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TestRequiredGroupFields_OptionalGroup); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_testprotos_testeditions_test_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TestRequiredGroupFields_RepeatedGroup); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_internal_testprotos_testeditions_test_proto_msgTypes[0].OneofWrappers = []interface{}{ (*TestAllTypes_OneofUint32)(nil), @@ -2168,6 +2980,7 @@ func file_internal_testprotos_testeditions_test_proto_init() { (*TestAllTypes_OneofFloat)(nil), (*TestAllTypes_OneofDouble)(nil), (*TestAllTypes_OneofEnum)(nil), + (*TestAllTypes_Oneofgroup)(nil), (*TestAllTypes_OneofOptionalUint32)(nil), } file_internal_testprotos_testeditions_test_proto_msgTypes[3].OneofWrappers = []interface{}{ @@ -2179,14 +2992,15 @@ func file_internal_testprotos_testeditions_test_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_internal_testprotos_testeditions_test_proto_rawDesc, NumEnums: 2, - NumMessages: 25, - NumExtensions: 0, + NumMessages: 31, + NumExtensions: 14, NumServices: 0, }, GoTypes: file_internal_testprotos_testeditions_test_proto_goTypes, DependencyIndexes: file_internal_testprotos_testeditions_test_proto_depIdxs, EnumInfos: file_internal_testprotos_testeditions_test_proto_enumTypes, MessageInfos: file_internal_testprotos_testeditions_test_proto_msgTypes, + ExtensionInfos: file_internal_testprotos_testeditions_test_proto_extTypes, }.Build() File_internal_testprotos_testeditions_test_proto = out.File file_internal_testprotos_testeditions_test_proto_rawDesc = nil diff --git a/internal/testprotos/testeditions/test.proto b/internal/testprotos/testeditions/test.proto index f181f5030..8b7d9fdf0 100644 --- a/internal/testprotos/testeditions/test.proto +++ b/internal/testprotos/testeditions/test.proto @@ -126,6 +126,10 @@ message TestAllTypes { NestedEnum default_nested_enum = 96 [default = BAR]; ForeignEnum default_foreign_enum = 97 [default = FOREIGN_BAR]; + message OneofGroup { + int32 a = 1; + int32 b = 2; + } oneof oneof_field { uint32 oneof_uint32 = 111; NestedMessage oneof_nested_message = 112; @@ -136,6 +140,7 @@ message TestAllTypes { float oneof_float = 117; double oneof_double = 118; NestedEnum oneof_enum = 119; + OneofGroup oneofgroup = 121 [features.message_encoding = DELIMITED]; } // A oneof with exactly one field. @@ -168,3 +173,73 @@ message TestRequiredForeign { TestRequired oneof_message = 4; } } + +message TestRequiredGroupFields { + message OptionalGroup { + int32 a = 2 [features.field_presence = LEGACY_REQUIRED]; + } + OptionalGroup optionalgroup = 1 [features.message_encoding = DELIMITED]; + message RepeatedGroup { + int32 a = 4 [features.field_presence = LEGACY_REQUIRED]; + } + repeated RepeatedGroup repeatedgroup = 3 + [features.message_encoding = DELIMITED]; +} + +message TestPackedTypes { + repeated int32 packed_int32 = 90 [features.repeated_field_encoding = PACKED]; + repeated int64 packed_int64 = 91 [features.repeated_field_encoding = PACKED]; + repeated uint32 packed_uint32 = 92 + [features.repeated_field_encoding = PACKED]; + repeated uint64 packed_uint64 = 93 + [features.repeated_field_encoding = PACKED]; + repeated sint32 packed_sint32 = 94 + [features.repeated_field_encoding = PACKED]; + repeated sint64 packed_sint64 = 95 + [features.repeated_field_encoding = PACKED]; + repeated fixed32 packed_fixed32 = 96 + [features.repeated_field_encoding = PACKED]; + repeated fixed64 packed_fixed64 = 97 + [features.repeated_field_encoding = PACKED]; + repeated sfixed32 packed_sfixed32 = 98 + [features.repeated_field_encoding = PACKED]; + repeated sfixed64 packed_sfixed64 = 99 + [features.repeated_field_encoding = PACKED]; + repeated float packed_float = 100 [features.repeated_field_encoding = PACKED]; + repeated double packed_double = 101 + [features.repeated_field_encoding = PACKED]; + repeated bool packed_bool = 102 [features.repeated_field_encoding = PACKED]; + repeated ForeignEnum packed_enum = 103 + [features.repeated_field_encoding = PACKED]; +} + +message TestPackedExtensions { + extensions 1 to max; +} + +extend TestPackedExtensions { + repeated int32 packed_int32 = 90 [features.repeated_field_encoding = PACKED]; + repeated int64 packed_int64 = 91 [features.repeated_field_encoding = PACKED]; + repeated uint32 packed_uint32 = 92 + [features.repeated_field_encoding = PACKED]; + repeated uint64 packed_uint64 = 93 + [features.repeated_field_encoding = PACKED]; + repeated sint32 packed_sint32 = 94 + [features.repeated_field_encoding = PACKED]; + repeated sint64 packed_sint64 = 95 + [features.repeated_field_encoding = PACKED]; + repeated fixed32 packed_fixed32 = 96 + [features.repeated_field_encoding = PACKED]; + repeated fixed64 packed_fixed64 = 97 + [features.repeated_field_encoding = PACKED]; + repeated sfixed32 packed_sfixed32 = 98 + [features.repeated_field_encoding = PACKED]; + repeated sfixed64 packed_sfixed64 = 99 + [features.repeated_field_encoding = PACKED]; + repeated float packed_float = 100 [features.repeated_field_encoding = PACKED]; + repeated double packed_double = 101 + [features.repeated_field_encoding = PACKED]; + repeated bool packed_bool = 102 [features.repeated_field_encoding = PACKED]; + repeated ForeignEnum packed_enum = 103 + [features.repeated_field_encoding = PACKED]; +} diff --git a/proto/testmessages_test.go b/proto/testmessages_test.go index 7584b58a7..368e51b87 100644 --- a/proto/testmessages_test.go +++ b/proto/testmessages_test.go @@ -105,6 +105,7 @@ var testValidMessages = []testProto{ protopack.Tag{21, protopack.VarintType}, protopack.Varint(int(testpb.TestAllTypes_BAR)), }.Marshal(), }, + { desc: "zero values", decodeTo: makeMessages(protobuild.Message{ @@ -142,8 +143,9 @@ var testValidMessages = []testProto{ protopack.Tag{15, protopack.BytesType}, protopack.Bytes(nil), }.Marshal(), }, + { - desc: "proto3 zero values", + desc: "editions zero values on implicit fields", decodeTo: makeMessages(protobuild.Message{ "singular_int32": 0, "singular_int64": 0, @@ -160,25 +162,26 @@ var testValidMessages = []testProto{ "singular_bool": false, "singular_string": "", "singular_bytes": []byte{}, - }, &test3pb.TestAllTypes{}), - wire: protopack.Message{ - protopack.Tag{81, protopack.VarintType}, protopack.Varint(0), - protopack.Tag{82, protopack.VarintType}, protopack.Varint(0), - protopack.Tag{83, protopack.VarintType}, protopack.Uvarint(0), - protopack.Tag{84, protopack.VarintType}, protopack.Uvarint(0), - protopack.Tag{85, protopack.VarintType}, protopack.Svarint(0), - protopack.Tag{86, protopack.VarintType}, protopack.Svarint(0), - protopack.Tag{87, protopack.Fixed32Type}, protopack.Uint32(0), - protopack.Tag{88, protopack.Fixed64Type}, protopack.Uint64(0), - protopack.Tag{89, protopack.Fixed32Type}, protopack.Int32(0), - protopack.Tag{90, protopack.Fixed64Type}, protopack.Int64(0), - protopack.Tag{91, protopack.Fixed32Type}, protopack.Float32(0), - protopack.Tag{92, protopack.Fixed64Type}, protopack.Float64(0), - protopack.Tag{93, protopack.VarintType}, protopack.Bool(false), - protopack.Tag{94, protopack.BytesType}, protopack.String(""), - protopack.Tag{95, protopack.BytesType}, protopack.Bytes(nil), + }, &testeditionspb.TestAllTypes{}), + wire: protopack.Message{ + protopack.Tag{124, protopack.VarintType}, protopack.Varint(0), + protopack.Tag{125, protopack.VarintType}, protopack.Varint(0), + protopack.Tag{126, protopack.VarintType}, protopack.Uvarint(0), + protopack.Tag{127, protopack.VarintType}, protopack.Uvarint(0), + protopack.Tag{128, protopack.VarintType}, protopack.Svarint(0), + protopack.Tag{129, protopack.VarintType}, protopack.Svarint(0), + protopack.Tag{130, protopack.Fixed32Type}, protopack.Uint32(0), + protopack.Tag{131, protopack.Fixed64Type}, protopack.Uint64(0), + protopack.Tag{132, protopack.Fixed32Type}, protopack.Int32(0), + protopack.Tag{133, protopack.Fixed64Type}, protopack.Int64(0), + protopack.Tag{134, protopack.Fixed32Type}, protopack.Float32(0), + protopack.Tag{135, protopack.Fixed64Type}, protopack.Float64(0), + protopack.Tag{136, protopack.VarintType}, protopack.Bool(false), + protopack.Tag{137, protopack.BytesType}, protopack.String(""), + protopack.Tag{138, protopack.BytesType}, protopack.Bytes(nil), }.Marshal(), }, + { desc: "groups", decodeTo: makeMessages(protobuild.Message{ @@ -186,7 +189,7 @@ var testValidMessages = []testProto{ "a": 1017, "same_field_number": 1016, }, - }, &testpb.TestAllTypes{}, &testpb.TestAllExtensions{}), + }, &testpb.TestAllTypes{}, &testpb.TestAllExtensions{}, &testeditionspb.TestAllTypes{}, &testeditionspb.TestAllExtensions{}), wire: protopack.Message{ protopack.Tag{16, protopack.StartGroupType}, protopack.Tag{17, protopack.VarintType}, protopack.Varint(1017), @@ -194,13 +197,14 @@ var testValidMessages = []testProto{ protopack.Tag{16, protopack.EndGroupType}, }.Marshal(), }, + { desc: "groups (field overridden)", decodeTo: makeMessages(protobuild.Message{ "optionalgroup": protobuild.Message{ "a": 2, }, - }, &testpb.TestAllTypes{}, &testpb.TestAllExtensions{}), + }, &testpb.TestAllTypes{}, &testpb.TestAllExtensions{}, &testeditionspb.TestAllTypes{}, &testeditionspb.TestAllExtensions{}), wire: protopack.Message{ protopack.Tag{16, protopack.StartGroupType}, protopack.Tag{17, protopack.VarintType}, protopack.Varint(1), @@ -210,6 +214,7 @@ var testValidMessages = []testProto{ protopack.Tag{16, protopack.EndGroupType}, }.Marshal(), }, + { desc: "messages", decodeTo: makeMessages(protobuild.Message{ @@ -229,6 +234,7 @@ var testValidMessages = []testProto{ }), }.Marshal(), }, + { desc: "messages (split across multiple tags)", decodeTo: makeMessages(protobuild.Message{ @@ -250,6 +256,7 @@ var testValidMessages = []testProto{ }), }.Marshal(), }, + { desc: "messages (field overridden)", decodeTo: makeMessages(protobuild.Message{ @@ -266,6 +273,7 @@ var testValidMessages = []testProto{ }), }.Marshal(), }, + { desc: "basic repeated types", decodeTo: makeMessages(protobuild.Message{ @@ -321,6 +329,7 @@ var testValidMessages = []testProto{ protopack.Tag{51, protopack.VarintType}, protopack.Varint(int(testpb.TestAllTypes_BAR)), }.Marshal(), }, + { desc: "basic repeated types (packed encoding)", decodeTo: makeMessages(protobuild.Message{ @@ -385,6 +394,7 @@ var testValidMessages = []testProto{ }, }.Marshal(), }, + { desc: "basic repeated types (zero-length packed encoding)", decodeTo: makeMessages(protobuild.Message{ @@ -420,6 +430,7 @@ var testValidMessages = []testProto{ protopack.Tag{51, protopack.BytesType}, protopack.LengthPrefix{}, }.Marshal(), }, + { desc: "packed repeated types", decodeTo: makeMessages(protobuild.Message{ @@ -484,6 +495,7 @@ var testValidMessages = []testProto{ }, }.Marshal(), }, + { desc: "packed repeated types (zero length)", decodeTo: makeMessages(protobuild.Message{ @@ -501,7 +513,7 @@ var testValidMessages = []testProto{ "packed_double": []float64{}, "packed_bool": []bool{}, "packed_enum": []string{}, - }, &testpb.TestPackedTypes{}, &testpb.TestPackedExtensions{}), + }, &testpb.TestPackedTypes{}, &testpb.TestPackedExtensions{}, &testeditionspb.TestPackedTypes{}, &testeditionspb.TestPackedExtensions{}), wire: protopack.Message{ protopack.Tag{90, protopack.BytesType}, protopack.LengthPrefix{}, protopack.Tag{91, protopack.BytesType}, protopack.LengthPrefix{}, @@ -519,6 +531,7 @@ var testValidMessages = []testProto{ protopack.Tag{103, protopack.BytesType}, protopack.LengthPrefix{}, }.Marshal(), }, + { desc: "repeated messages", decodeTo: makeMessages(protobuild.Message{ @@ -538,6 +551,7 @@ var testValidMessages = []testProto{ }), }.Marshal(), }, + { desc: "repeated nil messages", decodeTo: []proto.Message{&testpb.TestAllTypes{ @@ -546,6 +560,12 @@ var testValidMessages = []testProto{ nil, {A: proto.Int32(2)}, }, + }, &testeditionspb.TestAllTypes{ + RepeatedNestedMessage: []*testeditionspb.TestAllTypes_NestedMessage{ + {A: proto.Int32(1)}, + nil, + {A: proto.Int32(2)}, + }, }, &test3pb.TestAllTypes{ RepeatedNestedMessage: []*test3pb.TestAllTypes_NestedMessage{ {A: 1}, @@ -559,6 +579,13 @@ var testValidMessages = []testProto{ nil, {A: proto.Int32(2)}, }), + ), build( + &testeditionspb.TestAllExtensions{}, + extend(testeditionspb.E_RepeatedNestedMessage, []*testeditionspb.TestAllExtensions_NestedMessage{ + {A: proto.Int32(1)}, + nil, + {A: proto.Int32(2)}, + }), )}, wire: protopack.Message{ protopack.Tag{48, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ @@ -570,6 +597,7 @@ var testValidMessages = []testProto{ }), }.Marshal(), }, + { desc: "repeated groups", decodeTo: makeMessages(protobuild.Message{ @@ -578,7 +606,7 @@ var testValidMessages = []testProto{ {}, {"a": 2017}, }, - }, &testpb.TestAllTypes{}, &testpb.TestAllExtensions{}), + }, &testpb.TestAllTypes{}, &testpb.TestAllExtensions{}, &testeditionspb.TestAllTypes{}, &testeditionspb.TestAllExtensions{}), wire: protopack.Message{ protopack.Tag{46, protopack.StartGroupType}, protopack.Tag{47, protopack.VarintType}, protopack.Varint(1017), @@ -590,6 +618,7 @@ var testValidMessages = []testProto{ protopack.Tag{46, protopack.EndGroupType}, }.Marshal(), }, + { desc: "repeated nil groups", decodeTo: []proto.Message{&testpb.TestAllTypes{ @@ -598,6 +627,12 @@ var testValidMessages = []testProto{ nil, {A: proto.Int32(2017)}, }, + }, &testeditionspb.TestAllTypes{ + Repeatedgroup: []*testeditionspb.TestAllTypes_RepeatedGroup{ + {A: proto.Int32(1017)}, + nil, + {A: proto.Int32(2017)}, + }, }, build( &testpb.TestAllExtensions{}, extend(testpb.E_Repeatedgroup, []*testpb.RepeatedGroup{ @@ -605,6 +640,13 @@ var testValidMessages = []testProto{ nil, {A: proto.Int32(2017)}, }), + ), build( + &testeditionspb.TestAllExtensions{}, + extend(testeditionspb.E_Repeatedgroup, []*testeditionspb.RepeatedGroup{ + {A: proto.Int32(1017)}, + nil, + {A: proto.Int32(2017)}, + }), )}, wire: protopack.Message{ protopack.Tag{46, protopack.StartGroupType}, @@ -617,6 +659,7 @@ var testValidMessages = []testProto{ protopack.Tag{46, protopack.EndGroupType}, }.Marshal(), }, + { desc: "maps", decodeTo: makeMessages(protobuild.Message{ @@ -784,6 +827,7 @@ var testValidMessages = []testProto{ }), }.Marshal(), }, + { desc: "map with value before key", decodeTo: makeMessages(protobuild.Message{ @@ -805,6 +849,7 @@ var testValidMessages = []testProto{ }), }.Marshal(), }, + { desc: "map with repeated key and value", decodeTo: makeMessages(protobuild.Message{ @@ -830,6 +875,7 @@ var testValidMessages = []testProto{ }), }.Marshal(), }, + { desc: "oneof (uint32)", decodeTo: makeMessages(protobuild.Message{ @@ -837,6 +883,7 @@ var testValidMessages = []testProto{ }, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}, &testeditionspb.TestAllTypes{}), wire: protopack.Message{protopack.Tag{111, protopack.VarintType}, protopack.Varint(1111)}.Marshal(), }, + { desc: "oneof (message)", decodeTo: makeMessages(protobuild.Message{ @@ -848,6 +895,7 @@ var testValidMessages = []testProto{ protopack.Message{protopack.Tag{1, protopack.VarintType}, protopack.Varint(1112)}, })}.Marshal(), }, + { desc: "oneof (empty message)", decodeTo: makeMessages(protobuild.Message{ @@ -855,6 +903,7 @@ var testValidMessages = []testProto{ }, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}, &testeditionspb.TestAllTypes{}), wire: protopack.Message{protopack.Tag{112, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{})}.Marshal(), }, + { desc: "oneof (merged message)", decodeTo: makeMessages(protobuild.Message{ @@ -876,29 +925,32 @@ var testValidMessages = []testProto{ }), }.Marshal(), }, + { desc: "oneof (group)", decodeTo: makeMessages(protobuild.Message{ "oneofgroup": protobuild.Message{ "a": 1, }, - }, &testpb.TestAllTypes{}), + }, &testpb.TestAllTypes{}, &testeditionspb.TestAllTypes{}), wire: protopack.Message{ protopack.Tag{121, protopack.StartGroupType}, protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), protopack.Tag{121, protopack.EndGroupType}, }.Marshal(), }, + { desc: "oneof (empty group)", decodeTo: makeMessages(protobuild.Message{ "oneofgroup": protobuild.Message{}, - }, &testpb.TestAllTypes{}), + }, &testpb.TestAllTypes{}, &testeditionspb.TestAllTypes{}), wire: protopack.Message{ protopack.Tag{121, protopack.StartGroupType}, protopack.Tag{121, protopack.EndGroupType}, }.Marshal(), }, + { desc: "oneof (merged group)", decodeTo: makeMessages(protobuild.Message{ @@ -906,7 +958,7 @@ var testValidMessages = []testProto{ "a": 1, "b": 2, }, - }, &testpb.TestAllTypes{}), + }, &testpb.TestAllTypes{}, &testeditionspb.TestAllTypes{}), wire: protopack.Message{ protopack.Tag{121, protopack.StartGroupType}, protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), @@ -916,6 +968,7 @@ var testValidMessages = []testProto{ protopack.Tag{121, protopack.EndGroupType}, }.Marshal(), }, + { desc: "oneof (string)", decodeTo: makeMessages(protobuild.Message{ @@ -923,6 +976,7 @@ var testValidMessages = []testProto{ }, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}, &testeditionspb.TestAllTypes{}), wire: protopack.Message{protopack.Tag{113, protopack.BytesType}, protopack.String("1113")}.Marshal(), }, + { desc: "oneof (bytes)", decodeTo: makeMessages(protobuild.Message{ @@ -930,6 +984,7 @@ var testValidMessages = []testProto{ }, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}, &testeditionspb.TestAllTypes{}), wire: protopack.Message{protopack.Tag{114, protopack.BytesType}, protopack.String("1114")}.Marshal(), }, + { desc: "oneof (bool)", decodeTo: makeMessages(protobuild.Message{ @@ -937,6 +992,7 @@ var testValidMessages = []testProto{ }, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}, &testeditionspb.TestAllTypes{}), wire: protopack.Message{protopack.Tag{115, protopack.VarintType}, protopack.Bool(true)}.Marshal(), }, + { desc: "oneof (uint64)", decodeTo: makeMessages(protobuild.Message{ @@ -944,6 +1000,7 @@ var testValidMessages = []testProto{ }, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}, &testeditionspb.TestAllTypes{}), wire: protopack.Message{protopack.Tag{116, protopack.VarintType}, protopack.Varint(116)}.Marshal(), }, + { desc: "oneof (float)", decodeTo: makeMessages(protobuild.Message{ @@ -951,6 +1008,7 @@ var testValidMessages = []testProto{ }, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}, &testeditionspb.TestAllTypes{}), wire: protopack.Message{protopack.Tag{117, protopack.Fixed32Type}, protopack.Float32(117.5)}.Marshal(), }, + { desc: "oneof (double)", decodeTo: makeMessages(protobuild.Message{ @@ -958,6 +1016,7 @@ var testValidMessages = []testProto{ }, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}, &testeditionspb.TestAllTypes{}), wire: protopack.Message{protopack.Tag{118, protopack.Fixed64Type}, protopack.Float64(118.5)}.Marshal(), }, + { desc: "oneof (enum)", decodeTo: makeMessages(protobuild.Message{ @@ -965,6 +1024,7 @@ var testValidMessages = []testProto{ }, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}, &testeditionspb.TestAllTypes{}), wire: protopack.Message{protopack.Tag{119, protopack.VarintType}, protopack.Varint(int(testpb.TestAllTypes_BAR))}.Marshal(), }, + { desc: "oneof (zero)", decodeTo: makeMessages(protobuild.Message{ @@ -972,6 +1032,7 @@ var testValidMessages = []testProto{ }, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}, &testeditionspb.TestAllTypes{}), wire: protopack.Message{protopack.Tag{116, protopack.VarintType}, protopack.Varint(0)}.Marshal(), }, + { desc: "oneof (overridden value)", decodeTo: makeMessages(protobuild.Message{ @@ -982,11 +1043,13 @@ var testValidMessages = []testProto{ protopack.Tag{116, protopack.VarintType}, protopack.Varint(2), }.Marshal(), }, + // TODO: More unknown field tests for ordering, repeated fields, etc. // // It is currently impossible to produce results that the v1 Equal // considers equivalent to those of the v1 decoder. Figure out if // that's a problem or not. + { desc: "unknown fields", checkFastInit: true, @@ -999,6 +1062,7 @@ var testValidMessages = []testProto{ protopack.Tag{100000, protopack.VarintType}, protopack.Varint(1), }.Marshal(), }, + { desc: "discarded unknown fields", unmarshalOptions: proto.UnmarshalOptions{ @@ -1009,6 +1073,7 @@ var testValidMessages = []testProto{ protopack.Tag{100000, protopack.VarintType}, protopack.Varint(1), }.Marshal(), }, + { desc: "field type mismatch", decodeTo: makeMessages(protobuild.Message{ @@ -1020,6 +1085,7 @@ var testValidMessages = []testProto{ protopack.Tag{1, protopack.BytesType}, protopack.String("string"), }.Marshal(), }, + { desc: "map field element mismatch", decodeTo: makeMessages(protobuild.Message{ @@ -1032,18 +1098,21 @@ var testValidMessages = []testProto{ }), }.Marshal(), }, + { desc: "required field in nil message unset", checkFastInit: true, partial: true, decodeTo: []proto.Message{(*testpb.TestRequired)(nil)}, }, + { desc: "required int32 unset", checkFastInit: true, partial: true, decodeTo: makeMessages(protobuild.Message{}, &requiredpb.Int32{}), }, + { desc: "required int32 set", checkFastInit: true, @@ -1054,12 +1123,14 @@ var testValidMessages = []testProto{ protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), }.Marshal(), }, + { desc: "required fixed32 unset", checkFastInit: true, partial: true, decodeTo: makeMessages(protobuild.Message{}, &requiredpb.Fixed32{}), }, + { desc: "required fixed32 set", checkFastInit: true, @@ -1070,12 +1141,14 @@ var testValidMessages = []testProto{ protopack.Tag{1, protopack.Fixed32Type}, protopack.Int32(1), }.Marshal(), }, + { desc: "required fixed64 unset", checkFastInit: true, partial: true, decodeTo: makeMessages(protobuild.Message{}, &requiredpb.Fixed64{}), }, + { desc: "required fixed64 set", checkFastInit: true, @@ -1086,12 +1159,14 @@ var testValidMessages = []testProto{ protopack.Tag{1, protopack.Fixed64Type}, protopack.Int64(1), }.Marshal(), }, + { desc: "required bytes unset", checkFastInit: true, partial: true, decodeTo: makeMessages(protobuild.Message{}, &requiredpb.Bytes{}), }, + { desc: "required bytes set", checkFastInit: true, @@ -1102,12 +1177,14 @@ var testValidMessages = []testProto{ protopack.Tag{1, protopack.BytesType}, protopack.Bytes(nil), }.Marshal(), }, + { desc: "required message unset", checkFastInit: true, partial: true, decodeTo: makeMessages(protobuild.Message{}, &requiredpb.Message{}), }, + { desc: "required message set", checkFastInit: true, @@ -1118,12 +1195,14 @@ var testValidMessages = []testProto{ protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}), }.Marshal(), }, + { desc: "required group unset", checkFastInit: true, partial: true, decodeTo: makeMessages(protobuild.Message{}, &requiredpb.Group{}), }, + { desc: "required group set", checkFastInit: true, @@ -1135,6 +1214,7 @@ var testValidMessages = []testProto{ protopack.Tag{1, protopack.EndGroupType}, }.Marshal(), }, + { desc: "required field with incompatible wire type", checkFastInit: true, @@ -1144,22 +1224,29 @@ var testValidMessages = []testProto{ unknown(protopack.Message{ protopack.Tag{1, protopack.Fixed32Type}, protopack.Int32(2), }.Marshal()), + ), build( + &testeditionspb.TestRequired{}, + unknown(protopack.Message{ + protopack.Tag{1, protopack.Fixed32Type}, protopack.Int32(2), + }.Marshal()), )}, wire: protopack.Message{ protopack.Tag{1, protopack.Fixed32Type}, protopack.Int32(2), }.Marshal(), }, + { desc: "required field in optional message unset", checkFastInit: true, partial: true, decodeTo: makeMessages(protobuild.Message{ "optional_message": protobuild.Message{}, - }, &testpb.TestRequiredForeign{}), + }, &testpb.TestRequiredForeign{}, &testeditionspb.TestRequiredForeign{}), wire: protopack.Message{ protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}), }.Marshal(), }, + { desc: "required field in optional message set", checkFastInit: true, @@ -1167,13 +1254,14 @@ var testValidMessages = []testProto{ "optional_message": protobuild.Message{ "required_field": 1, }, - }, &testpb.TestRequiredForeign{}), + }, &testpb.TestRequiredForeign{}, &testeditionspb.TestRequiredForeign{}), wire: protopack.Message{ protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), }), }.Marshal(), }, + { desc: "required field in optional message set (split across multiple tags)", checkFastInit: false, // fast init checks don't handle split messages @@ -1182,7 +1270,7 @@ var testValidMessages = []testProto{ "optional_message": protobuild.Message{ "required_field": 1, }, - }, &testpb.TestRequiredForeign{}), + }, &testpb.TestRequiredForeign{}, &testeditionspb.TestRequiredForeign{}), wire: protopack.Message{ protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}), protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ @@ -1190,6 +1278,7 @@ var testValidMessages = []testProto{ }), }.Marshal(), }, + { desc: "required field in repeated message unset", checkFastInit: true, @@ -1199,7 +1288,7 @@ var testValidMessages = []testProto{ {"required_field": 1}, {}, }, - }, &testpb.TestRequiredForeign{}), + }, &testpb.TestRequiredForeign{}, &testeditionspb.TestRequiredForeign{}), wire: protopack.Message{ protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), @@ -1207,6 +1296,7 @@ var testValidMessages = []testProto{ protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}), }.Marshal(), }, + { desc: "required field in repeated message set", checkFastInit: true, @@ -1215,7 +1305,7 @@ var testValidMessages = []testProto{ {"required_field": 1}, {"required_field": 2}, }, - }, &testpb.TestRequiredForeign{}), + }, &testpb.TestRequiredForeign{}, &testeditionspb.TestRequiredForeign{}), wire: protopack.Message{ protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), @@ -1225,6 +1315,7 @@ var testValidMessages = []testProto{ }), }.Marshal(), }, + { desc: "required field in map message unset", checkFastInit: true, @@ -1234,7 +1325,7 @@ var testValidMessages = []testProto{ 1: {"required_field": 1}, 2: {}, }, - }, &testpb.TestRequiredForeign{}), + }, &testpb.TestRequiredForeign{}, &testeditionspb.TestRequiredForeign{}), wire: protopack.Message{ protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), @@ -1248,6 +1339,7 @@ var testValidMessages = []testProto{ }), }.Marshal(), }, + { desc: "required field in absent map message value", checkFastInit: true, @@ -1256,13 +1348,14 @@ var testValidMessages = []testProto{ "map_message": map[int32]protobuild.Message{ 2: {}, }, - }, &testpb.TestRequiredForeign{}), + }, &testpb.TestRequiredForeign{}, &testeditionspb.TestRequiredForeign{}), wire: protopack.Message{ protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ protopack.Tag{1, protopack.VarintType}, protopack.Varint(2), }), }.Marshal(), }, + { desc: "required field in map message set", checkFastInit: true, @@ -1271,7 +1364,7 @@ var testValidMessages = []testProto{ 1: {"required_field": 1}, 2: {"required_field": 2}, }, - }, &testpb.TestRequiredForeign{}), + }, &testpb.TestRequiredForeign{}, &testeditionspb.TestRequiredForeign{}), wire: protopack.Message{ protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), @@ -1287,18 +1380,20 @@ var testValidMessages = []testProto{ }), }.Marshal(), }, + { desc: "required field in optional group unset", checkFastInit: true, partial: true, decodeTo: makeMessages(protobuild.Message{ "optionalgroup": protobuild.Message{}, - }, &testpb.TestRequiredGroupFields{}), + }, &testpb.TestRequiredGroupFields{}, &testeditionspb.TestRequiredGroupFields{}), wire: protopack.Message{ protopack.Tag{1, protopack.StartGroupType}, protopack.Tag{1, protopack.EndGroupType}, }.Marshal(), }, + { desc: "required field in optional group set", checkFastInit: true, @@ -1306,13 +1401,14 @@ var testValidMessages = []testProto{ "optionalgroup": protobuild.Message{ "a": 1, }, - }, &testpb.TestRequiredGroupFields{}), + }, &testpb.TestRequiredGroupFields{}, &testeditionspb.TestRequiredGroupFields{}), wire: protopack.Message{ protopack.Tag{1, protopack.StartGroupType}, protopack.Tag{2, protopack.VarintType}, protopack.Varint(1), protopack.Tag{1, protopack.EndGroupType}, }.Marshal(), }, + { desc: "required field in repeated group unset", checkFastInit: true, @@ -1322,7 +1418,7 @@ var testValidMessages = []testProto{ {"a": 1}, {}, }, - }, &testpb.TestRequiredGroupFields{}), + }, &testpb.TestRequiredGroupFields{}, &testeditionspb.TestRequiredGroupFields{}), wire: protopack.Message{ protopack.Tag{3, protopack.StartGroupType}, protopack.Tag{4, protopack.VarintType}, protopack.Varint(1), @@ -1331,6 +1427,7 @@ var testValidMessages = []testProto{ protopack.Tag{3, protopack.EndGroupType}, }.Marshal(), }, + { desc: "required field in repeated group set", checkFastInit: true, @@ -1339,7 +1436,7 @@ var testValidMessages = []testProto{ {"a": 1}, {"a": 2}, }, - }, &testpb.TestRequiredGroupFields{}), + }, &testpb.TestRequiredGroupFields{}, &testeditionspb.TestRequiredGroupFields{}), wire: protopack.Message{ protopack.Tag{3, protopack.StartGroupType}, protopack.Tag{4, protopack.VarintType}, protopack.Varint(1), @@ -1349,15 +1446,17 @@ var testValidMessages = []testProto{ protopack.Tag{3, protopack.EndGroupType}, }.Marshal(), }, + { desc: "required field in oneof message unset", checkFastInit: true, partial: true, decodeTo: makeMessages(protobuild.Message{ "oneof_message": protobuild.Message{}, - }, &testpb.TestRequiredForeign{}), + }, &testpb.TestRequiredForeign{}, &testeditionspb.TestRequiredForeign{}), wire: protopack.Message{protopack.Tag{4, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{})}.Marshal(), }, + { desc: "required field in oneof message set", checkFastInit: true, @@ -1365,22 +1464,24 @@ var testValidMessages = []testProto{ "oneof_message": protobuild.Message{ "required_field": 1, }, - }, &testpb.TestRequiredForeign{}), + }, &testpb.TestRequiredForeign{}, &testeditionspb.TestRequiredForeign{}), wire: protopack.Message{protopack.Tag{4, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), })}.Marshal(), }, + { desc: "required field in extension message unset", checkFastInit: true, partial: true, decodeTo: makeMessages(protobuild.Message{ "single": protobuild.Message{}, - }, &testpb.TestAllExtensions{}), + }, &testpb.TestAllExtensions{}, &testeditionspb.TestAllExtensions{}), wire: protopack.Message{ protopack.Tag{1000, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}), }.Marshal(), }, + { desc: "required field in extension message set", checkFastInit: true, @@ -1388,13 +1489,14 @@ var testValidMessages = []testProto{ "single": protobuild.Message{ "required_field": 1, }, - }, &testpb.TestAllExtensions{}), + }, &testpb.TestAllExtensions{}, &testeditionspb.TestAllExtensions{}), wire: protopack.Message{ protopack.Tag{1000, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), }), }.Marshal(), }, + { desc: "required field in repeated extension message unset", checkFastInit: true, @@ -1404,7 +1506,7 @@ var testValidMessages = []testProto{ {"required_field": 1}, {}, }, - }, &testpb.TestAllExtensions{}), + }, &testpb.TestAllExtensions{}, &testeditionspb.TestAllExtensions{}), wire: protopack.Message{ protopack.Tag{1001, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), @@ -1412,6 +1514,7 @@ var testValidMessages = []testProto{ protopack.Tag{1001, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}), }.Marshal(), }, + { desc: "required field in repeated extension message set", checkFastInit: true, @@ -1420,7 +1523,7 @@ var testValidMessages = []testProto{ {"required_field": 1}, {"required_field": 2}, }, - }, &testpb.TestAllExtensions{}), + }, &testpb.TestAllExtensions{}, &testeditionspb.TestAllExtensions{}), wire: protopack.Message{ protopack.Tag{1001, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), @@ -1430,6 +1533,7 @@ var testValidMessages = []testProto{ }), }.Marshal(), }, + { desc: "nil messages", decodeTo: []proto.Message{ @@ -1439,6 +1543,7 @@ var testValidMessages = []testProto{ (*testpb.TestAllExtensions)(nil), }, }, + { desc: "legacy", partial: true, @@ -1495,6 +1600,7 @@ var testValidMessages = []testProto{ }.Marshal(), validationStatus: impl.ValidationUnknown, }, + { desc: "first reserved field number", decodeTo: makeMessages(protobuild.Message{ @@ -1506,6 +1612,7 @@ var testValidMessages = []testProto{ protopack.Tag{protopack.FirstReservedNumber, protopack.VarintType}, protopack.Varint(1004), }.Marshal(), }, + { desc: "last reserved field number", decodeTo: makeMessages(protobuild.Message{ @@ -1517,6 +1624,7 @@ var testValidMessages = []testProto{ protopack.Tag{protopack.LastReservedNumber, protopack.VarintType}, protopack.Varint(1005), }.Marshal(), }, + { desc: "nested unknown extension", unmarshalOptions: proto.UnmarshalOptions{ @@ -1543,7 +1651,7 @@ var testValidMessages = []testProto{ }, }, }, - }, &testpb.TestAllExtensions{}), + }, &testpb.TestAllExtensions{}, &testeditionspb.TestAllExtensions{}), wire: protopack.Message{ protopack.Tag{18, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{