proto, internal/protobuild: add test proto template builder

The proto package tests often test several variations of messages with a
similar shape. For example, most tests are performed with a proto2
message with a regular field, a proto2 message with an extension field,
and a proto3 message.

Add a protobuild package which can initialize all these variations from
a single template. For example, these three messages:

	&testpb.TestAllTypes{OptionalInt32: proto.Int32(1)}

	&test3pb.TestAllTypes{OptionalInt32: 1}

	m := &testpb.TestAllExtensions{}
	proto.SetExtension(m, &testpb.E_OptionalInt32, 1)

can all be constructed from the template:

	protobuild.Message{"optional_int32": 1}

This reduces redundancy in tests and will make it more practical to
test alternative code generators.

Change-Id: I3245a4bf74ee1bce957bc772fed513d427720677
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/217457
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
diff --git a/internal/impl/extension_test.go b/internal/impl/extension_test.go
index 4bf0258..6f83d03 100644
--- a/internal/impl/extension_test.go
+++ b/internal/impl/extension_test.go
@@ -26,91 +26,91 @@
 		value interface{}
 	}{
 		{
-			xt:    testpb.E_OptionalInt32Extension,
+			xt:    testpb.E_OptionalInt32,
 			value: int32(0),
 		},
 		{
-			xt:    testpb.E_OptionalInt64Extension,
+			xt:    testpb.E_OptionalInt64,
 			value: int64(0),
 		},
 		{
-			xt:    testpb.E_OptionalUint32Extension,
+			xt:    testpb.E_OptionalUint32,
 			value: uint32(0),
 		},
 		{
-			xt:    testpb.E_OptionalUint64Extension,
+			xt:    testpb.E_OptionalUint64,
 			value: uint64(0),
 		},
 		{
-			xt:    testpb.E_OptionalFloatExtension,
+			xt:    testpb.E_OptionalFloat,
 			value: float32(0),
 		},
 		{
-			xt:    testpb.E_OptionalDoubleExtension,
+			xt:    testpb.E_OptionalDouble,
 			value: float64(0),
 		},
 		{
-			xt:    testpb.E_OptionalBoolExtension,
+			xt:    testpb.E_OptionalBool,
 			value: true,
 		},
 		{
-			xt:    testpb.E_OptionalStringExtension,
+			xt:    testpb.E_OptionalString,
 			value: "",
 		},
 		{
-			xt:    testpb.E_OptionalBytesExtension,
+			xt:    testpb.E_OptionalBytes,
 			value: []byte{},
 		},
 		{
-			xt:    testpb.E_OptionalNestedMessageExtension,
+			xt:    testpb.E_OptionalNestedMessage,
 			value: &testpb.TestAllExtensions_NestedMessage{},
 		},
 		{
-			xt:    testpb.E_OptionalNestedEnumExtension,
+			xt:    testpb.E_OptionalNestedEnum,
 			value: testpb.TestAllTypes_FOO,
 		},
 		{
-			xt:    testpb.E_RepeatedInt32Extension,
+			xt:    testpb.E_RepeatedInt32,
 			value: []int32{0},
 		},
 		{
-			xt:    testpb.E_RepeatedInt64Extension,
+			xt:    testpb.E_RepeatedInt64,
 			value: []int64{0},
 		},
 		{
-			xt:    testpb.E_RepeatedUint32Extension,
+			xt:    testpb.E_RepeatedUint32,
 			value: []uint32{0},
 		},
 		{
-			xt:    testpb.E_RepeatedUint64Extension,
+			xt:    testpb.E_RepeatedUint64,
 			value: []uint64{0},
 		},
 		{
-			xt:    testpb.E_RepeatedFloatExtension,
+			xt:    testpb.E_RepeatedFloat,
 			value: []float32{0},
 		},
 		{
-			xt:    testpb.E_RepeatedDoubleExtension,
+			xt:    testpb.E_RepeatedDouble,
 			value: []float64{0},
 		},
 		{
-			xt:    testpb.E_RepeatedBoolExtension,
+			xt:    testpb.E_RepeatedBool,
 			value: []bool{true},
 		},
 		{
-			xt:    testpb.E_RepeatedStringExtension,
+			xt:    testpb.E_RepeatedString,
 			value: []string{""},
 		},
 		{
-			xt:    testpb.E_RepeatedBytesExtension,
+			xt:    testpb.E_RepeatedBytes,
 			value: [][]byte{nil},
 		},
 		{
-			xt:    testpb.E_RepeatedNestedMessageExtension,
+			xt:    testpb.E_RepeatedNestedMessage,
 			value: []*testpb.TestAllExtensions_NestedMessage{{}},
 		},
 		{
-			xt:    testpb.E_RepeatedNestedEnumExtension,
+			xt:    testpb.E_RepeatedNestedEnum,
 			value: []testpb.TestAllTypes_NestedEnum{testpb.TestAllTypes_FOO},
 		},
 	} {
diff --git a/internal/protobuild/build.go b/internal/protobuild/build.go
new file mode 100644
index 0000000..645f0c1
--- /dev/null
+++ b/internal/protobuild/build.go
@@ -0,0 +1,149 @@
+// Copyright 2020 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package protobuild constructs messages.
+//
+// This package is used to construct multiple types of message with a similar shape
+// from a common template.
+package protobuild
+
+import (
+	"fmt"
+	"math"
+	"reflect"
+
+	pref "google.golang.org/protobuf/reflect/protoreflect"
+	"google.golang.org/protobuf/reflect/protoregistry"
+)
+
+// A Value is a value assignable to a field.
+// A Value may be a value accepted by protoreflect.ValueOf. In addition:
+//
+// • An int may be assigned to any numeric field.
+//
+// • A float64 may be assigned to a double field.
+//
+// • Either a string or []byte may be assigned to a string or bytes field.
+//
+// • A string containing the value name may be assigned to an enum field.
+//
+// • A slice may be assigned to a list, and a map may be assigned to a map.
+type Value interface{}
+
+// A Message is a template to apply to a message. Keys are field names, including
+// extension names.
+type Message map[pref.Name]Value
+
+// Unknown is a key associated with the unknown fields of a message.
+// The value should be a []byte.
+const Unknown = "@unknown"
+
+// Build applies the template to a message.
+func (template Message) Build(m pref.Message) {
+	md := m.Descriptor()
+	fields := md.Fields()
+	exts := make(map[pref.Name]pref.FieldDescriptor)
+	protoregistry.GlobalTypes.RangeExtensionsByMessage(md.FullName(), func(xt pref.ExtensionType) bool {
+		xd := xt.TypeDescriptor()
+		exts[xd.Name()] = xd
+		return true
+	})
+	for k, v := range template {
+		if k == Unknown {
+			m.SetUnknown(pref.RawFields(v.([]byte)))
+			continue
+		}
+		fd := fields.ByName(k)
+		if fd == nil {
+			fd = exts[k]
+		}
+		if fd == nil {
+			panic(fmt.Sprintf("%v.%v: not found", md.FullName(), k))
+		}
+		switch {
+		case fd.IsList():
+			list := m.Mutable(fd).List()
+			s := reflect.ValueOf(v)
+			for i := 0; i < s.Len(); i++ {
+				if fd.Message() == nil {
+					list.Append(fieldValue(fd, s.Index(i).Interface()))
+				} else {
+					e := list.NewElement()
+					s.Index(i).Interface().(Message).Build(e.Message())
+					list.Append(e)
+				}
+			}
+		case fd.IsMap():
+			mapv := m.Mutable(fd).Map()
+			rm := reflect.ValueOf(v)
+			for _, k := range rm.MapKeys() {
+				mk := fieldValue(fd.MapKey(), k.Interface()).MapKey()
+				if fd.MapValue().Message() == nil {
+					mv := fieldValue(fd.MapValue(), rm.MapIndex(k).Interface())
+					mapv.Set(mk, mv)
+				} else if mapv.Has(mk) {
+					mv := mapv.Get(mk).Message()
+					rm.MapIndex(k).Interface().(Message).Build(mv)
+				} else {
+					mv := mapv.NewValue()
+					rm.MapIndex(k).Interface().(Message).Build(mv.Message())
+					mapv.Set(mk, mv)
+				}
+			}
+		default:
+			if fd.Message() == nil {
+				m.Set(fd, fieldValue(fd, v))
+			} else {
+				v.(Message).Build(m.Mutable(fd).Message())
+			}
+		}
+
+	}
+}
+
+func fieldValue(fd pref.FieldDescriptor, v interface{}) pref.Value {
+	switch o := v.(type) {
+	case int:
+		switch fd.Kind() {
+		case pref.Int32Kind, pref.Sint32Kind, pref.Sfixed32Kind:
+			if min, max := math.MinInt32, math.MaxInt32; o < min || o > max {
+				panic(fmt.Sprintf("%v: value %v out of range [%v, %v]", fd.FullName(), o, min, max))
+			}
+			v = int32(o)
+		case pref.Uint32Kind, pref.Fixed32Kind:
+			if min, max := 0, math.MaxUint32; o < min || o > max {
+				panic(fmt.Sprintf("%v: value %v out of range [%v, %v]", fd.FullName(), o, min, max))
+			}
+			v = uint32(o)
+		case pref.Int64Kind, pref.Sint64Kind, pref.Sfixed64Kind:
+			v = int64(o)
+		case pref.Uint64Kind, pref.Fixed64Kind:
+			if o < 0 {
+				panic(fmt.Sprintf("%v: value %v out of range [%v, %v]", fd.FullName(), o, 0, uint64(math.MaxUint64)))
+			}
+			v = uint64(o)
+		case pref.FloatKind:
+			v = float32(o)
+		case pref.DoubleKind:
+			v = float64(o)
+		case pref.EnumKind:
+			v = pref.EnumNumber(o)
+		default:
+			panic(fmt.Sprintf("%v: invalid value type int", fd.FullName()))
+		}
+	case float64:
+		switch fd.Kind() {
+		case pref.FloatKind:
+			v = float32(o)
+		}
+	case string:
+		switch fd.Kind() {
+		case pref.BytesKind:
+			v = []byte(o)
+		case pref.EnumKind:
+			v = fd.Enum().Values().ByName(pref.Name(o)).Number()
+		}
+	}
+	return pref.ValueOf(v)
+}
diff --git a/internal/testprotos/test/test.pb.go b/internal/testprotos/test/test.pb.go
index 9170ef1..09c22a3 100644
--- a/internal/testprotos/test/test.pb.go
+++ b/internal/testprotos/test/test.pb.go
@@ -1321,7 +1321,7 @@
 	return extRange_TestAllExtensions
 }
 
-type OptionalGroupExtension struct {
+type OptionalGroup struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
@@ -1331,8 +1331,8 @@
 	OptionalNestedMessage *TestAllExtensions_NestedMessage `protobuf:"bytes,1000,opt,name=optional_nested_message,json=optionalNestedMessage" json:"optional_nested_message,omitempty"`
 }
 
-func (x *OptionalGroupExtension) Reset() {
-	*x = OptionalGroupExtension{}
+func (x *OptionalGroup) Reset() {
+	*x = OptionalGroup{}
 	if protoimpl.UnsafeEnabled {
 		mi := &file_test_test_proto_msgTypes[5]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1340,13 +1340,13 @@
 	}
 }
 
-func (x *OptionalGroupExtension) String() string {
+func (x *OptionalGroup) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*OptionalGroupExtension) ProtoMessage() {}
+func (*OptionalGroup) ProtoMessage() {}
 
-func (x *OptionalGroupExtension) ProtoReflect() protoreflect.Message {
+func (x *OptionalGroup) ProtoReflect() protoreflect.Message {
 	mi := &file_test_test_proto_msgTypes[5]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1358,33 +1358,33 @@
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use OptionalGroupExtension.ProtoReflect.Descriptor instead.
-func (*OptionalGroupExtension) Descriptor() ([]byte, []int) {
+// Deprecated: Use OptionalGroup.ProtoReflect.Descriptor instead.
+func (*OptionalGroup) Descriptor() ([]byte, []int) {
 	return file_test_test_proto_rawDescGZIP(), []int{5}
 }
 
-func (x *OptionalGroupExtension) GetA() int32 {
+func (x *OptionalGroup) GetA() int32 {
 	if x != nil && x.A != nil {
 		return *x.A
 	}
 	return 0
 }
 
-func (x *OptionalGroupExtension) GetSameFieldNumber() int32 {
+func (x *OptionalGroup) GetSameFieldNumber() int32 {
 	if x != nil && x.SameFieldNumber != nil {
 		return *x.SameFieldNumber
 	}
 	return 0
 }
 
-func (x *OptionalGroupExtension) GetOptionalNestedMessage() *TestAllExtensions_NestedMessage {
+func (x *OptionalGroup) GetOptionalNestedMessage() *TestAllExtensions_NestedMessage {
 	if x != nil {
 		return x.OptionalNestedMessage
 	}
 	return nil
 }
 
-type RepeatedGroupExtension struct {
+type RepeatedGroup struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
@@ -1393,8 +1393,8 @@
 	OptionalNestedMessage *TestAllExtensions_NestedMessage `protobuf:"bytes,1001,opt,name=optional_nested_message,json=optionalNestedMessage" json:"optional_nested_message,omitempty"`
 }
 
-func (x *RepeatedGroupExtension) Reset() {
-	*x = RepeatedGroupExtension{}
+func (x *RepeatedGroup) Reset() {
+	*x = RepeatedGroup{}
 	if protoimpl.UnsafeEnabled {
 		mi := &file_test_test_proto_msgTypes[6]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1402,13 +1402,13 @@
 	}
 }
 
-func (x *RepeatedGroupExtension) String() string {
+func (x *RepeatedGroup) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*RepeatedGroupExtension) ProtoMessage() {}
+func (*RepeatedGroup) ProtoMessage() {}
 
-func (x *RepeatedGroupExtension) ProtoReflect() protoreflect.Message {
+func (x *RepeatedGroup) ProtoReflect() protoreflect.Message {
 	mi := &file_test_test_proto_msgTypes[6]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1420,19 +1420,19 @@
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use RepeatedGroupExtension.ProtoReflect.Descriptor instead.
-func (*RepeatedGroupExtension) Descriptor() ([]byte, []int) {
+// Deprecated: Use RepeatedGroup.ProtoReflect.Descriptor instead.
+func (*RepeatedGroup) Descriptor() ([]byte, []int) {
 	return file_test_test_proto_rawDescGZIP(), []int{6}
 }
 
-func (x *RepeatedGroupExtension) GetA() int32 {
+func (x *RepeatedGroup) GetA() int32 {
 	if x != nil && x.A != nil {
 		return *x.A
 	}
 	return 0
 }
 
-func (x *RepeatedGroupExtension) GetOptionalNestedMessage() *TestAllExtensions_NestedMessage {
+func (x *RepeatedGroup) GetOptionalNestedMessage() *TestAllExtensions_NestedMessage {
 	if x != nil {
 		return x.OptionalNestedMessage
 	}
@@ -2611,632 +2611,632 @@
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: (*int32)(nil),
 		Field:         1,
-		Name:          "goproto.proto.test.optional_int32_extension",
-		Tag:           "varint,1,opt,name=optional_int32_extension",
+		Name:          "goproto.proto.test.optional_int32",
+		Tag:           "varint,1,opt,name=optional_int32",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: (*int64)(nil),
 		Field:         2,
-		Name:          "goproto.proto.test.optional_int64_extension",
-		Tag:           "varint,2,opt,name=optional_int64_extension",
+		Name:          "goproto.proto.test.optional_int64",
+		Tag:           "varint,2,opt,name=optional_int64",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: (*uint32)(nil),
 		Field:         3,
-		Name:          "goproto.proto.test.optional_uint32_extension",
-		Tag:           "varint,3,opt,name=optional_uint32_extension",
+		Name:          "goproto.proto.test.optional_uint32",
+		Tag:           "varint,3,opt,name=optional_uint32",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: (*uint64)(nil),
 		Field:         4,
-		Name:          "goproto.proto.test.optional_uint64_extension",
-		Tag:           "varint,4,opt,name=optional_uint64_extension",
+		Name:          "goproto.proto.test.optional_uint64",
+		Tag:           "varint,4,opt,name=optional_uint64",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: (*int32)(nil),
 		Field:         5,
-		Name:          "goproto.proto.test.optional_sint32_extension",
-		Tag:           "zigzag32,5,opt,name=optional_sint32_extension",
+		Name:          "goproto.proto.test.optional_sint32",
+		Tag:           "zigzag32,5,opt,name=optional_sint32",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: (*int64)(nil),
 		Field:         6,
-		Name:          "goproto.proto.test.optional_sint64_extension",
-		Tag:           "zigzag64,6,opt,name=optional_sint64_extension",
+		Name:          "goproto.proto.test.optional_sint64",
+		Tag:           "zigzag64,6,opt,name=optional_sint64",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: (*uint32)(nil),
 		Field:         7,
-		Name:          "goproto.proto.test.optional_fixed32_extension",
-		Tag:           "fixed32,7,opt,name=optional_fixed32_extension",
+		Name:          "goproto.proto.test.optional_fixed32",
+		Tag:           "fixed32,7,opt,name=optional_fixed32",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: (*uint64)(nil),
 		Field:         8,
-		Name:          "goproto.proto.test.optional_fixed64_extension",
-		Tag:           "fixed64,8,opt,name=optional_fixed64_extension",
+		Name:          "goproto.proto.test.optional_fixed64",
+		Tag:           "fixed64,8,opt,name=optional_fixed64",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: (*int32)(nil),
 		Field:         9,
-		Name:          "goproto.proto.test.optional_sfixed32_extension",
-		Tag:           "fixed32,9,opt,name=optional_sfixed32_extension",
+		Name:          "goproto.proto.test.optional_sfixed32",
+		Tag:           "fixed32,9,opt,name=optional_sfixed32",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: (*int64)(nil),
 		Field:         10,
-		Name:          "goproto.proto.test.optional_sfixed64_extension",
-		Tag:           "fixed64,10,opt,name=optional_sfixed64_extension",
+		Name:          "goproto.proto.test.optional_sfixed64",
+		Tag:           "fixed64,10,opt,name=optional_sfixed64",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: (*float32)(nil),
 		Field:         11,
-		Name:          "goproto.proto.test.optional_float_extension",
-		Tag:           "fixed32,11,opt,name=optional_float_extension",
+		Name:          "goproto.proto.test.optional_float",
+		Tag:           "fixed32,11,opt,name=optional_float",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: (*float64)(nil),
 		Field:         12,
-		Name:          "goproto.proto.test.optional_double_extension",
-		Tag:           "fixed64,12,opt,name=optional_double_extension",
+		Name:          "goproto.proto.test.optional_double",
+		Tag:           "fixed64,12,opt,name=optional_double",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: (*bool)(nil),
 		Field:         13,
-		Name:          "goproto.proto.test.optional_bool_extension",
-		Tag:           "varint,13,opt,name=optional_bool_extension",
+		Name:          "goproto.proto.test.optional_bool",
+		Tag:           "varint,13,opt,name=optional_bool",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: (*string)(nil),
 		Field:         14,
-		Name:          "goproto.proto.test.optional_string_extension",
-		Tag:           "bytes,14,opt,name=optional_string_extension",
+		Name:          "goproto.proto.test.optional_string",
+		Tag:           "bytes,14,opt,name=optional_string",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: ([]byte)(nil),
 		Field:         15,
-		Name:          "goproto.proto.test.optional_bytes_extension",
-		Tag:           "bytes,15,opt,name=optional_bytes_extension",
+		Name:          "goproto.proto.test.optional_bytes",
+		Tag:           "bytes,15,opt,name=optional_bytes",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
-		ExtensionType: (*OptionalGroupExtension)(nil),
+		ExtensionType: (*OptionalGroup)(nil),
 		Field:         16,
-		Name:          "goproto.proto.test.optionalgroup_extension",
-		Tag:           "group,16,opt,name=OptionalGroup_extension",
+		Name:          "goproto.proto.test.optionalgroup",
+		Tag:           "group,16,opt,name=OptionalGroup",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: (*TestAllExtensions_NestedMessage)(nil),
 		Field:         18,
-		Name:          "goproto.proto.test.optional_nested_message_extension",
-		Tag:           "bytes,18,opt,name=optional_nested_message_extension",
+		Name:          "goproto.proto.test.optional_nested_message",
+		Tag:           "bytes,18,opt,name=optional_nested_message",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: (*TestAllTypes_NestedEnum)(nil),
 		Field:         21,
-		Name:          "goproto.proto.test.optional_nested_enum_extension",
-		Tag:           "varint,21,opt,name=optional_nested_enum_extension,enum=goproto.proto.test.TestAllTypes_NestedEnum",
+		Name:          "goproto.proto.test.optional_nested_enum",
+		Tag:           "varint,21,opt,name=optional_nested_enum,enum=goproto.proto.test.TestAllTypes_NestedEnum",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: ([]int32)(nil),
 		Field:         31,
-		Name:          "goproto.proto.test.repeated_int32_extension",
-		Tag:           "varint,31,rep,name=repeated_int32_extension",
+		Name:          "goproto.proto.test.repeated_int32",
+		Tag:           "varint,31,rep,name=repeated_int32",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: ([]int64)(nil),
 		Field:         32,
-		Name:          "goproto.proto.test.repeated_int64_extension",
-		Tag:           "varint,32,rep,name=repeated_int64_extension",
+		Name:          "goproto.proto.test.repeated_int64",
+		Tag:           "varint,32,rep,name=repeated_int64",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: ([]uint32)(nil),
 		Field:         33,
-		Name:          "goproto.proto.test.repeated_uint32_extension",
-		Tag:           "varint,33,rep,name=repeated_uint32_extension",
+		Name:          "goproto.proto.test.repeated_uint32",
+		Tag:           "varint,33,rep,name=repeated_uint32",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: ([]uint64)(nil),
 		Field:         34,
-		Name:          "goproto.proto.test.repeated_uint64_extension",
-		Tag:           "varint,34,rep,name=repeated_uint64_extension",
+		Name:          "goproto.proto.test.repeated_uint64",
+		Tag:           "varint,34,rep,name=repeated_uint64",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: ([]int32)(nil),
 		Field:         35,
-		Name:          "goproto.proto.test.repeated_sint32_extension",
-		Tag:           "zigzag32,35,rep,name=repeated_sint32_extension",
+		Name:          "goproto.proto.test.repeated_sint32",
+		Tag:           "zigzag32,35,rep,name=repeated_sint32",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: ([]int64)(nil),
 		Field:         36,
-		Name:          "goproto.proto.test.repeated_sint64_extension",
-		Tag:           "zigzag64,36,rep,name=repeated_sint64_extension",
+		Name:          "goproto.proto.test.repeated_sint64",
+		Tag:           "zigzag64,36,rep,name=repeated_sint64",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: ([]uint32)(nil),
 		Field:         37,
-		Name:          "goproto.proto.test.repeated_fixed32_extension",
-		Tag:           "fixed32,37,rep,name=repeated_fixed32_extension",
+		Name:          "goproto.proto.test.repeated_fixed32",
+		Tag:           "fixed32,37,rep,name=repeated_fixed32",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: ([]uint64)(nil),
 		Field:         38,
-		Name:          "goproto.proto.test.repeated_fixed64_extension",
-		Tag:           "fixed64,38,rep,name=repeated_fixed64_extension",
+		Name:          "goproto.proto.test.repeated_fixed64",
+		Tag:           "fixed64,38,rep,name=repeated_fixed64",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: ([]int32)(nil),
 		Field:         39,
-		Name:          "goproto.proto.test.repeated_sfixed32_extension",
-		Tag:           "fixed32,39,rep,name=repeated_sfixed32_extension",
+		Name:          "goproto.proto.test.repeated_sfixed32",
+		Tag:           "fixed32,39,rep,name=repeated_sfixed32",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: ([]int64)(nil),
 		Field:         40,
-		Name:          "goproto.proto.test.repeated_sfixed64_extension",
-		Tag:           "fixed64,40,rep,name=repeated_sfixed64_extension",
+		Name:          "goproto.proto.test.repeated_sfixed64",
+		Tag:           "fixed64,40,rep,name=repeated_sfixed64",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: ([]float32)(nil),
 		Field:         41,
-		Name:          "goproto.proto.test.repeated_float_extension",
-		Tag:           "fixed32,41,rep,name=repeated_float_extension",
+		Name:          "goproto.proto.test.repeated_float",
+		Tag:           "fixed32,41,rep,name=repeated_float",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: ([]float64)(nil),
 		Field:         42,
-		Name:          "goproto.proto.test.repeated_double_extension",
-		Tag:           "fixed64,42,rep,name=repeated_double_extension",
+		Name:          "goproto.proto.test.repeated_double",
+		Tag:           "fixed64,42,rep,name=repeated_double",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: ([]bool)(nil),
 		Field:         43,
-		Name:          "goproto.proto.test.repeated_bool_extension",
-		Tag:           "varint,43,rep,name=repeated_bool_extension",
+		Name:          "goproto.proto.test.repeated_bool",
+		Tag:           "varint,43,rep,name=repeated_bool",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: ([]string)(nil),
 		Field:         44,
-		Name:          "goproto.proto.test.repeated_string_extension",
-		Tag:           "bytes,44,rep,name=repeated_string_extension",
+		Name:          "goproto.proto.test.repeated_string",
+		Tag:           "bytes,44,rep,name=repeated_string",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: ([][]byte)(nil),
 		Field:         45,
-		Name:          "goproto.proto.test.repeated_bytes_extension",
-		Tag:           "bytes,45,rep,name=repeated_bytes_extension",
+		Name:          "goproto.proto.test.repeated_bytes",
+		Tag:           "bytes,45,rep,name=repeated_bytes",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
-		ExtensionType: ([]*RepeatedGroupExtension)(nil),
+		ExtensionType: ([]*RepeatedGroup)(nil),
 		Field:         46,
-		Name:          "goproto.proto.test.repeatedgroup_extension",
-		Tag:           "group,46,rep,name=RepeatedGroup_extension",
+		Name:          "goproto.proto.test.repeatedgroup",
+		Tag:           "group,46,rep,name=RepeatedGroup",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: ([]*TestAllExtensions_NestedMessage)(nil),
 		Field:         48,
-		Name:          "goproto.proto.test.repeated_nested_message_extension",
-		Tag:           "bytes,48,rep,name=repeated_nested_message_extension",
+		Name:          "goproto.proto.test.repeated_nested_message",
+		Tag:           "bytes,48,rep,name=repeated_nested_message",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: ([]TestAllTypes_NestedEnum)(nil),
 		Field:         51,
-		Name:          "goproto.proto.test.repeated_nested_enum_extension",
-		Tag:           "varint,51,rep,name=repeated_nested_enum_extension,enum=goproto.proto.test.TestAllTypes_NestedEnum",
+		Name:          "goproto.proto.test.repeated_nested_enum",
+		Tag:           "varint,51,rep,name=repeated_nested_enum,enum=goproto.proto.test.TestAllTypes_NestedEnum",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: (*int32)(nil),
 		Field:         81,
-		Name:          "goproto.proto.test.default_int32_extension",
-		Tag:           "varint,81,opt,name=default_int32_extension,def=81",
+		Name:          "goproto.proto.test.default_int32",
+		Tag:           "varint,81,opt,name=default_int32,def=81",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: (*int64)(nil),
 		Field:         82,
-		Name:          "goproto.proto.test.default_int64_extension",
-		Tag:           "varint,82,opt,name=default_int64_extension,def=82",
+		Name:          "goproto.proto.test.default_int64",
+		Tag:           "varint,82,opt,name=default_int64,def=82",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: (*uint32)(nil),
 		Field:         83,
-		Name:          "goproto.proto.test.default_uint32_extension",
-		Tag:           "varint,83,opt,name=default_uint32_extension,def=83",
+		Name:          "goproto.proto.test.default_uint32",
+		Tag:           "varint,83,opt,name=default_uint32,def=83",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: (*uint64)(nil),
 		Field:         84,
-		Name:          "goproto.proto.test.default_uint64_extension",
-		Tag:           "varint,84,opt,name=default_uint64_extension,def=84",
+		Name:          "goproto.proto.test.default_uint64",
+		Tag:           "varint,84,opt,name=default_uint64,def=84",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: (*int32)(nil),
 		Field:         85,
-		Name:          "goproto.proto.test.default_sint32_extension",
-		Tag:           "zigzag32,85,opt,name=default_sint32_extension,def=-85",
+		Name:          "goproto.proto.test.default_sint32",
+		Tag:           "zigzag32,85,opt,name=default_sint32,def=-85",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: (*int64)(nil),
 		Field:         86,
-		Name:          "goproto.proto.test.default_sint64_extension",
-		Tag:           "zigzag64,86,opt,name=default_sint64_extension,def=86",
+		Name:          "goproto.proto.test.default_sint64",
+		Tag:           "zigzag64,86,opt,name=default_sint64,def=86",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: (*uint32)(nil),
 		Field:         87,
-		Name:          "goproto.proto.test.default_fixed32_extension",
-		Tag:           "fixed32,87,opt,name=default_fixed32_extension,def=87",
+		Name:          "goproto.proto.test.default_fixed32",
+		Tag:           "fixed32,87,opt,name=default_fixed32,def=87",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: (*uint64)(nil),
 		Field:         88,
-		Name:          "goproto.proto.test.default_fixed64_extension",
-		Tag:           "fixed64,88,opt,name=default_fixed64_extension,def=88",
+		Name:          "goproto.proto.test.default_fixed64",
+		Tag:           "fixed64,88,opt,name=default_fixed64,def=88",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: (*int32)(nil),
 		Field:         89,
-		Name:          "goproto.proto.test.default_sfixed32_extension",
-		Tag:           "fixed32,89,opt,name=default_sfixed32_extension,def=89",
+		Name:          "goproto.proto.test.default_sfixed32",
+		Tag:           "fixed32,89,opt,name=default_sfixed32,def=89",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: (*int64)(nil),
 		Field:         80,
-		Name:          "goproto.proto.test.default_sfixed64_extension",
-		Tag:           "fixed64,80,opt,name=default_sfixed64_extension,def=-90",
+		Name:          "goproto.proto.test.default_sfixed64",
+		Tag:           "fixed64,80,opt,name=default_sfixed64,def=-90",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: (*float32)(nil),
 		Field:         91,
-		Name:          "goproto.proto.test.default_float_extension",
-		Tag:           "fixed32,91,opt,name=default_float_extension,def=91.5",
+		Name:          "goproto.proto.test.default_float",
+		Tag:           "fixed32,91,opt,name=default_float,def=91.5",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: (*float64)(nil),
 		Field:         92,
-		Name:          "goproto.proto.test.default_double_extension",
-		Tag:           "fixed64,92,opt,name=default_double_extension,def=92000",
+		Name:          "goproto.proto.test.default_double",
+		Tag:           "fixed64,92,opt,name=default_double,def=92000",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: (*bool)(nil),
 		Field:         93,
-		Name:          "goproto.proto.test.default_bool_extension",
-		Tag:           "varint,93,opt,name=default_bool_extension,def=1",
+		Name:          "goproto.proto.test.default_bool",
+		Tag:           "varint,93,opt,name=default_bool,def=1",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: (*string)(nil),
 		Field:         94,
-		Name:          "goproto.proto.test.default_string_extension",
-		Tag:           "bytes,94,opt,name=default_string_extension,def=hello",
+		Name:          "goproto.proto.test.default_string",
+		Tag:           "bytes,94,opt,name=default_string,def=hello",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestAllExtensions)(nil),
 		ExtensionType: ([]byte)(nil),
 		Field:         95,
-		Name:          "goproto.proto.test.default_bytes_extension",
-		Tag:           "bytes,95,opt,name=default_bytes_extension,def=world",
+		Name:          "goproto.proto.test.default_bytes",
+		Tag:           "bytes,95,opt,name=default_bytes,def=world",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestPackedExtensions)(nil),
 		ExtensionType: ([]int32)(nil),
 		Field:         90,
-		Name:          "goproto.proto.test.packed_int32_extension",
-		Tag:           "varint,90,rep,packed,name=packed_int32_extension",
+		Name:          "goproto.proto.test.packed_int32",
+		Tag:           "varint,90,rep,packed,name=packed_int32",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestPackedExtensions)(nil),
 		ExtensionType: ([]int64)(nil),
 		Field:         91,
-		Name:          "goproto.proto.test.packed_int64_extension",
-		Tag:           "varint,91,rep,packed,name=packed_int64_extension",
+		Name:          "goproto.proto.test.packed_int64",
+		Tag:           "varint,91,rep,packed,name=packed_int64",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestPackedExtensions)(nil),
 		ExtensionType: ([]uint32)(nil),
 		Field:         92,
-		Name:          "goproto.proto.test.packed_uint32_extension",
-		Tag:           "varint,92,rep,packed,name=packed_uint32_extension",
+		Name:          "goproto.proto.test.packed_uint32",
+		Tag:           "varint,92,rep,packed,name=packed_uint32",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestPackedExtensions)(nil),
 		ExtensionType: ([]uint64)(nil),
 		Field:         93,
-		Name:          "goproto.proto.test.packed_uint64_extension",
-		Tag:           "varint,93,rep,packed,name=packed_uint64_extension",
+		Name:          "goproto.proto.test.packed_uint64",
+		Tag:           "varint,93,rep,packed,name=packed_uint64",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestPackedExtensions)(nil),
 		ExtensionType: ([]int32)(nil),
 		Field:         94,
-		Name:          "goproto.proto.test.packed_sint32_extension",
-		Tag:           "zigzag32,94,rep,packed,name=packed_sint32_extension",
+		Name:          "goproto.proto.test.packed_sint32",
+		Tag:           "zigzag32,94,rep,packed,name=packed_sint32",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestPackedExtensions)(nil),
 		ExtensionType: ([]int64)(nil),
 		Field:         95,
-		Name:          "goproto.proto.test.packed_sint64_extension",
-		Tag:           "zigzag64,95,rep,packed,name=packed_sint64_extension",
+		Name:          "goproto.proto.test.packed_sint64",
+		Tag:           "zigzag64,95,rep,packed,name=packed_sint64",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestPackedExtensions)(nil),
 		ExtensionType: ([]uint32)(nil),
 		Field:         96,
-		Name:          "goproto.proto.test.packed_fixed32_extension",
-		Tag:           "fixed32,96,rep,packed,name=packed_fixed32_extension",
+		Name:          "goproto.proto.test.packed_fixed32",
+		Tag:           "fixed32,96,rep,packed,name=packed_fixed32",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestPackedExtensions)(nil),
 		ExtensionType: ([]uint64)(nil),
 		Field:         97,
-		Name:          "goproto.proto.test.packed_fixed64_extension",
-		Tag:           "fixed64,97,rep,packed,name=packed_fixed64_extension",
+		Name:          "goproto.proto.test.packed_fixed64",
+		Tag:           "fixed64,97,rep,packed,name=packed_fixed64",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestPackedExtensions)(nil),
 		ExtensionType: ([]int32)(nil),
 		Field:         98,
-		Name:          "goproto.proto.test.packed_sfixed32_extension",
-		Tag:           "fixed32,98,rep,packed,name=packed_sfixed32_extension",
+		Name:          "goproto.proto.test.packed_sfixed32",
+		Tag:           "fixed32,98,rep,packed,name=packed_sfixed32",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestPackedExtensions)(nil),
 		ExtensionType: ([]int64)(nil),
 		Field:         99,
-		Name:          "goproto.proto.test.packed_sfixed64_extension",
-		Tag:           "fixed64,99,rep,packed,name=packed_sfixed64_extension",
+		Name:          "goproto.proto.test.packed_sfixed64",
+		Tag:           "fixed64,99,rep,packed,name=packed_sfixed64",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestPackedExtensions)(nil),
 		ExtensionType: ([]float32)(nil),
 		Field:         100,
-		Name:          "goproto.proto.test.packed_float_extension",
-		Tag:           "fixed32,100,rep,packed,name=packed_float_extension",
+		Name:          "goproto.proto.test.packed_float",
+		Tag:           "fixed32,100,rep,packed,name=packed_float",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestPackedExtensions)(nil),
 		ExtensionType: ([]float64)(nil),
 		Field:         101,
-		Name:          "goproto.proto.test.packed_double_extension",
-		Tag:           "fixed64,101,rep,packed,name=packed_double_extension",
+		Name:          "goproto.proto.test.packed_double",
+		Tag:           "fixed64,101,rep,packed,name=packed_double",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestPackedExtensions)(nil),
 		ExtensionType: ([]bool)(nil),
 		Field:         102,
-		Name:          "goproto.proto.test.packed_bool_extension",
-		Tag:           "varint,102,rep,packed,name=packed_bool_extension",
+		Name:          "goproto.proto.test.packed_bool",
+		Tag:           "varint,102,rep,packed,name=packed_bool",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestPackedExtensions)(nil),
 		ExtensionType: ([]ForeignEnum)(nil),
 		Field:         103,
-		Name:          "goproto.proto.test.packed_enum_extension",
-		Tag:           "varint,103,rep,packed,name=packed_enum_extension,enum=goproto.proto.test.ForeignEnum",
+		Name:          "goproto.proto.test.packed_enum",
+		Tag:           "varint,103,rep,packed,name=packed_enum,enum=goproto.proto.test.ForeignEnum",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestUnpackedExtensions)(nil),
 		ExtensionType: ([]int32)(nil),
 		Field:         90,
-		Name:          "goproto.proto.test.unpacked_int32_extension",
-		Tag:           "varint,90,rep,name=unpacked_int32_extension",
+		Name:          "goproto.proto.test.unpacked_int32",
+		Tag:           "varint,90,rep,name=unpacked_int32",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestUnpackedExtensions)(nil),
 		ExtensionType: ([]int64)(nil),
 		Field:         91,
-		Name:          "goproto.proto.test.unpacked_int64_extension",
-		Tag:           "varint,91,rep,name=unpacked_int64_extension",
+		Name:          "goproto.proto.test.unpacked_int64",
+		Tag:           "varint,91,rep,name=unpacked_int64",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestUnpackedExtensions)(nil),
 		ExtensionType: ([]uint32)(nil),
 		Field:         92,
-		Name:          "goproto.proto.test.unpacked_uint32_extension",
-		Tag:           "varint,92,rep,name=unpacked_uint32_extension",
+		Name:          "goproto.proto.test.unpacked_uint32",
+		Tag:           "varint,92,rep,name=unpacked_uint32",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestUnpackedExtensions)(nil),
 		ExtensionType: ([]uint64)(nil),
 		Field:         93,
-		Name:          "goproto.proto.test.unpacked_uint64_extension",
-		Tag:           "varint,93,rep,name=unpacked_uint64_extension",
+		Name:          "goproto.proto.test.unpacked_uint64",
+		Tag:           "varint,93,rep,name=unpacked_uint64",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestUnpackedExtensions)(nil),
 		ExtensionType: ([]int32)(nil),
 		Field:         94,
-		Name:          "goproto.proto.test.unpacked_sint32_extension",
-		Tag:           "zigzag32,94,rep,name=unpacked_sint32_extension",
+		Name:          "goproto.proto.test.unpacked_sint32",
+		Tag:           "zigzag32,94,rep,name=unpacked_sint32",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestUnpackedExtensions)(nil),
 		ExtensionType: ([]int64)(nil),
 		Field:         95,
-		Name:          "goproto.proto.test.unpacked_sint64_extension",
-		Tag:           "zigzag64,95,rep,name=unpacked_sint64_extension",
+		Name:          "goproto.proto.test.unpacked_sint64",
+		Tag:           "zigzag64,95,rep,name=unpacked_sint64",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestUnpackedExtensions)(nil),
 		ExtensionType: ([]uint32)(nil),
 		Field:         96,
-		Name:          "goproto.proto.test.unpacked_fixed32_extension",
-		Tag:           "fixed32,96,rep,name=unpacked_fixed32_extension",
+		Name:          "goproto.proto.test.unpacked_fixed32",
+		Tag:           "fixed32,96,rep,name=unpacked_fixed32",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestUnpackedExtensions)(nil),
 		ExtensionType: ([]uint64)(nil),
 		Field:         97,
-		Name:          "goproto.proto.test.unpacked_fixed64_extension",
-		Tag:           "fixed64,97,rep,name=unpacked_fixed64_extension",
+		Name:          "goproto.proto.test.unpacked_fixed64",
+		Tag:           "fixed64,97,rep,name=unpacked_fixed64",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestUnpackedExtensions)(nil),
 		ExtensionType: ([]int32)(nil),
 		Field:         98,
-		Name:          "goproto.proto.test.unpacked_sfixed32_extension",
-		Tag:           "fixed32,98,rep,name=unpacked_sfixed32_extension",
+		Name:          "goproto.proto.test.unpacked_sfixed32",
+		Tag:           "fixed32,98,rep,name=unpacked_sfixed32",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestUnpackedExtensions)(nil),
 		ExtensionType: ([]int64)(nil),
 		Field:         99,
-		Name:          "goproto.proto.test.unpacked_sfixed64_extension",
-		Tag:           "fixed64,99,rep,name=unpacked_sfixed64_extension",
+		Name:          "goproto.proto.test.unpacked_sfixed64",
+		Tag:           "fixed64,99,rep,name=unpacked_sfixed64",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestUnpackedExtensions)(nil),
 		ExtensionType: ([]float32)(nil),
 		Field:         100,
-		Name:          "goproto.proto.test.unpacked_float_extension",
-		Tag:           "fixed32,100,rep,name=unpacked_float_extension",
+		Name:          "goproto.proto.test.unpacked_float",
+		Tag:           "fixed32,100,rep,name=unpacked_float",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestUnpackedExtensions)(nil),
 		ExtensionType: ([]float64)(nil),
 		Field:         101,
-		Name:          "goproto.proto.test.unpacked_double_extension",
-		Tag:           "fixed64,101,rep,name=unpacked_double_extension",
+		Name:          "goproto.proto.test.unpacked_double",
+		Tag:           "fixed64,101,rep,name=unpacked_double",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestUnpackedExtensions)(nil),
 		ExtensionType: ([]bool)(nil),
 		Field:         102,
-		Name:          "goproto.proto.test.unpacked_bool_extension",
-		Tag:           "varint,102,rep,name=unpacked_bool_extension",
+		Name:          "goproto.proto.test.unpacked_bool",
+		Tag:           "varint,102,rep,name=unpacked_bool",
 		Filename:      "test/test.proto",
 	},
 	{
 		ExtendedType:  (*TestUnpackedExtensions)(nil),
 		ExtensionType: ([]ForeignEnum)(nil),
 		Field:         103,
-		Name:          "goproto.proto.test.unpacked_enum_extension",
-		Tag:           "varint,103,rep,name=unpacked_enum_extension,enum=goproto.proto.test.ForeignEnum",
+		Name:          "goproto.proto.test.unpacked_enum",
+		Tag:           "varint,103,rep,name=unpacked_enum,enum=goproto.proto.test.ForeignEnum",
 		Filename:      "test/test.proto",
 	},
 	{
@@ -3267,108 +3267,108 @@
 
 // Extension fields to TestAllExtensions.
 var (
-	// optional int32 optional_int32_extension = 1;
-	E_OptionalInt32Extension = &file_test_test_proto_extTypes[0]
-	// optional int64 optional_int64_extension = 2;
-	E_OptionalInt64Extension = &file_test_test_proto_extTypes[1]
-	// optional uint32 optional_uint32_extension = 3;
-	E_OptionalUint32Extension = &file_test_test_proto_extTypes[2]
-	// optional uint64 optional_uint64_extension = 4;
-	E_OptionalUint64Extension = &file_test_test_proto_extTypes[3]
-	// optional sint32 optional_sint32_extension = 5;
-	E_OptionalSint32Extension = &file_test_test_proto_extTypes[4]
-	// optional sint64 optional_sint64_extension = 6;
-	E_OptionalSint64Extension = &file_test_test_proto_extTypes[5]
-	// optional fixed32 optional_fixed32_extension = 7;
-	E_OptionalFixed32Extension = &file_test_test_proto_extTypes[6]
-	// optional fixed64 optional_fixed64_extension = 8;
-	E_OptionalFixed64Extension = &file_test_test_proto_extTypes[7]
-	// optional sfixed32 optional_sfixed32_extension = 9;
-	E_OptionalSfixed32Extension = &file_test_test_proto_extTypes[8]
-	// optional sfixed64 optional_sfixed64_extension = 10;
-	E_OptionalSfixed64Extension = &file_test_test_proto_extTypes[9]
-	// optional float optional_float_extension = 11;
-	E_OptionalFloatExtension = &file_test_test_proto_extTypes[10]
-	// optional double optional_double_extension = 12;
-	E_OptionalDoubleExtension = &file_test_test_proto_extTypes[11]
-	// optional bool optional_bool_extension = 13;
-	E_OptionalBoolExtension = &file_test_test_proto_extTypes[12]
-	// optional string optional_string_extension = 14;
-	E_OptionalStringExtension = &file_test_test_proto_extTypes[13]
-	// optional bytes optional_bytes_extension = 15;
-	E_OptionalBytesExtension = &file_test_test_proto_extTypes[14]
-	// optional goproto.proto.test.OptionalGroup_extension optionalgroup_extension = 16;
-	E_OptionalgroupExtension = &file_test_test_proto_extTypes[15]
-	// optional goproto.proto.test.TestAllExtensions.NestedMessage optional_nested_message_extension = 18;
-	E_OptionalNestedMessageExtension = &file_test_test_proto_extTypes[16]
-	// optional goproto.proto.test.TestAllTypes.NestedEnum optional_nested_enum_extension = 21;
-	E_OptionalNestedEnumExtension = &file_test_test_proto_extTypes[17]
-	// repeated int32 repeated_int32_extension = 31;
-	E_RepeatedInt32Extension = &file_test_test_proto_extTypes[18]
-	// repeated int64 repeated_int64_extension = 32;
-	E_RepeatedInt64Extension = &file_test_test_proto_extTypes[19]
-	// repeated uint32 repeated_uint32_extension = 33;
-	E_RepeatedUint32Extension = &file_test_test_proto_extTypes[20]
-	// repeated uint64 repeated_uint64_extension = 34;
-	E_RepeatedUint64Extension = &file_test_test_proto_extTypes[21]
-	// repeated sint32 repeated_sint32_extension = 35;
-	E_RepeatedSint32Extension = &file_test_test_proto_extTypes[22]
-	// repeated sint64 repeated_sint64_extension = 36;
-	E_RepeatedSint64Extension = &file_test_test_proto_extTypes[23]
-	// repeated fixed32 repeated_fixed32_extension = 37;
-	E_RepeatedFixed32Extension = &file_test_test_proto_extTypes[24]
-	// repeated fixed64 repeated_fixed64_extension = 38;
-	E_RepeatedFixed64Extension = &file_test_test_proto_extTypes[25]
-	// repeated sfixed32 repeated_sfixed32_extension = 39;
-	E_RepeatedSfixed32Extension = &file_test_test_proto_extTypes[26]
-	// repeated sfixed64 repeated_sfixed64_extension = 40;
-	E_RepeatedSfixed64Extension = &file_test_test_proto_extTypes[27]
-	// repeated float repeated_float_extension = 41;
-	E_RepeatedFloatExtension = &file_test_test_proto_extTypes[28]
-	// repeated double repeated_double_extension = 42;
-	E_RepeatedDoubleExtension = &file_test_test_proto_extTypes[29]
-	// repeated bool repeated_bool_extension = 43;
-	E_RepeatedBoolExtension = &file_test_test_proto_extTypes[30]
-	// repeated string repeated_string_extension = 44;
-	E_RepeatedStringExtension = &file_test_test_proto_extTypes[31]
-	// repeated bytes repeated_bytes_extension = 45;
-	E_RepeatedBytesExtension = &file_test_test_proto_extTypes[32]
-	// repeated goproto.proto.test.RepeatedGroup_extension repeatedgroup_extension = 46;
-	E_RepeatedgroupExtension = &file_test_test_proto_extTypes[33]
-	// repeated goproto.proto.test.TestAllExtensions.NestedMessage repeated_nested_message_extension = 48;
-	E_RepeatedNestedMessageExtension = &file_test_test_proto_extTypes[34]
-	// repeated goproto.proto.test.TestAllTypes.NestedEnum repeated_nested_enum_extension = 51;
-	E_RepeatedNestedEnumExtension = &file_test_test_proto_extTypes[35]
-	// optional int32 default_int32_extension = 81;
-	E_DefaultInt32Extension = &file_test_test_proto_extTypes[36]
-	// optional int64 default_int64_extension = 82;
-	E_DefaultInt64Extension = &file_test_test_proto_extTypes[37]
-	// optional uint32 default_uint32_extension = 83;
-	E_DefaultUint32Extension = &file_test_test_proto_extTypes[38]
-	// optional uint64 default_uint64_extension = 84;
-	E_DefaultUint64Extension = &file_test_test_proto_extTypes[39]
-	// optional sint32 default_sint32_extension = 85;
-	E_DefaultSint32Extension = &file_test_test_proto_extTypes[40]
-	// optional sint64 default_sint64_extension = 86;
-	E_DefaultSint64Extension = &file_test_test_proto_extTypes[41]
-	// optional fixed32 default_fixed32_extension = 87;
-	E_DefaultFixed32Extension = &file_test_test_proto_extTypes[42]
-	// optional fixed64 default_fixed64_extension = 88;
-	E_DefaultFixed64Extension = &file_test_test_proto_extTypes[43]
-	// optional sfixed32 default_sfixed32_extension = 89;
-	E_DefaultSfixed32Extension = &file_test_test_proto_extTypes[44]
-	// optional sfixed64 default_sfixed64_extension = 80;
-	E_DefaultSfixed64Extension = &file_test_test_proto_extTypes[45]
-	// optional float default_float_extension = 91;
-	E_DefaultFloatExtension = &file_test_test_proto_extTypes[46]
-	// optional double default_double_extension = 92;
-	E_DefaultDoubleExtension = &file_test_test_proto_extTypes[47]
-	// optional bool default_bool_extension = 93;
-	E_DefaultBoolExtension = &file_test_test_proto_extTypes[48]
-	// optional string default_string_extension = 94;
-	E_DefaultStringExtension = &file_test_test_proto_extTypes[49]
-	// optional bytes default_bytes_extension = 95;
-	E_DefaultBytesExtension = &file_test_test_proto_extTypes[50]
+	// optional int32 optional_int32 = 1;
+	E_OptionalInt32 = &file_test_test_proto_extTypes[0]
+	// optional int64 optional_int64 = 2;
+	E_OptionalInt64 = &file_test_test_proto_extTypes[1]
+	// optional uint32 optional_uint32 = 3;
+	E_OptionalUint32 = &file_test_test_proto_extTypes[2]
+	// optional uint64 optional_uint64 = 4;
+	E_OptionalUint64 = &file_test_test_proto_extTypes[3]
+	// optional sint32 optional_sint32 = 5;
+	E_OptionalSint32 = &file_test_test_proto_extTypes[4]
+	// optional sint64 optional_sint64 = 6;
+	E_OptionalSint64 = &file_test_test_proto_extTypes[5]
+	// optional fixed32 optional_fixed32 = 7;
+	E_OptionalFixed32 = &file_test_test_proto_extTypes[6]
+	// optional fixed64 optional_fixed64 = 8;
+	E_OptionalFixed64 = &file_test_test_proto_extTypes[7]
+	// optional sfixed32 optional_sfixed32 = 9;
+	E_OptionalSfixed32 = &file_test_test_proto_extTypes[8]
+	// optional sfixed64 optional_sfixed64 = 10;
+	E_OptionalSfixed64 = &file_test_test_proto_extTypes[9]
+	// optional float optional_float = 11;
+	E_OptionalFloat = &file_test_test_proto_extTypes[10]
+	// optional double optional_double = 12;
+	E_OptionalDouble = &file_test_test_proto_extTypes[11]
+	// optional bool optional_bool = 13;
+	E_OptionalBool = &file_test_test_proto_extTypes[12]
+	// optional string optional_string = 14;
+	E_OptionalString = &file_test_test_proto_extTypes[13]
+	// optional bytes optional_bytes = 15;
+	E_OptionalBytes = &file_test_test_proto_extTypes[14]
+	// optional goproto.proto.test.OptionalGroup optionalgroup = 16;
+	E_Optionalgroup = &file_test_test_proto_extTypes[15]
+	// optional goproto.proto.test.TestAllExtensions.NestedMessage optional_nested_message = 18;
+	E_OptionalNestedMessage = &file_test_test_proto_extTypes[16]
+	// optional goproto.proto.test.TestAllTypes.NestedEnum optional_nested_enum = 21;
+	E_OptionalNestedEnum = &file_test_test_proto_extTypes[17]
+	// repeated int32 repeated_int32 = 31;
+	E_RepeatedInt32 = &file_test_test_proto_extTypes[18]
+	// repeated int64 repeated_int64 = 32;
+	E_RepeatedInt64 = &file_test_test_proto_extTypes[19]
+	// repeated uint32 repeated_uint32 = 33;
+	E_RepeatedUint32 = &file_test_test_proto_extTypes[20]
+	// repeated uint64 repeated_uint64 = 34;
+	E_RepeatedUint64 = &file_test_test_proto_extTypes[21]
+	// repeated sint32 repeated_sint32 = 35;
+	E_RepeatedSint32 = &file_test_test_proto_extTypes[22]
+	// repeated sint64 repeated_sint64 = 36;
+	E_RepeatedSint64 = &file_test_test_proto_extTypes[23]
+	// repeated fixed32 repeated_fixed32 = 37;
+	E_RepeatedFixed32 = &file_test_test_proto_extTypes[24]
+	// repeated fixed64 repeated_fixed64 = 38;
+	E_RepeatedFixed64 = &file_test_test_proto_extTypes[25]
+	// repeated sfixed32 repeated_sfixed32 = 39;
+	E_RepeatedSfixed32 = &file_test_test_proto_extTypes[26]
+	// repeated sfixed64 repeated_sfixed64 = 40;
+	E_RepeatedSfixed64 = &file_test_test_proto_extTypes[27]
+	// repeated float repeated_float = 41;
+	E_RepeatedFloat = &file_test_test_proto_extTypes[28]
+	// repeated double repeated_double = 42;
+	E_RepeatedDouble = &file_test_test_proto_extTypes[29]
+	// repeated bool repeated_bool = 43;
+	E_RepeatedBool = &file_test_test_proto_extTypes[30]
+	// repeated string repeated_string = 44;
+	E_RepeatedString = &file_test_test_proto_extTypes[31]
+	// repeated bytes repeated_bytes = 45;
+	E_RepeatedBytes = &file_test_test_proto_extTypes[32]
+	// repeated goproto.proto.test.RepeatedGroup repeatedgroup = 46;
+	E_Repeatedgroup = &file_test_test_proto_extTypes[33]
+	// repeated goproto.proto.test.TestAllExtensions.NestedMessage repeated_nested_message = 48;
+	E_RepeatedNestedMessage = &file_test_test_proto_extTypes[34]
+	// repeated goproto.proto.test.TestAllTypes.NestedEnum repeated_nested_enum = 51;
+	E_RepeatedNestedEnum = &file_test_test_proto_extTypes[35]
+	// optional int32 default_int32 = 81;
+	E_DefaultInt32 = &file_test_test_proto_extTypes[36]
+	// optional int64 default_int64 = 82;
+	E_DefaultInt64 = &file_test_test_proto_extTypes[37]
+	// optional uint32 default_uint32 = 83;
+	E_DefaultUint32 = &file_test_test_proto_extTypes[38]
+	// optional uint64 default_uint64 = 84;
+	E_DefaultUint64 = &file_test_test_proto_extTypes[39]
+	// optional sint32 default_sint32 = 85;
+	E_DefaultSint32 = &file_test_test_proto_extTypes[40]
+	// optional sint64 default_sint64 = 86;
+	E_DefaultSint64 = &file_test_test_proto_extTypes[41]
+	// optional fixed32 default_fixed32 = 87;
+	E_DefaultFixed32 = &file_test_test_proto_extTypes[42]
+	// optional fixed64 default_fixed64 = 88;
+	E_DefaultFixed64 = &file_test_test_proto_extTypes[43]
+	// optional sfixed32 default_sfixed32 = 89;
+	E_DefaultSfixed32 = &file_test_test_proto_extTypes[44]
+	// optional sfixed64 default_sfixed64 = 80;
+	E_DefaultSfixed64 = &file_test_test_proto_extTypes[45]
+	// optional float default_float = 91;
+	E_DefaultFloat = &file_test_test_proto_extTypes[46]
+	// optional double default_double = 92;
+	E_DefaultDouble = &file_test_test_proto_extTypes[47]
+	// optional bool default_bool = 93;
+	E_DefaultBool = &file_test_test_proto_extTypes[48]
+	// optional string default_string = 94;
+	E_DefaultString = &file_test_test_proto_extTypes[49]
+	// optional bytes default_bytes = 95;
+	E_DefaultBytes = &file_test_test_proto_extTypes[50]
 	// optional string nested_string_extension = 1003;
 	E_TestNestedExtension_NestedStringExtension = &file_test_test_proto_extTypes[79]
 	// optional goproto.proto.test.TestRequired single = 1000;
@@ -3379,66 +3379,66 @@
 
 // Extension fields to TestPackedExtensions.
 var (
-	// repeated int32 packed_int32_extension = 90;
-	E_PackedInt32Extension = &file_test_test_proto_extTypes[51]
-	// repeated int64 packed_int64_extension = 91;
-	E_PackedInt64Extension = &file_test_test_proto_extTypes[52]
-	// repeated uint32 packed_uint32_extension = 92;
-	E_PackedUint32Extension = &file_test_test_proto_extTypes[53]
-	// repeated uint64 packed_uint64_extension = 93;
-	E_PackedUint64Extension = &file_test_test_proto_extTypes[54]
-	// repeated sint32 packed_sint32_extension = 94;
-	E_PackedSint32Extension = &file_test_test_proto_extTypes[55]
-	// repeated sint64 packed_sint64_extension = 95;
-	E_PackedSint64Extension = &file_test_test_proto_extTypes[56]
-	// repeated fixed32 packed_fixed32_extension = 96;
-	E_PackedFixed32Extension = &file_test_test_proto_extTypes[57]
-	// repeated fixed64 packed_fixed64_extension = 97;
-	E_PackedFixed64Extension = &file_test_test_proto_extTypes[58]
-	// repeated sfixed32 packed_sfixed32_extension = 98;
-	E_PackedSfixed32Extension = &file_test_test_proto_extTypes[59]
-	// repeated sfixed64 packed_sfixed64_extension = 99;
-	E_PackedSfixed64Extension = &file_test_test_proto_extTypes[60]
-	// repeated float packed_float_extension = 100;
-	E_PackedFloatExtension = &file_test_test_proto_extTypes[61]
-	// repeated double packed_double_extension = 101;
-	E_PackedDoubleExtension = &file_test_test_proto_extTypes[62]
-	// repeated bool packed_bool_extension = 102;
-	E_PackedBoolExtension = &file_test_test_proto_extTypes[63]
-	// repeated goproto.proto.test.ForeignEnum packed_enum_extension = 103;
-	E_PackedEnumExtension = &file_test_test_proto_extTypes[64]
+	// repeated int32 packed_int32 = 90;
+	E_PackedInt32 = &file_test_test_proto_extTypes[51]
+	// repeated int64 packed_int64 = 91;
+	E_PackedInt64 = &file_test_test_proto_extTypes[52]
+	// repeated uint32 packed_uint32 = 92;
+	E_PackedUint32 = &file_test_test_proto_extTypes[53]
+	// repeated uint64 packed_uint64 = 93;
+	E_PackedUint64 = &file_test_test_proto_extTypes[54]
+	// repeated sint32 packed_sint32 = 94;
+	E_PackedSint32 = &file_test_test_proto_extTypes[55]
+	// repeated sint64 packed_sint64 = 95;
+	E_PackedSint64 = &file_test_test_proto_extTypes[56]
+	// repeated fixed32 packed_fixed32 = 96;
+	E_PackedFixed32 = &file_test_test_proto_extTypes[57]
+	// repeated fixed64 packed_fixed64 = 97;
+	E_PackedFixed64 = &file_test_test_proto_extTypes[58]
+	// repeated sfixed32 packed_sfixed32 = 98;
+	E_PackedSfixed32 = &file_test_test_proto_extTypes[59]
+	// repeated sfixed64 packed_sfixed64 = 99;
+	E_PackedSfixed64 = &file_test_test_proto_extTypes[60]
+	// repeated float packed_float = 100;
+	E_PackedFloat = &file_test_test_proto_extTypes[61]
+	// repeated double packed_double = 101;
+	E_PackedDouble = &file_test_test_proto_extTypes[62]
+	// repeated bool packed_bool = 102;
+	E_PackedBool = &file_test_test_proto_extTypes[63]
+	// repeated goproto.proto.test.ForeignEnum packed_enum = 103;
+	E_PackedEnum = &file_test_test_proto_extTypes[64]
 )
 
 // Extension fields to TestUnpackedExtensions.
 var (
-	// repeated int32 unpacked_int32_extension = 90;
-	E_UnpackedInt32Extension = &file_test_test_proto_extTypes[65]
-	// repeated int64 unpacked_int64_extension = 91;
-	E_UnpackedInt64Extension = &file_test_test_proto_extTypes[66]
-	// repeated uint32 unpacked_uint32_extension = 92;
-	E_UnpackedUint32Extension = &file_test_test_proto_extTypes[67]
-	// repeated uint64 unpacked_uint64_extension = 93;
-	E_UnpackedUint64Extension = &file_test_test_proto_extTypes[68]
-	// repeated sint32 unpacked_sint32_extension = 94;
-	E_UnpackedSint32Extension = &file_test_test_proto_extTypes[69]
-	// repeated sint64 unpacked_sint64_extension = 95;
-	E_UnpackedSint64Extension = &file_test_test_proto_extTypes[70]
-	// repeated fixed32 unpacked_fixed32_extension = 96;
-	E_UnpackedFixed32Extension = &file_test_test_proto_extTypes[71]
-	// repeated fixed64 unpacked_fixed64_extension = 97;
-	E_UnpackedFixed64Extension = &file_test_test_proto_extTypes[72]
-	// repeated sfixed32 unpacked_sfixed32_extension = 98;
-	E_UnpackedSfixed32Extension = &file_test_test_proto_extTypes[73]
-	// repeated sfixed64 unpacked_sfixed64_extension = 99;
-	E_UnpackedSfixed64Extension = &file_test_test_proto_extTypes[74]
-	// repeated float unpacked_float_extension = 100;
-	E_UnpackedFloatExtension = &file_test_test_proto_extTypes[75]
-	// repeated double unpacked_double_extension = 101;
-	E_UnpackedDoubleExtension = &file_test_test_proto_extTypes[76]
-	// repeated bool unpacked_bool_extension = 102;
-	E_UnpackedBoolExtension = &file_test_test_proto_extTypes[77]
-	// repeated goproto.proto.test.ForeignEnum unpacked_enum_extension = 103;
-	E_UnpackedEnumExtension = &file_test_test_proto_extTypes[78]
+	// repeated int32 unpacked_int32 = 90;
+	E_UnpackedInt32 = &file_test_test_proto_extTypes[65]
+	// repeated int64 unpacked_int64 = 91;
+	E_UnpackedInt64 = &file_test_test_proto_extTypes[66]
+	// repeated uint32 unpacked_uint32 = 92;
+	E_UnpackedUint32 = &file_test_test_proto_extTypes[67]
+	// repeated uint64 unpacked_uint64 = 93;
+	E_UnpackedUint64 = &file_test_test_proto_extTypes[68]
+	// repeated sint32 unpacked_sint32 = 94;
+	E_UnpackedSint32 = &file_test_test_proto_extTypes[69]
+	// repeated sint64 unpacked_sint64 = 95;
+	E_UnpackedSint64 = &file_test_test_proto_extTypes[70]
+	// repeated fixed32 unpacked_fixed32 = 96;
+	E_UnpackedFixed32 = &file_test_test_proto_extTypes[71]
+	// repeated fixed64 unpacked_fixed64 = 97;
+	E_UnpackedFixed64 = &file_test_test_proto_extTypes[72]
+	// repeated sfixed32 unpacked_sfixed32 = 98;
+	E_UnpackedSfixed32 = &file_test_test_proto_extTypes[73]
+	// repeated sfixed64 unpacked_sfixed64 = 99;
+	E_UnpackedSfixed64 = &file_test_test_proto_extTypes[74]
+	// repeated float unpacked_float = 100;
+	E_UnpackedFloat = &file_test_test_proto_extTypes[75]
+	// repeated double unpacked_double = 101;
+	E_UnpackedDouble = &file_test_test_proto_extTypes[76]
+	// repeated bool unpacked_bool = 102;
+	E_UnpackedBool = &file_test_test_proto_extTypes[77]
+	// repeated goproto.proto.test.ForeignEnum unpacked_enum = 103;
+	E_UnpackedEnum = &file_test_test_proto_extTypes[78]
 )
 
 var File_test_test_proto protoreflect.FileDescriptor
@@ -3938,762 +3938,666 @@
 	0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65,
 	0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
 	0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0b, 0x63, 0x6f, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76,
-	0x65, 0x2a, 0x08, 0x08, 0x01, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x22, 0xc1, 0x01, 0x0a, 0x17,
-	0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x65, 0x78,
-	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0c, 0x0a, 0x01, 0x61, 0x18, 0x11, 0x20, 0x01,
-	0x28, 0x05, 0x52, 0x01, 0x61, 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, 0x12, 0x6c, 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, 0x33, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c,
-	0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 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, 0x22,
-	0x95, 0x01, 0x0a, 0x17, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75,
-	0x70, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0c, 0x0a, 0x01, 0x61,
-	0x18, 0x2f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x01, 0x61, 0x12, 0x6c, 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, 0xe9, 0x07, 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,
-	0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
-	0x6e, 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, 0x22, 0x75, 0x0a, 0x13, 0x54, 0x65, 0x73, 0x74, 0x4e,
-	0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x32, 0x5e,
-	0x0a, 0x17, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f,
-	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72,
+	0x65, 0x2a, 0x08, 0x08, 0x01, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x22, 0xb7, 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, 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, 0x12, 0x6c, 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, 0x33, 0x2e, 0x67, 0x6f, 0x70, 0x72,
 	0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54,
 	0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73,
-	0x18, 0xeb, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x53,
-	0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xf7,
-	0x01, 0x0a, 0x0c, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12,
-	0x25, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x65, 0x6c,
-	0x64, 0x18, 0x01, 0x20, 0x02, 0x28, 0x05, 0x52, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65,
-	0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x60, 0x0a, 0x06, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65,
-	0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74,
-	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20,
-	0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74,
-	0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64,
-	0x52, 0x06, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x32, 0x5e, 0x0a, 0x05, 0x6d, 0x75, 0x6c, 0x74,
-	0x69, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78,
-	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xe9, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32,
-	0x20, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
-	0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65,
-	0x64, 0x52, 0x05, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x22, 0xc2, 0x03, 0x0a, 0x13, 0x54, 0x65, 0x73,
-	0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x46, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e,
-	0x12, 0x4b, 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, 0x20, 0x2e, 0x67, 0x6f, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 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, 0x4b, 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, 0x20, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74,
+	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, 0x22, 0x8b, 0x01, 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, 0x12, 0x6c, 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, 0xe9, 0x07, 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, 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, 0x58, 0x0a, 0x0b, 0x6d, 0x61,
-	0x70, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32,
-	0x37, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
-	0x74, 0x65, 0x73, 0x74, 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, 0x47, 0x0a, 0x0d, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x6d, 0x65,
-	0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74,
-	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, 0x5f, 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, 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
-	0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 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, 0x99, 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, 0x5f, 0x0a, 0x0d, 0x6f, 0x70, 0x74,
-	0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0a,
-	0x32, 0x39, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x2e, 0x74, 0x65, 0x73, 0x74, 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, 0x52, 0x0d, 0x6f, 0x70, 0x74,
-	0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x5f, 0x0a, 0x0d, 0x72, 0x65,
-	0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x03, 0x20, 0x03, 0x28,
-	0x0a, 0x32, 0x39, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 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, 0x52, 0x0d, 0x72, 0x65,
-	0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x1a, 0x1d, 0x0a, 0x0d, 0x4f,
-	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0c, 0x0a, 0x01,
-	0x61, 0x18, 0x02, 0x20, 0x02, 0x28, 0x05, 0x52, 0x01, 0x61, 0x1a, 0x1d, 0x0a, 0x0d, 0x52, 0x65,
-	0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0c, 0x0a, 0x01, 0x61,
-	0x18, 0x04, 0x20, 0x02, 0x28, 0x05, 0x52, 0x01, 0x61, 0x22, 0xb6, 0x01, 0x0a, 0x08, 0x54, 0x65,
-	0x73, 0x74, 0x57, 0x65, 0x61, 0x6b, 0x12, 0x54, 0x0a, 0x0d, 0x77, 0x65, 0x61, 0x6b, 0x5f, 0x6d,
-	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x31, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e,
-	0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65,
-	0x73, 0x74, 0x2e, 0x77, 0x65, 0x61, 0x6b, 0x2e, 0x57, 0x65, 0x61, 0x6b, 0x49, 0x6d, 0x70, 0x6f,
-	0x72, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x31, 0x42, 0x02, 0x50, 0x01, 0x52, 0x0c,
-	0x77, 0x65, 0x61, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x31, 0x12, 0x54, 0x0a, 0x0d,
-	0x77, 0x65, 0x61, 0x6b, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x77, 0x65, 0x61, 0x6b, 0x2e, 0x57, 0x65,
-	0x61, 0x6b, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32,
-	0x42, 0x02, 0x50, 0x01, 0x52, 0x0c, 0x77, 0x65, 0x61, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
-	0x65, 0x32, 0x22, 0xee, 0x04, 0x0a, 0x0f, 0x54, 0x65, 0x73, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x65,
-	0x64, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64,
-	0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x5a, 0x20, 0x03, 0x28, 0x05, 0x42, 0x02, 0x10, 0x01,
-	0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x25, 0x0a,
-	0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x5b, 0x20,
-	0x03, 0x28, 0x03, 0x42, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x49,
-	0x6e, 0x74, 0x36, 0x34, 0x12, 0x27, 0x0a, 0x0d, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x75,
-	0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x5c, 0x20, 0x03, 0x28, 0x0d, 0x42, 0x02, 0x10, 0x01, 0x52,
-	0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x27, 0x0a,
-	0x0d, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x5d,
-	0x20, 0x03, 0x28, 0x04, 0x42, 0x02, 0x10, 0x01, 0x52, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64,
-	0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x27, 0x0a, 0x0d, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64,
-	0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x5e, 0x20, 0x03, 0x28, 0x11, 0x42, 0x02, 0x10,
-	0x01, 0x52, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12,
-	0x27, 0x0a, 0x0d, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34,
-	0x18, 0x5f, 0x20, 0x03, 0x28, 0x12, 0x42, 0x02, 0x10, 0x01, 0x52, 0x0c, 0x70, 0x61, 0x63, 0x6b,
-	0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x29, 0x0a, 0x0e, 0x70, 0x61, 0x63, 0x6b,
-	0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0x60, 0x20, 0x03, 0x28, 0x07,
-	0x42, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65,
-	0x64, 0x33, 0x32, 0x12, 0x29, 0x0a, 0x0e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x66, 0x69,
-	0x78, 0x65, 0x64, 0x36, 0x34, 0x18, 0x61, 0x20, 0x03, 0x28, 0x06, 0x42, 0x02, 0x10, 0x01, 0x52,
-	0x0d, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x2b,
-	0x0a, 0x0f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33,
-	0x32, 0x18, 0x62, 0x20, 0x03, 0x28, 0x0f, 0x42, 0x02, 0x10, 0x01, 0x52, 0x0e, 0x70, 0x61, 0x63,
-	0x6b, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x2b, 0x0a, 0x0f, 0x70,
-	0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18, 0x63,
-	0x20, 0x03, 0x28, 0x10, 0x42, 0x02, 0x10, 0x01, 0x52, 0x0e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64,
-	0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x25, 0x0a, 0x0c, 0x70, 0x61, 0x63, 0x6b,
-	0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x64, 0x20, 0x03, 0x28, 0x02, 0x42, 0x02,
-	0x10, 0x01, 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12,
-	0x27, 0x0a, 0x0d, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65,
-	0x18, 0x65, 0x20, 0x03, 0x28, 0x01, 0x42, 0x02, 0x10, 0x01, 0x52, 0x0c, 0x70, 0x61, 0x63, 0x6b,
-	0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x23, 0x0a, 0x0b, 0x70, 0x61, 0x63, 0x6b,
-	0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x66, 0x20, 0x03, 0x28, 0x08, 0x42, 0x02, 0x10,
-	0x01, 0x52, 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x44, 0x0a,
-	0x0b, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x67, 0x20, 0x03,
-	0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x45,
-	0x6e, 0x75, 0x6d, 0x42, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x45,
-	0x6e, 0x75, 0x6d, 0x22, 0xa8, 0x05, 0x0a, 0x11, 0x54, 0x65, 0x73, 0x74, 0x55, 0x6e, 0x70, 0x61,
-	0x63, 0x6b, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x0e, 0x75, 0x6e, 0x70,
-	0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x5a, 0x20, 0x03, 0x28,
-	0x05, 0x42, 0x02, 0x10, 0x00, 0x52, 0x0d, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x49,
-	0x6e, 0x74, 0x33, 0x32, 0x12, 0x29, 0x0a, 0x0e, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64,
-	0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x5b, 0x20, 0x03, 0x28, 0x03, 0x42, 0x02, 0x10, 0x00,
-	0x52, 0x0d, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12,
-	0x2b, 0x0a, 0x0f, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74,
-	0x33, 0x32, 0x18, 0x5c, 0x20, 0x03, 0x28, 0x0d, 0x42, 0x02, 0x10, 0x00, 0x52, 0x0e, 0x75, 0x6e,
-	0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x2b, 0x0a, 0x0f,
-	0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18,
-	0x5d, 0x20, 0x03, 0x28, 0x04, 0x42, 0x02, 0x10, 0x00, 0x52, 0x0e, 0x75, 0x6e, 0x70, 0x61, 0x63,
-	0x6b, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x2b, 0x0a, 0x0f, 0x75, 0x6e, 0x70,
-	0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x5e, 0x20, 0x03,
-	0x28, 0x11, 0x42, 0x02, 0x10, 0x00, 0x52, 0x0e, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64,
-	0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x2b, 0x0a, 0x0f, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b,
-	0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x5f, 0x20, 0x03, 0x28, 0x12, 0x42,
-	0x02, 0x10, 0x00, 0x52, 0x0e, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x69, 0x6e,
-	0x74, 0x36, 0x34, 0x12, 0x2d, 0x0a, 0x10, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f,
-	0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0x60, 0x20, 0x03, 0x28, 0x07, 0x42, 0x02, 0x10,
-	0x00, 0x52, 0x0f, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64,
-	0x33, 0x32, 0x12, 0x2d, 0x0a, 0x10, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x66,
-	0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18, 0x61, 0x20, 0x03, 0x28, 0x06, 0x42, 0x02, 0x10, 0x00,
-	0x52, 0x0f, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36,
-	0x34, 0x12, 0x2f, 0x0a, 0x11, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x66,
-	0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0x62, 0x20, 0x03, 0x28, 0x0f, 0x42, 0x02, 0x10, 0x00,
-	0x52, 0x10, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64,
-	0x33, 0x32, 0x12, 0x2f, 0x0a, 0x11, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x73,
-	0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18, 0x63, 0x20, 0x03, 0x28, 0x10, 0x42, 0x02, 0x10,
-	0x00, 0x52, 0x10, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65,
-	0x64, 0x36, 0x34, 0x12, 0x29, 0x0a, 0x0e, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f,
-	0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x64, 0x20, 0x03, 0x28, 0x02, 0x42, 0x02, 0x10, 0x00, 0x52,
-	0x0d, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x2b,
-	0x0a, 0x0f, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c,
-	0x65, 0x18, 0x65, 0x20, 0x03, 0x28, 0x01, 0x42, 0x02, 0x10, 0x00, 0x52, 0x0e, 0x75, 0x6e, 0x70,
-	0x61, 0x63, 0x6b, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x27, 0x0a, 0x0d, 0x75,
-	0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x66, 0x20, 0x03,
-	0x28, 0x08, 0x42, 0x02, 0x10, 0x00, 0x52, 0x0c, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64,
-	0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x48, 0x0a, 0x0d, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64,
-	0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x67, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x67, 0x6f,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74,
-	0x2e, 0x46, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x02, 0x10, 0x00,
-	0x52, 0x0c, 0x75, 0x6e, 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,
-	0x22, 0x22, 0x0a, 0x16, 0x54, 0x65, 0x73, 0x74, 0x55, 0x6e, 0x70, 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, 0x22, 0x0c, 0x0a, 0x0a, 0x46, 0x6f, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x22, 0x0d, 0x0a, 0x0b, 0x46, 0x6f, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
-	0x65, 0x22, 0x61, 0x0a, 0x0c, 0x57, 0x65, 0x69, 0x72, 0x64, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c,
-	0x74, 0x12, 0x51, 0x0a, 0x0d, 0x77, 0x65, 0x69, 0x72, 0x64, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75,
-	0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x3a, 0x2c, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x2c,
-	0x20, 0x5c, 0x22, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x21, 0x5c, 0x22, 0x5c, 0x6e, 0x64, 0x65, 0x61,
-	0x64, 0x5c, 0x33, 0x33, 0x36, 0x5c, 0x32, 0x35, 0x35, 0x5c, 0x32, 0x37, 0x36, 0x5c, 0x33, 0x35,
-	0x37, 0x62, 0x65, 0x65, 0x66, 0x60, 0x52, 0x0c, 0x77, 0x65, 0x69, 0x72, 0x64, 0x44, 0x65, 0x66,
-	0x61, 0x75, 0x6c, 0x74, 0x2a, 0x40, 0x0a, 0x0b, 0x46, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x45,
-	0x6e, 0x75, 0x6d, 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, 0x2a, 0x47, 0x0a, 0x16, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65,
-	0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73,
-	0x12, 0x11, 0x0a, 0x0d, 0x52, 0x45, 0x53, 0x45, 0x52, 0x56, 0x45, 0x44, 0x5f, 0x45, 0x4e, 0x55,
-	0x4d, 0x10, 0x00, 0x22, 0x04, 0x08, 0x02, 0x10, 0x02, 0x22, 0x04, 0x08, 0x0f, 0x10, 0x0f, 0x22,
-	0x04, 0x08, 0x09, 0x10, 0x0b, 0x2a, 0x03, 0x42, 0x41, 0x52, 0x2a, 0x03, 0x42, 0x41, 0x5a, 0x32,
-	0xa8, 0x01, 0x0a, 0x0b, 0x54, 0x65, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12,
-	0x46, 0x0a, 0x03, 0x46, 0x6f, 0x6f, 0x12, 0x1e, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x6f, 0x6f, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x6f, 0x6f, 0x52,
-	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0a, 0x54, 0x65, 0x73, 0x74, 0x53,
-	0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1e, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x6f, 0x6f, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x6f, 0x6f, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x32, 0x85, 0x01, 0x0a, 0x15, 0x54,
-	0x65, 0x73, 0x74, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72,
-	0x76, 0x69, 0x63, 0x65, 0x12, 0x67, 0x0a, 0x0a, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74,
-	0x65, 0x64, 0x12, 0x29, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x44, 0x65, 0x70, 0x72,
-	0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x29, 0x2e,
-	0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65,
-	0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65,
-	0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x1a, 0x03, 0x88,
-	0x02, 0x01, 0x3a, 0x5f, 0x0a, 0x18, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x69,
-	0x6e, 0x74, 0x33, 0x32, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25,
-	0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74,
-	0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e,
-	0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x16, 0x6f, 0x70, 0x74,
-	0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
-	0x69, 0x6f, 0x6e, 0x3a, 0x5f, 0x0a, 0x18, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f,
-	0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12,
-	0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
-	0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65,
-	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x16, 0x6f, 0x70,
-	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x78, 0x74, 0x65, 0x6e,
-	0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x61, 0x0a, 0x19, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
-	0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
-	0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78,
-	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x17,
-	0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x78,
-	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x61, 0x0a, 0x19, 0x6f, 0x70, 0x74, 0x69, 0x6f,
-	0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e,
-	0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c,
-	0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28,
-	0x04, 0x52, 0x17, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x36,
-	0x34, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x61, 0x0a, 0x19, 0x6f, 0x70,
-	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x65, 0x78,
-	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73,
-	0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05,
-	0x20, 0x01, 0x28, 0x11, 0x52, 0x17, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x69,
-	0x6e, 0x74, 0x33, 0x32, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x61, 0x0a,
-	0x19, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34,
-	0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e,
-	0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
-	0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x12, 0x52, 0x17, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61,
-	0x6c, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
-	0x3a, 0x63, 0x0a, 0x1a, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x66, 0x69, 0x78,
-	0x65, 0x64, 0x33, 0x32, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25,
-	0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74,
-	0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e,
-	0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x07, 0x52, 0x18, 0x6f, 0x70, 0x74,
-	0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x45, 0x78, 0x74, 0x65,
-	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x63, 0x0a, 0x1a, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61,
-	0x6c, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
-	0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c,
-	0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x06,
-	0x52, 0x18, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36,
-	0x34, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x65, 0x0a, 0x1b, 0x6f, 0x70,
-	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f,
-	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54,
-	0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73,
-	0x18, 0x09, 0x20, 0x01, 0x28, 0x0f, 0x52, 0x19, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
-	0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
-	0x6e, 0x3a, 0x65, 0x0a, 0x1b, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x66,
-	0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
-	0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74,
-	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x10, 0x52, 0x19, 0x6f,
-	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x45,
-	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x5f, 0x0a, 0x18, 0x6f, 0x70, 0x74, 0x69,
-	0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e,
-	0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c,
-	0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28,
-	0x02, 0x52, 0x16, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x6c, 0x6f, 0x61, 0x74,
-	0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x61, 0x0a, 0x19, 0x6f, 0x70, 0x74,
-	0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x65, 0x78, 0x74,
-	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74,
-	0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0c, 0x20,
-	0x01, 0x28, 0x01, 0x52, 0x17, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x75,
-	0x62, 0x6c, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x5d, 0x0a, 0x17,
-	0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x65, 0x78,
-	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73,
-	0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0d,
-	0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x6f,
-	0x6f, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x61, 0x0a, 0x19, 0x6f,
-	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x65,
-	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65,
-	0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18,
-	0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53,
-	0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x5f,
-	0x0a, 0x18, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73,
-	0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e,
-	0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
-	0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61,
-	0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a,
-	0x8b, 0x01, 0x0a, 0x17, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x6f, 0x75,
-	0x70, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74,
-	0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
-	0x6e, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0a, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x70,
-	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x65, 0x78, 0x74, 0x65,
-	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x16, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x67,
-	0x72, 0x6f, 0x75, 0x70, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0xa5, 0x01,
-	0x0a, 0x21, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65,
-	0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
-	0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c,
-	0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x12, 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, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74,
-	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65,
-	0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x1e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e,
-	0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x78, 0x74, 0x65,
-	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x97, 0x01, 0x0a, 0x1e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
-	0x61, 0x6c, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x65,
-	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65,
-	0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18,
-	0x15, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 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, 0x22, 0x75, 0x0a, 0x13, 0x54, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x73, 0x74, 0x65,
+	0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x32, 0x5e, 0x0a, 0x17, 0x6e, 0x65,
+	0x73, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x78, 0x74, 0x65,
+	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
 	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 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, 0x1b, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74,
-	0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a,
-	0x5f, 0x0a, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33,
-	0x32, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74,
-	0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
-	0x6e, 0x73, 0x18, 0x1f, 0x20, 0x03, 0x28, 0x05, 0x52, 0x16, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74,
-	0x65, 0x64, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
-	0x3a, 0x5f, 0x0a, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74,
-	0x36, 0x34, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67,
+	0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xeb, 0x07, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x15, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e,
+	0x67, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xf7, 0x01, 0x0a, 0x0c, 0x54,
+	0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x72,
+	0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x01, 0x20,
+	0x02, 0x28, 0x05, 0x52, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x46, 0x69, 0x65,
+	0x6c, 0x64, 0x32, 0x60, 0x0a, 0x06, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x12, 0x25, 0x2e, 0x67,
 	0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73,
 	0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
-	0x6f, 0x6e, 0x73, 0x18, 0x20, 0x20, 0x03, 0x28, 0x03, 0x52, 0x16, 0x72, 0x65, 0x70, 0x65, 0x61,
-	0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
-	0x6e, 0x3a, 0x61, 0x0a, 0x19, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69,
-	0x6e, 0x74, 0x33, 0x32, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25,
-	0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74,
-	0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e,
-	0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x21, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x17, 0x72, 0x65, 0x70,
-	0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x78, 0x74, 0x65, 0x6e,
-	0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x61, 0x0a, 0x19, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64,
-	0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
-	0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78,
-	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x22, 0x20, 0x03, 0x28, 0x04, 0x52, 0x17,
-	0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x78,
-	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x61, 0x0a, 0x19, 0x72, 0x65, 0x70, 0x65, 0x61,
-	0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e,
-	0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c,
-	0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x23, 0x20, 0x03, 0x28,
-	0x11, 0x52, 0x17, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x33,
-	0x32, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x61, 0x0a, 0x19, 0x72, 0x65,
-	0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x65, 0x78,
-	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73,
-	0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x24,
-	0x20, 0x03, 0x28, 0x12, 0x52, 0x17, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69,
-	0x6e, 0x74, 0x36, 0x34, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x63, 0x0a,
-	0x1a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33,
-	0x32, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74,
-	0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
-	0x6e, 0x73, 0x18, 0x25, 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74,
-	0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
-	0x6f, 0x6e, 0x3a, 0x63, 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66,
-	0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
-	0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74,
-	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x26, 0x20, 0x03, 0x28, 0x06, 0x52, 0x18, 0x72,
-	0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x45, 0x78,
-	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x65, 0x0a, 0x1b, 0x72, 0x65, 0x70, 0x65, 0x61,
-	0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x65, 0x78, 0x74,
-	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74,
-	0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x27, 0x20,
-	0x03, 0x28, 0x0f, 0x52, 0x19, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69,
-	0x78, 0x65, 0x64, 0x33, 0x32, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x65,
-	0x0a, 0x1b, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65,
-	0x64, 0x36, 0x34, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e,
+	0x6f, 0x6e, 0x73, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e,
+	0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x52, 0x06, 0x73, 0x69,
+	0x6e, 0x67, 0x6c, 0x65, 0x32, 0x5e, 0x0a, 0x05, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x12, 0x25, 0x2e,
 	0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65,
 	0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
-	0x69, 0x6f, 0x6e, 0x73, 0x18, 0x28, 0x20, 0x03, 0x28, 0x10, 0x52, 0x19, 0x72, 0x65, 0x70, 0x65,
-	0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x45, 0x78, 0x74, 0x65,
-	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x5f, 0x0a, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65,
-	0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
-	0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78,
-	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x29, 0x20, 0x03, 0x28, 0x02, 0x52, 0x16,
-	0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x45, 0x78, 0x74,
-	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x61, 0x0a, 0x19, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74,
-	0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
-	0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72,
+	0x69, 0x6f, 0x6e, 0x73, 0x18, 0xe9, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74,
+	0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x52, 0x05, 0x6d,
+	0x75, 0x6c, 0x74, 0x69, 0x22, 0xc2, 0x03, 0x0a, 0x13, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71,
+	0x75, 0x69, 0x72, 0x65, 0x64, 0x46, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x12, 0x4b, 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, 0x20, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 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, 0x4b, 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, 0x20, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 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, 0x58, 0x0a, 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x6d, 0x65,
+	0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x67, 0x6f,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74,
+	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, 0x47, 0x0a, 0x0d, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
+	0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 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, 0x5f, 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, 0x36,
+	0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e,
+	0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65,
+	0x73, 0x74, 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, 0x99, 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, 0x5f, 0x0a, 0x0d, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61,
+	0x6c, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0a, 0x32, 0x39, 0x2e, 0x67,
+	0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73,
+	0x74, 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, 0x52, 0x0d, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61,
+	0x6c, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x5f, 0x0a, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74,
+	0x65, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0a, 0x32, 0x39, 0x2e,
+	0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65,
+	0x73, 0x74, 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, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74,
+	0x65, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x1a, 0x1d, 0x0a, 0x0d, 0x4f, 0x70, 0x74, 0x69, 0x6f,
+	0x6e, 0x61, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0c, 0x0a, 0x01, 0x61, 0x18, 0x02, 0x20,
+	0x02, 0x28, 0x05, 0x52, 0x01, 0x61, 0x1a, 0x1d, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74,
+	0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0c, 0x0a, 0x01, 0x61, 0x18, 0x04, 0x20, 0x02,
+	0x28, 0x05, 0x52, 0x01, 0x61, 0x22, 0xb6, 0x01, 0x0a, 0x08, 0x54, 0x65, 0x73, 0x74, 0x57, 0x65,
+	0x61, 0x6b, 0x12, 0x54, 0x0a, 0x0d, 0x77, 0x65, 0x61, 0x6b, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61,
+	0x67, 0x65, 0x31, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x77,
+	0x65, 0x61, 0x6b, 0x2e, 0x57, 0x65, 0x61, 0x6b, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x65,
+	0x73, 0x73, 0x61, 0x67, 0x65, 0x31, 0x42, 0x02, 0x50, 0x01, 0x52, 0x0c, 0x77, 0x65, 0x61, 0x6b,
+	0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x31, 0x12, 0x54, 0x0a, 0x0d, 0x77, 0x65, 0x61, 0x6b,
+	0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x2b, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x74, 0x65, 0x73, 0x74, 0x2e, 0x77, 0x65, 0x61, 0x6b, 0x2e, 0x57, 0x65, 0x61, 0x6b, 0x49, 0x6d,
+	0x70, 0x6f, 0x72, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x42, 0x02, 0x50, 0x01,
+	0x52, 0x0c, 0x77, 0x65, 0x61, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x22, 0xee,
+	0x04, 0x0a, 0x0f, 0x54, 0x65, 0x73, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x54, 0x79, 0x70,
+	0x65, 0x73, 0x12, 0x25, 0x0a, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74,
+	0x33, 0x32, 0x18, 0x5a, 0x20, 0x03, 0x28, 0x05, 0x42, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x70, 0x61,
+	0x63, 0x6b, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x25, 0x0a, 0x0c, 0x70, 0x61, 0x63,
+	0x6b, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x5b, 0x20, 0x03, 0x28, 0x03, 0x42,
+	0x02, 0x10, 0x01, 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34,
+	0x12, 0x27, 0x0a, 0x0d, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33,
+	0x32, 0x18, 0x5c, 0x20, 0x03, 0x28, 0x0d, 0x42, 0x02, 0x10, 0x01, 0x52, 0x0c, 0x70, 0x61, 0x63,
+	0x6b, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x27, 0x0a, 0x0d, 0x70, 0x61, 0x63,
+	0x6b, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x5d, 0x20, 0x03, 0x28, 0x04,
+	0x42, 0x02, 0x10, 0x01, 0x52, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74,
+	0x36, 0x34, 0x12, 0x27, 0x0a, 0x0d, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e,
+	0x74, 0x33, 0x32, 0x18, 0x5e, 0x20, 0x03, 0x28, 0x11, 0x42, 0x02, 0x10, 0x01, 0x52, 0x0c, 0x70,
+	0x61, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x27, 0x0a, 0x0d, 0x70,
+	0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x5f, 0x20, 0x03,
+	0x28, 0x12, 0x42, 0x02, 0x10, 0x01, 0x52, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x69,
+	0x6e, 0x74, 0x36, 0x34, 0x12, 0x29, 0x0a, 0x0e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x66,
+	0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0x60, 0x20, 0x03, 0x28, 0x07, 0x42, 0x02, 0x10, 0x01,
+	0x52, 0x0d, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12,
+	0x29, 0x0a, 0x0e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36,
+	0x34, 0x18, 0x61, 0x20, 0x03, 0x28, 0x06, 0x42, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x70, 0x61, 0x63,
+	0x6b, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x2b, 0x0a, 0x0f, 0x70, 0x61,
+	0x63, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0x62, 0x20,
+	0x03, 0x28, 0x0f, 0x42, 0x02, 0x10, 0x01, 0x52, 0x0e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x53,
+	0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x2b, 0x0a, 0x0f, 0x70, 0x61, 0x63, 0x6b, 0x65,
+	0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18, 0x63, 0x20, 0x03, 0x28, 0x10,
+	0x42, 0x02, 0x10, 0x01, 0x52, 0x0e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78,
+	0x65, 0x64, 0x36, 0x34, 0x12, 0x25, 0x0a, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x66,
+	0x6c, 0x6f, 0x61, 0x74, 0x18, 0x64, 0x20, 0x03, 0x28, 0x02, 0x42, 0x02, 0x10, 0x01, 0x52, 0x0b,
+	0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x27, 0x0a, 0x0d, 0x70,
+	0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x65, 0x20, 0x03,
+	0x28, 0x01, 0x42, 0x02, 0x10, 0x01, 0x52, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x44, 0x6f,
+	0x75, 0x62, 0x6c, 0x65, 0x12, 0x23, 0x0a, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x62,
+	0x6f, 0x6f, 0x6c, 0x18, 0x66, 0x20, 0x03, 0x28, 0x08, 0x42, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x70,
+	0x61, 0x63, 0x6b, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x44, 0x0a, 0x0b, 0x70, 0x61, 0x63,
+	0x6b, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x67, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x1f,
+	0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74,
+	0x65, 0x73, 0x74, 0x2e, 0x46, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x45, 0x6e, 0x75, 0x6d, 0x42,
+	0x02, 0x10, 0x01, 0x52, 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x22,
+	0xa8, 0x05, 0x0a, 0x11, 0x54, 0x65, 0x73, 0x74, 0x55, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64,
+	0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x0e, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65,
+	0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x5a, 0x20, 0x03, 0x28, 0x05, 0x42, 0x02, 0x10,
+	0x00, 0x52, 0x0d, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x33, 0x32,
+	0x12, 0x29, 0x0a, 0x0e, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74,
+	0x36, 0x34, 0x18, 0x5b, 0x20, 0x03, 0x28, 0x03, 0x42, 0x02, 0x10, 0x00, 0x52, 0x0d, 0x75, 0x6e,
+	0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x2b, 0x0a, 0x0f, 0x75,
+	0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x5c,
+	0x20, 0x03, 0x28, 0x0d, 0x42, 0x02, 0x10, 0x00, 0x52, 0x0e, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b,
+	0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x2b, 0x0a, 0x0f, 0x75, 0x6e, 0x70, 0x61,
+	0x63, 0x6b, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x5d, 0x20, 0x03, 0x28,
+	0x04, 0x42, 0x02, 0x10, 0x00, 0x52, 0x0e, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x55,
+	0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x2b, 0x0a, 0x0f, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65,
+	0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x5e, 0x20, 0x03, 0x28, 0x11, 0x42, 0x02,
+	0x10, 0x00, 0x52, 0x0e, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74,
+	0x33, 0x32, 0x12, 0x2b, 0x0a, 0x0f, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x73,
+	0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x5f, 0x20, 0x03, 0x28, 0x12, 0x42, 0x02, 0x10, 0x00, 0x52,
+	0x0e, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12,
+	0x2d, 0x0a, 0x10, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65,
+	0x64, 0x33, 0x32, 0x18, 0x60, 0x20, 0x03, 0x28, 0x07, 0x42, 0x02, 0x10, 0x00, 0x52, 0x0f, 0x75,
+	0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x2d,
+	0x0a, 0x10, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64,
+	0x36, 0x34, 0x18, 0x61, 0x20, 0x03, 0x28, 0x06, 0x42, 0x02, 0x10, 0x00, 0x52, 0x0f, 0x75, 0x6e,
+	0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x2f, 0x0a,
+	0x11, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64,
+	0x33, 0x32, 0x18, 0x62, 0x20, 0x03, 0x28, 0x0f, 0x42, 0x02, 0x10, 0x00, 0x52, 0x10, 0x75, 0x6e,
+	0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x2f,
+	0x0a, 0x11, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65,
+	0x64, 0x36, 0x34, 0x18, 0x63, 0x20, 0x03, 0x28, 0x10, 0x42, 0x02, 0x10, 0x00, 0x52, 0x10, 0x75,
+	0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12,
+	0x29, 0x0a, 0x0e, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61,
+	0x74, 0x18, 0x64, 0x20, 0x03, 0x28, 0x02, 0x42, 0x02, 0x10, 0x00, 0x52, 0x0d, 0x75, 0x6e, 0x70,
+	0x61, 0x63, 0x6b, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x2b, 0x0a, 0x0f, 0x75, 0x6e,
+	0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x65, 0x20,
+	0x03, 0x28, 0x01, 0x42, 0x02, 0x10, 0x00, 0x52, 0x0e, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65,
+	0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x27, 0x0a, 0x0d, 0x75, 0x6e, 0x70, 0x61, 0x63,
+	0x6b, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x66, 0x20, 0x03, 0x28, 0x08, 0x42, 0x02,
+	0x10, 0x00, 0x52, 0x0c, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c,
+	0x12, 0x48, 0x0a, 0x0d, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75,
+	0x6d, 0x18, 0x67, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x6f, 0x72,
+	0x65, 0x69, 0x67, 0x6e, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x02, 0x10, 0x00, 0x52, 0x0c, 0x75, 0x6e,
+	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, 0x22, 0x22, 0x0a, 0x16,
+	0x54, 0x65, 0x73, 0x74, 0x55, 0x6e, 0x70, 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,
+	0x22, 0x0c, 0x0a, 0x0a, 0x46, 0x6f, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x0d,
+	0x0a, 0x0b, 0x46, 0x6f, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x61, 0x0a,
+	0x0c, 0x57, 0x65, 0x69, 0x72, 0x64, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x51, 0x0a,
+	0x0d, 0x77, 0x65, 0x69, 0x72, 0x64, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x0c, 0x3a, 0x2c, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x5c, 0x22, 0x77,
+	0x6f, 0x72, 0x6c, 0x64, 0x21, 0x5c, 0x22, 0x5c, 0x6e, 0x64, 0x65, 0x61, 0x64, 0x5c, 0x33, 0x33,
+	0x36, 0x5c, 0x32, 0x35, 0x35, 0x5c, 0x32, 0x37, 0x36, 0x5c, 0x33, 0x35, 0x37, 0x62, 0x65, 0x65,
+	0x66, 0x60, 0x52, 0x0c, 0x77, 0x65, 0x69, 0x72, 0x64, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
+	0x2a, 0x40, 0x0a, 0x0b, 0x46, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x45, 0x6e, 0x75, 0x6d, 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, 0x2a, 0x47, 0x0a, 0x16, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76,
+	0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x11, 0x0a, 0x0d,
+	0x52, 0x45, 0x53, 0x45, 0x52, 0x56, 0x45, 0x44, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x10, 0x00, 0x22,
+	0x04, 0x08, 0x02, 0x10, 0x02, 0x22, 0x04, 0x08, 0x0f, 0x10, 0x0f, 0x22, 0x04, 0x08, 0x09, 0x10,
+	0x0b, 0x2a, 0x03, 0x42, 0x41, 0x52, 0x2a, 0x03, 0x42, 0x41, 0x5a, 0x32, 0xa8, 0x01, 0x0a, 0x0b,
+	0x54, 0x65, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x46, 0x0a, 0x03, 0x46,
+	0x6f, 0x6f, 0x12, 0x1e, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x6f, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x6f, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0a, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61,
+	0x6d, 0x12, 0x1e, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x6f, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x6f, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x32, 0x85, 0x01, 0x0a, 0x15, 0x54, 0x65, 0x73, 0x74, 0x44,
+	0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
+	0x12, 0x67, 0x0a, 0x0a, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x29,
+	0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74,
+	0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74,
+	0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x29, 0x2e, 0x67, 0x6f, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54,
+	0x65, 0x73, 0x74, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73,
+	0x73, 0x61, 0x67, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x1a, 0x03, 0x88, 0x02, 0x01, 0x3a, 0x4c,
+	0x0a, 0x0e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32,
+	0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74,
+	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x6f,
+	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x3a, 0x4c, 0x0a, 0x0e,
+	0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x25,
+	0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74,
+	0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e,
+	0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6f, 0x70, 0x74,
+	0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x3a, 0x4e, 0x0a, 0x0f, 0x6f, 0x70,
+	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x25, 0x2e,
+	0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65,
+	0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x6f, 0x70, 0x74, 0x69,
+	0x6f, 0x6e, 0x61, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x3a, 0x4e, 0x0a, 0x0f, 0x6f, 0x70,
+	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x25, 0x2e,
+	0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65,
+	0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x6f, 0x70, 0x74, 0x69,
+	0x6f, 0x6e, 0x61, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x3a, 0x4e, 0x0a, 0x0f, 0x6f, 0x70,
+	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x25, 0x2e,
+	0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65,
+	0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x11, 0x52, 0x0e, 0x6f, 0x70, 0x74, 0x69,
+	0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x3a, 0x4e, 0x0a, 0x0f, 0x6f, 0x70,
+	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x25, 0x2e,
+	0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65,
+	0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x12, 0x52, 0x0e, 0x6f, 0x70, 0x74, 0x69,
+	0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x3a, 0x50, 0x0a, 0x10, 0x6f, 0x70,
+	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x25,
+	0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74,
+	0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e,
+	0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x07, 0x52, 0x0f, 0x6f, 0x70, 0x74,
+	0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x3a, 0x50, 0x0a, 0x10,
+	0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34,
+	0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74,
+	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x06, 0x52, 0x0f, 0x6f,
+	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x3a, 0x52,
+	0x0a, 0x11, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65,
+	0x64, 0x33, 0x32, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c,
+	0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0f,
+	0x52, 0x10, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64,
+	0x33, 0x32, 0x3a, 0x52, 0x0a, 0x11, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73,
+	0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73,
+	0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0a,
+	0x20, 0x01, 0x28, 0x10, 0x52, 0x10, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x66,
+	0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x3a, 0x4c, 0x0a, 0x0e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+	0x61, 0x6c, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65,
+	0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18,
+	0x0b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46,
+	0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x4e, 0x0a, 0x0f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
+	0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73,
+	0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0c,
+	0x20, 0x01, 0x28, 0x01, 0x52, 0x0e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x44, 0x6f,
+	0x75, 0x62, 0x6c, 0x65, 0x3a, 0x4a, 0x0a, 0x0d, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
+	0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41,
+	0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0d, 0x20, 0x01,
+	0x28, 0x08, 0x52, 0x0c, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x6f, 0x6f, 0x6c,
+	0x3a, 0x4e, 0x0a, 0x0f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72,
+	0x69, 0x6e, 0x67, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c,
+	0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x0e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67,
+	0x3a, 0x4c, 0x0a, 0x0e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74,
+	0x65, 0x73, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45,
+	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0c, 0x52,
+	0x0d, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x3a, 0x6e,
+	0x0a, 0x0d, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12,
+	0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65,
+	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0a, 0x32, 0x21, 0x2e, 0x67,
+	0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73,
+	0x74, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52,
+	0x0d, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3a, 0x92,
+	0x01, 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, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e,
+	0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
+	0x73, 0x18, 0x12, 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, 0x2e, 0x54, 0x65, 0x73,
+	0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 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, 0x3a, 0x84, 0x01, 0x0a, 0x14, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
+	0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x25, 0x2e, 0x67,
+	0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73,
+	0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+	0x6f, 0x6e, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 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, 0x12, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
+	0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x3a, 0x4c, 0x0a, 0x0e, 0x72, 0x65,
+	0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x25, 0x2e, 0x67,
+	0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73,
+	0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+	0x6f, 0x6e, 0x73, 0x18, 0x1f, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61,
+	0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x3a, 0x4c, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x65,
+	0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e,
+	0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
+	0x73, 0x18, 0x20, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65,
+	0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x3a, 0x4e, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74,
+	0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54,
+	0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73,
+	0x18, 0x21, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64,
+	0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x3a, 0x4e, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74,
+	0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54,
+	0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73,
+	0x18, 0x22, 0x20, 0x03, 0x28, 0x04, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64,
+	0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x3a, 0x4e, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74,
+	0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54,
+	0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73,
+	0x18, 0x23, 0x20, 0x03, 0x28, 0x11, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64,
+	0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x3a, 0x4e, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74,
+	0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54,
+	0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73,
+	0x18, 0x24, 0x20, 0x03, 0x28, 0x12, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64,
+	0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x3a, 0x50, 0x0a, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74,
+	0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e,
+	0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
+	0x73, 0x18, 0x25, 0x20, 0x03, 0x28, 0x07, 0x52, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65,
+	0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x3a, 0x50, 0x0a, 0x10, 0x72, 0x65, 0x70, 0x65,
+	0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x25, 0x2e, 0x67,
+	0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73,
+	0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+	0x6f, 0x6e, 0x73, 0x18, 0x26, 0x20, 0x03, 0x28, 0x06, 0x52, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61,
+	0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x3a, 0x52, 0x0a, 0x11, 0x72, 0x65,
+	0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12,
+	0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65,
+	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x27, 0x20, 0x03, 0x28, 0x0f, 0x52, 0x10, 0x72, 0x65,
+	0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x3a, 0x52,
+	0x0a, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65,
+	0x64, 0x36, 0x34, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c,
+	0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x28, 0x20, 0x03, 0x28, 0x10,
+	0x52, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64,
+	0x36, 0x34, 0x3a, 0x4c, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66,
+	0x6c, 0x6f, 0x61, 0x74, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c,
+	0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x29, 0x20, 0x03, 0x28,
+	0x02, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74,
+	0x3a, 0x4e, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75,
+	0x62, 0x6c, 0x65, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72,
 	0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c,
 	0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x2a, 0x20, 0x03, 0x28, 0x01,
-	0x52, 0x17, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65,
-	0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x5d, 0x0a, 0x17, 0x72, 0x65, 0x70,
-	0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e,
-	0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c,
-	0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x2b, 0x20, 0x03, 0x28,
-	0x08, 0x52, 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x45,
-	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x61, 0x0a, 0x19, 0x72, 0x65, 0x70, 0x65,
-	0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x78, 0x74, 0x65,
-	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41,
-	0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x2c, 0x20, 0x03,
-	0x28, 0x09, 0x52, 0x17, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69,
-	0x6e, 0x67, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x5f, 0x0a, 0x18, 0x72,
-	0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x65, 0x78,
-	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73,
-	0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x2d,
-	0x20, 0x03, 0x28, 0x0c, 0x52, 0x16, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79,
-	0x74, 0x65, 0x73, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x8b, 0x01, 0x0a,
-	0x17, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x65,
-	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65,
-	0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18,
-	0x2e, 0x20, 0x03, 0x28, 0x0a, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x70, 0x65, 0x61,
-	0x74, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
-	0x6f, 0x6e, 0x52, 0x16, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x67, 0x72, 0x6f, 0x75,
-	0x70, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0xa5, 0x01, 0x0a, 0x21, 0x72,
-	0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x6d,
-	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
-	0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74,
-	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x30, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e,
-	0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65,
-	0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
-	0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61,
-	0x67, 0x65, 0x52, 0x1e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74,
-	0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
-	0x6f, 0x6e, 0x3a, 0x97, 0x01, 0x0a, 0x1e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f,
-	0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x65, 0x78, 0x74, 0x65,
-	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41,
-	0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x33, 0x20, 0x03,
-	0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 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,
-	0x1b, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45,
-	0x6e, 0x75, 0x6d, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x61, 0x0a, 0x17,
-	0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x65, 0x78,
-	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73,
-	0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x51,
-	0x20, 0x01, 0x28, 0x05, 0x3a, 0x02, 0x38, 0x31, 0x52, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
-	0x74, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a,
-	0x61, 0x0a, 0x17, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34,
-	0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e,
-	0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
-	0x73, 0x18, 0x52, 0x20, 0x01, 0x28, 0x03, 0x3a, 0x02, 0x38, 0x32, 0x52, 0x15, 0x64, 0x65, 0x66,
-	0x61, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
-	0x6f, 0x6e, 0x3a, 0x63, 0x0a, 0x18, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x75, 0x69,
-	0x6e, 0x74, 0x33, 0x32, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25,
-	0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74,
-	0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e,
-	0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x53, 0x20, 0x01, 0x28, 0x0d, 0x3a, 0x02, 0x38, 0x33, 0x52,
-	0x16, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x78,
-	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x63, 0x0a, 0x18, 0x64, 0x65, 0x66, 0x61, 0x75,
-	0x6c, 0x74, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
-	0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c,
-	0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x54, 0x20, 0x01, 0x28, 0x04,
-	0x3a, 0x02, 0x38, 0x34, 0x52, 0x16, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x55, 0x69, 0x6e,
-	0x74, 0x36, 0x34, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x64, 0x0a, 0x18,
-	0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x65,
-	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65,
-	0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18,
-	0x55, 0x20, 0x01, 0x28, 0x11, 0x3a, 0x03, 0x2d, 0x38, 0x35, 0x52, 0x16, 0x64, 0x65, 0x66, 0x61,
-	0x75, 0x6c, 0x74, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
-	0x6f, 0x6e, 0x3a, 0x63, 0x0a, 0x18, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x69,
-	0x6e, 0x74, 0x36, 0x34, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25,
-	0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74,
-	0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e,
-	0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x56, 0x20, 0x01, 0x28, 0x12, 0x3a, 0x02, 0x38, 0x36, 0x52,
-	0x16, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x78,
-	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x65, 0x0a, 0x19, 0x64, 0x65, 0x66, 0x61, 0x75,
-	0x6c, 0x74, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e,
-	0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c,
-	0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x57, 0x20, 0x01, 0x28,
-	0x07, 0x3a, 0x02, 0x38, 0x37, 0x52, 0x17, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x69,
-	0x78, 0x65, 0x64, 0x33, 0x32, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x65,
-	0x0a, 0x19, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36,
-	0x34, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74,
-	0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
-	0x6e, 0x73, 0x18, 0x58, 0x20, 0x01, 0x28, 0x06, 0x3a, 0x02, 0x38, 0x38, 0x52, 0x17, 0x64, 0x65,
-	0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x45, 0x78, 0x74, 0x65,
-	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x67, 0x0a, 0x1a, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
-	0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
-	0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c,
-	0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x59, 0x20, 0x01, 0x28, 0x0f,
-	0x3a, 0x02, 0x38, 0x39, 0x52, 0x18, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x66, 0x69,
-	0x78, 0x65, 0x64, 0x33, 0x32, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x68,
-	0x0a, 0x1a, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64,
-	0x36, 0x34, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67,
-	0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73,
-	0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
-	0x6f, 0x6e, 0x73, 0x18, 0x50, 0x20, 0x01, 0x28, 0x10, 0x3a, 0x03, 0x2d, 0x39, 0x30, 0x52, 0x18,
-	0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x45,
-	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x63, 0x0a, 0x17, 0x64, 0x65, 0x66, 0x61,
-	0x75, 0x6c, 0x74, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
-	0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c,
-	0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x5b, 0x20, 0x01, 0x28, 0x02,
-	0x3a, 0x04, 0x39, 0x31, 0x2e, 0x35, 0x52, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46,
-	0x6c, 0x6f, 0x61, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x66, 0x0a,
-	0x18, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f,
-	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54,
-	0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73,
-	0x18, 0x5c, 0x20, 0x01, 0x28, 0x01, 0x3a, 0x05, 0x39, 0x32, 0x30, 0x30, 0x30, 0x52, 0x16, 0x64,
-	0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x45, 0x78, 0x74, 0x65,
-	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x61, 0x0a, 0x16, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
-	0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12,
+	0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65,
+	0x3a, 0x4a, 0x0a, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f,
+	0x6c, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78,
+	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x2b, 0x20, 0x03, 0x28, 0x08, 0x52, 0x0c,
+	0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x3a, 0x4e, 0x0a, 0x0f,
+	0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12,
 	0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
 	0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65,
-	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x5d, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x04, 0x74, 0x72,
-	0x75, 0x65, 0x52, 0x14, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x42, 0x6f, 0x6f, 0x6c, 0x45,
-	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x66, 0x0a, 0x18, 0x64, 0x65, 0x66, 0x61,
-	0x75, 0x6c, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e,
-	0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c,
-	0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x5e, 0x20, 0x01, 0x28,
-	0x09, 0x3a, 0x05, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x16, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
-	0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
-	0x3a, 0x64, 0x0a, 0x17, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x62, 0x79, 0x74, 0x65,
-	0x73, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f,
+	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x2c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65,
+	0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x4c, 0x0a, 0x0e,
+	0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x25,
+	0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74,
+	0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e,
+	0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x2d, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0d, 0x72, 0x65, 0x70,
+	0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x3a, 0x6e, 0x0a, 0x0d, 0x72, 0x65,
+	0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x25, 0x2e, 0x67, 0x6f,
 	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74,
 	0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
-	0x6e, 0x73, 0x18, 0x5f, 0x20, 0x01, 0x28, 0x0c, 0x3a, 0x05, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x52,
-	0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x45, 0x78, 0x74,
-	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x62, 0x0a, 0x16, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64,
-	0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
-	0x12, 0x28, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x2e, 0x74, 0x65, 0x73, 0x74, 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, 0x02, 0x10, 0x01, 0x52, 0x14, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x33,
-	0x32, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x62, 0x0a, 0x16, 0x70, 0x61,
-	0x63, 0x6b, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e,
-	0x73, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70,
+	0x6e, 0x73, 0x18, 0x2e, 0x20, 0x03, 0x28, 0x0a, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65,
+	0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x0d, 0x72, 0x65, 0x70,
+	0x65, 0x61, 0x74, 0x65, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3a, 0x92, 0x01, 0x0a, 0x17, 0x72,
+	0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x6d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74,
+	0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x30, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c,
+	0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65,
+	0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74,
+	0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3a,
+	0x84, 0x01, 0x0a, 0x14, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73,
+	0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65,
+	0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18,
+	0x33, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 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, 0x12, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74,
+	0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x3a, 0x4e, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
+	0x74, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73,
+	0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x51,
+	0x20, 0x01, 0x28, 0x05, 0x3a, 0x02, 0x38, 0x31, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
+	0x74, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x3a, 0x4e, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
+	0x74, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73,
+	0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x52,
+	0x20, 0x01, 0x28, 0x03, 0x3a, 0x02, 0x38, 0x32, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
+	0x74, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x3a, 0x50, 0x0a, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
+	0x74, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65,
+	0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18,
+	0x53, 0x20, 0x01, 0x28, 0x0d, 0x3a, 0x02, 0x38, 0x33, 0x52, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75,
+	0x6c, 0x74, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x3a, 0x50, 0x0a, 0x0e, 0x64, 0x65, 0x66, 0x61,
+	0x75, 0x6c, 0x74, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e,
+	0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
+	0x73, 0x18, 0x54, 0x20, 0x01, 0x28, 0x04, 0x3a, 0x02, 0x38, 0x34, 0x52, 0x0d, 0x64, 0x65, 0x66,
+	0x61, 0x75, 0x6c, 0x74, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x3a, 0x51, 0x0a, 0x0e, 0x64, 0x65,
+	0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x25, 0x2e, 0x67,
+	0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73,
+	0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+	0x6f, 0x6e, 0x73, 0x18, 0x55, 0x20, 0x01, 0x28, 0x11, 0x3a, 0x03, 0x2d, 0x38, 0x35, 0x52, 0x0d,
+	0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x3a, 0x50, 0x0a,
+	0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12,
+	0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65,
+	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x56, 0x20, 0x01, 0x28, 0x12, 0x3a, 0x02, 0x38, 0x36,
+	0x52, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x3a,
+	0x52, 0x0a, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64,
+	0x33, 0x32, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45,
+	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x57, 0x20, 0x01, 0x28, 0x07, 0x3a,
+	0x02, 0x38, 0x37, 0x52, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x69, 0x78, 0x65,
+	0x64, 0x33, 0x32, 0x3a, 0x52, 0x0a, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x66,
+	0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74,
+	0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x58, 0x20,
+	0x01, 0x28, 0x06, 0x3a, 0x02, 0x38, 0x38, 0x52, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
+	0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x3a, 0x54, 0x0a, 0x10, 0x64, 0x65, 0x66, 0x61, 0x75,
+	0x6c, 0x74, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x25, 0x2e, 0x67, 0x6f,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74,
+	0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+	0x6e, 0x73, 0x18, 0x59, 0x20, 0x01, 0x28, 0x0f, 0x3a, 0x02, 0x38, 0x39, 0x52, 0x0f, 0x64, 0x65,
+	0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x3a, 0x55, 0x0a,
+	0x10, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36,
+	0x34, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78,
+	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x50, 0x20, 0x01, 0x28, 0x10, 0x3a, 0x03,
+	0x2d, 0x39, 0x30, 0x52, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x66, 0x69, 0x78,
+	0x65, 0x64, 0x36, 0x34, 0x3a, 0x50, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f,
+	0x66, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41,
+	0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x5b, 0x20, 0x01,
+	0x28, 0x02, 0x3a, 0x04, 0x39, 0x31, 0x2e, 0x35, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
+	0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x53, 0x0a, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
+	0x74, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65,
+	0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18,
+	0x5c, 0x20, 0x01, 0x28, 0x01, 0x3a, 0x05, 0x39, 0x32, 0x30, 0x30, 0x30, 0x52, 0x0d, 0x64, 0x65,
+	0x66, 0x61, 0x75, 0x6c, 0x74, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x3a, 0x4e, 0x0a, 0x0c, 0x64,
+	0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x12, 0x25, 0x2e, 0x67, 0x6f,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74,
+	0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+	0x6e, 0x73, 0x18, 0x5d, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x0b,
+	0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x42, 0x6f, 0x6f, 0x6c, 0x3a, 0x53, 0x0a, 0x0e, 0x64,
+	0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x25, 0x2e,
+	0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65,
+	0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x73, 0x18, 0x5e, 0x20, 0x01, 0x28, 0x09, 0x3a, 0x05, 0x68, 0x65, 0x6c, 0x6c,
+	0x6f, 0x52, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67,
+	0x3a, 0x51, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x62, 0x79, 0x74, 0x65,
+	0x73, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78,
+	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x5f, 0x20, 0x01, 0x28, 0x0c, 0x3a, 0x05,
+	0x77, 0x6f, 0x72, 0x6c, 0x64, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x42, 0x79,
+	0x74, 0x65, 0x73, 0x3a, 0x4f, 0x0a, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x69, 0x6e,
+	0x74, 0x33, 0x32, 0x12, 0x28, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 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, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x49,
+	0x6e, 0x74, 0x33, 0x32, 0x3a, 0x4f, 0x0a, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x69,
+	0x6e, 0x74, 0x36, 0x34, 0x12, 0x28, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70,
 	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 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, 0x02, 0x10, 0x01, 0x52, 0x14, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64,
-	0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x64,
-	0x0a, 0x17, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f,
-	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x67, 0x6f, 0x70, 0x72,
+	0x20, 0x03, 0x28, 0x03, 0x42, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64,
+	0x49, 0x6e, 0x74, 0x36, 0x34, 0x3a, 0x51, 0x0a, 0x0d, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f,
+	0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x28, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 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, 0x02, 0x10, 0x01, 0x52, 0x0c, 0x70, 0x61, 0x63, 0x6b,
+	0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x3a, 0x51, 0x0a, 0x0d, 0x70, 0x61, 0x63, 0x6b,
+	0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x28, 0x2e, 0x67, 0x6f, 0x70, 0x72,
 	0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 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, 0x02, 0x10, 0x01, 0x52, 0x15, 0x70,
-	0x61, 0x63, 0x6b, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x78, 0x74, 0x65, 0x6e,
-	0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x64, 0x0a, 0x17, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x75,
-	0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12,
+	0x6f, 0x6e, 0x73, 0x18, 0x5d, 0x20, 0x03, 0x28, 0x04, 0x42, 0x02, 0x10, 0x01, 0x52, 0x0c, 0x70,
+	0x61, 0x63, 0x6b, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x3a, 0x51, 0x0a, 0x0d, 0x70,
+	0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x28, 0x2e, 0x67,
+	0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73,
+	0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65,
+	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x5e, 0x20, 0x03, 0x28, 0x11, 0x42, 0x02, 0x10, 0x01,
+	0x52, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x3a, 0x51,
+	0x0a, 0x0d, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12,
 	0x28, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
 	0x74, 0x65, 0x73, 0x74, 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,
-	0x02, 0x10, 0x01, 0x52, 0x15, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36,
-	0x34, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x64, 0x0a, 0x17, 0x70, 0x61,
-	0x63, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x65, 0x78, 0x74, 0x65,
-	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x5f, 0x20, 0x03, 0x28, 0x12, 0x42,
+	0x02, 0x10, 0x01, 0x52, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36,
+	0x34, 0x3a, 0x53, 0x0a, 0x0e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65,
+	0x64, 0x33, 0x32, 0x12, 0x28, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 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, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x46,
+	0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x3a, 0x53, 0x0a, 0x0e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64,
+	0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x28, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 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, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x70, 0x61,
+	0x63, 0x6b, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x3a, 0x55, 0x0a, 0x0f, 0x70,
+	0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x28,
+	0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74,
+	0x65, 0x73, 0x74, 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, 0x02,
+	0x10, 0x01, 0x52, 0x0e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64,
+	0x33, 0x32, 0x3a, 0x55, 0x0a, 0x0f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69,
+	0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x28, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
 	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x50,
 	0x61, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18,
-	0x5e, 0x20, 0x03, 0x28, 0x11, 0x42, 0x02, 0x10, 0x01, 0x52, 0x15, 0x70, 0x61, 0x63, 0x6b, 0x65,
-	0x64, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
-	0x3a, 0x64, 0x0a, 0x17, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36,
-	0x34, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x67, 0x6f,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74,
-	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, 0x02, 0x10, 0x01, 0x52,
-	0x15, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x78, 0x74,
-	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x66, 0x0a, 0x18, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64,
-	0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
-	0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 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, 0x02, 0x10, 0x01, 0x52, 0x16, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x46, 0x69,
-	0x78, 0x65, 0x64, 0x33, 0x32, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x66,
-	0x0a, 0x18, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34,
-	0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x67, 0x6f, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 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, 0x02, 0x10, 0x01, 0x52, 0x16,
-	0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x45, 0x78, 0x74,
-	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x68, 0x0a, 0x19, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64,
-	0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
-	0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 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, 0x02, 0x10, 0x01, 0x52, 0x17, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x53,
-	0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
-	0x3a, 0x68, 0x0a, 0x19, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65,
-	0x64, 0x36, 0x34, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e,
-	0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65,
-	0x73, 0x74, 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, 0x02, 0x10,
-	0x01, 0x52, 0x17, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36,
-	0x34, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x62, 0x0a, 0x16, 0x70, 0x61,
-	0x63, 0x6b, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e,
-	0x73, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 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, 0x02, 0x10, 0x01, 0x52, 0x14, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64,
-	0x46, 0x6c, 0x6f, 0x61, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x64,
-	0x0a, 0x17, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f,
-	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x67, 0x6f, 0x70, 0x72,
+	0x63, 0x20, 0x03, 0x28, 0x10, 0x42, 0x02, 0x10, 0x01, 0x52, 0x0e, 0x70, 0x61, 0x63, 0x6b, 0x65,
+	0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x3a, 0x4f, 0x0a, 0x0c, 0x70, 0x61, 0x63,
+	0x6b, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x28, 0x2e, 0x67, 0x6f, 0x70, 0x72,
 	0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 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, 0x02, 0x10, 0x01, 0x52, 0x15, 0x70,
-	0x61, 0x63, 0x6b, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e,
-	0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x60, 0x0a, 0x15, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x62,
-	0x6f, 0x6f, 0x6c, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e,
+	0x6f, 0x6e, 0x73, 0x18, 0x64, 0x20, 0x03, 0x28, 0x02, 0x42, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x70,
+	0x61, 0x63, 0x6b, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x51, 0x0a, 0x0d, 0x70, 0x61,
+	0x63, 0x6b, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x28, 0x2e, 0x67, 0x6f,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74,
+	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, 0x02, 0x10, 0x01, 0x52,
+	0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x3a, 0x4d, 0x0a,
+	0x0b, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x12, 0x28, 0x2e, 0x67,
+	0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73,
+	0x74, 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, 0x02, 0x10, 0x01,
+	0x52, 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x3a, 0x6e, 0x0a, 0x0b,
+	0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x28, 0x2e, 0x67, 0x6f,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74,
+	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, 0x1f, 0x2e, 0x67, 0x6f,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74,
+	0x2e, 0x46, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x02, 0x10, 0x01,
+	0x52, 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x3a, 0x55, 0x0a, 0x0e,
+	0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x2a,
+	0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74,
+	0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x55, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64,
+	0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x5a, 0x20, 0x03, 0x28, 0x05,
+	0x42, 0x02, 0x10, 0x00, 0x52, 0x0d, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x49, 0x6e,
+	0x74, 0x33, 0x32, 0x3a, 0x55, 0x0a, 0x0e, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f,
+	0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x55,
+	0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
+	0x73, 0x18, 0x5b, 0x20, 0x03, 0x28, 0x03, 0x42, 0x02, 0x10, 0x00, 0x52, 0x0d, 0x75, 0x6e, 0x70,
+	0x61, 0x63, 0x6b, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x3a, 0x57, 0x0a, 0x0f, 0x75, 0x6e,
+	0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x2a, 0x2e,
 	0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65,
-	0x73, 0x74, 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, 0x02, 0x10,
-	0x01, 0x52, 0x13, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x78, 0x74,
-	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x81, 0x01, 0x0a, 0x15, 0x70, 0x61, 0x63, 0x6b, 0x65,
-	0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
-	0x12, 0x28, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x2e, 0x74, 0x65, 0x73, 0x74, 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, 0x1f, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x45, 0x6e, 0x75,
-	0x6d, 0x42, 0x02, 0x10, 0x01, 0x52, 0x13, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6e, 0x75,
-	0x6d, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x68, 0x0a, 0x18, 0x75, 0x6e,
-	0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x65, 0x78, 0x74,
-	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x55, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x45,
+	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x5c, 0x20, 0x03, 0x28, 0x0d, 0x42,
+	0x02, 0x10, 0x00, 0x52, 0x0e, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x55, 0x69, 0x6e,
+	0x74, 0x33, 0x32, 0x3a, 0x57, 0x0a, 0x0f, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f,
+	0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
 	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74,
 	0x55, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
-	0x6e, 0x73, 0x18, 0x5a, 0x20, 0x03, 0x28, 0x05, 0x42, 0x02, 0x10, 0x00, 0x52, 0x16, 0x75, 0x6e,
-	0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x78, 0x74, 0x65, 0x6e,
-	0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x68, 0x0a, 0x18, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64,
-	0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
-	0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x55, 0x6e, 0x70, 0x61, 0x63, 0x6b,
-	0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x5b, 0x20, 0x03,
-	0x28, 0x03, 0x42, 0x02, 0x10, 0x00, 0x52, 0x16, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64,
-	0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x6a,
-	0x0a, 0x19, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33,
-	0x32, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x67, 0x6f,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74,
-	0x2e, 0x54, 0x65, 0x73, 0x74, 0x55, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x74,
-	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x5c, 0x20, 0x03, 0x28, 0x0d, 0x42, 0x02, 0x10,
-	0x00, 0x52, 0x17, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33,
-	0x32, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x6a, 0x0a, 0x19, 0x75, 0x6e,
-	0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x65, 0x78,
-	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73,
-	0x74, 0x55, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
-	0x6f, 0x6e, 0x73, 0x18, 0x5d, 0x20, 0x03, 0x28, 0x04, 0x42, 0x02, 0x10, 0x00, 0x52, 0x17, 0x75,
-	0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x78, 0x74,
-	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x6a, 0x0a, 0x19, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b,
-	0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
-	0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x55, 0x6e, 0x70,
-	0x61, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18,
-	0x5e, 0x20, 0x03, 0x28, 0x11, 0x42, 0x02, 0x10, 0x00, 0x52, 0x17, 0x75, 0x6e, 0x70, 0x61, 0x63,
-	0x6b, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
-	0x6f, 0x6e, 0x3a, 0x6a, 0x0a, 0x19, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x73,
-	0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12,
+	0x6e, 0x73, 0x18, 0x5d, 0x20, 0x03, 0x28, 0x04, 0x42, 0x02, 0x10, 0x00, 0x52, 0x0e, 0x75, 0x6e,
+	0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x3a, 0x57, 0x0a, 0x0f,
+	0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12,
 	0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
 	0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x55, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65,
-	0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x5f, 0x20, 0x03, 0x28,
-	0x12, 0x42, 0x02, 0x10, 0x00, 0x52, 0x17, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x53,
-	0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x6c,
-	0x0a, 0x1a, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64,
-	0x33, 0x32, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x67,
-	0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73,
-	0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x55, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78,
-	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x60, 0x20, 0x03, 0x28, 0x07, 0x42, 0x02,
-	0x10, 0x00, 0x52, 0x18, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65,
-	0x64, 0x33, 0x32, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x6c, 0x0a, 0x1a,
-	0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34,
-	0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e,
-	0x54, 0x65, 0x73, 0x74, 0x55, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65,
-	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x61, 0x20, 0x03, 0x28, 0x06, 0x42, 0x02, 0x10, 0x00,
-	0x52, 0x18, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36,
-	0x34, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x6e, 0x0a, 0x1b, 0x75, 0x6e,
-	0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f,
-	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72,
+	0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x5e, 0x20, 0x03, 0x28,
+	0x11, 0x42, 0x02, 0x10, 0x00, 0x52, 0x0e, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x53,
+	0x69, 0x6e, 0x74, 0x33, 0x32, 0x3a, 0x57, 0x0a, 0x0f, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65,
+	0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65,
+	0x73, 0x74, 0x55, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x73, 0x18, 0x5f, 0x20, 0x03, 0x28, 0x12, 0x42, 0x02, 0x10, 0x00, 0x52, 0x0e,
+	0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x3a, 0x59,
+	0x0a, 0x10, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64,
+	0x33, 0x32, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x55, 0x6e, 0x70, 0x61,
+	0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x60,
+	0x20, 0x03, 0x28, 0x07, 0x42, 0x02, 0x10, 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b,
+	0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x3a, 0x59, 0x0a, 0x10, 0x75, 0x6e, 0x70,
+	0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x2a, 0x2e,
+	0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65,
+	0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x55, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x45,
+	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x61, 0x20, 0x03, 0x28, 0x06, 0x42,
+	0x02, 0x10, 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x46, 0x69, 0x78,
+	0x65, 0x64, 0x36, 0x34, 0x3a, 0x5b, 0x0a, 0x11, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64,
+	0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72,
 	0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54,
 	0x65, 0x73, 0x74, 0x55, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e,
 	0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x62, 0x20, 0x03, 0x28, 0x0f, 0x42, 0x02, 0x10, 0x00, 0x52,
-	0x19, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33,
-	0x32, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x6e, 0x0a, 0x1b, 0x75, 0x6e,
-	0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f,
-	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54,
-	0x65, 0x73, 0x74, 0x55, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e,
-	0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x63, 0x20, 0x03, 0x28, 0x10, 0x42, 0x02, 0x10, 0x00, 0x52,
-	0x19, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36,
-	0x34, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x68, 0x0a, 0x18, 0x75, 0x6e,
-	0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x65, 0x78, 0x74,
-	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x10, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33,
+	0x32, 0x3a, 0x5b, 0x0a, 0x11, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x66,
+	0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
 	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74,
 	0x55, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
-	0x6e, 0x73, 0x18, 0x64, 0x20, 0x03, 0x28, 0x02, 0x42, 0x02, 0x10, 0x00, 0x52, 0x16, 0x75, 0x6e,
-	0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e,
-	0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x6a, 0x0a, 0x19, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64,
-	0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
-	0x6e, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x55, 0x6e, 0x70, 0x61, 0x63,
-	0x6b, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x65, 0x20,
-	0x03, 0x28, 0x01, 0x42, 0x02, 0x10, 0x00, 0x52, 0x17, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65,
-	0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
-	0x3a, 0x66, 0x0a, 0x17, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f,
-	0x6c, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x67, 0x6f,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74,
-	0x2e, 0x54, 0x65, 0x73, 0x74, 0x55, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x74,
-	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x66, 0x20, 0x03, 0x28, 0x08, 0x42, 0x02, 0x10,
-	0x00, 0x52, 0x15, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x45,
-	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x87, 0x01, 0x0a, 0x17, 0x75, 0x6e, 0x70,
-	0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e,
-	0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70,
+	0x6e, 0x73, 0x18, 0x63, 0x20, 0x03, 0x28, 0x10, 0x42, 0x02, 0x10, 0x00, 0x52, 0x10, 0x75, 0x6e,
+	0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x3a, 0x55,
+	0x0a, 0x0e, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74,
+	0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x55, 0x6e, 0x70, 0x61, 0x63, 0x6b,
+	0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x64, 0x20, 0x03,
+	0x28, 0x02, 0x42, 0x02, 0x10, 0x00, 0x52, 0x0d, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64,
+	0x46, 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x57, 0x0a, 0x0f, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65,
+	0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65,
+	0x73, 0x74, 0x55, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x73, 0x18, 0x65, 0x20, 0x03, 0x28, 0x01, 0x42, 0x02, 0x10, 0x00, 0x52, 0x0e,
+	0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x3a, 0x53,
+	0x0a, 0x0d, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x12,
+	0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x55, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65,
+	0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x66, 0x20, 0x03, 0x28,
+	0x08, 0x42, 0x02, 0x10, 0x00, 0x52, 0x0c, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x42,
+	0x6f, 0x6f, 0x6c, 0x3a, 0x74, 0x0a, 0x0d, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f,
+	0x65, 0x6e, 0x75, 0x6d, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70,
 	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x55, 0x6e,
 	0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73,
 	0x18, 0x67, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
 	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x6f, 0x72, 0x65,
-	0x69, 0x67, 0x6e, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x02, 0x10, 0x00, 0x52, 0x15, 0x75, 0x6e, 0x70,
-	0x61, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
-	0x6f, 0x6e, 0x42, 0x35, 0x5a, 0x33, 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, 0x50, 0x01, 0x58, 0x02, 0x58, 0x03,
+	0x69, 0x67, 0x6e, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x02, 0x10, 0x00, 0x52, 0x0c, 0x75, 0x6e, 0x70,
+	0x61, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x35, 0x5a, 0x33, 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,
+	0x50, 0x01, 0x58, 0x02, 0x58, 0x03,
 }
 
 var (
@@ -4720,8 +4624,8 @@
 	(*ForeignMessage)(nil),                    // 6: goproto.proto.test.ForeignMessage
 	(*TestReservedFields)(nil),                // 7: goproto.proto.test.TestReservedFields
 	(*TestAllExtensions)(nil),                 // 8: goproto.proto.test.TestAllExtensions
-	(*OptionalGroupExtension)(nil),            // 9: goproto.proto.test.OptionalGroup_extension
-	(*RepeatedGroupExtension)(nil),            // 10: goproto.proto.test.RepeatedGroup_extension
+	(*OptionalGroup)(nil),                     // 9: goproto.proto.test.OptionalGroup
+	(*RepeatedGroup)(nil),                     // 10: goproto.proto.test.RepeatedGroup
 	(*TestNestedExtension)(nil),               // 11: goproto.proto.test.TestNestedExtension
 	(*TestRequired)(nil),                      // 12: goproto.proto.test.TestRequired
 	(*TestRequiredForeign)(nil),               // 13: goproto.proto.test.TestRequiredForeign
@@ -4797,8 +4701,8 @@
 	0,   // 32: goproto.proto.test.TestAllTypes.default_foreign_enum:type_name -> goproto.proto.test.ForeignEnum
 	23,  // 33: goproto.proto.test.TestAllTypes.oneof_nested_message:type_name -> goproto.proto.test.TestAllTypes.NestedMessage
 	2,   // 34: goproto.proto.test.TestAllTypes.oneof_enum:type_name -> goproto.proto.test.TestAllTypes.NestedEnum
-	43,  // 35: goproto.proto.test.OptionalGroup_extension.optional_nested_message:type_name -> goproto.proto.test.TestAllExtensions.NestedMessage
-	43,  // 36: goproto.proto.test.RepeatedGroup_extension.optional_nested_message:type_name -> goproto.proto.test.TestAllExtensions.NestedMessage
+	43,  // 35: goproto.proto.test.OptionalGroup.optional_nested_message:type_name -> goproto.proto.test.TestAllExtensions.NestedMessage
+	43,  // 36: goproto.proto.test.RepeatedGroup.optional_nested_message:type_name -> goproto.proto.test.TestAllExtensions.NestedMessage
 	12,  // 37: goproto.proto.test.TestRequiredForeign.optional_message:type_name -> goproto.proto.test.TestRequired
 	12,  // 38: goproto.proto.test.TestRequiredForeign.repeated_message:type_name -> goproto.proto.test.TestRequired
 	44,  // 39: goproto.proto.test.TestRequiredForeign.map_message:type_name -> goproto.proto.test.TestRequiredForeign.MapMessageEntry
@@ -4814,96 +4718,96 @@
 	2,   // 49: goproto.proto.test.TestAllTypes.MapStringNestedEnumEntry.value:type_name -> goproto.proto.test.TestAllTypes.NestedEnum
 	8,   // 50: goproto.proto.test.TestAllExtensions.NestedMessage.corecursive:type_name -> goproto.proto.test.TestAllExtensions
 	12,  // 51: goproto.proto.test.TestRequiredForeign.MapMessageEntry.value:type_name -> goproto.proto.test.TestRequired
-	8,   // 52: goproto.proto.test.optional_int32_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 53: goproto.proto.test.optional_int64_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 54: goproto.proto.test.optional_uint32_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 55: goproto.proto.test.optional_uint64_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 56: goproto.proto.test.optional_sint32_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 57: goproto.proto.test.optional_sint64_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 58: goproto.proto.test.optional_fixed32_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 59: goproto.proto.test.optional_fixed64_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 60: goproto.proto.test.optional_sfixed32_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 61: goproto.proto.test.optional_sfixed64_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 62: goproto.proto.test.optional_float_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 63: goproto.proto.test.optional_double_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 64: goproto.proto.test.optional_bool_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 65: goproto.proto.test.optional_string_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 66: goproto.proto.test.optional_bytes_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 67: goproto.proto.test.optionalgroup_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 68: goproto.proto.test.optional_nested_message_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 69: goproto.proto.test.optional_nested_enum_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 70: goproto.proto.test.repeated_int32_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 71: goproto.proto.test.repeated_int64_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 72: goproto.proto.test.repeated_uint32_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 73: goproto.proto.test.repeated_uint64_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 74: goproto.proto.test.repeated_sint32_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 75: goproto.proto.test.repeated_sint64_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 76: goproto.proto.test.repeated_fixed32_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 77: goproto.proto.test.repeated_fixed64_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 78: goproto.proto.test.repeated_sfixed32_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 79: goproto.proto.test.repeated_sfixed64_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 80: goproto.proto.test.repeated_float_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 81: goproto.proto.test.repeated_double_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 82: goproto.proto.test.repeated_bool_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 83: goproto.proto.test.repeated_string_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 84: goproto.proto.test.repeated_bytes_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 85: goproto.proto.test.repeatedgroup_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 86: goproto.proto.test.repeated_nested_message_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 87: goproto.proto.test.repeated_nested_enum_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 88: goproto.proto.test.default_int32_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 89: goproto.proto.test.default_int64_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 90: goproto.proto.test.default_uint32_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 91: goproto.proto.test.default_uint64_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 92: goproto.proto.test.default_sint32_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 93: goproto.proto.test.default_sint64_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 94: goproto.proto.test.default_fixed32_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 95: goproto.proto.test.default_fixed64_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 96: goproto.proto.test.default_sfixed32_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 97: goproto.proto.test.default_sfixed64_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 98: goproto.proto.test.default_float_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 99: goproto.proto.test.default_double_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 100: goproto.proto.test.default_bool_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 101: goproto.proto.test.default_string_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,   // 102: goproto.proto.test.default_bytes_extension:extendee -> goproto.proto.test.TestAllExtensions
-	18,  // 103: goproto.proto.test.packed_int32_extension:extendee -> goproto.proto.test.TestPackedExtensions
-	18,  // 104: goproto.proto.test.packed_int64_extension:extendee -> goproto.proto.test.TestPackedExtensions
-	18,  // 105: goproto.proto.test.packed_uint32_extension:extendee -> goproto.proto.test.TestPackedExtensions
-	18,  // 106: goproto.proto.test.packed_uint64_extension:extendee -> goproto.proto.test.TestPackedExtensions
-	18,  // 107: goproto.proto.test.packed_sint32_extension:extendee -> goproto.proto.test.TestPackedExtensions
-	18,  // 108: goproto.proto.test.packed_sint64_extension:extendee -> goproto.proto.test.TestPackedExtensions
-	18,  // 109: goproto.proto.test.packed_fixed32_extension:extendee -> goproto.proto.test.TestPackedExtensions
-	18,  // 110: goproto.proto.test.packed_fixed64_extension:extendee -> goproto.proto.test.TestPackedExtensions
-	18,  // 111: goproto.proto.test.packed_sfixed32_extension:extendee -> goproto.proto.test.TestPackedExtensions
-	18,  // 112: goproto.proto.test.packed_sfixed64_extension:extendee -> goproto.proto.test.TestPackedExtensions
-	18,  // 113: goproto.proto.test.packed_float_extension:extendee -> goproto.proto.test.TestPackedExtensions
-	18,  // 114: goproto.proto.test.packed_double_extension:extendee -> goproto.proto.test.TestPackedExtensions
-	18,  // 115: goproto.proto.test.packed_bool_extension:extendee -> goproto.proto.test.TestPackedExtensions
-	18,  // 116: goproto.proto.test.packed_enum_extension:extendee -> goproto.proto.test.TestPackedExtensions
-	19,  // 117: goproto.proto.test.unpacked_int32_extension:extendee -> goproto.proto.test.TestUnpackedExtensions
-	19,  // 118: goproto.proto.test.unpacked_int64_extension:extendee -> goproto.proto.test.TestUnpackedExtensions
-	19,  // 119: goproto.proto.test.unpacked_uint32_extension:extendee -> goproto.proto.test.TestUnpackedExtensions
-	19,  // 120: goproto.proto.test.unpacked_uint64_extension:extendee -> goproto.proto.test.TestUnpackedExtensions
-	19,  // 121: goproto.proto.test.unpacked_sint32_extension:extendee -> goproto.proto.test.TestUnpackedExtensions
-	19,  // 122: goproto.proto.test.unpacked_sint64_extension:extendee -> goproto.proto.test.TestUnpackedExtensions
-	19,  // 123: goproto.proto.test.unpacked_fixed32_extension:extendee -> goproto.proto.test.TestUnpackedExtensions
-	19,  // 124: goproto.proto.test.unpacked_fixed64_extension:extendee -> goproto.proto.test.TestUnpackedExtensions
-	19,  // 125: goproto.proto.test.unpacked_sfixed32_extension:extendee -> goproto.proto.test.TestUnpackedExtensions
-	19,  // 126: goproto.proto.test.unpacked_sfixed64_extension:extendee -> goproto.proto.test.TestUnpackedExtensions
-	19,  // 127: goproto.proto.test.unpacked_float_extension:extendee -> goproto.proto.test.TestUnpackedExtensions
-	19,  // 128: goproto.proto.test.unpacked_double_extension:extendee -> goproto.proto.test.TestUnpackedExtensions
-	19,  // 129: goproto.proto.test.unpacked_bool_extension:extendee -> goproto.proto.test.TestUnpackedExtensions
-	19,  // 130: goproto.proto.test.unpacked_enum_extension:extendee -> goproto.proto.test.TestUnpackedExtensions
+	8,   // 52: goproto.proto.test.optional_int32:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 53: goproto.proto.test.optional_int64:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 54: goproto.proto.test.optional_uint32:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 55: goproto.proto.test.optional_uint64:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 56: goproto.proto.test.optional_sint32:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 57: goproto.proto.test.optional_sint64:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 58: goproto.proto.test.optional_fixed32:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 59: goproto.proto.test.optional_fixed64:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 60: goproto.proto.test.optional_sfixed32:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 61: goproto.proto.test.optional_sfixed64:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 62: goproto.proto.test.optional_float:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 63: goproto.proto.test.optional_double:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 64: goproto.proto.test.optional_bool:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 65: goproto.proto.test.optional_string:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 66: goproto.proto.test.optional_bytes:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 67: goproto.proto.test.optionalgroup:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 68: goproto.proto.test.optional_nested_message:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 69: goproto.proto.test.optional_nested_enum:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 70: goproto.proto.test.repeated_int32:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 71: goproto.proto.test.repeated_int64:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 72: goproto.proto.test.repeated_uint32:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 73: goproto.proto.test.repeated_uint64:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 74: goproto.proto.test.repeated_sint32:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 75: goproto.proto.test.repeated_sint64:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 76: goproto.proto.test.repeated_fixed32:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 77: goproto.proto.test.repeated_fixed64:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 78: goproto.proto.test.repeated_sfixed32:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 79: goproto.proto.test.repeated_sfixed64:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 80: goproto.proto.test.repeated_float:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 81: goproto.proto.test.repeated_double:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 82: goproto.proto.test.repeated_bool:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 83: goproto.proto.test.repeated_string:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 84: goproto.proto.test.repeated_bytes:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 85: goproto.proto.test.repeatedgroup:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 86: goproto.proto.test.repeated_nested_message:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 87: goproto.proto.test.repeated_nested_enum:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 88: goproto.proto.test.default_int32:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 89: goproto.proto.test.default_int64:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 90: goproto.proto.test.default_uint32:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 91: goproto.proto.test.default_uint64:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 92: goproto.proto.test.default_sint32:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 93: goproto.proto.test.default_sint64:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 94: goproto.proto.test.default_fixed32:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 95: goproto.proto.test.default_fixed64:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 96: goproto.proto.test.default_sfixed32:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 97: goproto.proto.test.default_sfixed64:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 98: goproto.proto.test.default_float:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 99: goproto.proto.test.default_double:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 100: goproto.proto.test.default_bool:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 101: goproto.proto.test.default_string:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // 102: goproto.proto.test.default_bytes:extendee -> goproto.proto.test.TestAllExtensions
+	18,  // 103: goproto.proto.test.packed_int32:extendee -> goproto.proto.test.TestPackedExtensions
+	18,  // 104: goproto.proto.test.packed_int64:extendee -> goproto.proto.test.TestPackedExtensions
+	18,  // 105: goproto.proto.test.packed_uint32:extendee -> goproto.proto.test.TestPackedExtensions
+	18,  // 106: goproto.proto.test.packed_uint64:extendee -> goproto.proto.test.TestPackedExtensions
+	18,  // 107: goproto.proto.test.packed_sint32:extendee -> goproto.proto.test.TestPackedExtensions
+	18,  // 108: goproto.proto.test.packed_sint64:extendee -> goproto.proto.test.TestPackedExtensions
+	18,  // 109: goproto.proto.test.packed_fixed32:extendee -> goproto.proto.test.TestPackedExtensions
+	18,  // 110: goproto.proto.test.packed_fixed64:extendee -> goproto.proto.test.TestPackedExtensions
+	18,  // 111: goproto.proto.test.packed_sfixed32:extendee -> goproto.proto.test.TestPackedExtensions
+	18,  // 112: goproto.proto.test.packed_sfixed64:extendee -> goproto.proto.test.TestPackedExtensions
+	18,  // 113: goproto.proto.test.packed_float:extendee -> goproto.proto.test.TestPackedExtensions
+	18,  // 114: goproto.proto.test.packed_double:extendee -> goproto.proto.test.TestPackedExtensions
+	18,  // 115: goproto.proto.test.packed_bool:extendee -> goproto.proto.test.TestPackedExtensions
+	18,  // 116: goproto.proto.test.packed_enum:extendee -> goproto.proto.test.TestPackedExtensions
+	19,  // 117: goproto.proto.test.unpacked_int32:extendee -> goproto.proto.test.TestUnpackedExtensions
+	19,  // 118: goproto.proto.test.unpacked_int64:extendee -> goproto.proto.test.TestUnpackedExtensions
+	19,  // 119: goproto.proto.test.unpacked_uint32:extendee -> goproto.proto.test.TestUnpackedExtensions
+	19,  // 120: goproto.proto.test.unpacked_uint64:extendee -> goproto.proto.test.TestUnpackedExtensions
+	19,  // 121: goproto.proto.test.unpacked_sint32:extendee -> goproto.proto.test.TestUnpackedExtensions
+	19,  // 122: goproto.proto.test.unpacked_sint64:extendee -> goproto.proto.test.TestUnpackedExtensions
+	19,  // 123: goproto.proto.test.unpacked_fixed32:extendee -> goproto.proto.test.TestUnpackedExtensions
+	19,  // 124: goproto.proto.test.unpacked_fixed64:extendee -> goproto.proto.test.TestUnpackedExtensions
+	19,  // 125: goproto.proto.test.unpacked_sfixed32:extendee -> goproto.proto.test.TestUnpackedExtensions
+	19,  // 126: goproto.proto.test.unpacked_sfixed64:extendee -> goproto.proto.test.TestUnpackedExtensions
+	19,  // 127: goproto.proto.test.unpacked_float:extendee -> goproto.proto.test.TestUnpackedExtensions
+	19,  // 128: goproto.proto.test.unpacked_double:extendee -> goproto.proto.test.TestUnpackedExtensions
+	19,  // 129: goproto.proto.test.unpacked_bool:extendee -> goproto.proto.test.TestUnpackedExtensions
+	19,  // 130: goproto.proto.test.unpacked_enum:extendee -> goproto.proto.test.TestUnpackedExtensions
 	8,   // 131: goproto.proto.test.TestNestedExtension.nested_string_extension:extendee -> goproto.proto.test.TestAllExtensions
 	8,   // 132: goproto.proto.test.TestRequired.single:extendee -> goproto.proto.test.TestAllExtensions
 	8,   // 133: goproto.proto.test.TestRequired.multi:extendee -> goproto.proto.test.TestAllExtensions
-	9,   // 134: goproto.proto.test.optionalgroup_extension:type_name -> goproto.proto.test.OptionalGroup_extension
-	43,  // 135: goproto.proto.test.optional_nested_message_extension:type_name -> goproto.proto.test.TestAllExtensions.NestedMessage
-	2,   // 136: goproto.proto.test.optional_nested_enum_extension:type_name -> goproto.proto.test.TestAllTypes.NestedEnum
-	10,  // 137: goproto.proto.test.repeatedgroup_extension:type_name -> goproto.proto.test.RepeatedGroup_extension
-	43,  // 138: goproto.proto.test.repeated_nested_message_extension:type_name -> goproto.proto.test.TestAllExtensions.NestedMessage
-	2,   // 139: goproto.proto.test.repeated_nested_enum_extension:type_name -> goproto.proto.test.TestAllTypes.NestedEnum
-	0,   // 140: goproto.proto.test.packed_enum_extension:type_name -> goproto.proto.test.ForeignEnum
-	0,   // 141: goproto.proto.test.unpacked_enum_extension:type_name -> goproto.proto.test.ForeignEnum
+	9,   // 134: goproto.proto.test.optionalgroup:type_name -> goproto.proto.test.OptionalGroup
+	43,  // 135: goproto.proto.test.optional_nested_message:type_name -> goproto.proto.test.TestAllExtensions.NestedMessage
+	2,   // 136: goproto.proto.test.optional_nested_enum:type_name -> goproto.proto.test.TestAllTypes.NestedEnum
+	10,  // 137: goproto.proto.test.repeatedgroup:type_name -> goproto.proto.test.RepeatedGroup
+	43,  // 138: goproto.proto.test.repeated_nested_message:type_name -> goproto.proto.test.TestAllExtensions.NestedMessage
+	2,   // 139: goproto.proto.test.repeated_nested_enum:type_name -> goproto.proto.test.TestAllTypes.NestedEnum
+	0,   // 140: goproto.proto.test.packed_enum:type_name -> goproto.proto.test.ForeignEnum
+	0,   // 141: goproto.proto.test.unpacked_enum:type_name -> goproto.proto.test.ForeignEnum
 	12,  // 142: goproto.proto.test.TestRequired.single:type_name -> goproto.proto.test.TestRequired
 	12,  // 143: goproto.proto.test.TestRequired.multi:type_name -> goproto.proto.test.TestRequired
 	20,  // 144: goproto.proto.test.TestService.Foo:input_type -> goproto.proto.test.FooRequest
@@ -4990,7 +4894,7 @@
 			}
 		}
 		file_test_test_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*OptionalGroupExtension); i {
+			switch v := v.(*OptionalGroup); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -5002,7 +4906,7 @@
 			}
 		}
 		file_test_test_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*RepeatedGroupExtension); i {
+			switch v := v.(*RepeatedGroup); i {
 			case 0:
 				return &v.state
 			case 1:
diff --git a/internal/testprotos/test/test.proto b/internal/testprotos/test/test.proto
index 081567d..3e37e8b 100644
--- a/internal/testprotos/test/test.proto
+++ b/internal/testprotos/test/test.proto
@@ -178,70 +178,70 @@
 }
 
 extend TestAllExtensions {
-  optional int32    optional_int32_extension    =  1;
-  optional int64    optional_int64_extension    =  2;
-  optional uint32   optional_uint32_extension   =  3;
-  optional uint64   optional_uint64_extension   =  4;
-  optional sint32   optional_sint32_extension   =  5;
-  optional sint64   optional_sint64_extension   =  6;
-  optional fixed32  optional_fixed32_extension  =  7;
-  optional fixed64  optional_fixed64_extension  =  8;
-  optional sfixed32 optional_sfixed32_extension =  9;
-  optional sfixed64 optional_sfixed64_extension = 10;
-  optional float    optional_float_extension    = 11;
-  optional double   optional_double_extension   = 12;
-  optional bool     optional_bool_extension     = 13;
-  optional string   optional_string_extension   = 14;
-  optional bytes    optional_bytes_extension    = 15;
+  optional int32    optional_int32    =  1;
+  optional int64    optional_int64    =  2;
+  optional uint32   optional_uint32   =  3;
+  optional uint64   optional_uint64   =  4;
+  optional sint32   optional_sint32   =  5;
+  optional sint64   optional_sint64   =  6;
+  optional fixed32  optional_fixed32  =  7;
+  optional fixed64  optional_fixed64  =  8;
+  optional sfixed32 optional_sfixed32 =  9;
+  optional sfixed64 optional_sfixed64 = 10;
+  optional float    optional_float    = 11;
+  optional double   optional_double   = 12;
+  optional bool     optional_bool     = 13;
+  optional string   optional_string   = 14;
+  optional bytes    optional_bytes    = 15;
 
-  optional group OptionalGroup_extension = 16 {
+  optional group OptionalGroup = 16 {
     optional int32 a = 17;
     optional int32 same_field_number = 16;
     optional TestAllExtensions.NestedMessage optional_nested_message = 1000;
   }
 
-  optional TestAllExtensions.NestedMessage optional_nested_message_extension = 18;
-  optional TestAllTypes.NestedEnum optional_nested_enum_extension = 21;
+  optional TestAllExtensions.NestedMessage optional_nested_message = 18;
+  optional TestAllTypes.NestedEnum optional_nested_enum = 21;
 
-  repeated int32    repeated_int32_extension    = 31;
-  repeated int64    repeated_int64_extension    = 32;
-  repeated uint32   repeated_uint32_extension   = 33;
-  repeated uint64   repeated_uint64_extension   = 34;
-  repeated sint32   repeated_sint32_extension   = 35;
-  repeated sint64   repeated_sint64_extension   = 36;
-  repeated fixed32  repeated_fixed32_extension  = 37;
-  repeated fixed64  repeated_fixed64_extension  = 38;
-  repeated sfixed32 repeated_sfixed32_extension = 39;
-  repeated sfixed64 repeated_sfixed64_extension = 40;
-  repeated float    repeated_float_extension    = 41;
-  repeated double   repeated_double_extension   = 42;
-  repeated bool     repeated_bool_extension     = 43;
-  repeated string   repeated_string_extension   = 44;
-  repeated bytes    repeated_bytes_extension    = 45;
+  repeated int32    repeated_int32    = 31;
+  repeated int64    repeated_int64    = 32;
+  repeated uint32   repeated_uint32   = 33;
+  repeated uint64   repeated_uint64   = 34;
+  repeated sint32   repeated_sint32   = 35;
+  repeated sint64   repeated_sint64   = 36;
+  repeated fixed32  repeated_fixed32  = 37;
+  repeated fixed64  repeated_fixed64  = 38;
+  repeated sfixed32 repeated_sfixed32 = 39;
+  repeated sfixed64 repeated_sfixed64 = 40;
+  repeated float    repeated_float    = 41;
+  repeated double   repeated_double   = 42;
+  repeated bool     repeated_bool     = 43;
+  repeated string   repeated_string   = 44;
+  repeated bytes    repeated_bytes    = 45;
 
-  repeated group RepeatedGroup_extension = 46 {
+  repeated group RepeatedGroup = 46 {
     optional int32 a = 47;
     optional TestAllExtensions.NestedMessage optional_nested_message = 1001;
   }
 
-  repeated TestAllExtensions.NestedMessage repeated_nested_message_extension = 48;
-  repeated TestAllTypes.NestedEnum repeated_nested_enum_extension = 51;
+  repeated TestAllExtensions.NestedMessage repeated_nested_message = 48;
+  repeated TestAllTypes.NestedEnum repeated_nested_enum = 51;
 
-  optional int32    default_int32_extension    = 81 [default =  81    ];
-  optional int64    default_int64_extension    = 82 [default =  82    ];
-  optional uint32   default_uint32_extension   = 83 [default =  83    ];
-  optional uint64   default_uint64_extension   = 84 [default =  84    ];
-  optional sint32   default_sint32_extension   = 85 [default = -85    ];
-  optional sint64   default_sint64_extension   = 86 [default =  86    ];
-  optional fixed32  default_fixed32_extension  = 87 [default =  87    ];
-  optional fixed64  default_fixed64_extension  = 88 [default =  88    ];
-  optional sfixed32 default_sfixed32_extension = 89 [default =  89    ];
-  optional sfixed64 default_sfixed64_extension = 80 [default = -90    ];
-  optional float    default_float_extension    = 91 [default =  91.5  ];
-  optional double   default_double_extension   = 92 [default =  92e3  ];
-  optional bool     default_bool_extension     = 93 [default = true   ];
-  optional string   default_string_extension   = 94 [default = "hello"];
-  optional bytes    default_bytes_extension    = 95 [default = "world"];
+  optional int32    default_int32    = 81 [default =  81    ];
+  optional int64    default_int64    = 82 [default =  82    ];
+  optional uint32   default_uint32   = 83 [default =  83    ];
+  optional uint64   default_uint64   = 84 [default =  84    ];
+  optional sint32   default_sint32   = 85 [default = -85    ];
+  optional sint64   default_sint64   = 86 [default =  86    ];
+  optional fixed32  default_fixed32  = 87 [default =  87    ];
+  optional fixed64  default_fixed64  = 88 [default =  88    ];
+  optional sfixed32 default_sfixed32 = 89 [default =  89    ];
+  optional sfixed64 default_sfixed64 = 80 [default = -90    ];
+  optional float    default_float    = 91 [default =  91.5  ];
+  optional double   default_double   = 92 [default =  92e3  ];
+  optional bool     default_bool     = 93 [default = true   ];
+  optional string   default_string   = 94 [default = "hello"];
+  optional bytes    default_bytes    = 95 [default = "world"];
 }
 
 message TestNestedExtension {
@@ -321,20 +321,20 @@
 }
 
 extend TestPackedExtensions {
-  repeated    int32 packed_int32_extension    =  90 [packed = true];
-  repeated    int64 packed_int64_extension    =  91 [packed = true];
-  repeated   uint32 packed_uint32_extension   =  92 [packed = true];
-  repeated   uint64 packed_uint64_extension   =  93 [packed = true];
-  repeated   sint32 packed_sint32_extension   =  94 [packed = true];
-  repeated   sint64 packed_sint64_extension   =  95 [packed = true];
-  repeated  fixed32 packed_fixed32_extension  =  96 [packed = true];
-  repeated  fixed64 packed_fixed64_extension  =  97 [packed = true];
-  repeated sfixed32 packed_sfixed32_extension =  98 [packed = true];
-  repeated sfixed64 packed_sfixed64_extension =  99 [packed = true];
-  repeated    float packed_float_extension    = 100 [packed = true];
-  repeated   double packed_double_extension   = 101 [packed = true];
-  repeated     bool packed_bool_extension     = 102 [packed = true];
-  repeated ForeignEnum packed_enum_extension  = 103 [packed = true];
+  repeated    int32 packed_int32    =  90 [packed = true];
+  repeated    int64 packed_int64    =  91 [packed = true];
+  repeated   uint32 packed_uint32   =  92 [packed = true];
+  repeated   uint64 packed_uint64   =  93 [packed = true];
+  repeated   sint32 packed_sint32   =  94 [packed = true];
+  repeated   sint64 packed_sint64   =  95 [packed = true];
+  repeated  fixed32 packed_fixed32  =  96 [packed = true];
+  repeated  fixed64 packed_fixed64  =  97 [packed = true];
+  repeated sfixed32 packed_sfixed32 =  98 [packed = true];
+  repeated sfixed64 packed_sfixed64 =  99 [packed = true];
+  repeated    float packed_float    = 100 [packed = true];
+  repeated   double packed_double   = 101 [packed = true];
+  repeated     bool packed_bool     = 102 [packed = true];
+  repeated ForeignEnum packed_enum  = 103 [packed = true];
 }
 
 message TestUnpackedExtensions {
@@ -342,20 +342,20 @@
 }
 
 extend TestUnpackedExtensions {
-  repeated    int32 unpacked_int32_extension    =  90 [packed = false];
-  repeated    int64 unpacked_int64_extension    =  91 [packed = false];
-  repeated   uint32 unpacked_uint32_extension   =  92 [packed = false];
-  repeated   uint64 unpacked_uint64_extension   =  93 [packed = false];
-  repeated   sint32 unpacked_sint32_extension   =  94 [packed = false];
-  repeated   sint64 unpacked_sint64_extension   =  95 [packed = false];
-  repeated  fixed32 unpacked_fixed32_extension  =  96 [packed = false];
-  repeated  fixed64 unpacked_fixed64_extension  =  97 [packed = false];
-  repeated sfixed32 unpacked_sfixed32_extension =  98 [packed = false];
-  repeated sfixed64 unpacked_sfixed64_extension =  99 [packed = false];
-  repeated    float unpacked_float_extension    = 100 [packed = false];
-  repeated   double unpacked_double_extension   = 101 [packed = false];
-  repeated     bool unpacked_bool_extension     = 102 [packed = false];
-  repeated ForeignEnum unpacked_enum_extension  = 103 [packed = false];
+  repeated    int32 unpacked_int32    =  90 [packed = false];
+  repeated    int64 unpacked_int64    =  91 [packed = false];
+  repeated   uint32 unpacked_uint32   =  92 [packed = false];
+  repeated   uint64 unpacked_uint64   =  93 [packed = false];
+  repeated   sint32 unpacked_sint32   =  94 [packed = false];
+  repeated   sint64 unpacked_sint64   =  95 [packed = false];
+  repeated  fixed32 unpacked_fixed32  =  96 [packed = false];
+  repeated  fixed64 unpacked_fixed64  =  97 [packed = false];
+  repeated sfixed32 unpacked_sfixed32 =  98 [packed = false];
+  repeated sfixed64 unpacked_sfixed64 =  99 [packed = false];
+  repeated    float unpacked_float    = 100 [packed = false];
+  repeated   double unpacked_double   = 101 [packed = false];
+  repeated     bool unpacked_bool     = 102 [packed = false];
+  repeated ForeignEnum unpacked_enum  = 103 [packed = false];
 }
 
 // Test that RPC services work.
diff --git a/proto/equal_test.go b/proto/equal_test.go
index 65a8bfb..3ae5771 100644
--- a/proto/equal_test.go
+++ b/proto/equal_test.go
@@ -402,15 +402,15 @@
 		// Extensions.
 		{
 			x: build(&testpb.TestAllExtensions{},
-				extend(testpb.E_OptionalInt32Extension, int32(1)),
+				extend(testpb.E_OptionalInt32, int32(1)),
 			),
 			y: build(&testpb.TestAllExtensions{},
-				extend(testpb.E_OptionalInt32Extension, int32(2)),
+				extend(testpb.E_OptionalInt32, int32(2)),
 			),
 		}, {
 			x: &testpb.TestAllExtensions{},
 			y: build(&testpb.TestAllExtensions{},
-				extend(testpb.E_OptionalInt32Extension, int32(2)),
+				extend(testpb.E_OptionalInt32, int32(2)),
 			),
 		},
 
diff --git a/proto/extension_test.go b/proto/extension_test.go
index b3a0cff..622818c 100644
--- a/proto/extension_test.go
+++ b/proto/extension_test.go
@@ -27,13 +27,13 @@
 	}{
 		{
 			message:     &testpb.TestAllExtensions{},
-			ext:         testpb.E_OptionalInt32Extension,
+			ext:         testpb.E_OptionalInt32,
 			wantDefault: int32(0),
 			value:       int32(1),
 		},
 		{
 			message:     &testpb.TestAllExtensions{},
-			ext:         testpb.E_RepeatedStringExtension,
+			ext:         testpb.E_RepeatedString,
 			wantDefault: ([]string)(nil),
 			value:       []string{"a", "b", "c"},
 		},
@@ -74,7 +74,7 @@
 	// a chance to occur.
 	want := int32(42)
 	m1 := &testpb.TestAllExtensions{}
-	proto.SetExtension(m1, testpb.E_OptionalNestedMessageExtension, &testpb.TestAllExtensions_NestedMessage{A: proto.Int32(want)})
+	proto.SetExtension(m1, testpb.E_OptionalNestedMessage, &testpb.TestAllExtensions_NestedMessage{A: proto.Int32(want)})
 	b, err := proto.Marshal(m1)
 	if err != nil {
 		t.Fatal(err)
@@ -95,7 +95,7 @@
 		wg.Add(1)
 		go func() {
 			defer wg.Done()
-			got := proto.GetExtension(m, testpb.E_OptionalNestedMessageExtension).(*testpb.TestAllExtensions_NestedMessage).GetA()
+			got := proto.GetExtension(m, testpb.E_OptionalNestedMessage).(*testpb.TestAllExtensions_NestedMessage).GetA()
 			if got != want {
 				t.Errorf("GetExtension(optional_nested_message).a = %v, want %v", got, want)
 			}
diff --git a/proto/merge_test.go b/proto/merge_test.go
index e59feb9..aa9682c 100644
--- a/proto/merge_test.go
+++ b/proto/merge_test.go
@@ -286,41 +286,41 @@
 		desc: "merge extension fields",
 		dst: func() proto.Message {
 			m := new(testpb.TestAllExtensions)
-			proto.SetExtension(m, testpb.E_OptionalInt32Extension, int32(32))
-			proto.SetExtension(m, testpb.E_OptionalNestedMessageExtension,
+			proto.SetExtension(m, testpb.E_OptionalInt32, int32(32))
+			proto.SetExtension(m, testpb.E_OptionalNestedMessage,
 				&testpb.TestAllExtensions_NestedMessage{
 					A: proto.Int32(50),
 				},
 			)
-			proto.SetExtension(m, testpb.E_RepeatedFixed32Extension, []uint32{1, 2, 3})
+			proto.SetExtension(m, testpb.E_RepeatedFixed32, []uint32{1, 2, 3})
 			return m
 		}(),
 		src: func() proto.Message {
 			m2 := new(testpb.TestAllExtensions)
-			proto.SetExtension(m2, testpb.E_OptionalInt64Extension, int64(1000))
+			proto.SetExtension(m2, testpb.E_OptionalInt64, int64(1000))
 			m := new(testpb.TestAllExtensions)
-			proto.SetExtension(m, testpb.E_OptionalInt64Extension, int64(64))
-			proto.SetExtension(m, testpb.E_OptionalNestedMessageExtension,
+			proto.SetExtension(m, testpb.E_OptionalInt64, int64(64))
+			proto.SetExtension(m, testpb.E_OptionalNestedMessage,
 				&testpb.TestAllExtensions_NestedMessage{
 					Corecursive: m2,
 				},
 			)
-			proto.SetExtension(m, testpb.E_RepeatedFixed32Extension, []uint32{4, 5, 6})
+			proto.SetExtension(m, testpb.E_RepeatedFixed32, []uint32{4, 5, 6})
 			return m
 		}(),
 		want: func() proto.Message {
 			m2 := new(testpb.TestAllExtensions)
-			proto.SetExtension(m2, testpb.E_OptionalInt64Extension, int64(1000))
+			proto.SetExtension(m2, testpb.E_OptionalInt64, int64(1000))
 			m := new(testpb.TestAllExtensions)
-			proto.SetExtension(m, testpb.E_OptionalInt32Extension, int32(32))
-			proto.SetExtension(m, testpb.E_OptionalInt64Extension, int64(64))
-			proto.SetExtension(m, testpb.E_OptionalNestedMessageExtension,
+			proto.SetExtension(m, testpb.E_OptionalInt32, int32(32))
+			proto.SetExtension(m, testpb.E_OptionalInt64, int64(64))
+			proto.SetExtension(m, testpb.E_OptionalNestedMessage,
 				&testpb.TestAllExtensions_NestedMessage{
 					A:           proto.Int32(50),
 					Corecursive: m2,
 				},
 			)
-			proto.SetExtension(m, testpb.E_RepeatedFixed32Extension, []uint32{1, 2, 3, 4, 5, 6})
+			proto.SetExtension(m, testpb.E_RepeatedFixed32, []uint32{1, 2, 3, 4, 5, 6})
 			return m
 		}(),
 	}, {
diff --git a/proto/testmessages_test.go b/proto/testmessages_test.go
index e955fb6..045cb8f 100644
--- a/proto/testmessages_test.go
+++ b/proto/testmessages_test.go
@@ -5,15 +5,14 @@
 package proto_test
 
 import (
-	"google.golang.org/protobuf/encoding/prototext"
 	"google.golang.org/protobuf/internal/encoding/pack"
 	"google.golang.org/protobuf/internal/encoding/wire"
 	"google.golang.org/protobuf/internal/impl"
+	"google.golang.org/protobuf/internal/protobuild"
 	"google.golang.org/protobuf/proto"
 	"google.golang.org/protobuf/reflect/protoregistry"
 
 	legacypb "google.golang.org/protobuf/internal/testprotos/legacy"
-	legacy1pb "google.golang.org/protobuf/internal/testprotos/legacy/proto2_20160225_2fc053c5"
 	requiredpb "google.golang.org/protobuf/internal/testprotos/required"
 	testpb "google.golang.org/protobuf/internal/testprotos/test"
 	test3pb "google.golang.org/protobuf/internal/testprotos/test3"
@@ -30,63 +29,42 @@
 	validationStatus impl.ValidationStatus
 }
 
+func makeMessages(in protobuild.Message, messages ...proto.Message) []proto.Message {
+	if len(messages) == 0 {
+		messages = []proto.Message{
+			&testpb.TestAllTypes{},
+			&test3pb.TestAllTypes{},
+			&testpb.TestAllExtensions{},
+		}
+	}
+	for _, m := range messages {
+		in.Build(m.ProtoReflect())
+	}
+	return messages
+}
+
 var testValidMessages = []testProto{
 	{
 		desc:          "basic scalar types",
 		checkFastInit: true,
-		decodeTo: []proto.Message{&testpb.TestAllTypes{
-			OptionalInt32:      proto.Int32(1001),
-			OptionalInt64:      proto.Int64(1002),
-			OptionalUint32:     proto.Uint32(1003),
-			OptionalUint64:     proto.Uint64(1004),
-			OptionalSint32:     proto.Int32(1005),
-			OptionalSint64:     proto.Int64(1006),
-			OptionalFixed32:    proto.Uint32(1007),
-			OptionalFixed64:    proto.Uint64(1008),
-			OptionalSfixed32:   proto.Int32(1009),
-			OptionalSfixed64:   proto.Int64(1010),
-			OptionalFloat:      proto.Float32(1011.5),
-			OptionalDouble:     proto.Float64(1012.5),
-			OptionalBool:       proto.Bool(true),
-			OptionalString:     proto.String("string"),
-			OptionalBytes:      []byte("bytes"),
-			OptionalNestedEnum: testpb.TestAllTypes_BAR.Enum(),
-		}, &test3pb.TestAllTypes{
-			OptionalInt32:      1001,
-			OptionalInt64:      1002,
-			OptionalUint32:     1003,
-			OptionalUint64:     1004,
-			OptionalSint32:     1005,
-			OptionalSint64:     1006,
-			OptionalFixed32:    1007,
-			OptionalFixed64:    1008,
-			OptionalSfixed32:   1009,
-			OptionalSfixed64:   1010,
-			OptionalFloat:      1011.5,
-			OptionalDouble:     1012.5,
-			OptionalBool:       true,
-			OptionalString:     "string",
-			OptionalBytes:      []byte("bytes"),
-			OptionalNestedEnum: test3pb.TestAllTypes_BAR,
-		}, build(
-			&testpb.TestAllExtensions{},
-			extend(testpb.E_OptionalInt32Extension, int32(1001)),
-			extend(testpb.E_OptionalInt64Extension, int64(1002)),
-			extend(testpb.E_OptionalUint32Extension, uint32(1003)),
-			extend(testpb.E_OptionalUint64Extension, uint64(1004)),
-			extend(testpb.E_OptionalSint32Extension, int32(1005)),
-			extend(testpb.E_OptionalSint64Extension, int64(1006)),
-			extend(testpb.E_OptionalFixed32Extension, uint32(1007)),
-			extend(testpb.E_OptionalFixed64Extension, uint64(1008)),
-			extend(testpb.E_OptionalSfixed32Extension, int32(1009)),
-			extend(testpb.E_OptionalSfixed64Extension, int64(1010)),
-			extend(testpb.E_OptionalFloatExtension, float32(1011.5)),
-			extend(testpb.E_OptionalDoubleExtension, float64(1012.5)),
-			extend(testpb.E_OptionalBoolExtension, bool(true)),
-			extend(testpb.E_OptionalStringExtension, string("string")),
-			extend(testpb.E_OptionalBytesExtension, []byte("bytes")),
-			extend(testpb.E_OptionalNestedEnumExtension, testpb.TestAllTypes_BAR),
-		)},
+		decodeTo: makeMessages(protobuild.Message{
+			"optional_int32":       1001,
+			"optional_int64":       1002,
+			"optional_uint32":      1003,
+			"optional_uint64":      1004,
+			"optional_sint32":      1005,
+			"optional_sint64":      1006,
+			"optional_fixed32":     1007,
+			"optional_fixed64":     1008,
+			"optional_sfixed32":    1009,
+			"optional_sfixed64":    1010,
+			"optional_float":       1011.5,
+			"optional_double":      1012.5,
+			"optional_bool":        true,
+			"optional_string":      "string",
+			"optional_bytes":       []byte("bytes"),
+			"optional_nested_enum": "BAR",
+		}),
 		wire: pack.Message{
 			pack.Tag{1, pack.VarintType}, pack.Varint(1001),
 			pack.Tag{2, pack.VarintType}, pack.Varint(1002),
@@ -108,40 +86,23 @@
 	},
 	{
 		desc: "zero values",
-		decodeTo: []proto.Message{&testpb.TestAllTypes{
-			OptionalInt32:    proto.Int32(0),
-			OptionalInt64:    proto.Int64(0),
-			OptionalUint32:   proto.Uint32(0),
-			OptionalUint64:   proto.Uint64(0),
-			OptionalSint32:   proto.Int32(0),
-			OptionalSint64:   proto.Int64(0),
-			OptionalFixed32:  proto.Uint32(0),
-			OptionalFixed64:  proto.Uint64(0),
-			OptionalSfixed32: proto.Int32(0),
-			OptionalSfixed64: proto.Int64(0),
-			OptionalFloat:    proto.Float32(0),
-			OptionalDouble:   proto.Float64(0),
-			OptionalBool:     proto.Bool(false),
-			OptionalString:   proto.String(""),
-			OptionalBytes:    []byte{},
-		}, &test3pb.TestAllTypes{}, build(
-			&testpb.TestAllExtensions{},
-			extend(testpb.E_OptionalInt32Extension, int32(0)),
-			extend(testpb.E_OptionalInt64Extension, int64(0)),
-			extend(testpb.E_OptionalUint32Extension, uint32(0)),
-			extend(testpb.E_OptionalUint64Extension, uint64(0)),
-			extend(testpb.E_OptionalSint32Extension, int32(0)),
-			extend(testpb.E_OptionalSint64Extension, int64(0)),
-			extend(testpb.E_OptionalFixed32Extension, uint32(0)),
-			extend(testpb.E_OptionalFixed64Extension, uint64(0)),
-			extend(testpb.E_OptionalSfixed32Extension, int32(0)),
-			extend(testpb.E_OptionalSfixed64Extension, int64(0)),
-			extend(testpb.E_OptionalFloatExtension, float32(0)),
-			extend(testpb.E_OptionalDoubleExtension, float64(0)),
-			extend(testpb.E_OptionalBoolExtension, bool(false)),
-			extend(testpb.E_OptionalStringExtension, string("")),
-			extend(testpb.E_OptionalBytesExtension, []byte{}),
-		)},
+		decodeTo: makeMessages(protobuild.Message{
+			"optional_int32":    0,
+			"optional_int64":    0,
+			"optional_uint32":   0,
+			"optional_uint64":   0,
+			"optional_sint32":   0,
+			"optional_sint64":   0,
+			"optional_fixed32":  0,
+			"optional_fixed64":  0,
+			"optional_sfixed32": 0,
+			"optional_sfixed64": 0,
+			"optional_float":    0,
+			"optional_double":   0,
+			"optional_bool":     false,
+			"optional_string":   "",
+			"optional_bytes":    []byte{},
+		}),
 		wire: pack.Message{
 			pack.Tag{1, pack.VarintType}, pack.Varint(0),
 			pack.Tag{2, pack.VarintType}, pack.Varint(0),
@@ -162,18 +123,12 @@
 	},
 	{
 		desc: "groups",
-		decodeTo: []proto.Message{&testpb.TestAllTypes{
-			Optionalgroup: &testpb.TestAllTypes_OptionalGroup{
-				A:               proto.Int32(1017),
-				SameFieldNumber: proto.Int32(1016),
+		decodeTo: makeMessages(protobuild.Message{
+			"optionalgroup": protobuild.Message{
+				"a":                 1017,
+				"same_field_number": 1016,
 			},
-		}, build(
-			&testpb.TestAllExtensions{},
-			extend(testpb.E_OptionalgroupExtension, &testpb.OptionalGroupExtension{
-				A:               proto.Int32(1017),
-				SameFieldNumber: proto.Int32(1016),
-			}),
-		)},
+		}, &testpb.TestAllTypes{}, &testpb.TestAllExtensions{}),
 		wire: pack.Message{
 			pack.Tag{16, pack.StartGroupType},
 			pack.Tag{17, pack.VarintType}, pack.Varint(1017),
@@ -183,16 +138,11 @@
 	},
 	{
 		desc: "groups (field overridden)",
-		decodeTo: []proto.Message{&testpb.TestAllTypes{
-			Optionalgroup: &testpb.TestAllTypes_OptionalGroup{
-				A: proto.Int32(2),
+		decodeTo: makeMessages(protobuild.Message{
+			"optionalgroup": protobuild.Message{
+				"a": 2,
 			},
-		}, build(
-			&testpb.TestAllExtensions{},
-			extend(testpb.E_OptionalgroupExtension, &testpb.OptionalGroupExtension{
-				A: proto.Int32(2),
-			}),
-		)},
+		}, &testpb.TestAllTypes{}, &testpb.TestAllExtensions{}),
 		wire: pack.Message{
 			pack.Tag{16, pack.StartGroupType},
 			pack.Tag{17, pack.VarintType}, pack.Varint(1),
@@ -204,30 +154,14 @@
 	},
 	{
 		desc: "messages",
-		decodeTo: []proto.Message{&testpb.TestAllTypes{
-			OptionalNestedMessage: &testpb.TestAllTypes_NestedMessage{
-				A: proto.Int32(42),
-				Corecursive: &testpb.TestAllTypes{
-					OptionalInt32: proto.Int32(43),
+		decodeTo: makeMessages(protobuild.Message{
+			"optional_nested_message": protobuild.Message{
+				"a": 42,
+				"corecursive": protobuild.Message{
+					"optional_int32": 43,
 				},
 			},
-		}, &test3pb.TestAllTypes{
-			OptionalNestedMessage: &test3pb.TestAllTypes_NestedMessage{
-				A: 42,
-				Corecursive: &test3pb.TestAllTypes{
-					OptionalInt32: 43,
-				},
-			},
-		}, build(
-			&testpb.TestAllExtensions{},
-			extend(testpb.E_OptionalNestedMessageExtension, &testpb.TestAllExtensions_NestedMessage{
-				A: proto.Int32(42),
-				Corecursive: build(
-					&testpb.TestAllExtensions{},
-					extend(testpb.E_OptionalInt32Extension, int32(43)),
-				).(*testpb.TestAllExtensions),
-			}),
-		)},
+		}),
 		wire: pack.Message{
 			pack.Tag{18, pack.BytesType}, pack.LengthPrefix(pack.Message{
 				pack.Tag{1, pack.VarintType}, pack.Varint(42),
@@ -239,30 +173,14 @@
 	},
 	{
 		desc: "messages (split across multiple tags)",
-		decodeTo: []proto.Message{&testpb.TestAllTypes{
-			OptionalNestedMessage: &testpb.TestAllTypes_NestedMessage{
-				A: proto.Int32(42),
-				Corecursive: &testpb.TestAllTypes{
-					OptionalInt32: proto.Int32(43),
+		decodeTo: makeMessages(protobuild.Message{
+			"optional_nested_message": protobuild.Message{
+				"a": 42,
+				"corecursive": protobuild.Message{
+					"optional_int32": 43,
 				},
 			},
-		}, &test3pb.TestAllTypes{
-			OptionalNestedMessage: &test3pb.TestAllTypes_NestedMessage{
-				A: 42,
-				Corecursive: &test3pb.TestAllTypes{
-					OptionalInt32: 43,
-				},
-			},
-		}, build(
-			&testpb.TestAllExtensions{},
-			extend(testpb.E_OptionalNestedMessageExtension, &testpb.TestAllExtensions_NestedMessage{
-				A: proto.Int32(42),
-				Corecursive: build(
-					&testpb.TestAllExtensions{},
-					extend(testpb.E_OptionalInt32Extension, int32(43)),
-				).(*testpb.TestAllExtensions),
-			}),
-		)},
+		}),
 		wire: pack.Message{
 			pack.Tag{18, pack.BytesType}, pack.LengthPrefix(pack.Message{
 				pack.Tag{1, pack.VarintType}, pack.Varint(42),
@@ -276,20 +194,11 @@
 	},
 	{
 		desc: "messages (field overridden)",
-		decodeTo: []proto.Message{&testpb.TestAllTypes{
-			OptionalNestedMessage: &testpb.TestAllTypes_NestedMessage{
-				A: proto.Int32(2),
+		decodeTo: makeMessages(protobuild.Message{
+			"optional_nested_message": protobuild.Message{
+				"a": 2,
 			},
-		}, &test3pb.TestAllTypes{
-			OptionalNestedMessage: &test3pb.TestAllTypes_NestedMessage{
-				A: 2,
-			},
-		}, build(
-			&testpb.TestAllExtensions{},
-			extend(testpb.E_OptionalNestedMessageExtension, &testpb.TestAllExtensions_NestedMessage{
-				A: proto.Int32(2),
-			}),
-		)},
+		}),
 		wire: pack.Message{
 			pack.Tag{18, pack.BytesType}, pack.LengthPrefix(pack.Message{
 				pack.Tag{1, pack.VarintType}, pack.Varint(1),
@@ -301,68 +210,24 @@
 	},
 	{
 		desc: "basic repeated types",
-		decodeTo: []proto.Message{&testpb.TestAllTypes{
-			RepeatedInt32:    []int32{1001, 2001},
-			RepeatedInt64:    []int64{1002, 2002},
-			RepeatedUint32:   []uint32{1003, 2003},
-			RepeatedUint64:   []uint64{1004, 2004},
-			RepeatedSint32:   []int32{1005, 2005},
-			RepeatedSint64:   []int64{1006, 2006},
-			RepeatedFixed32:  []uint32{1007, 2007},
-			RepeatedFixed64:  []uint64{1008, 2008},
-			RepeatedSfixed32: []int32{1009, 2009},
-			RepeatedSfixed64: []int64{1010, 2010},
-			RepeatedFloat:    []float32{1011.5, 2011.5},
-			RepeatedDouble:   []float64{1012.5, 2012.5},
-			RepeatedBool:     []bool{true, false},
-			RepeatedString:   []string{"foo", "bar"},
-			RepeatedBytes:    [][]byte{[]byte("FOO"), []byte("BAR")},
-			RepeatedNestedEnum: []testpb.TestAllTypes_NestedEnum{
-				testpb.TestAllTypes_FOO,
-				testpb.TestAllTypes_BAR,
-			},
-		}, &test3pb.TestAllTypes{
-			RepeatedInt32:    []int32{1001, 2001},
-			RepeatedInt64:    []int64{1002, 2002},
-			RepeatedUint32:   []uint32{1003, 2003},
-			RepeatedUint64:   []uint64{1004, 2004},
-			RepeatedSint32:   []int32{1005, 2005},
-			RepeatedSint64:   []int64{1006, 2006},
-			RepeatedFixed32:  []uint32{1007, 2007},
-			RepeatedFixed64:  []uint64{1008, 2008},
-			RepeatedSfixed32: []int32{1009, 2009},
-			RepeatedSfixed64: []int64{1010, 2010},
-			RepeatedFloat:    []float32{1011.5, 2011.5},
-			RepeatedDouble:   []float64{1012.5, 2012.5},
-			RepeatedBool:     []bool{true, false},
-			RepeatedString:   []string{"foo", "bar"},
-			RepeatedBytes:    [][]byte{[]byte("FOO"), []byte("BAR")},
-			RepeatedNestedEnum: []test3pb.TestAllTypes_NestedEnum{
-				test3pb.TestAllTypes_FOO,
-				test3pb.TestAllTypes_BAR,
-			},
-		}, build(
-			&testpb.TestAllExtensions{},
-			extend(testpb.E_RepeatedInt32Extension, []int32{1001, 2001}),
-			extend(testpb.E_RepeatedInt64Extension, []int64{1002, 2002}),
-			extend(testpb.E_RepeatedUint32Extension, []uint32{1003, 2003}),
-			extend(testpb.E_RepeatedUint64Extension, []uint64{1004, 2004}),
-			extend(testpb.E_RepeatedSint32Extension, []int32{1005, 2005}),
-			extend(testpb.E_RepeatedSint64Extension, []int64{1006, 2006}),
-			extend(testpb.E_RepeatedFixed32Extension, []uint32{1007, 2007}),
-			extend(testpb.E_RepeatedFixed64Extension, []uint64{1008, 2008}),
-			extend(testpb.E_RepeatedSfixed32Extension, []int32{1009, 2009}),
-			extend(testpb.E_RepeatedSfixed64Extension, []int64{1010, 2010}),
-			extend(testpb.E_RepeatedFloatExtension, []float32{1011.5, 2011.5}),
-			extend(testpb.E_RepeatedDoubleExtension, []float64{1012.5, 2012.5}),
-			extend(testpb.E_RepeatedBoolExtension, []bool{true, false}),
-			extend(testpb.E_RepeatedStringExtension, []string{"foo", "bar"}),
-			extend(testpb.E_RepeatedBytesExtension, [][]byte{[]byte("FOO"), []byte("BAR")}),
-			extend(testpb.E_RepeatedNestedEnumExtension, []testpb.TestAllTypes_NestedEnum{
-				testpb.TestAllTypes_FOO,
-				testpb.TestAllTypes_BAR,
-			}),
-		)},
+		decodeTo: makeMessages(protobuild.Message{
+			"repeated_int32":       []int32{1001, 2001},
+			"repeated_int64":       []int64{1002, 2002},
+			"repeated_uint32":      []uint32{1003, 2003},
+			"repeated_uint64":      []uint64{1004, 2004},
+			"repeated_sint32":      []int32{1005, 2005},
+			"repeated_sint64":      []int64{1006, 2006},
+			"repeated_fixed32":     []uint32{1007, 2007},
+			"repeated_fixed64":     []uint64{1008, 2008},
+			"repeated_sfixed32":    []int32{1009, 2009},
+			"repeated_sfixed64":    []int64{1010, 2010},
+			"repeated_float":       []float32{1011.5, 2011.5},
+			"repeated_double":      []float64{1012.5, 2012.5},
+			"repeated_bool":        []bool{true, false},
+			"repeated_string":      []string{"foo", "bar"},
+			"repeated_bytes":       []string{"FOO", "BAR"},
+			"repeated_nested_enum": []string{"FOO", "BAR"},
+		}),
 		wire: pack.Message{
 			pack.Tag{31, pack.VarintType}, pack.Varint(1001),
 			pack.Tag{31, pack.VarintType}, pack.Varint(2001),
@@ -400,62 +265,22 @@
 	},
 	{
 		desc: "basic repeated types (packed encoding)",
-		decodeTo: []proto.Message{&testpb.TestAllTypes{
-			RepeatedInt32:    []int32{1001, 2001},
-			RepeatedInt64:    []int64{1002, 2002},
-			RepeatedUint32:   []uint32{1003, 2003},
-			RepeatedUint64:   []uint64{1004, 2004},
-			RepeatedSint32:   []int32{1005, 2005},
-			RepeatedSint64:   []int64{1006, 2006},
-			RepeatedFixed32:  []uint32{1007, 2007},
-			RepeatedFixed64:  []uint64{1008, 2008},
-			RepeatedSfixed32: []int32{1009, 2009},
-			RepeatedSfixed64: []int64{1010, 2010},
-			RepeatedFloat:    []float32{1011.5, 2011.5},
-			RepeatedDouble:   []float64{1012.5, 2012.5},
-			RepeatedBool:     []bool{true, false},
-			RepeatedNestedEnum: []testpb.TestAllTypes_NestedEnum{
-				testpb.TestAllTypes_FOO,
-				testpb.TestAllTypes_BAR,
-			},
-		}, &test3pb.TestAllTypes{
-			RepeatedInt32:    []int32{1001, 2001},
-			RepeatedInt64:    []int64{1002, 2002},
-			RepeatedUint32:   []uint32{1003, 2003},
-			RepeatedUint64:   []uint64{1004, 2004},
-			RepeatedSint32:   []int32{1005, 2005},
-			RepeatedSint64:   []int64{1006, 2006},
-			RepeatedFixed32:  []uint32{1007, 2007},
-			RepeatedFixed64:  []uint64{1008, 2008},
-			RepeatedSfixed32: []int32{1009, 2009},
-			RepeatedSfixed64: []int64{1010, 2010},
-			RepeatedFloat:    []float32{1011.5, 2011.5},
-			RepeatedDouble:   []float64{1012.5, 2012.5},
-			RepeatedBool:     []bool{true, false},
-			RepeatedNestedEnum: []test3pb.TestAllTypes_NestedEnum{
-				test3pb.TestAllTypes_FOO,
-				test3pb.TestAllTypes_BAR,
-			},
-		}, build(
-			&testpb.TestAllExtensions{},
-			extend(testpb.E_RepeatedInt32Extension, []int32{1001, 2001}),
-			extend(testpb.E_RepeatedInt64Extension, []int64{1002, 2002}),
-			extend(testpb.E_RepeatedUint32Extension, []uint32{1003, 2003}),
-			extend(testpb.E_RepeatedUint64Extension, []uint64{1004, 2004}),
-			extend(testpb.E_RepeatedSint32Extension, []int32{1005, 2005}),
-			extend(testpb.E_RepeatedSint64Extension, []int64{1006, 2006}),
-			extend(testpb.E_RepeatedFixed32Extension, []uint32{1007, 2007}),
-			extend(testpb.E_RepeatedFixed64Extension, []uint64{1008, 2008}),
-			extend(testpb.E_RepeatedSfixed32Extension, []int32{1009, 2009}),
-			extend(testpb.E_RepeatedSfixed64Extension, []int64{1010, 2010}),
-			extend(testpb.E_RepeatedFloatExtension, []float32{1011.5, 2011.5}),
-			extend(testpb.E_RepeatedDoubleExtension, []float64{1012.5, 2012.5}),
-			extend(testpb.E_RepeatedBoolExtension, []bool{true, false}),
-			extend(testpb.E_RepeatedNestedEnumExtension, []testpb.TestAllTypes_NestedEnum{
-				testpb.TestAllTypes_FOO,
-				testpb.TestAllTypes_BAR,
-			}),
-		)},
+		decodeTo: makeMessages(protobuild.Message{
+			"repeated_int32":       []int32{1001, 2001},
+			"repeated_int64":       []int64{1002, 2002},
+			"repeated_uint32":      []uint32{1003, 2003},
+			"repeated_uint64":      []uint64{1004, 2004},
+			"repeated_sint32":      []int32{1005, 2005},
+			"repeated_sint64":      []int64{1006, 2006},
+			"repeated_fixed32":     []uint32{1007, 2007},
+			"repeated_fixed64":     []uint64{1008, 2008},
+			"repeated_sfixed32":    []int32{1009, 2009},
+			"repeated_sfixed64":    []int64{1010, 2010},
+			"repeated_float":       []float32{1011.5, 2011.5},
+			"repeated_double":      []float64{1012.5, 2012.5},
+			"repeated_bool":        []bool{true, false},
+			"repeated_nested_enum": []string{"FOO", "BAR"},
+		}),
 		wire: pack.Message{
 			pack.Tag{31, pack.BytesType}, pack.LengthPrefix{
 				pack.Varint(1001), pack.Varint(2001),
@@ -504,26 +329,22 @@
 	},
 	{
 		desc: "basic repeated types (zero-length packed encoding)",
-		decodeTo: []proto.Message{
-			&testpb.TestAllTypes{},
-			&test3pb.TestAllTypes{},
-			build(
-				&testpb.TestAllExtensions{},
-				extend(testpb.E_RepeatedInt32Extension, []int32{}),
-				extend(testpb.E_RepeatedInt64Extension, []int64{}),
-				extend(testpb.E_RepeatedUint32Extension, []uint32{}),
-				extend(testpb.E_RepeatedUint64Extension, []uint64{}),
-				extend(testpb.E_RepeatedSint32Extension, []int32{}),
-				extend(testpb.E_RepeatedSint64Extension, []int64{}),
-				extend(testpb.E_RepeatedFixed32Extension, []uint32{}),
-				extend(testpb.E_RepeatedFixed64Extension, []uint64{}),
-				extend(testpb.E_RepeatedSfixed32Extension, []int32{}),
-				extend(testpb.E_RepeatedSfixed64Extension, []int64{}),
-				extend(testpb.E_RepeatedFloatExtension, []float32{}),
-				extend(testpb.E_RepeatedDoubleExtension, []float64{}),
-				extend(testpb.E_RepeatedBoolExtension, []bool{}),
-				extend(testpb.E_RepeatedNestedEnumExtension, []testpb.TestAllTypes_NestedEnum{}),
-			)},
+		decodeTo: makeMessages(protobuild.Message{
+			"repeated_int32":       []int32{},
+			"repeated_int64":       []int64{},
+			"repeated_uint32":      []uint32{},
+			"repeated_uint64":      []uint64{},
+			"repeated_sint32":      []int32{},
+			"repeated_sint64":      []int64{},
+			"repeated_fixed32":     []uint32{},
+			"repeated_fixed64":     []uint64{},
+			"repeated_sfixed32":    []int32{},
+			"repeated_sfixed64":    []int64{},
+			"repeated_float":       []float32{},
+			"repeated_double":      []float64{},
+			"repeated_bool":        []bool{},
+			"repeated_nested_enum": []string{},
+		}),
 		wire: pack.Message{
 			pack.Tag{31, pack.BytesType}, pack.LengthPrefix{},
 			pack.Tag{32, pack.BytesType}, pack.LengthPrefix{},
@@ -543,44 +364,22 @@
 	},
 	{
 		desc: "packed repeated types",
-		decodeTo: []proto.Message{&testpb.TestPackedTypes{
-			PackedInt32:    []int32{1001, 2001},
-			PackedInt64:    []int64{1002, 2002},
-			PackedUint32:   []uint32{1003, 2003},
-			PackedUint64:   []uint64{1004, 2004},
-			PackedSint32:   []int32{1005, 2005},
-			PackedSint64:   []int64{1006, 2006},
-			PackedFixed32:  []uint32{1007, 2007},
-			PackedFixed64:  []uint64{1008, 2008},
-			PackedSfixed32: []int32{1009, 2009},
-			PackedSfixed64: []int64{1010, 2010},
-			PackedFloat:    []float32{1011.5, 2011.5},
-			PackedDouble:   []float64{1012.5, 2012.5},
-			PackedBool:     []bool{true, false},
-			PackedEnum: []testpb.ForeignEnum{
-				testpb.ForeignEnum_FOREIGN_FOO,
-				testpb.ForeignEnum_FOREIGN_BAR,
-			},
-		}, build(
-			&testpb.TestPackedExtensions{},
-			extend(testpb.E_PackedInt32Extension, []int32{1001, 2001}),
-			extend(testpb.E_PackedInt64Extension, []int64{1002, 2002}),
-			extend(testpb.E_PackedUint32Extension, []uint32{1003, 2003}),
-			extend(testpb.E_PackedUint64Extension, []uint64{1004, 2004}),
-			extend(testpb.E_PackedSint32Extension, []int32{1005, 2005}),
-			extend(testpb.E_PackedSint64Extension, []int64{1006, 2006}),
-			extend(testpb.E_PackedFixed32Extension, []uint32{1007, 2007}),
-			extend(testpb.E_PackedFixed64Extension, []uint64{1008, 2008}),
-			extend(testpb.E_PackedSfixed32Extension, []int32{1009, 2009}),
-			extend(testpb.E_PackedSfixed64Extension, []int64{1010, 2010}),
-			extend(testpb.E_PackedFloatExtension, []float32{1011.5, 2011.5}),
-			extend(testpb.E_PackedDoubleExtension, []float64{1012.5, 2012.5}),
-			extend(testpb.E_PackedBoolExtension, []bool{true, false}),
-			extend(testpb.E_PackedEnumExtension, []testpb.ForeignEnum{
-				testpb.ForeignEnum_FOREIGN_FOO,
-				testpb.ForeignEnum_FOREIGN_BAR,
-			}),
-		)},
+		decodeTo: makeMessages(protobuild.Message{
+			"packed_int32":    []int32{1001, 2001},
+			"packed_int64":    []int64{1002, 2002},
+			"packed_uint32":   []uint32{1003, 2003},
+			"packed_uint64":   []uint64{1004, 2004},
+			"packed_sint32":   []int32{1005, 2005},
+			"packed_sint64":   []int64{1006, 2006},
+			"packed_fixed32":  []uint32{1007, 2007},
+			"packed_fixed64":  []uint64{1008, 2008},
+			"packed_sfixed32": []int32{1009, 2009},
+			"packed_sfixed64": []int64{1010, 2010},
+			"packed_float":    []float32{1011.5, 2011.5},
+			"packed_double":   []float64{1012.5, 2012.5},
+			"packed_bool":     []bool{true, false},
+			"packed_enum":     []string{"FOREIGN_FOO", "FOREIGN_BAR"},
+		}, &testpb.TestPackedTypes{}, &testpb.TestPackedExtensions{}),
 		wire: pack.Message{
 			pack.Tag{90, pack.BytesType}, pack.LengthPrefix{
 				pack.Varint(1001), pack.Varint(2001),
@@ -629,25 +428,22 @@
 	},
 	{
 		desc: "packed repeated types (zero length)",
-		decodeTo: []proto.Message{
-			&testpb.TestPackedTypes{},
-			build(
-				&testpb.TestPackedExtensions{},
-				extend(testpb.E_PackedInt32Extension, []int32{}),
-				extend(testpb.E_PackedInt64Extension, []int64{}),
-				extend(testpb.E_PackedUint32Extension, []uint32{}),
-				extend(testpb.E_PackedUint64Extension, []uint64{}),
-				extend(testpb.E_PackedSint32Extension, []int32{}),
-				extend(testpb.E_PackedSint64Extension, []int64{}),
-				extend(testpb.E_PackedFixed32Extension, []uint32{}),
-				extend(testpb.E_PackedFixed64Extension, []uint64{}),
-				extend(testpb.E_PackedSfixed32Extension, []int32{}),
-				extend(testpb.E_PackedSfixed64Extension, []int64{}),
-				extend(testpb.E_PackedFloatExtension, []float32{}),
-				extend(testpb.E_PackedDoubleExtension, []float64{}),
-				extend(testpb.E_PackedBoolExtension, []bool{}),
-				extend(testpb.E_PackedEnumExtension, []testpb.ForeignEnum{}),
-			)},
+		decodeTo: makeMessages(protobuild.Message{
+			"packed_int32":    []int32{},
+			"packed_int64":    []int64{},
+			"packed_uint32":   []uint32{},
+			"packed_uint64":   []uint64{},
+			"packed_sint32":   []int32{},
+			"packed_sint64":   []int64{},
+			"packed_fixed32":  []uint32{},
+			"packed_fixed64":  []uint64{},
+			"packed_sfixed32": []int32{},
+			"packed_sfixed64": []int64{},
+			"packed_float":    []float32{},
+			"packed_double":   []float64{},
+			"packed_bool":     []bool{},
+			"packed_enum":     []string{},
+		}, &testpb.TestPackedTypes{}, &testpb.TestPackedExtensions{}),
 		wire: pack.Message{
 			pack.Tag{90, pack.BytesType}, pack.LengthPrefix{},
 			pack.Tag{91, pack.BytesType}, pack.LengthPrefix{},
@@ -667,6 +463,25 @@
 	},
 	{
 		desc: "repeated messages",
+		decodeTo: makeMessages(protobuild.Message{
+			"repeated_nested_message": []protobuild.Message{
+				{"a": 1},
+				{},
+				{"a": 2},
+			},
+		}),
+		wire: pack.Message{
+			pack.Tag{48, pack.BytesType}, pack.LengthPrefix(pack.Message{
+				pack.Tag{1, pack.VarintType}, pack.Varint(1),
+			}),
+			pack.Tag{48, pack.BytesType}, pack.LengthPrefix(pack.Message{}),
+			pack.Tag{48, pack.BytesType}, pack.LengthPrefix(pack.Message{
+				pack.Tag{1, pack.VarintType}, pack.Varint(2),
+			}),
+		}.Marshal(),
+	},
+	{
+		desc: "repeated nil messages",
 		decodeTo: []proto.Message{&testpb.TestAllTypes{
 			RepeatedNestedMessage: []*testpb.TestAllTypes_NestedMessage{
 				{A: proto.Int32(1)},
@@ -681,7 +496,7 @@
 			},
 		}, build(
 			&testpb.TestAllExtensions{},
-			extend(testpb.E_RepeatedNestedMessageExtension, []*testpb.TestAllExtensions_NestedMessage{
+			extend(testpb.E_RepeatedNestedMessage, []*testpb.TestAllExtensions_NestedMessage{
 				{A: proto.Int32(1)},
 				nil,
 				{A: proto.Int32(2)},
@@ -699,6 +514,26 @@
 	},
 	{
 		desc: "repeated groups",
+		decodeTo: makeMessages(protobuild.Message{
+			"repeatedgroup": []protobuild.Message{
+				{"a": 1017},
+				{},
+				{"a": 2017},
+			},
+		}, &testpb.TestAllTypes{}, &testpb.TestAllExtensions{}),
+		wire: pack.Message{
+			pack.Tag{46, pack.StartGroupType},
+			pack.Tag{47, pack.VarintType}, pack.Varint(1017),
+			pack.Tag{46, pack.EndGroupType},
+			pack.Tag{46, pack.StartGroupType},
+			pack.Tag{46, pack.EndGroupType},
+			pack.Tag{46, pack.StartGroupType},
+			pack.Tag{47, pack.VarintType}, pack.Varint(2017),
+			pack.Tag{46, pack.EndGroupType},
+		}.Marshal(),
+	},
+	{
+		desc: "repeated nil groups",
 		decodeTo: []proto.Message{&testpb.TestAllTypes{
 			Repeatedgroup: []*testpb.TestAllTypes_RepeatedGroup{
 				{A: proto.Int32(1017)},
@@ -707,7 +542,7 @@
 			},
 		}, build(
 			&testpb.TestAllExtensions{},
-			extend(testpb.E_RepeatedgroupExtension, []*testpb.RepeatedGroupExtension{
+			extend(testpb.E_Repeatedgroup, []*testpb.RepeatedGroup{
 				{A: proto.Int32(1017)},
 				nil,
 				{A: proto.Int32(2017)},
@@ -726,55 +561,28 @@
 	},
 	{
 		desc: "maps",
-		decodeTo: []proto.Message{&testpb.TestAllTypes{
-			MapInt32Int32:       map[int32]int32{1056: 1156, 2056: 2156},
-			MapInt64Int64:       map[int64]int64{1057: 1157, 2057: 2157},
-			MapUint32Uint32:     map[uint32]uint32{1058: 1158, 2058: 2158},
-			MapUint64Uint64:     map[uint64]uint64{1059: 1159, 2059: 2159},
-			MapSint32Sint32:     map[int32]int32{1060: 1160, 2060: 2160},
-			MapSint64Sint64:     map[int64]int64{1061: 1161, 2061: 2161},
-			MapFixed32Fixed32:   map[uint32]uint32{1062: 1162, 2062: 2162},
-			MapFixed64Fixed64:   map[uint64]uint64{1063: 1163, 2063: 2163},
-			MapSfixed32Sfixed32: map[int32]int32{1064: 1164, 2064: 2164},
-			MapSfixed64Sfixed64: map[int64]int64{1065: 1165, 2065: 2165},
-			MapInt32Float:       map[int32]float32{1066: 1166.5, 2066: 2166.5},
-			MapInt32Double:      map[int32]float64{1067: 1167.5, 2067: 2167.5},
-			MapBoolBool:         map[bool]bool{true: false, false: true},
-			MapStringString:     map[string]string{"69.1.key": "69.1.val", "69.2.key": "69.2.val"},
-			MapStringBytes:      map[string][]byte{"70.1.key": []byte("70.1.val"), "70.2.key": []byte("70.2.val")},
-			MapStringNestedMessage: map[string]*testpb.TestAllTypes_NestedMessage{
-				"71.1.key": {A: proto.Int32(1171)},
-				"71.2.key": {A: proto.Int32(2171)},
+		decodeTo: makeMessages(protobuild.Message{
+			"map_int32_int32":       map[int32]int32{1056: 1156, 2056: 2156},
+			"map_int64_int64":       map[int64]int64{1057: 1157, 2057: 2157},
+			"map_uint32_uint32":     map[uint32]uint32{1058: 1158, 2058: 2158},
+			"map_uint64_uint64":     map[uint64]uint64{1059: 1159, 2059: 2159},
+			"map_sint32_sint32":     map[int32]int32{1060: 1160, 2060: 2160},
+			"map_sint64_sint64":     map[int64]int64{1061: 1161, 2061: 2161},
+			"map_fixed32_fixed32":   map[uint32]uint32{1062: 1162, 2062: 2162},
+			"map_fixed64_fixed64":   map[uint64]uint64{1063: 1163, 2063: 2163},
+			"map_sfixed32_sfixed32": map[int32]int32{1064: 1164, 2064: 2164},
+			"map_sfixed64_sfixed64": map[int64]int64{1065: 1165, 2065: 2165},
+			"map_int32_float":       map[int32]float32{1066: 1166.5, 2066: 2166.5},
+			"map_int32_double":      map[int32]float64{1067: 1167.5, 2067: 2167.5},
+			"map_bool_bool":         map[bool]bool{true: false, false: true},
+			"map_string_string":     map[string]string{"69.1.key": "69.1.val", "69.2.key": "69.2.val"},
+			"map_string_bytes":      map[string][]byte{"70.1.key": []byte("70.1.val"), "70.2.key": []byte("70.2.val")},
+			"map_string_nested_message": map[string]protobuild.Message{
+				"71.1.key": {"a": 1171},
+				"71.2.key": {"a": 2171},
 			},
-			MapStringNestedEnum: map[string]testpb.TestAllTypes_NestedEnum{
-				"73.1.key": testpb.TestAllTypes_FOO,
-				"73.2.key": testpb.TestAllTypes_BAR,
-			},
-		}, &test3pb.TestAllTypes{
-			MapInt32Int32:       map[int32]int32{1056: 1156, 2056: 2156},
-			MapInt64Int64:       map[int64]int64{1057: 1157, 2057: 2157},
-			MapUint32Uint32:     map[uint32]uint32{1058: 1158, 2058: 2158},
-			MapUint64Uint64:     map[uint64]uint64{1059: 1159, 2059: 2159},
-			MapSint32Sint32:     map[int32]int32{1060: 1160, 2060: 2160},
-			MapSint64Sint64:     map[int64]int64{1061: 1161, 2061: 2161},
-			MapFixed32Fixed32:   map[uint32]uint32{1062: 1162, 2062: 2162},
-			MapFixed64Fixed64:   map[uint64]uint64{1063: 1163, 2063: 2163},
-			MapSfixed32Sfixed32: map[int32]int32{1064: 1164, 2064: 2164},
-			MapSfixed64Sfixed64: map[int64]int64{1065: 1165, 2065: 2165},
-			MapInt32Float:       map[int32]float32{1066: 1166.5, 2066: 2166.5},
-			MapInt32Double:      map[int32]float64{1067: 1167.5, 2067: 2167.5},
-			MapBoolBool:         map[bool]bool{true: false, false: true},
-			MapStringString:     map[string]string{"69.1.key": "69.1.val", "69.2.key": "69.2.val"},
-			MapStringBytes:      map[string][]byte{"70.1.key": []byte("70.1.val"), "70.2.key": []byte("70.2.val")},
-			MapStringNestedMessage: map[string]*test3pb.TestAllTypes_NestedMessage{
-				"71.1.key": {A: 1171},
-				"71.2.key": {A: 2171},
-			},
-			MapStringNestedEnum: map[string]test3pb.TestAllTypes_NestedEnum{
-				"73.1.key": test3pb.TestAllTypes_FOO,
-				"73.2.key": test3pb.TestAllTypes_BAR,
-			},
-		}},
+			"map_string_nested_enum": map[string]string{"73.1.key": "FOO", "73.2.key": "BAR"},
+		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
 		wire: pack.Message{
 			pack.Tag{56, pack.BytesType}, pack.LengthPrefix(pack.Message{
 				pack.Tag{1, pack.VarintType}, pack.Varint(1056),
@@ -920,12 +728,12 @@
 	},
 	{
 		desc: "map with value before key",
-		decodeTo: []proto.Message{&testpb.TestAllTypes{
-			MapInt32Int32: map[int32]int32{1056: 1156},
-			MapStringNestedMessage: map[string]*testpb.TestAllTypes_NestedMessage{
-				"71.1.key": {A: proto.Int32(1171)},
+		decodeTo: makeMessages(protobuild.Message{
+			"map_int32_int32": map[int32]int32{1056: 1156},
+			"map_string_nested_message": map[string]protobuild.Message{
+				"71.1.key": {"a": 1171},
 			},
-		}},
+		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
 		wire: pack.Message{
 			pack.Tag{56, pack.BytesType}, pack.LengthPrefix(pack.Message{
 				pack.Tag{2, pack.VarintType}, pack.Varint(1156),
@@ -941,12 +749,12 @@
 	},
 	{
 		desc: "map with repeated key and value",
-		decodeTo: []proto.Message{&testpb.TestAllTypes{
-			MapInt32Int32: map[int32]int32{1056: 1156},
-			MapStringNestedMessage: map[string]*testpb.TestAllTypes_NestedMessage{
-				"71.1.key": {A: proto.Int32(1171)},
+		decodeTo: makeMessages(protobuild.Message{
+			"map_int32_int32": map[int32]int32{1056: 1156},
+			"map_string_nested_message": map[string]protobuild.Message{
+				"71.1.key": {"a": 1171},
 			},
-		}},
+		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
 		wire: pack.Message{
 			pack.Tag{56, pack.BytesType}, pack.LengthPrefix(pack.Message{
 				pack.Tag{1, pack.VarintType}, pack.Varint(0),
@@ -966,55 +774,39 @@
 	},
 	{
 		desc: "oneof (uint32)",
-		decodeTo: []proto.Message{
-			&testpb.TestAllTypes{OneofField: &testpb.TestAllTypes_OneofUint32{1111}},
-			&test3pb.TestAllTypes{OneofField: &test3pb.TestAllTypes_OneofUint32{1111}},
-		},
+		decodeTo: makeMessages(protobuild.Message{
+			"oneof_uint32": 1111,
+		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
 		wire: pack.Message{pack.Tag{111, pack.VarintType}, pack.Varint(1111)}.Marshal(),
 	},
 	{
 		desc: "oneof (message)",
-		decodeTo: []proto.Message{
-			&testpb.TestAllTypes{OneofField: &testpb.TestAllTypes_OneofNestedMessage{
-				&testpb.TestAllTypes_NestedMessage{A: proto.Int32(1112)},
-			}}, &test3pb.TestAllTypes{OneofField: &test3pb.TestAllTypes_OneofNestedMessage{
-				&test3pb.TestAllTypes_NestedMessage{A: 1112},
-			}},
-		},
+		decodeTo: makeMessages(protobuild.Message{
+			"oneof_nested_message": protobuild.Message{
+				"a": 1112,
+			},
+		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
 		wire: pack.Message{pack.Tag{112, pack.BytesType}, pack.LengthPrefix(pack.Message{
 			pack.Message{pack.Tag{1, pack.VarintType}, pack.Varint(1112)},
 		})}.Marshal(),
 	},
 	{
 		desc: "oneof (empty message)",
-		decodeTo: []proto.Message{
-			&testpb.TestAllTypes{OneofField: &testpb.TestAllTypes_OneofNestedMessage{
-				&testpb.TestAllTypes_NestedMessage{},
-			}},
-			&test3pb.TestAllTypes{OneofField: &test3pb.TestAllTypes_OneofNestedMessage{
-				&test3pb.TestAllTypes_NestedMessage{},
-			}},
-		},
+		decodeTo: makeMessages(protobuild.Message{
+			"oneof_nested_message": protobuild.Message{},
+		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
 		wire: pack.Message{pack.Tag{112, pack.BytesType}, pack.LengthPrefix(pack.Message{})}.Marshal(),
 	},
 	{
 		desc: "oneof (merged message)",
-		decodeTo: []proto.Message{
-			&testpb.TestAllTypes{OneofField: &testpb.TestAllTypes_OneofNestedMessage{
-				&testpb.TestAllTypes_NestedMessage{
-					A: proto.Int32(1),
-					Corecursive: &testpb.TestAllTypes{
-						OptionalInt32: proto.Int32(43),
-					},
+		decodeTo: makeMessages(protobuild.Message{
+			"oneof_nested_message": protobuild.Message{
+				"a": 1,
+				"corecursive": protobuild.Message{
+					"optional_int32": 43,
 				},
-			}}, &test3pb.TestAllTypes{OneofField: &test3pb.TestAllTypes_OneofNestedMessage{
-				&test3pb.TestAllTypes_NestedMessage{
-					A: 1,
-					Corecursive: &test3pb.TestAllTypes{
-						OptionalInt32: 43,
-					},
-				},
-			}}},
+			},
+		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
 		wire: pack.Message{
 			pack.Tag{112, pack.BytesType}, pack.LengthPrefix(pack.Message{
 				pack.Message{pack.Tag{1, pack.VarintType}, pack.Varint(1)},
@@ -1028,74 +820,65 @@
 	},
 	{
 		desc: "oneof (string)",
-		decodeTo: []proto.Message{
-			&testpb.TestAllTypes{OneofField: &testpb.TestAllTypes_OneofString{"1113"}},
-			&test3pb.TestAllTypes{OneofField: &test3pb.TestAllTypes_OneofString{"1113"}},
-		},
+		decodeTo: makeMessages(protobuild.Message{
+			"oneof_string": "1113",
+		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
 		wire: pack.Message{pack.Tag{113, pack.BytesType}, pack.String("1113")}.Marshal(),
 	},
 	{
 		desc: "oneof (bytes)",
-		decodeTo: []proto.Message{
-			&testpb.TestAllTypes{OneofField: &testpb.TestAllTypes_OneofBytes{[]byte("1114")}},
-			&test3pb.TestAllTypes{OneofField: &test3pb.TestAllTypes_OneofBytes{[]byte("1114")}},
-		},
+		decodeTo: makeMessages(protobuild.Message{
+			"oneof_bytes": "1114",
+		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
 		wire: pack.Message{pack.Tag{114, pack.BytesType}, pack.String("1114")}.Marshal(),
 	},
 	{
 		desc: "oneof (bool)",
-		decodeTo: []proto.Message{
-			&testpb.TestAllTypes{OneofField: &testpb.TestAllTypes_OneofBool{true}},
-			&test3pb.TestAllTypes{OneofField: &test3pb.TestAllTypes_OneofBool{true}},
-		},
+		decodeTo: makeMessages(protobuild.Message{
+			"oneof_bool": true,
+		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
 		wire: pack.Message{pack.Tag{115, pack.VarintType}, pack.Bool(true)}.Marshal(),
 	},
 	{
 		desc: "oneof (uint64)",
-		decodeTo: []proto.Message{
-			&testpb.TestAllTypes{OneofField: &testpb.TestAllTypes_OneofUint64{116}},
-			&test3pb.TestAllTypes{OneofField: &test3pb.TestAllTypes_OneofUint64{116}},
-		},
+		decodeTo: makeMessages(protobuild.Message{
+			"oneof_uint64": 116,
+		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
 		wire: pack.Message{pack.Tag{116, pack.VarintType}, pack.Varint(116)}.Marshal(),
 	},
 	{
 		desc: "oneof (float)",
-		decodeTo: []proto.Message{
-			&testpb.TestAllTypes{OneofField: &testpb.TestAllTypes_OneofFloat{117.5}},
-			&test3pb.TestAllTypes{OneofField: &test3pb.TestAllTypes_OneofFloat{117.5}},
-		},
+		decodeTo: makeMessages(protobuild.Message{
+			"oneof_float": 117.5,
+		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
 		wire: pack.Message{pack.Tag{117, pack.Fixed32Type}, pack.Float32(117.5)}.Marshal(),
 	},
 	{
 		desc: "oneof (double)",
-		decodeTo: []proto.Message{
-			&testpb.TestAllTypes{OneofField: &testpb.TestAllTypes_OneofDouble{118.5}},
-			&test3pb.TestAllTypes{OneofField: &test3pb.TestAllTypes_OneofDouble{118.5}},
-		},
+		decodeTo: makeMessages(protobuild.Message{
+			"oneof_double": 118.5,
+		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
 		wire: pack.Message{pack.Tag{118, pack.Fixed64Type}, pack.Float64(118.5)}.Marshal(),
 	},
 	{
 		desc: "oneof (enum)",
-		decodeTo: []proto.Message{
-			&testpb.TestAllTypes{OneofField: &testpb.TestAllTypes_OneofEnum{testpb.TestAllTypes_BAR}},
-			&test3pb.TestAllTypes{OneofField: &test3pb.TestAllTypes_OneofEnum{test3pb.TestAllTypes_BAR}},
-		},
+		decodeTo: makeMessages(protobuild.Message{
+			"oneof_enum": "BAR",
+		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
 		wire: pack.Message{pack.Tag{119, pack.VarintType}, pack.Varint(int(testpb.TestAllTypes_BAR))}.Marshal(),
 	},
 	{
 		desc: "oneof (zero)",
-		decodeTo: []proto.Message{
-			&testpb.TestAllTypes{OneofField: &testpb.TestAllTypes_OneofUint64{0}},
-			&test3pb.TestAllTypes{OneofField: &test3pb.TestAllTypes_OneofUint64{0}},
-		},
+		decodeTo: makeMessages(protobuild.Message{
+			"oneof_uint64": 0,
+		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
 		wire: pack.Message{pack.Tag{116, pack.VarintType}, pack.Varint(0)}.Marshal(),
 	},
 	{
 		desc: "oneof (overridden value)",
-		decodeTo: []proto.Message{
-			&testpb.TestAllTypes{OneofField: &testpb.TestAllTypes_OneofUint64{2}},
-			&test3pb.TestAllTypes{OneofField: &test3pb.TestAllTypes_OneofUint64{2}},
-		},
+		decodeTo: makeMessages(protobuild.Message{
+			"oneof_uint64": 2,
+		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
 		wire: pack.Message{
 			pack.Tag{111, pack.VarintType}, pack.Varint(1),
 			pack.Tag{116, pack.VarintType}, pack.Varint(2),
@@ -1109,22 +892,11 @@
 	{
 		desc:          "unknown fields",
 		checkFastInit: true,
-		decodeTo: []proto.Message{build(
-			&testpb.TestAllTypes{},
-			unknown(pack.Message{
+		decodeTo: makeMessages(protobuild.Message{
+			protobuild.Unknown: pack.Message{
 				pack.Tag{100000, pack.VarintType}, pack.Varint(1),
-			}.Marshal()),
-		), build(
-			&test3pb.TestAllTypes{},
-			unknown(pack.Message{
-				pack.Tag{100000, pack.VarintType}, pack.Varint(1),
-			}.Marshal()),
-		), build(
-			&testpb.TestAllExtensions{},
-			unknown(pack.Message{
-				pack.Tag{100000, pack.VarintType}, pack.Varint(1),
-			}.Marshal()),
-		)},
+			}.Marshal(),
+		}),
 		wire: pack.Message{
 			pack.Tag{100000, pack.VarintType}, pack.Varint(1),
 		}.Marshal(),
@@ -1134,40 +906,27 @@
 		unmarshalOptions: proto.UnmarshalOptions{
 			DiscardUnknown: true,
 		},
-		decodeTo: []proto.Message{
-			&testpb.TestAllTypes{},
-			&test3pb.TestAllTypes{},
-		},
+		decodeTo: makeMessages(protobuild.Message{}),
 		wire: pack.Message{
 			pack.Tag{100000, pack.VarintType}, pack.Varint(1),
 		}.Marshal(),
 	},
 	{
 		desc: "field type mismatch",
-		decodeTo: []proto.Message{build(
-			&testpb.TestAllTypes{},
-			unknown(pack.Message{
+		decodeTo: makeMessages(protobuild.Message{
+			protobuild.Unknown: pack.Message{
 				pack.Tag{1, pack.BytesType}, pack.String("string"),
-			}.Marshal()),
-		), build(
-			&test3pb.TestAllTypes{},
-			unknown(pack.Message{
-				pack.Tag{1, pack.BytesType}, pack.String("string"),
-			}.Marshal()),
-		)},
+			}.Marshal(),
+		}),
 		wire: pack.Message{
 			pack.Tag{1, pack.BytesType}, pack.String("string"),
 		}.Marshal(),
 	},
 	{
 		desc: "map field element mismatch",
-		decodeTo: []proto.Message{
-			&testpb.TestAllTypes{
-				MapInt32Int32: map[int32]int32{1: 0},
-			}, &test3pb.TestAllTypes{
-				MapInt32Int32: map[int32]int32{1: 0},
-			},
-		},
+		decodeTo: makeMessages(protobuild.Message{
+			"map_int32_int32": map[int32]int32{1: 0},
+		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
 		wire: pack.Message{
 			pack.Tag{56, pack.BytesType}, pack.LengthPrefix(pack.Message{
 				pack.Tag{1, pack.VarintType}, pack.Varint(1),
@@ -1185,14 +944,14 @@
 		desc:          "required int32 unset",
 		checkFastInit: true,
 		partial:       true,
-		decodeTo:      []proto.Message{&requiredpb.Int32{}},
+		decodeTo:      makeMessages(protobuild.Message{}, &requiredpb.Int32{}),
 	},
 	{
 		desc:          "required int32 set",
 		checkFastInit: true,
-		decodeTo: []proto.Message{&requiredpb.Int32{
-			V: proto.Int32(1),
-		}},
+		decodeTo: makeMessages(protobuild.Message{
+			"v": 1,
+		}, &requiredpb.Int32{}),
 		wire: pack.Message{
 			pack.Tag{1, pack.VarintType}, pack.Varint(1),
 		}.Marshal(),
@@ -1201,14 +960,14 @@
 		desc:          "required fixed32 unset",
 		checkFastInit: true,
 		partial:       true,
-		decodeTo:      []proto.Message{&requiredpb.Fixed32{}},
+		decodeTo:      makeMessages(protobuild.Message{}, &requiredpb.Fixed32{}),
 	},
 	{
 		desc:          "required fixed32 set",
 		checkFastInit: true,
-		decodeTo: []proto.Message{&requiredpb.Fixed32{
-			V: proto.Uint32(1),
-		}},
+		decodeTo: makeMessages(protobuild.Message{
+			"v": 1,
+		}, &requiredpb.Fixed32{}),
 		wire: pack.Message{
 			pack.Tag{1, pack.Fixed32Type}, pack.Int32(1),
 		}.Marshal(),
@@ -1217,14 +976,14 @@
 		desc:          "required fixed64 unset",
 		checkFastInit: true,
 		partial:       true,
-		decodeTo:      []proto.Message{&requiredpb.Fixed64{}},
+		decodeTo:      makeMessages(protobuild.Message{}, &requiredpb.Fixed64{}),
 	},
 	{
 		desc:          "required fixed64 set",
 		checkFastInit: true,
-		decodeTo: []proto.Message{&requiredpb.Fixed64{
-			V: proto.Uint64(1),
-		}},
+		decodeTo: makeMessages(protobuild.Message{
+			"v": 1,
+		}, &requiredpb.Fixed64{}),
 		wire: pack.Message{
 			pack.Tag{1, pack.Fixed64Type}, pack.Int64(1),
 		}.Marshal(),
@@ -1233,14 +992,14 @@
 		desc:          "required bytes unset",
 		checkFastInit: true,
 		partial:       true,
-		decodeTo:      []proto.Message{&requiredpb.Bytes{}},
+		decodeTo:      makeMessages(protobuild.Message{}, &requiredpb.Bytes{}),
 	},
 	{
 		desc:          "required bytes set",
 		checkFastInit: true,
-		decodeTo: []proto.Message{&requiredpb.Bytes{
-			V: []byte{},
-		}},
+		decodeTo: makeMessages(protobuild.Message{
+			"v": "",
+		}, &requiredpb.Bytes{}),
 		wire: pack.Message{
 			pack.Tag{1, pack.BytesType}, pack.Bytes(nil),
 		}.Marshal(),
@@ -1263,9 +1022,9 @@
 		desc:          "required field in optional message unset",
 		checkFastInit: true,
 		partial:       true,
-		decodeTo: []proto.Message{&testpb.TestRequiredForeign{
-			OptionalMessage: &testpb.TestRequired{},
-		}},
+		decodeTo: makeMessages(protobuild.Message{
+			"optional_message": protobuild.Message{},
+		}, &testpb.TestRequiredForeign{}),
 		wire: pack.Message{
 			pack.Tag{1, pack.BytesType}, pack.LengthPrefix(pack.Message{}),
 		}.Marshal(),
@@ -1273,11 +1032,11 @@
 	{
 		desc:          "required field in optional message set",
 		checkFastInit: true,
-		decodeTo: []proto.Message{&testpb.TestRequiredForeign{
-			OptionalMessage: &testpb.TestRequired{
-				RequiredField: proto.Int32(1),
+		decodeTo: makeMessages(protobuild.Message{
+			"optional_message": protobuild.Message{
+				"required_field": 1,
 			},
-		}},
+		}, &testpb.TestRequiredForeign{}),
 		wire: pack.Message{
 			pack.Tag{1, pack.BytesType}, pack.LengthPrefix(pack.Message{
 				pack.Tag{1, pack.VarintType}, pack.Varint(1),
@@ -1287,11 +1046,11 @@
 	{
 		desc:          "required field in optional message set (split across multiple tags)",
 		checkFastInit: false, // fast init checks don't handle split messages
-		decodeTo: []proto.Message{&testpb.TestRequiredForeign{
-			OptionalMessage: &testpb.TestRequired{
-				RequiredField: proto.Int32(1),
+		decodeTo: makeMessages(protobuild.Message{
+			"optional_message": protobuild.Message{
+				"required_field": 1,
 			},
-		}},
+		}, &testpb.TestRequiredForeign{}),
 		wire: pack.Message{
 			pack.Tag{1, pack.BytesType}, pack.LengthPrefix(pack.Message{}),
 			pack.Tag{1, pack.BytesType}, pack.LengthPrefix(pack.Message{
@@ -1304,12 +1063,12 @@
 		desc:          "required field in repeated message unset",
 		checkFastInit: true,
 		partial:       true,
-		decodeTo: []proto.Message{&testpb.TestRequiredForeign{
-			RepeatedMessage: []*testpb.TestRequired{
-				{RequiredField: proto.Int32(1)},
+		decodeTo: makeMessages(protobuild.Message{
+			"repeated_message": []protobuild.Message{
+				{"required_field": 1},
 				{},
 			},
-		}},
+		}, &testpb.TestRequiredForeign{}),
 		wire: pack.Message{
 			pack.Tag{2, pack.BytesType}, pack.LengthPrefix(pack.Message{
 				pack.Tag{1, pack.VarintType}, pack.Varint(1),
@@ -1320,12 +1079,12 @@
 	{
 		desc:          "required field in repeated message set",
 		checkFastInit: true,
-		decodeTo: []proto.Message{&testpb.TestRequiredForeign{
-			RepeatedMessage: []*testpb.TestRequired{
-				{RequiredField: proto.Int32(1)},
-				{RequiredField: proto.Int32(2)},
+		decodeTo: makeMessages(protobuild.Message{
+			"repeated_message": []protobuild.Message{
+				{"required_field": 1},
+				{"required_field": 2},
 			},
-		}},
+		}, &testpb.TestRequiredForeign{}),
 		wire: pack.Message{
 			pack.Tag{2, pack.BytesType}, pack.LengthPrefix(pack.Message{
 				pack.Tag{1, pack.VarintType}, pack.Varint(1),
@@ -1339,12 +1098,12 @@
 		desc:          "required field in map message unset",
 		checkFastInit: true,
 		partial:       true,
-		decodeTo: []proto.Message{&testpb.TestRequiredForeign{
-			MapMessage: map[int32]*testpb.TestRequired{
-				1: {RequiredField: proto.Int32(1)},
+		decodeTo: makeMessages(protobuild.Message{
+			"map_message": map[int32]protobuild.Message{
+				1: {"required_field": 1},
 				2: {},
 			},
-		}},
+		}, &testpb.TestRequiredForeign{}),
 		wire: pack.Message{
 			pack.Tag{3, pack.BytesType}, pack.LengthPrefix(pack.Message{
 				pack.Tag{1, pack.VarintType}, pack.Varint(1),
@@ -1362,11 +1121,11 @@
 		desc:          "required field in absent map message value",
 		checkFastInit: true,
 		partial:       true,
-		decodeTo: []proto.Message{&testpb.TestRequiredForeign{
-			MapMessage: map[int32]*testpb.TestRequired{
+		decodeTo: makeMessages(protobuild.Message{
+			"map_message": map[int32]protobuild.Message{
 				2: {},
 			},
-		}},
+		}, &testpb.TestRequiredForeign{}),
 		wire: pack.Message{
 			pack.Tag{3, pack.BytesType}, pack.LengthPrefix(pack.Message{
 				pack.Tag{1, pack.VarintType}, pack.Varint(2),
@@ -1376,12 +1135,12 @@
 	{
 		desc:          "required field in map message set",
 		checkFastInit: true,
-		decodeTo: []proto.Message{&testpb.TestRequiredForeign{
-			MapMessage: map[int32]*testpb.TestRequired{
-				1: {RequiredField: proto.Int32(1)},
-				2: {RequiredField: proto.Int32(2)},
+		decodeTo: makeMessages(protobuild.Message{
+			"map_message": map[int32]protobuild.Message{
+				1: {"required_field": 1},
+				2: {"required_field": 2},
 			},
-		}},
+		}, &testpb.TestRequiredForeign{}),
 		wire: pack.Message{
 			pack.Tag{3, pack.BytesType}, pack.LengthPrefix(pack.Message{
 				pack.Tag{1, pack.VarintType}, pack.Varint(1),
@@ -1401,9 +1160,9 @@
 		desc:          "required field in optional group unset",
 		checkFastInit: true,
 		partial:       true,
-		decodeTo: []proto.Message{&testpb.TestRequiredGroupFields{
-			Optionalgroup: &testpb.TestRequiredGroupFields_OptionalGroup{},
-		}},
+		decodeTo: makeMessages(protobuild.Message{
+			"optionalgroup": protobuild.Message{},
+		}, &testpb.TestRequiredGroupFields{}),
 		wire: pack.Message{
 			pack.Tag{1, pack.StartGroupType},
 			pack.Tag{1, pack.EndGroupType},
@@ -1412,11 +1171,11 @@
 	{
 		desc:          "required field in optional group set",
 		checkFastInit: true,
-		decodeTo: []proto.Message{&testpb.TestRequiredGroupFields{
-			Optionalgroup: &testpb.TestRequiredGroupFields_OptionalGroup{
-				A: proto.Int32(1),
+		decodeTo: makeMessages(protobuild.Message{
+			"optionalgroup": protobuild.Message{
+				"a": 1,
 			},
-		}},
+		}, &testpb.TestRequiredGroupFields{}),
 		wire: pack.Message{
 			pack.Tag{1, pack.StartGroupType},
 			pack.Tag{2, pack.VarintType}, pack.Varint(1),
@@ -1427,12 +1186,12 @@
 		desc:          "required field in repeated group unset",
 		checkFastInit: true,
 		partial:       true,
-		decodeTo: []proto.Message{&testpb.TestRequiredGroupFields{
-			Repeatedgroup: []*testpb.TestRequiredGroupFields_RepeatedGroup{
-				{A: proto.Int32(1)},
+		decodeTo: makeMessages(protobuild.Message{
+			"repeatedgroup": []protobuild.Message{
+				{"a": 1},
 				{},
 			},
-		}},
+		}, &testpb.TestRequiredGroupFields{}),
 		wire: pack.Message{
 			pack.Tag{3, pack.StartGroupType},
 			pack.Tag{4, pack.VarintType}, pack.Varint(1),
@@ -1444,12 +1203,12 @@
 	{
 		desc:          "required field in repeated group set",
 		checkFastInit: true,
-		decodeTo: []proto.Message{&testpb.TestRequiredGroupFields{
-			Repeatedgroup: []*testpb.TestRequiredGroupFields_RepeatedGroup{
-				{A: proto.Int32(1)},
-				{A: proto.Int32(2)},
+		decodeTo: makeMessages(protobuild.Message{
+			"repeatedgroup": []protobuild.Message{
+				{"a": 1},
+				{"a": 2},
 			},
-		}},
+		}, &testpb.TestRequiredGroupFields{}),
 		wire: pack.Message{
 			pack.Tag{3, pack.StartGroupType},
 			pack.Tag{4, pack.VarintType}, pack.Varint(1),
@@ -1463,23 +1222,19 @@
 		desc:          "required field in oneof message unset",
 		checkFastInit: true,
 		partial:       true,
-		decodeTo: []proto.Message{
-			&testpb.TestRequiredForeign{OneofField: &testpb.TestRequiredForeign_OneofMessage{
-				&testpb.TestRequired{},
-			}},
-		},
+		decodeTo: makeMessages(protobuild.Message{
+			"oneof_message": protobuild.Message{},
+		}, &testpb.TestRequiredForeign{}),
 		wire: pack.Message{pack.Tag{4, pack.BytesType}, pack.LengthPrefix(pack.Message{})}.Marshal(),
 	},
 	{
 		desc:          "required field in oneof message set",
 		checkFastInit: true,
-		decodeTo: []proto.Message{
-			&testpb.TestRequiredForeign{OneofField: &testpb.TestRequiredForeign_OneofMessage{
-				&testpb.TestRequired{
-					RequiredField: proto.Int32(1),
-				},
-			}},
-		},
+		decodeTo: makeMessages(protobuild.Message{
+			"oneof_message": protobuild.Message{
+				"required_field": 1,
+			},
+		}, &testpb.TestRequiredForeign{}),
 		wire: pack.Message{pack.Tag{4, pack.BytesType}, pack.LengthPrefix(pack.Message{
 			pack.Tag{1, pack.VarintType}, pack.Varint(1),
 		})}.Marshal(),
@@ -1488,10 +1243,9 @@
 		desc:          "required field in extension message unset",
 		checkFastInit: true,
 		partial:       true,
-		decodeTo: []proto.Message{build(
-			&testpb.TestAllExtensions{},
-			extend(testpb.E_TestRequired_Single, &testpb.TestRequired{}),
-		)},
+		decodeTo: makeMessages(protobuild.Message{
+			"single": protobuild.Message{},
+		}, &testpb.TestAllExtensions{}),
 		wire: pack.Message{
 			pack.Tag{1000, pack.BytesType}, pack.LengthPrefix(pack.Message{}),
 		}.Marshal(),
@@ -1499,12 +1253,11 @@
 	{
 		desc:          "required field in extension message set",
 		checkFastInit: true,
-		decodeTo: []proto.Message{build(
-			&testpb.TestAllExtensions{},
-			extend(testpb.E_TestRequired_Single, &testpb.TestRequired{
-				RequiredField: proto.Int32(1),
-			}),
-		)},
+		decodeTo: makeMessages(protobuild.Message{
+			"single": protobuild.Message{
+				"required_field": 1,
+			},
+		}, &testpb.TestAllExtensions{}),
 		wire: pack.Message{
 			pack.Tag{1000, pack.BytesType}, pack.LengthPrefix(pack.Message{
 				pack.Tag{1, pack.VarintType}, pack.Varint(1),
@@ -1515,13 +1268,12 @@
 		desc:          "required field in repeated extension message unset",
 		checkFastInit: true,
 		partial:       true,
-		decodeTo: []proto.Message{build(
-			&testpb.TestAllExtensions{},
-			extend(testpb.E_TestRequired_Multi, []*testpb.TestRequired{
-				{RequiredField: proto.Int32(1)},
+		decodeTo: makeMessages(protobuild.Message{
+			"multi": []protobuild.Message{
+				{"required_field": 1},
 				{},
-			}),
-		)},
+			},
+		}, &testpb.TestAllExtensions{}),
 		wire: pack.Message{
 			pack.Tag{1001, pack.BytesType}, pack.LengthPrefix(pack.Message{
 				pack.Tag{1, pack.VarintType}, pack.Varint(1),
@@ -1532,13 +1284,12 @@
 	{
 		desc:          "required field in repeated extension message set",
 		checkFastInit: true,
-		decodeTo: []proto.Message{build(
-			&testpb.TestAllExtensions{},
-			extend(testpb.E_TestRequired_Multi, []*testpb.TestRequired{
-				{RequiredField: proto.Int32(1)},
-				{RequiredField: proto.Int32(2)},
-			}),
-		)},
+		decodeTo: makeMessages(protobuild.Message{
+			"multi": []protobuild.Message{
+				{"required_field": 1},
+				{"required_field": 2},
+			},
+		}, &testpb.TestAllExtensions{}),
 		wire: pack.Message{
 			pack.Tag{1001, pack.BytesType}, pack.LengthPrefix(pack.Message{
 				pack.Tag{1, pack.VarintType}, pack.Varint(1),
@@ -1559,34 +1310,30 @@
 	{
 		desc:    "legacy",
 		partial: true,
-		decodeTo: []proto.Message{
-			&legacypb.Legacy{
-				F1: &legacy1pb.Message{
-					OptionalInt32:     proto.Int32(1),
-					OptionalChildEnum: legacy1pb.Message_ALPHA.Enum(),
-					OptionalChildMessage: &legacy1pb.Message_ChildMessage{
-						F1: proto.String("x"),
-					},
-					Optionalgroup: &legacy1pb.Message_OptionalGroup{
-						F1: proto.String("x"),
-					},
-					RepeatedChildMessage: []*legacy1pb.Message_ChildMessage{
-						{F1: proto.String("x")},
-					},
-					Repeatedgroup: []*legacy1pb.Message_RepeatedGroup{
-						{F1: proto.String("x")},
-					},
-					MapBoolChildMessage: map[bool]*legacy1pb.Message_ChildMessage{
-						true: {F1: proto.String("x")},
-					},
-					OneofUnion: &legacy1pb.Message_OneofChildMessage{
-						&legacy1pb.Message_ChildMessage{
-							F1: proto.String("x"),
-						},
-					},
+		decodeTo: makeMessages(protobuild.Message{
+			"f1": protobuild.Message{
+				"optional_int32":      1,
+				"optional_child_enum": "ALPHA",
+				"optional_child_message": protobuild.Message{
+					"f1": "x",
+				},
+				"optionalgroup": protobuild.Message{
+					"f1": "x",
+				},
+				"repeated_child_message": []protobuild.Message{
+					{"f1": "x"},
+				},
+				"repeatedgroup": []protobuild.Message{
+					{"f1": "x"},
+				},
+				"map_bool_child_message": map[bool]protobuild.Message{
+					true: {"f1": "x"},
+				},
+				"oneof_child_message": protobuild.Message{
+					"f1": "x",
 				},
 			},
-		},
+		}, &legacypb.Legacy{}),
 		wire: pack.Message{
 			pack.Tag{1, pack.BytesType}, pack.LengthPrefix(pack.Message{
 				pack.Tag{101, pack.VarintType}, pack.Varint(1),
@@ -1618,24 +1365,22 @@
 	},
 	{
 		desc: "first reserved field number",
-		decodeTo: []proto.Message{build(
-			&testpb.TestAllTypes{},
-			unknown(pack.Message{
+		decodeTo: makeMessages(protobuild.Message{
+			protobuild.Unknown: pack.Message{
 				pack.Tag{pack.FirstReservedNumber, pack.VarintType}, pack.Varint(1004),
-			}.Marshal()),
-		)},
+			}.Marshal(),
+		}),
 		wire: pack.Message{
 			pack.Tag{pack.FirstReservedNumber, pack.VarintType}, pack.Varint(1004),
 		}.Marshal(),
 	},
 	{
 		desc: "last reserved field number",
-		decodeTo: []proto.Message{build(
-			&testpb.TestAllTypes{},
-			unknown(pack.Message{
+		decodeTo: makeMessages(protobuild.Message{
+			protobuild.Unknown: pack.Message{
 				pack.Tag{pack.LastReservedNumber, pack.VarintType}, pack.Varint(1005),
-			}.Marshal()),
-		)},
+			}.Marshal(),
+		}),
 		wire: pack.Message{
 			pack.Tag{pack.LastReservedNumber, pack.VarintType}, pack.Varint(1005),
 		}.Marshal(),
@@ -1646,27 +1391,22 @@
 			DiscardUnknown: true,
 			Resolver: func() protoregistry.ExtensionTypeResolver {
 				types := &protoregistry.Types{}
-				types.RegisterExtension(testpb.E_OptionalNestedMessageExtension)
-				types.RegisterExtension(testpb.E_OptionalInt32Extension)
+				types.RegisterExtension(testpb.E_OptionalNestedMessage)
+				types.RegisterExtension(testpb.E_OptionalInt32)
 				return types
 			}(),
 		},
-		decodeTo: []proto.Message{func() proto.Message {
-			m := &testpb.TestAllExtensions{}
-			if err := prototext.Unmarshal([]byte(`
-				[goproto.proto.test.optional_nested_message_extension]: {
-					corecursive: {
-						[goproto.proto.test.optional_nested_message_extension]: {
-							corecursive: {
-								[goproto.proto.test.optional_int32_extension]: 42
-							}
-						}
-					}
-				}`), m); err != nil {
-				panic(err)
-			}
-			return m
-		}()},
+		decodeTo: makeMessages(protobuild.Message{
+			"optional_nested_message": protobuild.Message{
+				"corecursive": protobuild.Message{
+					"optional_nested_message": protobuild.Message{
+						"corecursive": protobuild.Message{
+							"optional_int32": 42,
+						},
+					},
+				},
+			},
+		}, &testpb.TestAllExtensions{}),
 		wire: pack.Message{
 			pack.Tag{18, pack.BytesType}, pack.LengthPrefix(pack.Message{
 				pack.Tag{2, pack.BytesType}, pack.LengthPrefix(pack.Message{
@@ -1685,18 +1425,18 @@
 var testInvalidMessages = []testProto{
 	{
 		desc: "invalid UTF-8 in optional string field",
-		decodeTo: []proto.Message{&test3pb.TestAllTypes{
-			OptionalString: "abc\xff",
-		}},
+		decodeTo: makeMessages(protobuild.Message{
+			"optional_string": "abc\xff",
+		}, &test3pb.TestAllTypes{}),
 		wire: pack.Message{
 			pack.Tag{14, pack.BytesType}, pack.String("abc\xff"),
 		}.Marshal(),
 	},
 	{
 		desc: "invalid UTF-8 in repeated string field",
-		decodeTo: []proto.Message{&test3pb.TestAllTypes{
-			RepeatedString: []string{"foo", "abc\xff"},
-		}},
+		decodeTo: makeMessages(protobuild.Message{
+			"repeated_string": []string{"foo", "abc\xff"},
+		}, &test3pb.TestAllTypes{}),
 		wire: pack.Message{
 			pack.Tag{44, pack.BytesType}, pack.String("foo"),
 			pack.Tag{44, pack.BytesType}, pack.String("abc\xff"),
@@ -1704,13 +1444,13 @@
 	},
 	{
 		desc: "invalid UTF-8 in nested message",
-		decodeTo: []proto.Message{&test3pb.TestAllTypes{
-			OptionalNestedMessage: &test3pb.TestAllTypes_NestedMessage{
-				Corecursive: &test3pb.TestAllTypes{
-					OptionalString: "abc\xff",
+		decodeTo: makeMessages(protobuild.Message{
+			"optional_nested_message": protobuild.Message{
+				"corecursive": protobuild.Message{
+					"optional_string": "abc\xff",
 				},
 			},
-		}},
+		}, &test3pb.TestAllTypes{}),
 		wire: pack.Message{
 			pack.Tag{18, pack.BytesType}, pack.LengthPrefix(pack.Message{
 				pack.Tag{2, pack.BytesType}, pack.LengthPrefix(pack.Message{
@@ -1721,16 +1461,16 @@
 	},
 	{
 		desc: "invalid UTF-8 in oneof field",
-		decodeTo: []proto.Message{
-			&test3pb.TestAllTypes{OneofField: &test3pb.TestAllTypes_OneofString{"abc\xff"}},
-		},
+		decodeTo: makeMessages(protobuild.Message{
+			"oneof_string": "abc\xff",
+		}, &test3pb.TestAllTypes{}),
 		wire: pack.Message{pack.Tag{113, pack.BytesType}, pack.String("abc\xff")}.Marshal(),
 	},
 	{
 		desc: "invalid UTF-8 in map key",
-		decodeTo: []proto.Message{&test3pb.TestAllTypes{
-			MapStringString: map[string]string{"key\xff": "val"},
-		}},
+		decodeTo: makeMessages(protobuild.Message{
+			"map_string_string": map[string]string{"key\xff": "val"},
+		}, &test3pb.TestAllTypes{}),
 		wire: pack.Message{
 			pack.Tag{69, pack.BytesType}, pack.LengthPrefix(pack.Message{
 				pack.Tag{1, pack.BytesType}, pack.String("key\xff"),
@@ -1740,9 +1480,9 @@
 	},
 	{
 		desc: "invalid UTF-8 in map value",
-		decodeTo: []proto.Message{&test3pb.TestAllTypes{
-			MapStringString: map[string]string{"key": "val\xff"},
-		}},
+		decodeTo: makeMessages(protobuild.Message{
+			"map_string_string": map[string]string{"key": "val\xff"},
+		}, &test3pb.TestAllTypes{}),
 		wire: pack.Message{
 			pack.Tag{69, pack.BytesType}, pack.LengthPrefix(pack.Message{
 				pack.Tag{1, pack.BytesType}, pack.String("key"),
diff --git a/testing/protocmp/util_test.go b/testing/protocmp/util_test.go
index 23b0e8b..9b40e66 100644
--- a/testing/protocmp/util_test.go
+++ b/testing/protocmp/util_test.go
@@ -241,58 +241,58 @@
 		want: true,
 	}, {
 		x: apply(new(testpb.TestAllExtensions),
-			setExtension{testpb.E_DefaultInt32Extension, int32(81)},
-			setExtension{testpb.E_DefaultUint32Extension, uint32(83)},
-			setExtension{testpb.E_DefaultFloatExtension, float32(91.5)},
-			setExtension{testpb.E_DefaultBoolExtension, bool(true)},
-			setExtension{testpb.E_DefaultBytesExtension, []byte("world")}),
+			setExtension{testpb.E_DefaultInt32, int32(81)},
+			setExtension{testpb.E_DefaultUint32, uint32(83)},
+			setExtension{testpb.E_DefaultFloat, float32(91.5)},
+			setExtension{testpb.E_DefaultBool, bool(true)},
+			setExtension{testpb.E_DefaultBytes, []byte("world")}),
 		y: apply(new(testpb.TestAllExtensions),
-			setExtension{testpb.E_DefaultInt64Extension, int64(82)},
-			setExtension{testpb.E_DefaultUint64Extension, uint64(84)},
-			setExtension{testpb.E_DefaultDoubleExtension, float64(92e3)},
-			setExtension{testpb.E_DefaultStringExtension, string("hello")}),
+			setExtension{testpb.E_DefaultInt64, int64(82)},
+			setExtension{testpb.E_DefaultUint64, uint64(84)},
+			setExtension{testpb.E_DefaultDouble, float64(92e3)},
+			setExtension{testpb.E_DefaultString, string("hello")}),
 		opts: cmp.Options{Transform()},
 		want: false,
 	}, {
 		x: apply(new(testpb.TestAllExtensions),
-			setExtension{testpb.E_DefaultInt32Extension, int32(81)},
-			setExtension{testpb.E_DefaultUint32Extension, uint32(83)},
-			setExtension{testpb.E_DefaultFloatExtension, float32(91.5)},
-			setExtension{testpb.E_DefaultBoolExtension, bool(true)},
-			setExtension{testpb.E_DefaultBytesExtension, []byte("world")}),
+			setExtension{testpb.E_DefaultInt32, int32(81)},
+			setExtension{testpb.E_DefaultUint32, uint32(83)},
+			setExtension{testpb.E_DefaultFloat, float32(91.5)},
+			setExtension{testpb.E_DefaultBool, bool(true)},
+			setExtension{testpb.E_DefaultBytes, []byte("world")}),
 		y: apply(new(testpb.TestAllExtensions),
-			setExtension{testpb.E_DefaultInt64Extension, int64(82)},
-			setExtension{testpb.E_DefaultUint64Extension, uint64(84)},
-			setExtension{testpb.E_DefaultDoubleExtension, float64(92e3)},
-			setExtension{testpb.E_DefaultStringExtension, string("hello")}),
+			setExtension{testpb.E_DefaultInt64, int64(82)},
+			setExtension{testpb.E_DefaultUint64, uint64(84)},
+			setExtension{testpb.E_DefaultDouble, float64(92e3)},
+			setExtension{testpb.E_DefaultString, string("hello")}),
 		opts: cmp.Options{Transform(), IgnoreDefaultScalars()},
 		want: true,
 	}, {
 		x: apply(new(testpb.TestAllExtensions),
-			setExtension{testpb.E_OptionalInt32Extension, int32(0)},
-			setExtension{testpb.E_OptionalUint32Extension, uint32(0)},
-			setExtension{testpb.E_OptionalFloatExtension, float32(0)},
-			setExtension{testpb.E_OptionalBoolExtension, bool(false)},
-			setExtension{testpb.E_OptionalBytesExtension, []byte("")}),
+			setExtension{testpb.E_OptionalInt32, int32(0)},
+			setExtension{testpb.E_OptionalUint32, uint32(0)},
+			setExtension{testpb.E_OptionalFloat, float32(0)},
+			setExtension{testpb.E_OptionalBool, bool(false)},
+			setExtension{testpb.E_OptionalBytes, []byte("")}),
 		y: apply(new(testpb.TestAllExtensions),
-			setExtension{testpb.E_OptionalInt64Extension, int64(0)},
-			setExtension{testpb.E_OptionalUint64Extension, uint64(0)},
-			setExtension{testpb.E_OptionalDoubleExtension, float64(0)},
-			setExtension{testpb.E_OptionalStringExtension, string("")}),
+			setExtension{testpb.E_OptionalInt64, int64(0)},
+			setExtension{testpb.E_OptionalUint64, uint64(0)},
+			setExtension{testpb.E_OptionalDouble, float64(0)},
+			setExtension{testpb.E_OptionalString, string("")}),
 		opts: cmp.Options{Transform()},
 		want: false,
 	}, {
 		x: apply(new(testpb.TestAllExtensions),
-			setExtension{testpb.E_OptionalInt32Extension, int32(0)},
-			setExtension{testpb.E_OptionalUint32Extension, uint32(0)},
-			setExtension{testpb.E_OptionalFloatExtension, float32(0)},
-			setExtension{testpb.E_OptionalBoolExtension, bool(false)},
-			setExtension{testpb.E_OptionalBytesExtension, []byte("")}),
+			setExtension{testpb.E_OptionalInt32, int32(0)},
+			setExtension{testpb.E_OptionalUint32, uint32(0)},
+			setExtension{testpb.E_OptionalFloat, float32(0)},
+			setExtension{testpb.E_OptionalBool, bool(false)},
+			setExtension{testpb.E_OptionalBytes, []byte("")}),
 		y: apply(new(testpb.TestAllExtensions),
-			setExtension{testpb.E_OptionalInt64Extension, int64(0)},
-			setExtension{testpb.E_OptionalUint64Extension, uint64(0)},
-			setExtension{testpb.E_OptionalDoubleExtension, float64(0)},
-			setExtension{testpb.E_OptionalStringExtension, string("")}),
+			setExtension{testpb.E_OptionalInt64, int64(0)},
+			setExtension{testpb.E_OptionalUint64, uint64(0)},
+			setExtension{testpb.E_OptionalDouble, float64(0)},
+			setExtension{testpb.E_OptionalString, string("")}),
 		opts: cmp.Options{Transform(), IgnoreDefaultScalars()},
 		want: true,
 	}, {
@@ -500,33 +500,33 @@
 		want: true,
 	}, {
 		x: apply(new(testpb.TestAllExtensions),
-			setExtension{testpb.E_OptionalStringExtension, "hello"}),
+			setExtension{testpb.E_OptionalString, "hello"}),
 		y: apply(new(testpb.TestAllExtensions),
-			setExtension{testpb.E_OptionalStringExtension, "goodbye"}),
+			setExtension{testpb.E_OptionalString, "goodbye"}),
 		opts: cmp.Options{Transform()},
 		want: false,
 	}, {
 		x: apply(new(testpb.TestAllExtensions),
-			setExtension{testpb.E_OptionalStringExtension, "hello"}),
+			setExtension{testpb.E_OptionalString, "hello"}),
 		y: new(testpb.TestAllExtensions),
 		opts: cmp.Options{Transform(),
-			IgnoreDescriptors(testpb.E_OptionalStringExtension.TypeDescriptor())},
+			IgnoreDescriptors(testpb.E_OptionalString.TypeDescriptor())},
 		want: true,
 	}, {
 		x: apply(new(testpb.TestAllExtensions),
-			setExtension{testpb.E_OptionalStringExtension, "hello"}),
+			setExtension{testpb.E_OptionalString, "hello"}),
 		y: apply(new(testpb.TestAllExtensions),
-			setExtension{testpb.E_OptionalStringExtension, "goodbye"}),
+			setExtension{testpb.E_OptionalString, "goodbye"}),
 		opts: cmp.Options{Transform(),
-			IgnoreDescriptors(testpb.E_OptionalStringExtension.TypeDescriptor())},
+			IgnoreDescriptors(testpb.E_OptionalString.TypeDescriptor())},
 		want: true,
 	}, {
 		x: apply(new(testpb.TestAllExtensions),
-			setExtension{testpb.E_OptionalStringExtension, "hello"}),
+			setExtension{testpb.E_OptionalString, "hello"}),
 		y: apply(new(testpb.TestAllExtensions),
-			setExtension{testpb.E_OptionalStringExtension, "goodbye"}),
+			setExtension{testpb.E_OptionalString, "goodbye"}),
 		opts: cmp.Options{Transform(),
-			IgnoreDescriptors(testpb.E_OptionalInt32Extension.TypeDescriptor())},
+			IgnoreDescriptors(testpb.E_OptionalInt32.TypeDescriptor())},
 		want: false,
 	}}...)
 
diff --git a/testing/protocmp/xform_test.go b/testing/protocmp/xform_test.go
index b69ce0c..a5b15ee 100644
--- a/testing/protocmp/xform_test.go
+++ b/testing/protocmp/xform_test.go
@@ -136,77 +136,77 @@
 	}, {
 		in: func() proto.Message {
 			m := &testpb.TestAllExtensions{}
-			proto.SetExtension(m, testpb.E_OptionalBoolExtension, bool(false))
-			proto.SetExtension(m, testpb.E_OptionalInt32Extension, int32(-32))
-			proto.SetExtension(m, testpb.E_OptionalInt64Extension, int64(-64))
-			proto.SetExtension(m, testpb.E_OptionalUint32Extension, uint32(32))
-			proto.SetExtension(m, testpb.E_OptionalUint64Extension, uint64(64))
-			proto.SetExtension(m, testpb.E_OptionalFloatExtension, float32(32.32))
-			proto.SetExtension(m, testpb.E_OptionalDoubleExtension, float64(64.64))
-			proto.SetExtension(m, testpb.E_OptionalStringExtension, string("string"))
-			proto.SetExtension(m, testpb.E_OptionalBytesExtension, []byte("bytes"))
-			proto.SetExtension(m, testpb.E_OptionalNestedEnumExtension, testpb.TestAllTypes_NEG)
-			proto.SetExtension(m, testpb.E_OptionalNestedMessageExtension, &testpb.TestAllExtensions_NestedMessage{A: proto.Int32(5)})
+			proto.SetExtension(m, testpb.E_OptionalBool, bool(false))
+			proto.SetExtension(m, testpb.E_OptionalInt32, int32(-32))
+			proto.SetExtension(m, testpb.E_OptionalInt64, int64(-64))
+			proto.SetExtension(m, testpb.E_OptionalUint32, uint32(32))
+			proto.SetExtension(m, testpb.E_OptionalUint64, uint64(64))
+			proto.SetExtension(m, testpb.E_OptionalFloat, float32(32.32))
+			proto.SetExtension(m, testpb.E_OptionalDouble, float64(64.64))
+			proto.SetExtension(m, testpb.E_OptionalString, string("string"))
+			proto.SetExtension(m, testpb.E_OptionalBytes, []byte("bytes"))
+			proto.SetExtension(m, testpb.E_OptionalNestedEnum, testpb.TestAllTypes_NEG)
+			proto.SetExtension(m, testpb.E_OptionalNestedMessage, &testpb.TestAllExtensions_NestedMessage{A: proto.Int32(5)})
 			return m
 		}(),
 		want: Message{
-			messageTypeKey: messageTypeOf(&testpb.TestAllExtensions{}),
-			"[goproto.proto.test.optional_bool_extension]":           bool(false),
-			"[goproto.proto.test.optional_int32_extension]":          int32(-32),
-			"[goproto.proto.test.optional_int64_extension]":          int64(-64),
-			"[goproto.proto.test.optional_uint32_extension]":         uint32(32),
-			"[goproto.proto.test.optional_uint64_extension]":         uint64(64),
-			"[goproto.proto.test.optional_float_extension]":          float32(32.32),
-			"[goproto.proto.test.optional_double_extension]":         float64(64.64),
-			"[goproto.proto.test.optional_string_extension]":         string("string"),
-			"[goproto.proto.test.optional_bytes_extension]":          []byte("bytes"),
-			"[goproto.proto.test.optional_nested_enum_extension]":    enumOf(testpb.TestAllTypes_NEG),
-			"[goproto.proto.test.optional_nested_message_extension]": Message{messageTypeKey: messageTypeOf(&testpb.TestAllExtensions_NestedMessage{}), "a": int32(5)},
+			messageTypeKey:                                 messageTypeOf(&testpb.TestAllExtensions{}),
+			"[goproto.proto.test.optional_bool]":           bool(false),
+			"[goproto.proto.test.optional_int32]":          int32(-32),
+			"[goproto.proto.test.optional_int64]":          int64(-64),
+			"[goproto.proto.test.optional_uint32]":         uint32(32),
+			"[goproto.proto.test.optional_uint64]":         uint64(64),
+			"[goproto.proto.test.optional_float]":          float32(32.32),
+			"[goproto.proto.test.optional_double]":         float64(64.64),
+			"[goproto.proto.test.optional_string]":         string("string"),
+			"[goproto.proto.test.optional_bytes]":          []byte("bytes"),
+			"[goproto.proto.test.optional_nested_enum]":    enumOf(testpb.TestAllTypes_NEG),
+			"[goproto.proto.test.optional_nested_message]": Message{messageTypeKey: messageTypeOf(&testpb.TestAllExtensions_NestedMessage{}), "a": int32(5)},
 		},
-		wantString: `{[goproto.proto.test.optional_bool_extension]:false, [goproto.proto.test.optional_bytes_extension]:"bytes", [goproto.proto.test.optional_double_extension]:64.64, [goproto.proto.test.optional_float_extension]:32.32, [goproto.proto.test.optional_int32_extension]:-32, [goproto.proto.test.optional_int64_extension]:-64, [goproto.proto.test.optional_nested_enum_extension]:NEG, [goproto.proto.test.optional_nested_message_extension]:{a:5}, [goproto.proto.test.optional_string_extension]:"string", [goproto.proto.test.optional_uint32_extension]:32, [goproto.proto.test.optional_uint64_extension]:64}`,
+		wantString: `{[goproto.proto.test.optional_bool]:false, [goproto.proto.test.optional_bytes]:"bytes", [goproto.proto.test.optional_double]:64.64, [goproto.proto.test.optional_float]:32.32, [goproto.proto.test.optional_int32]:-32, [goproto.proto.test.optional_int64]:-64, [goproto.proto.test.optional_nested_enum]:NEG, [goproto.proto.test.optional_nested_message]:{a:5}, [goproto.proto.test.optional_string]:"string", [goproto.proto.test.optional_uint32]:32, [goproto.proto.test.optional_uint64]:64}`,
 	}, {
 		in: func() proto.Message {
 			m := &testpb.TestAllExtensions{}
-			proto.SetExtension(m, testpb.E_RepeatedBoolExtension, []bool{false, true})
-			proto.SetExtension(m, testpb.E_RepeatedInt32Extension, []int32{32, -32})
-			proto.SetExtension(m, testpb.E_RepeatedInt64Extension, []int64{64, -64})
-			proto.SetExtension(m, testpb.E_RepeatedUint32Extension, []uint32{0, 32})
-			proto.SetExtension(m, testpb.E_RepeatedUint64Extension, []uint64{0, 64})
-			proto.SetExtension(m, testpb.E_RepeatedFloatExtension, []float32{0, 32.32})
-			proto.SetExtension(m, testpb.E_RepeatedDoubleExtension, []float64{0, 64.64})
-			proto.SetExtension(m, testpb.E_RepeatedStringExtension, []string{"s1", "s2"})
-			proto.SetExtension(m, testpb.E_RepeatedBytesExtension, [][]byte{{1}, {2}})
-			proto.SetExtension(m, testpb.E_RepeatedNestedEnumExtension, []testpb.TestAllTypes_NestedEnum{
+			proto.SetExtension(m, testpb.E_RepeatedBool, []bool{false, true})
+			proto.SetExtension(m, testpb.E_RepeatedInt32, []int32{32, -32})
+			proto.SetExtension(m, testpb.E_RepeatedInt64, []int64{64, -64})
+			proto.SetExtension(m, testpb.E_RepeatedUint32, []uint32{0, 32})
+			proto.SetExtension(m, testpb.E_RepeatedUint64, []uint64{0, 64})
+			proto.SetExtension(m, testpb.E_RepeatedFloat, []float32{0, 32.32})
+			proto.SetExtension(m, testpb.E_RepeatedDouble, []float64{0, 64.64})
+			proto.SetExtension(m, testpb.E_RepeatedString, []string{"s1", "s2"})
+			proto.SetExtension(m, testpb.E_RepeatedBytes, [][]byte{{1}, {2}})
+			proto.SetExtension(m, testpb.E_RepeatedNestedEnum, []testpb.TestAllTypes_NestedEnum{
 				testpb.TestAllTypes_FOO,
 				testpb.TestAllTypes_BAR,
 			})
-			proto.SetExtension(m, testpb.E_RepeatedNestedMessageExtension, []*testpb.TestAllExtensions_NestedMessage{
+			proto.SetExtension(m, testpb.E_RepeatedNestedMessage, []*testpb.TestAllExtensions_NestedMessage{
 				{A: proto.Int32(5)},
 				{A: proto.Int32(-5)},
 			})
 			return m
 		}(),
 		want: Message{
-			messageTypeKey: messageTypeOf(&testpb.TestAllExtensions{}),
-			"[goproto.proto.test.repeated_bool_extension]":   []bool{false, true},
-			"[goproto.proto.test.repeated_int32_extension]":  []int32{32, -32},
-			"[goproto.proto.test.repeated_int64_extension]":  []int64{64, -64},
-			"[goproto.proto.test.repeated_uint32_extension]": []uint32{0, 32},
-			"[goproto.proto.test.repeated_uint64_extension]": []uint64{0, 64},
-			"[goproto.proto.test.repeated_float_extension]":  []float32{0, 32.32},
-			"[goproto.proto.test.repeated_double_extension]": []float64{0, 64.64},
-			"[goproto.proto.test.repeated_string_extension]": []string{"s1", "s2"},
-			"[goproto.proto.test.repeated_bytes_extension]":  [][]byte{{1}, {2}},
-			"[goproto.proto.test.repeated_nested_enum_extension]": []Enum{
+			messageTypeKey:                         messageTypeOf(&testpb.TestAllExtensions{}),
+			"[goproto.proto.test.repeated_bool]":   []bool{false, true},
+			"[goproto.proto.test.repeated_int32]":  []int32{32, -32},
+			"[goproto.proto.test.repeated_int64]":  []int64{64, -64},
+			"[goproto.proto.test.repeated_uint32]": []uint32{0, 32},
+			"[goproto.proto.test.repeated_uint64]": []uint64{0, 64},
+			"[goproto.proto.test.repeated_float]":  []float32{0, 32.32},
+			"[goproto.proto.test.repeated_double]": []float64{0, 64.64},
+			"[goproto.proto.test.repeated_string]": []string{"s1", "s2"},
+			"[goproto.proto.test.repeated_bytes]":  [][]byte{{1}, {2}},
+			"[goproto.proto.test.repeated_nested_enum]": []Enum{
 				enumOf(testpb.TestAllTypes_FOO),
 				enumOf(testpb.TestAllTypes_BAR),
 			},
-			"[goproto.proto.test.repeated_nested_message_extension]": []Message{
+			"[goproto.proto.test.repeated_nested_message]": []Message{
 				{messageTypeKey: messageTypeOf(&testpb.TestAllExtensions_NestedMessage{}), "a": int32(5)},
 				{messageTypeKey: messageTypeOf(&testpb.TestAllExtensions_NestedMessage{}), "a": int32(-5)},
 			},
 		},
-		wantString: `{[goproto.proto.test.repeated_bool_extension]:[false, true], [goproto.proto.test.repeated_bytes_extension]:["\x01", "\x02"], [goproto.proto.test.repeated_double_extension]:[0, 64.64], [goproto.proto.test.repeated_float_extension]:[0, 32.32], [goproto.proto.test.repeated_int32_extension]:[32, -32], [goproto.proto.test.repeated_int64_extension]:[64, -64], [goproto.proto.test.repeated_nested_enum_extension]:[FOO, BAR], [goproto.proto.test.repeated_nested_message_extension]:[{a:5}, {a:-5}], [goproto.proto.test.repeated_string_extension]:["s1", "s2"], [goproto.proto.test.repeated_uint32_extension]:[0, 32], [goproto.proto.test.repeated_uint64_extension]:[0, 64]}`,
+		wantString: `{[goproto.proto.test.repeated_bool]:[false, true], [goproto.proto.test.repeated_bytes]:["\x01", "\x02"], [goproto.proto.test.repeated_double]:[0, 64.64], [goproto.proto.test.repeated_float]:[0, 32.32], [goproto.proto.test.repeated_int32]:[32, -32], [goproto.proto.test.repeated_int64]:[64, -64], [goproto.proto.test.repeated_nested_enum]:[FOO, BAR], [goproto.proto.test.repeated_nested_message]:[{a:5}, {a:-5}], [goproto.proto.test.repeated_string]:["s1", "s2"], [goproto.proto.test.repeated_uint32]:[0, 32], [goproto.proto.test.repeated_uint64]:[0, 64]}`,
 	}, {
 		in: func() proto.Message {
 			m := &testpb.TestAllTypes{}