// Code generated by protoc-gen-go. DO NOT EDIT.
// source: encoding/textpb/testprotos/pb2/test.proto

package pb2

import (
	proto "github.com/golang/protobuf/proto"
	any "github.com/golang/protobuf/ptypes/any"
	duration "github.com/golang/protobuf/ptypes/duration"
	empty "github.com/golang/protobuf/ptypes/empty"
	_struct "github.com/golang/protobuf/ptypes/struct"
	timestamp "github.com/golang/protobuf/ptypes/timestamp"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
	prototype "github.com/golang/protobuf/v2/reflect/prototype"
	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
)

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type Enum int32

const (
	Enum_UNKNOWN Enum = 0
	Enum_FIRST   Enum = 1
	Enum_SECOND  Enum = 2
	Enum_TENTH   Enum = 10
)

func (e Enum) Type() protoreflect.EnumType {
	return xxx_Test_ProtoFile_EnumTypes[0]
}
func (e Enum) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(e)
}

var Enum_name = map[int32]string{
	0:  "UNKNOWN",
	1:  "FIRST",
	2:  "SECOND",
	10: "TENTH",
}

var Enum_value = map[string]int32{
	"UNKNOWN": 0,
	"FIRST":   1,
	"SECOND":  2,
	"TENTH":   10,
}

func (x Enum) Enum() *Enum {
	p := new(Enum)
	*p = x
	return p
}

func (x Enum) String() string {
	return proto.EnumName(Enum_name, int32(x))
}

func (x *Enum) UnmarshalJSON(data []byte) error {
	value, err := proto.UnmarshalJSONEnum(Enum_value, data, "Enum")
	if err != nil {
		return err
	}
	*x = Enum(value)
	return nil
}

func (Enum) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{0}
}

type Enums_NestedEnum int32

const (
	Enums_UNO  Enums_NestedEnum = 1
	Enums_DOS  Enums_NestedEnum = 2
	Enums_DIEZ Enums_NestedEnum = 10
)

func (e Enums_NestedEnum) Type() protoreflect.EnumType {
	return xxx_Test_ProtoFile_EnumTypes[1]
}
func (e Enums_NestedEnum) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(e)
}

var Enums_NestedEnum_name = map[int32]string{
	1:  "UNO",
	2:  "DOS",
	10: "DIEZ",
}

var Enums_NestedEnum_value = map[string]int32{
	"UNO":  1,
	"DOS":  2,
	"DIEZ": 10,
}

func (x Enums_NestedEnum) Enum() *Enums_NestedEnum {
	p := new(Enums_NestedEnum)
	*p = x
	return p
}

func (x Enums_NestedEnum) String() string {
	return proto.EnumName(Enums_NestedEnum_name, int32(x))
}

func (x *Enums_NestedEnum) UnmarshalJSON(data []byte) error {
	value, err := proto.UnmarshalJSONEnum(Enums_NestedEnum_value, data, "Enums_NestedEnum")
	if err != nil {
		return err
	}
	*x = Enums_NestedEnum(value)
	return nil
}

func (Enums_NestedEnum) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{2, 0}
}

// Scalars contains optional scalar fields.
type Scalars struct {
	OptBool              *bool    `protobuf:"varint,1,opt,name=opt_bool,json=optBool" json:"opt_bool,omitempty"`
	OptInt32             *int32   `protobuf:"varint,2,opt,name=opt_int32,json=optInt32" json:"opt_int32,omitempty"`
	OptInt64             *int64   `protobuf:"varint,3,opt,name=opt_int64,json=optInt64" json:"opt_int64,omitempty"`
	OptUint32            *uint32  `protobuf:"varint,4,opt,name=opt_uint32,json=optUint32" json:"opt_uint32,omitempty"`
	OptUint64            *uint64  `protobuf:"varint,5,opt,name=opt_uint64,json=optUint64" json:"opt_uint64,omitempty"`
	OptSint32            *int32   `protobuf:"zigzag32,6,opt,name=opt_sint32,json=optSint32" json:"opt_sint32,omitempty"`
	OptSint64            *int64   `protobuf:"zigzag64,7,opt,name=opt_sint64,json=optSint64" json:"opt_sint64,omitempty"`
	OptFixed32           *uint32  `protobuf:"fixed32,8,opt,name=opt_fixed32,json=optFixed32" json:"opt_fixed32,omitempty"`
	OptFixed64           *uint64  `protobuf:"fixed64,9,opt,name=opt_fixed64,json=optFixed64" json:"opt_fixed64,omitempty"`
	OptSfixed32          *int32   `protobuf:"fixed32,10,opt,name=opt_sfixed32,json=optSfixed32" json:"opt_sfixed32,omitempty"`
	OptSfixed64          *int64   `protobuf:"fixed64,11,opt,name=opt_sfixed64,json=optSfixed64" json:"opt_sfixed64,omitempty"`
	OptFloat             *float32 `protobuf:"fixed32,20,opt,name=opt_float,json=optFloat" json:"opt_float,omitempty"`
	OptDouble            *float64 `protobuf:"fixed64,21,opt,name=opt_double,json=optDouble" json:"opt_double,omitempty"`
	OptBytes             []byte   `protobuf:"bytes,14,opt,name=opt_bytes,json=optBytes" json:"opt_bytes,omitempty"`
	OptString            *string  `protobuf:"bytes,13,opt,name=opt_string,json=optString" json:"opt_string,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

type xxx_Scalars struct{ m *Scalars }

func (m *Scalars) ProtoReflect() protoreflect.Message {
	return xxx_Scalars{m}
}
func (m xxx_Scalars) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[0].Type
}
func (m xxx_Scalars) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
}
func (m xxx_Scalars) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
}
func (m xxx_Scalars) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *Scalars) Reset()         { *m = Scalars{} }
func (m *Scalars) String() string { return proto.CompactTextString(m) }
func (*Scalars) ProtoMessage()    {}
func (*Scalars) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{0}
}

func (m *Scalars) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Scalars.Unmarshal(m, b)
}
func (m *Scalars) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Scalars.Marshal(b, m, deterministic)
}
func (m *Scalars) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Scalars.Merge(m, src)
}
func (m *Scalars) XXX_Size() int {
	return xxx_messageInfo_Scalars.Size(m)
}
func (m *Scalars) XXX_DiscardUnknown() {
	xxx_messageInfo_Scalars.DiscardUnknown(m)
}

var xxx_messageInfo_Scalars proto.InternalMessageInfo

func (m *Scalars) GetOptBool() bool {
	if m != nil && m.OptBool != nil {
		return *m.OptBool
	}
	return false
}

func (m *Scalars) GetOptInt32() int32 {
	if m != nil && m.OptInt32 != nil {
		return *m.OptInt32
	}
	return 0
}

func (m *Scalars) GetOptInt64() int64 {
	if m != nil && m.OptInt64 != nil {
		return *m.OptInt64
	}
	return 0
}

func (m *Scalars) GetOptUint32() uint32 {
	if m != nil && m.OptUint32 != nil {
		return *m.OptUint32
	}
	return 0
}

func (m *Scalars) GetOptUint64() uint64 {
	if m != nil && m.OptUint64 != nil {
		return *m.OptUint64
	}
	return 0
}

func (m *Scalars) GetOptSint32() int32 {
	if m != nil && m.OptSint32 != nil {
		return *m.OptSint32
	}
	return 0
}

func (m *Scalars) GetOptSint64() int64 {
	if m != nil && m.OptSint64 != nil {
		return *m.OptSint64
	}
	return 0
}

func (m *Scalars) GetOptFixed32() uint32 {
	if m != nil && m.OptFixed32 != nil {
		return *m.OptFixed32
	}
	return 0
}

func (m *Scalars) GetOptFixed64() uint64 {
	if m != nil && m.OptFixed64 != nil {
		return *m.OptFixed64
	}
	return 0
}

func (m *Scalars) GetOptSfixed32() int32 {
	if m != nil && m.OptSfixed32 != nil {
		return *m.OptSfixed32
	}
	return 0
}

func (m *Scalars) GetOptSfixed64() int64 {
	if m != nil && m.OptSfixed64 != nil {
		return *m.OptSfixed64
	}
	return 0
}

func (m *Scalars) GetOptFloat() float32 {
	if m != nil && m.OptFloat != nil {
		return *m.OptFloat
	}
	return 0
}

func (m *Scalars) GetOptDouble() float64 {
	if m != nil && m.OptDouble != nil {
		return *m.OptDouble
	}
	return 0
}

func (m *Scalars) GetOptBytes() []byte {
	if m != nil {
		return m.OptBytes
	}
	return nil
}

func (m *Scalars) GetOptString() string {
	if m != nil && m.OptString != nil {
		return *m.OptString
	}
	return ""
}

// Message contains repeated fields.
type Repeats struct {
	RptBool              []bool    `protobuf:"varint,1,rep,name=rpt_bool,json=rptBool" json:"rpt_bool,omitempty"`
	RptInt32             []int32   `protobuf:"varint,2,rep,name=rpt_int32,json=rptInt32" json:"rpt_int32,omitempty"`
	RptInt64             []int64   `protobuf:"varint,3,rep,name=rpt_int64,json=rptInt64" json:"rpt_int64,omitempty"`
	RptUint32            []uint32  `protobuf:"varint,4,rep,name=rpt_uint32,json=rptUint32" json:"rpt_uint32,omitempty"`
	RptUint64            []uint64  `protobuf:"varint,5,rep,name=rpt_uint64,json=rptUint64" json:"rpt_uint64,omitempty"`
	RptFloat             []float32 `protobuf:"fixed32,6,rep,name=rpt_float,json=rptFloat" json:"rpt_float,omitempty"`
	RptDouble            []float64 `protobuf:"fixed64,7,rep,name=rpt_double,json=rptDouble" json:"rpt_double,omitempty"`
	RptString            []string  `protobuf:"bytes,15,rep,name=rpt_string,json=rptString" json:"rpt_string,omitempty"`
	RptBytes             [][]byte  `protobuf:"bytes,14,rep,name=rpt_bytes,json=rptBytes" json:"rpt_bytes,omitempty"`
	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
	XXX_unrecognized     []byte    `json:"-"`
	XXX_sizecache        int32     `json:"-"`
}

type xxx_Repeats struct{ m *Repeats }

func (m *Repeats) ProtoReflect() protoreflect.Message {
	return xxx_Repeats{m}
}
func (m xxx_Repeats) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[1].Type
}
func (m xxx_Repeats) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[1].KnownFieldsOf(m.m)
}
func (m xxx_Repeats) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[1].UnknownFieldsOf(m.m)
}
func (m xxx_Repeats) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *Repeats) Reset()         { *m = Repeats{} }
func (m *Repeats) String() string { return proto.CompactTextString(m) }
func (*Repeats) ProtoMessage()    {}
func (*Repeats) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{1}
}

func (m *Repeats) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Repeats.Unmarshal(m, b)
}
func (m *Repeats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Repeats.Marshal(b, m, deterministic)
}
func (m *Repeats) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Repeats.Merge(m, src)
}
func (m *Repeats) XXX_Size() int {
	return xxx_messageInfo_Repeats.Size(m)
}
func (m *Repeats) XXX_DiscardUnknown() {
	xxx_messageInfo_Repeats.DiscardUnknown(m)
}

var xxx_messageInfo_Repeats proto.InternalMessageInfo

func (m *Repeats) GetRptBool() []bool {
	if m != nil {
		return m.RptBool
	}
	return nil
}

func (m *Repeats) GetRptInt32() []int32 {
	if m != nil {
		return m.RptInt32
	}
	return nil
}

func (m *Repeats) GetRptInt64() []int64 {
	if m != nil {
		return m.RptInt64
	}
	return nil
}

func (m *Repeats) GetRptUint32() []uint32 {
	if m != nil {
		return m.RptUint32
	}
	return nil
}

func (m *Repeats) GetRptUint64() []uint64 {
	if m != nil {
		return m.RptUint64
	}
	return nil
}

func (m *Repeats) GetRptFloat() []float32 {
	if m != nil {
		return m.RptFloat
	}
	return nil
}

func (m *Repeats) GetRptDouble() []float64 {
	if m != nil {
		return m.RptDouble
	}
	return nil
}

func (m *Repeats) GetRptString() []string {
	if m != nil {
		return m.RptString
	}
	return nil
}

func (m *Repeats) GetRptBytes() [][]byte {
	if m != nil {
		return m.RptBytes
	}
	return nil
}

// Message contains enum fields.
type Enums struct {
	OptEnum              *Enum              `protobuf:"varint,1,opt,name=opt_enum,json=optEnum,enum=pb2.Enum" json:"opt_enum,omitempty"`
	RptEnum              []Enum             `protobuf:"varint,2,rep,name=rpt_enum,json=rptEnum,enum=pb2.Enum" json:"rpt_enum,omitempty"`
	OptNestedEnum        *Enums_NestedEnum  `protobuf:"varint,3,opt,name=opt_nested_enum,json=optNestedEnum,enum=pb2.Enums_NestedEnum" json:"opt_nested_enum,omitempty"`
	RptNestedEnum        []Enums_NestedEnum `protobuf:"varint,4,rep,name=rpt_nested_enum,json=rptNestedEnum,enum=pb2.Enums_NestedEnum" json:"rpt_nested_enum,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

type xxx_Enums struct{ m *Enums }

func (m *Enums) ProtoReflect() protoreflect.Message {
	return xxx_Enums{m}
}
func (m xxx_Enums) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[2].Type
}
func (m xxx_Enums) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[2].KnownFieldsOf(m.m)
}
func (m xxx_Enums) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[2].UnknownFieldsOf(m.m)
}
func (m xxx_Enums) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *Enums) Reset()         { *m = Enums{} }
func (m *Enums) String() string { return proto.CompactTextString(m) }
func (*Enums) ProtoMessage()    {}
func (*Enums) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{2}
}

func (m *Enums) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Enums.Unmarshal(m, b)
}
func (m *Enums) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Enums.Marshal(b, m, deterministic)
}
func (m *Enums) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Enums.Merge(m, src)
}
func (m *Enums) XXX_Size() int {
	return xxx_messageInfo_Enums.Size(m)
}
func (m *Enums) XXX_DiscardUnknown() {
	xxx_messageInfo_Enums.DiscardUnknown(m)
}

var xxx_messageInfo_Enums proto.InternalMessageInfo

func (m *Enums) GetOptEnum() Enum {
	if m != nil && m.OptEnum != nil {
		return *m.OptEnum
	}
	return Enum_UNKNOWN
}

func (m *Enums) GetRptEnum() []Enum {
	if m != nil {
		return m.RptEnum
	}
	return nil
}

func (m *Enums) GetOptNestedEnum() Enums_NestedEnum {
	if m != nil && m.OptNestedEnum != nil {
		return *m.OptNestedEnum
	}
	return Enums_UNO
}

func (m *Enums) GetRptNestedEnum() []Enums_NestedEnum {
	if m != nil {
		return m.RptNestedEnum
	}
	return nil
}

// Message contains message and group fields.
type Nests struct {
	OptNested            *Nested           `protobuf:"bytes,1,opt,name=opt_nested,json=optNested" json:"opt_nested,omitempty"`
	Optgroup             *Nests_OptGroup   `protobuf:"group,2,opt,name=OptGroup,json=optgroup" json:"optgroup,omitempty"`
	RptNested            []*Nested         `protobuf:"bytes,3,rep,name=rpt_nested,json=rptNested" json:"rpt_nested,omitempty"`
	Rptgroup             []*Nests_RptGroup `protobuf:"group,4,rep,name=RptGroup,json=rptgroup" json:"rptgroup,omitempty"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

type xxx_Nests struct{ m *Nests }

func (m *Nests) ProtoReflect() protoreflect.Message {
	return xxx_Nests{m}
}
func (m xxx_Nests) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[3].Type
}
func (m xxx_Nests) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[3].KnownFieldsOf(m.m)
}
func (m xxx_Nests) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[3].UnknownFieldsOf(m.m)
}
func (m xxx_Nests) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *Nests) Reset()         { *m = Nests{} }
func (m *Nests) String() string { return proto.CompactTextString(m) }
func (*Nests) ProtoMessage()    {}
func (*Nests) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{3}
}

func (m *Nests) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Nests.Unmarshal(m, b)
}
func (m *Nests) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Nests.Marshal(b, m, deterministic)
}
func (m *Nests) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Nests.Merge(m, src)
}
func (m *Nests) XXX_Size() int {
	return xxx_messageInfo_Nests.Size(m)
}
func (m *Nests) XXX_DiscardUnknown() {
	xxx_messageInfo_Nests.DiscardUnknown(m)
}

var xxx_messageInfo_Nests proto.InternalMessageInfo

func (m *Nests) GetOptNested() *Nested {
	if m != nil {
		return m.OptNested
	}
	return nil
}

func (m *Nests) GetOptgroup() *Nests_OptGroup {
	if m != nil {
		return m.Optgroup
	}
	return nil
}

func (m *Nests) GetRptNested() []*Nested {
	if m != nil {
		return m.RptNested
	}
	return nil
}

func (m *Nests) GetRptgroup() []*Nests_RptGroup {
	if m != nil {
		return m.Rptgroup
	}
	return nil
}

// Message type used as submessage.
type Nested struct {
	OptString            *string  `protobuf:"bytes,1,opt,name=opt_string,json=optString" json:"opt_string,omitempty"`
	OptNested            *Nested  `protobuf:"bytes,2,opt,name=opt_nested,json=optNested" json:"opt_nested,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

type xxx_Nested struct{ m *Nested }

func (m *Nested) ProtoReflect() protoreflect.Message {
	return xxx_Nested{m}
}
func (m xxx_Nested) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[4].Type
}
func (m xxx_Nested) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[4].KnownFieldsOf(m.m)
}
func (m xxx_Nested) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[4].UnknownFieldsOf(m.m)
}
func (m xxx_Nested) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *Nested) Reset()         { *m = Nested{} }
func (m *Nested) String() string { return proto.CompactTextString(m) }
func (*Nested) ProtoMessage()    {}
func (*Nested) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{4}
}

func (m *Nested) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Nested.Unmarshal(m, b)
}
func (m *Nested) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Nested.Marshal(b, m, deterministic)
}
func (m *Nested) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Nested.Merge(m, src)
}
func (m *Nested) XXX_Size() int {
	return xxx_messageInfo_Nested.Size(m)
}
func (m *Nested) XXX_DiscardUnknown() {
	xxx_messageInfo_Nested.DiscardUnknown(m)
}

var xxx_messageInfo_Nested proto.InternalMessageInfo

func (m *Nested) GetOptString() string {
	if m != nil && m.OptString != nil {
		return *m.OptString
	}
	return ""
}

func (m *Nested) GetOptNested() *Nested {
	if m != nil {
		return m.OptNested
	}
	return nil
}

// Message contains required fields.
type Requireds struct {
	ReqBool              *bool    `protobuf:"varint,1,req,name=req_bool,json=reqBool" json:"req_bool,omitempty"`
	ReqFixed32           *uint32  `protobuf:"fixed32,2,req,name=req_fixed32,json=reqFixed32" json:"req_fixed32,omitempty"`
	ReqFixed64           *uint64  `protobuf:"fixed64,3,req,name=req_fixed64,json=reqFixed64" json:"req_fixed64,omitempty"`
	ReqSfixed32          *int32   `protobuf:"fixed32,4,req,name=req_sfixed32,json=reqSfixed32" json:"req_sfixed32,omitempty"`
	ReqSfixed64          *int64   `protobuf:"fixed64,5,req,name=req_sfixed64,json=reqSfixed64" json:"req_sfixed64,omitempty"`
	ReqFloat             *float32 `protobuf:"fixed32,6,req,name=req_float,json=reqFloat" json:"req_float,omitempty"`
	ReqDouble            *float64 `protobuf:"fixed64,7,req,name=req_double,json=reqDouble" json:"req_double,omitempty"`
	ReqString            *string  `protobuf:"bytes,8,req,name=req_string,json=reqString" json:"req_string,omitempty"`
	ReqBytes             []byte   `protobuf:"bytes,9,req,name=req_bytes,json=reqBytes" json:"req_bytes,omitempty"`
	ReqEnum              *Enum    `protobuf:"varint,10,req,name=req_enum,json=reqEnum,enum=pb2.Enum" json:"req_enum,omitempty"`
	ReqNested            *Nested  `protobuf:"bytes,11,req,name=req_nested,json=reqNested" json:"req_nested,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

type xxx_Requireds struct{ m *Requireds }

func (m *Requireds) ProtoReflect() protoreflect.Message {
	return xxx_Requireds{m}
}
func (m xxx_Requireds) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[5].Type
}
func (m xxx_Requireds) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[5].KnownFieldsOf(m.m)
}
func (m xxx_Requireds) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[5].UnknownFieldsOf(m.m)
}
func (m xxx_Requireds) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *Requireds) Reset()         { *m = Requireds{} }
func (m *Requireds) String() string { return proto.CompactTextString(m) }
func (*Requireds) ProtoMessage()    {}
func (*Requireds) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{5}
}

func (m *Requireds) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Requireds.Unmarshal(m, b)
}
func (m *Requireds) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Requireds.Marshal(b, m, deterministic)
}
func (m *Requireds) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Requireds.Merge(m, src)
}
func (m *Requireds) XXX_Size() int {
	return xxx_messageInfo_Requireds.Size(m)
}
func (m *Requireds) XXX_DiscardUnknown() {
	xxx_messageInfo_Requireds.DiscardUnknown(m)
}

var xxx_messageInfo_Requireds proto.InternalMessageInfo

func (m *Requireds) GetReqBool() bool {
	if m != nil && m.ReqBool != nil {
		return *m.ReqBool
	}
	return false
}

func (m *Requireds) GetReqFixed32() uint32 {
	if m != nil && m.ReqFixed32 != nil {
		return *m.ReqFixed32
	}
	return 0
}

func (m *Requireds) GetReqFixed64() uint64 {
	if m != nil && m.ReqFixed64 != nil {
		return *m.ReqFixed64
	}
	return 0
}

func (m *Requireds) GetReqSfixed32() int32 {
	if m != nil && m.ReqSfixed32 != nil {
		return *m.ReqSfixed32
	}
	return 0
}

func (m *Requireds) GetReqSfixed64() int64 {
	if m != nil && m.ReqSfixed64 != nil {
		return *m.ReqSfixed64
	}
	return 0
}

func (m *Requireds) GetReqFloat() float32 {
	if m != nil && m.ReqFloat != nil {
		return *m.ReqFloat
	}
	return 0
}

func (m *Requireds) GetReqDouble() float64 {
	if m != nil && m.ReqDouble != nil {
		return *m.ReqDouble
	}
	return 0
}

func (m *Requireds) GetReqString() string {
	if m != nil && m.ReqString != nil {
		return *m.ReqString
	}
	return ""
}

func (m *Requireds) GetReqBytes() []byte {
	if m != nil {
		return m.ReqBytes
	}
	return nil
}

func (m *Requireds) GetReqEnum() Enum {
	if m != nil && m.ReqEnum != nil {
		return *m.ReqEnum
	}
	return Enum_UNKNOWN
}

func (m *Requireds) GetReqNested() *Nested {
	if m != nil {
		return m.ReqNested
	}
	return nil
}

// Message contains both required and optional fields.
type PartialRequired struct {
	ReqString            *string  `protobuf:"bytes,1,req,name=req_string,json=reqString" json:"req_string,omitempty"`
	OptString            *string  `protobuf:"bytes,2,opt,name=opt_string,json=optString" json:"opt_string,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

type xxx_PartialRequired struct{ m *PartialRequired }

func (m *PartialRequired) ProtoReflect() protoreflect.Message {
	return xxx_PartialRequired{m}
}
func (m xxx_PartialRequired) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[6].Type
}
func (m xxx_PartialRequired) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[6].KnownFieldsOf(m.m)
}
func (m xxx_PartialRequired) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[6].UnknownFieldsOf(m.m)
}
func (m xxx_PartialRequired) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *PartialRequired) Reset()         { *m = PartialRequired{} }
func (m *PartialRequired) String() string { return proto.CompactTextString(m) }
func (*PartialRequired) ProtoMessage()    {}
func (*PartialRequired) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{6}
}

func (m *PartialRequired) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_PartialRequired.Unmarshal(m, b)
}
func (m *PartialRequired) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_PartialRequired.Marshal(b, m, deterministic)
}
func (m *PartialRequired) XXX_Merge(src proto.Message) {
	xxx_messageInfo_PartialRequired.Merge(m, src)
}
func (m *PartialRequired) XXX_Size() int {
	return xxx_messageInfo_PartialRequired.Size(m)
}
func (m *PartialRequired) XXX_DiscardUnknown() {
	xxx_messageInfo_PartialRequired.DiscardUnknown(m)
}

var xxx_messageInfo_PartialRequired proto.InternalMessageInfo

func (m *PartialRequired) GetReqString() string {
	if m != nil && m.ReqString != nil {
		return *m.ReqString
	}
	return ""
}

func (m *PartialRequired) GetOptString() string {
	if m != nil && m.OptString != nil {
		return *m.OptString
	}
	return ""
}

// Message contains oneof field.
type Oneofs struct {
	// Types that are valid to be assigned to Union:
	//	*Oneofs_Str
	//	*Oneofs_Msg
	Union                isOneofs_Union `protobuf_oneof:"union"`
	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
	XXX_unrecognized     []byte         `json:"-"`
	XXX_sizecache        int32          `json:"-"`
}

type xxx_Oneofs struct{ m *Oneofs }

func (m *Oneofs) ProtoReflect() protoreflect.Message {
	return xxx_Oneofs{m}
}
func (m xxx_Oneofs) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[7].Type
}
func (m xxx_Oneofs) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[7].KnownFieldsOf(m.m)
}
func (m xxx_Oneofs) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[7].UnknownFieldsOf(m.m)
}
func (m xxx_Oneofs) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *Oneofs) Reset()         { *m = Oneofs{} }
func (m *Oneofs) String() string { return proto.CompactTextString(m) }
func (*Oneofs) ProtoMessage()    {}
func (*Oneofs) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{7}
}

func (m *Oneofs) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Oneofs.Unmarshal(m, b)
}
func (m *Oneofs) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Oneofs.Marshal(b, m, deterministic)
}
func (m *Oneofs) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Oneofs.Merge(m, src)
}
func (m *Oneofs) XXX_Size() int {
	return xxx_messageInfo_Oneofs.Size(m)
}
func (m *Oneofs) XXX_DiscardUnknown() {
	xxx_messageInfo_Oneofs.DiscardUnknown(m)
}

var xxx_messageInfo_Oneofs proto.InternalMessageInfo

type isOneofs_Union interface {
	isOneofs_Union()
}

type Oneofs_Str struct {
	Str string `protobuf:"bytes,1,opt,name=str,oneof"`
}

type Oneofs_Msg struct {
	Msg *Nested `protobuf:"bytes,2,opt,name=msg,oneof"`
}

func (*Oneofs_Str) isOneofs_Union() {}

func (*Oneofs_Msg) isOneofs_Union() {}

func (m *Oneofs) GetUnion() isOneofs_Union {
	if m != nil {
		return m.Union
	}
	return nil
}

func (m *Oneofs) GetStr() string {
	if x, ok := m.GetUnion().(*Oneofs_Str); ok {
		return x.Str
	}
	return ""
}

func (m *Oneofs) GetMsg() *Nested {
	if x, ok := m.GetUnion().(*Oneofs_Msg); ok {
		return x.Msg
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*Oneofs) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*Oneofs_Str)(nil),
		(*Oneofs_Msg)(nil),
	}
}

// Message contains map fields.
type Maps struct {
	Int32ToStr           map[int32]string   `protobuf:"bytes,1,rep,name=int32_to_str,json=int32ToStr" json:"int32_to_str,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	Sfixed64ToBool       map[int64]bool     `protobuf:"bytes,2,rep,name=sfixed64_to_bool,json=sfixed64ToBool" json:"sfixed64_to_bool,omitempty" protobuf_key:"fixed64,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	BoolToUint32         map[bool]uint32    `protobuf:"bytes,3,rep,name=bool_to_uint32,json=boolToUint32" json:"bool_to_uint32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	Uint64ToEnum         map[uint64]Enum    `protobuf:"bytes,4,rep,name=uint64_to_enum,json=uint64ToEnum" json:"uint64_to_enum,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=pb2.Enum"`
	StrToNested          map[string]*Nested `protobuf:"bytes,5,rep,name=str_to_nested,json=strToNested" json:"str_to_nested,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	StrToOneofs          map[string]*Oneofs `protobuf:"bytes,6,rep,name=str_to_oneofs,json=strToOneofs" json:"str_to_oneofs,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

type xxx_Maps struct{ m *Maps }

func (m *Maps) ProtoReflect() protoreflect.Message {
	return xxx_Maps{m}
}
func (m xxx_Maps) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[8].Type
}
func (m xxx_Maps) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[8].KnownFieldsOf(m.m)
}
func (m xxx_Maps) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[8].UnknownFieldsOf(m.m)
}
func (m xxx_Maps) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *Maps) Reset()         { *m = Maps{} }
func (m *Maps) String() string { return proto.CompactTextString(m) }
func (*Maps) ProtoMessage()    {}
func (*Maps) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{8}
}

func (m *Maps) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Maps.Unmarshal(m, b)
}
func (m *Maps) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Maps.Marshal(b, m, deterministic)
}
func (m *Maps) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Maps.Merge(m, src)
}
func (m *Maps) XXX_Size() int {
	return xxx_messageInfo_Maps.Size(m)
}
func (m *Maps) XXX_DiscardUnknown() {
	xxx_messageInfo_Maps.DiscardUnknown(m)
}

var xxx_messageInfo_Maps proto.InternalMessageInfo

func (m *Maps) GetInt32ToStr() map[int32]string {
	if m != nil {
		return m.Int32ToStr
	}
	return nil
}

func (m *Maps) GetSfixed64ToBool() map[int64]bool {
	if m != nil {
		return m.Sfixed64ToBool
	}
	return nil
}

func (m *Maps) GetBoolToUint32() map[bool]uint32 {
	if m != nil {
		return m.BoolToUint32
	}
	return nil
}

func (m *Maps) GetUint64ToEnum() map[uint64]Enum {
	if m != nil {
		return m.Uint64ToEnum
	}
	return nil
}

func (m *Maps) GetStrToNested() map[string]*Nested {
	if m != nil {
		return m.StrToNested
	}
	return nil
}

func (m *Maps) GetStrToOneofs() map[string]*Oneofs {
	if m != nil {
		return m.StrToOneofs
	}
	return nil
}

type NestedWithRequired struct {
	ReqString            *string  `protobuf:"bytes,1,req,name=req_string,json=reqString" json:"req_string,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

type xxx_NestedWithRequired struct{ m *NestedWithRequired }

func (m *NestedWithRequired) ProtoReflect() protoreflect.Message {
	return xxx_NestedWithRequired{m}
}
func (m xxx_NestedWithRequired) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[9].Type
}
func (m xxx_NestedWithRequired) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[9].KnownFieldsOf(m.m)
}
func (m xxx_NestedWithRequired) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[9].UnknownFieldsOf(m.m)
}
func (m xxx_NestedWithRequired) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *NestedWithRequired) Reset()         { *m = NestedWithRequired{} }
func (m *NestedWithRequired) String() string { return proto.CompactTextString(m) }
func (*NestedWithRequired) ProtoMessage()    {}
func (*NestedWithRequired) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{9}
}

func (m *NestedWithRequired) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_NestedWithRequired.Unmarshal(m, b)
}
func (m *NestedWithRequired) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_NestedWithRequired.Marshal(b, m, deterministic)
}
func (m *NestedWithRequired) XXX_Merge(src proto.Message) {
	xxx_messageInfo_NestedWithRequired.Merge(m, src)
}
func (m *NestedWithRequired) XXX_Size() int {
	return xxx_messageInfo_NestedWithRequired.Size(m)
}
func (m *NestedWithRequired) XXX_DiscardUnknown() {
	xxx_messageInfo_NestedWithRequired.DiscardUnknown(m)
}

var xxx_messageInfo_NestedWithRequired proto.InternalMessageInfo

func (m *NestedWithRequired) GetReqString() string {
	if m != nil && m.ReqString != nil {
		return *m.ReqString
	}
	return ""
}

type IndirectRequired struct {
	OptNested            *NestedWithRequired            `protobuf:"bytes,1,opt,name=opt_nested,json=optNested" json:"opt_nested,omitempty"`
	RptNested            []*NestedWithRequired          `protobuf:"bytes,2,rep,name=rpt_nested,json=rptNested" json:"rpt_nested,omitempty"`
	StrToNested          map[string]*NestedWithRequired `protobuf:"bytes,3,rep,name=str_to_nested,json=strToNested" json:"str_to_nested,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
	XXX_unrecognized     []byte                         `json:"-"`
	XXX_sizecache        int32                          `json:"-"`
}

type xxx_IndirectRequired struct{ m *IndirectRequired }

func (m *IndirectRequired) ProtoReflect() protoreflect.Message {
	return xxx_IndirectRequired{m}
}
func (m xxx_IndirectRequired) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[10].Type
}
func (m xxx_IndirectRequired) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[10].KnownFieldsOf(m.m)
}
func (m xxx_IndirectRequired) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[10].UnknownFieldsOf(m.m)
}
func (m xxx_IndirectRequired) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *IndirectRequired) Reset()         { *m = IndirectRequired{} }
func (m *IndirectRequired) String() string { return proto.CompactTextString(m) }
func (*IndirectRequired) ProtoMessage()    {}
func (*IndirectRequired) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{10}
}

func (m *IndirectRequired) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_IndirectRequired.Unmarshal(m, b)
}
func (m *IndirectRequired) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_IndirectRequired.Marshal(b, m, deterministic)
}
func (m *IndirectRequired) XXX_Merge(src proto.Message) {
	xxx_messageInfo_IndirectRequired.Merge(m, src)
}
func (m *IndirectRequired) XXX_Size() int {
	return xxx_messageInfo_IndirectRequired.Size(m)
}
func (m *IndirectRequired) XXX_DiscardUnknown() {
	xxx_messageInfo_IndirectRequired.DiscardUnknown(m)
}

var xxx_messageInfo_IndirectRequired proto.InternalMessageInfo

func (m *IndirectRequired) GetOptNested() *NestedWithRequired {
	if m != nil {
		return m.OptNested
	}
	return nil
}

func (m *IndirectRequired) GetRptNested() []*NestedWithRequired {
	if m != nil {
		return m.RptNested
	}
	return nil
}

func (m *IndirectRequired) GetStrToNested() map[string]*NestedWithRequired {
	if m != nil {
		return m.StrToNested
	}
	return nil
}

type Extensions struct {
	OptString                    *string  `protobuf:"bytes,1,opt,name=opt_string,json=optString" json:"opt_string,omitempty"`
	OptBool                      *bool    `protobuf:"varint,101,opt,name=opt_bool,json=optBool" json:"opt_bool,omitempty"`
	OptInt32                     *int32   `protobuf:"varint,2,opt,name=opt_int32,json=optInt32" json:"opt_int32,omitempty"`
	XXX_NoUnkeyedLiteral         struct{} `json:"-"`
	proto.XXX_InternalExtensions `json:"-"`
	XXX_unrecognized             []byte `json:"-"`
	XXX_sizecache                int32  `json:"-"`
}

type xxx_Extensions struct{ m *Extensions }

func (m *Extensions) ProtoReflect() protoreflect.Message {
	return xxx_Extensions{m}
}
func (m xxx_Extensions) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[11].Type
}
func (m xxx_Extensions) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[11].KnownFieldsOf(m.m)
}
func (m xxx_Extensions) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[11].UnknownFieldsOf(m.m)
}
func (m xxx_Extensions) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *Extensions) Reset()         { *m = Extensions{} }
func (m *Extensions) String() string { return proto.CompactTextString(m) }
func (*Extensions) ProtoMessage()    {}
func (*Extensions) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{11}
}

var extRange_Extensions = []proto.ExtensionRange{
	{Start: 20, End: 100},
}

func (*Extensions) ExtensionRangeArray() []proto.ExtensionRange {
	return extRange_Extensions
}

func (m *Extensions) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Extensions.Unmarshal(m, b)
}
func (m *Extensions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Extensions.Marshal(b, m, deterministic)
}
func (m *Extensions) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Extensions.Merge(m, src)
}
func (m *Extensions) XXX_Size() int {
	return xxx_messageInfo_Extensions.Size(m)
}
func (m *Extensions) XXX_DiscardUnknown() {
	xxx_messageInfo_Extensions.DiscardUnknown(m)
}

var xxx_messageInfo_Extensions proto.InternalMessageInfo

func (m *Extensions) GetOptString() string {
	if m != nil && m.OptString != nil {
		return *m.OptString
	}
	return ""
}

func (m *Extensions) GetOptBool() bool {
	if m != nil && m.OptBool != nil {
		return *m.OptBool
	}
	return false
}

func (m *Extensions) GetOptInt32() int32 {
	if m != nil && m.OptInt32 != nil {
		return *m.OptInt32
	}
	return 0
}

type ExtensionsContainer struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

type xxx_ExtensionsContainer struct{ m *ExtensionsContainer }

func (m *ExtensionsContainer) ProtoReflect() protoreflect.Message {
	return xxx_ExtensionsContainer{m}
}
func (m xxx_ExtensionsContainer) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[12].Type
}
func (m xxx_ExtensionsContainer) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[12].KnownFieldsOf(m.m)
}
func (m xxx_ExtensionsContainer) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[12].UnknownFieldsOf(m.m)
}
func (m xxx_ExtensionsContainer) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *ExtensionsContainer) Reset()         { *m = ExtensionsContainer{} }
func (m *ExtensionsContainer) String() string { return proto.CompactTextString(m) }
func (*ExtensionsContainer) ProtoMessage()    {}
func (*ExtensionsContainer) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{12}
}

func (m *ExtensionsContainer) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ExtensionsContainer.Unmarshal(m, b)
}
func (m *ExtensionsContainer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ExtensionsContainer.Marshal(b, m, deterministic)
}
func (m *ExtensionsContainer) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ExtensionsContainer.Merge(m, src)
}
func (m *ExtensionsContainer) XXX_Size() int {
	return xxx_messageInfo_ExtensionsContainer.Size(m)
}
func (m *ExtensionsContainer) XXX_DiscardUnknown() {
	xxx_messageInfo_ExtensionsContainer.DiscardUnknown(m)
}

var xxx_messageInfo_ExtensionsContainer proto.InternalMessageInfo

type MessageSet struct {
	XXX_NoUnkeyedLiteral         struct{} `json:"-"`
	proto.XXX_InternalExtensions `protobuf_messageset:"1" json:"-"`
	XXX_unrecognized             []byte `json:"-"`
	XXX_sizecache                int32  `json:"-"`
}

type xxx_MessageSet struct{ m *MessageSet }

func (m *MessageSet) ProtoReflect() protoreflect.Message {
	return xxx_MessageSet{m}
}
func (m xxx_MessageSet) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[13].Type
}
func (m xxx_MessageSet) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[13].KnownFieldsOf(m.m)
}
func (m xxx_MessageSet) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[13].UnknownFieldsOf(m.m)
}
func (m xxx_MessageSet) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *MessageSet) Reset()         { *m = MessageSet{} }
func (m *MessageSet) String() string { return proto.CompactTextString(m) }
func (*MessageSet) ProtoMessage()    {}
func (*MessageSet) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{13}
}

var extRange_MessageSet = []proto.ExtensionRange{
	{Start: 4, End: 2147483646},
}

func (*MessageSet) ExtensionRangeArray() []proto.ExtensionRange {
	return extRange_MessageSet
}

func (m *MessageSet) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_MessageSet.Unmarshal(m, b)
}
func (m *MessageSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_MessageSet.Marshal(b, m, deterministic)
}
func (m *MessageSet) XXX_Merge(src proto.Message) {
	xxx_messageInfo_MessageSet.Merge(m, src)
}
func (m *MessageSet) XXX_Size() int {
	return xxx_messageInfo_MessageSet.Size(m)
}
func (m *MessageSet) XXX_DiscardUnknown() {
	xxx_messageInfo_MessageSet.DiscardUnknown(m)
}

var xxx_messageInfo_MessageSet proto.InternalMessageInfo

type MessageSetExtension struct {
	OptString            *string  `protobuf:"bytes,1,opt,name=opt_string,json=optString" json:"opt_string,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

type xxx_MessageSetExtension struct{ m *MessageSetExtension }

func (m *MessageSetExtension) ProtoReflect() protoreflect.Message {
	return xxx_MessageSetExtension{m}
}
func (m xxx_MessageSetExtension) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[14].Type
}
func (m xxx_MessageSetExtension) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[14].KnownFieldsOf(m.m)
}
func (m xxx_MessageSetExtension) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[14].UnknownFieldsOf(m.m)
}
func (m xxx_MessageSetExtension) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *MessageSetExtension) Reset()         { *m = MessageSetExtension{} }
func (m *MessageSetExtension) String() string { return proto.CompactTextString(m) }
func (*MessageSetExtension) ProtoMessage()    {}
func (*MessageSetExtension) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{14}
}

func (m *MessageSetExtension) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_MessageSetExtension.Unmarshal(m, b)
}
func (m *MessageSetExtension) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_MessageSetExtension.Marshal(b, m, deterministic)
}
func (m *MessageSetExtension) XXX_Merge(src proto.Message) {
	xxx_messageInfo_MessageSetExtension.Merge(m, src)
}
func (m *MessageSetExtension) XXX_Size() int {
	return xxx_messageInfo_MessageSetExtension.Size(m)
}
func (m *MessageSetExtension) XXX_DiscardUnknown() {
	xxx_messageInfo_MessageSetExtension.DiscardUnknown(m)
}

var xxx_messageInfo_MessageSetExtension proto.InternalMessageInfo

func (m *MessageSetExtension) GetOptString() string {
	if m != nil && m.OptString != nil {
		return *m.OptString
	}
	return ""
}

// Message contains well-known type fields.
type KnownTypes struct {
	OptBool              *wrappers.BoolValue   `protobuf:"bytes,1,opt,name=opt_bool,json=optBool" json:"opt_bool,omitempty"`
	OptInt32             *wrappers.Int32Value  `protobuf:"bytes,2,opt,name=opt_int32,json=optInt32" json:"opt_int32,omitempty"`
	OptInt64             *wrappers.Int64Value  `protobuf:"bytes,3,opt,name=opt_int64,json=optInt64" json:"opt_int64,omitempty"`
	OptUint32            *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=opt_uint32,json=optUint32" json:"opt_uint32,omitempty"`
	OptUint64            *wrappers.UInt64Value `protobuf:"bytes,5,opt,name=opt_uint64,json=optUint64" json:"opt_uint64,omitempty"`
	OptFloat             *wrappers.FloatValue  `protobuf:"bytes,6,opt,name=opt_float,json=optFloat" json:"opt_float,omitempty"`
	OptDouble            *wrappers.DoubleValue `protobuf:"bytes,7,opt,name=opt_double,json=optDouble" json:"opt_double,omitempty"`
	OptString            *wrappers.StringValue `protobuf:"bytes,8,opt,name=opt_string,json=optString" json:"opt_string,omitempty"`
	OptBytes             *wrappers.BytesValue  `protobuf:"bytes,9,opt,name=opt_bytes,json=optBytes" json:"opt_bytes,omitempty"`
	OptDuration          *duration.Duration    `protobuf:"bytes,20,opt,name=opt_duration,json=optDuration" json:"opt_duration,omitempty"`
	OptTimestamp         *timestamp.Timestamp  `protobuf:"bytes,21,opt,name=opt_timestamp,json=optTimestamp" json:"opt_timestamp,omitempty"`
	OptStruct            *_struct.Struct       `protobuf:"bytes,25,opt,name=opt_struct,json=optStruct" json:"opt_struct,omitempty"`
	OptList              *_struct.ListValue    `protobuf:"bytes,26,opt,name=opt_list,json=optList" json:"opt_list,omitempty"`
	OptValue             *_struct.Value        `protobuf:"bytes,27,opt,name=opt_value,json=optValue" json:"opt_value,omitempty"`
	OptEmpty             *empty.Empty          `protobuf:"bytes,30,opt,name=opt_empty,json=optEmpty" json:"opt_empty,omitempty"`
	OptAny               *any.Any              `protobuf:"bytes,32,opt,name=opt_any,json=optAny" json:"opt_any,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

type xxx_KnownTypes struct{ m *KnownTypes }

func (m *KnownTypes) ProtoReflect() protoreflect.Message {
	return xxx_KnownTypes{m}
}
func (m xxx_KnownTypes) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[15].Type
}
func (m xxx_KnownTypes) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[15].KnownFieldsOf(m.m)
}
func (m xxx_KnownTypes) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[15].UnknownFieldsOf(m.m)
}
func (m xxx_KnownTypes) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *KnownTypes) Reset()         { *m = KnownTypes{} }
func (m *KnownTypes) String() string { return proto.CompactTextString(m) }
func (*KnownTypes) ProtoMessage()    {}
func (*KnownTypes) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{15}
}

func (m *KnownTypes) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_KnownTypes.Unmarshal(m, b)
}
func (m *KnownTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_KnownTypes.Marshal(b, m, deterministic)
}
func (m *KnownTypes) XXX_Merge(src proto.Message) {
	xxx_messageInfo_KnownTypes.Merge(m, src)
}
func (m *KnownTypes) XXX_Size() int {
	return xxx_messageInfo_KnownTypes.Size(m)
}
func (m *KnownTypes) XXX_DiscardUnknown() {
	xxx_messageInfo_KnownTypes.DiscardUnknown(m)
}

var xxx_messageInfo_KnownTypes proto.InternalMessageInfo

func (m *KnownTypes) GetOptBool() *wrappers.BoolValue {
	if m != nil {
		return m.OptBool
	}
	return nil
}

func (m *KnownTypes) GetOptInt32() *wrappers.Int32Value {
	if m != nil {
		return m.OptInt32
	}
	return nil
}

func (m *KnownTypes) GetOptInt64() *wrappers.Int64Value {
	if m != nil {
		return m.OptInt64
	}
	return nil
}

func (m *KnownTypes) GetOptUint32() *wrappers.UInt32Value {
	if m != nil {
		return m.OptUint32
	}
	return nil
}

func (m *KnownTypes) GetOptUint64() *wrappers.UInt64Value {
	if m != nil {
		return m.OptUint64
	}
	return nil
}

func (m *KnownTypes) GetOptFloat() *wrappers.FloatValue {
	if m != nil {
		return m.OptFloat
	}
	return nil
}

func (m *KnownTypes) GetOptDouble() *wrappers.DoubleValue {
	if m != nil {
		return m.OptDouble
	}
	return nil
}

func (m *KnownTypes) GetOptString() *wrappers.StringValue {
	if m != nil {
		return m.OptString
	}
	return nil
}

func (m *KnownTypes) GetOptBytes() *wrappers.BytesValue {
	if m != nil {
		return m.OptBytes
	}
	return nil
}

func (m *KnownTypes) GetOptDuration() *duration.Duration {
	if m != nil {
		return m.OptDuration
	}
	return nil
}

func (m *KnownTypes) GetOptTimestamp() *timestamp.Timestamp {
	if m != nil {
		return m.OptTimestamp
	}
	return nil
}

func (m *KnownTypes) GetOptStruct() *_struct.Struct {
	if m != nil {
		return m.OptStruct
	}
	return nil
}

func (m *KnownTypes) GetOptList() *_struct.ListValue {
	if m != nil {
		return m.OptList
	}
	return nil
}

func (m *KnownTypes) GetOptValue() *_struct.Value {
	if m != nil {
		return m.OptValue
	}
	return nil
}

func (m *KnownTypes) GetOptEmpty() *empty.Empty {
	if m != nil {
		return m.OptEmpty
	}
	return nil
}

func (m *KnownTypes) GetOptAny() *any.Any {
	if m != nil {
		return m.OptAny
	}
	return nil
}

type Nests_OptGroup struct {
	OptBool              *bool                          `protobuf:"varint,1,opt,name=opt_bool,json=optBool" json:"opt_bool,omitempty"`
	OptString            *string                        `protobuf:"bytes,2,opt,name=opt_string,json=optString" json:"opt_string,omitempty"`
	OptNested            *Nested                        `protobuf:"bytes,3,opt,name=opt_nested,json=optNested" json:"opt_nested,omitempty"`
	Optnestedgroup       *Nests_OptGroup_OptNestedGroup `protobuf:"group,4,opt,name=OptNestedGroup,json=optnestedgroup" json:"optnestedgroup,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
	XXX_unrecognized     []byte                         `json:"-"`
	XXX_sizecache        int32                          `json:"-"`
}

type xxx_Nests_OptGroup struct{ m *Nests_OptGroup }

func (m *Nests_OptGroup) ProtoReflect() protoreflect.Message {
	return xxx_Nests_OptGroup{m}
}
func (m xxx_Nests_OptGroup) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[16].Type
}
func (m xxx_Nests_OptGroup) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[16].KnownFieldsOf(m.m)
}
func (m xxx_Nests_OptGroup) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[16].UnknownFieldsOf(m.m)
}
func (m xxx_Nests_OptGroup) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *Nests_OptGroup) Reset()         { *m = Nests_OptGroup{} }
func (m *Nests_OptGroup) String() string { return proto.CompactTextString(m) }
func (*Nests_OptGroup) ProtoMessage()    {}
func (*Nests_OptGroup) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{3, 0}
}

func (m *Nests_OptGroup) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Nests_OptGroup.Unmarshal(m, b)
}
func (m *Nests_OptGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Nests_OptGroup.Marshal(b, m, deterministic)
}
func (m *Nests_OptGroup) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Nests_OptGroup.Merge(m, src)
}
func (m *Nests_OptGroup) XXX_Size() int {
	return xxx_messageInfo_Nests_OptGroup.Size(m)
}
func (m *Nests_OptGroup) XXX_DiscardUnknown() {
	xxx_messageInfo_Nests_OptGroup.DiscardUnknown(m)
}

var xxx_messageInfo_Nests_OptGroup proto.InternalMessageInfo

func (m *Nests_OptGroup) GetOptBool() bool {
	if m != nil && m.OptBool != nil {
		return *m.OptBool
	}
	return false
}

func (m *Nests_OptGroup) GetOptString() string {
	if m != nil && m.OptString != nil {
		return *m.OptString
	}
	return ""
}

func (m *Nests_OptGroup) GetOptNested() *Nested {
	if m != nil {
		return m.OptNested
	}
	return nil
}

func (m *Nests_OptGroup) GetOptnestedgroup() *Nests_OptGroup_OptNestedGroup {
	if m != nil {
		return m.Optnestedgroup
	}
	return nil
}

type Nests_RptGroup struct {
	RptBool              []bool   `protobuf:"varint,1,rep,name=rpt_bool,json=rptBool" json:"rpt_bool,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

type xxx_Nests_RptGroup struct{ m *Nests_RptGroup }

func (m *Nests_RptGroup) ProtoReflect() protoreflect.Message {
	return xxx_Nests_RptGroup{m}
}
func (m xxx_Nests_RptGroup) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[17].Type
}
func (m xxx_Nests_RptGroup) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[17].KnownFieldsOf(m.m)
}
func (m xxx_Nests_RptGroup) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[17].UnknownFieldsOf(m.m)
}
func (m xxx_Nests_RptGroup) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *Nests_RptGroup) Reset()         { *m = Nests_RptGroup{} }
func (m *Nests_RptGroup) String() string { return proto.CompactTextString(m) }
func (*Nests_RptGroup) ProtoMessage()    {}
func (*Nests_RptGroup) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{3, 1}
}

func (m *Nests_RptGroup) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Nests_RptGroup.Unmarshal(m, b)
}
func (m *Nests_RptGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Nests_RptGroup.Marshal(b, m, deterministic)
}
func (m *Nests_RptGroup) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Nests_RptGroup.Merge(m, src)
}
func (m *Nests_RptGroup) XXX_Size() int {
	return xxx_messageInfo_Nests_RptGroup.Size(m)
}
func (m *Nests_RptGroup) XXX_DiscardUnknown() {
	xxx_messageInfo_Nests_RptGroup.DiscardUnknown(m)
}

var xxx_messageInfo_Nests_RptGroup proto.InternalMessageInfo

func (m *Nests_RptGroup) GetRptBool() []bool {
	if m != nil {
		return m.RptBool
	}
	return nil
}

type Nests_OptGroup_OptNestedGroup struct {
	OptEnum              *Enum    `protobuf:"varint,1,opt,name=opt_enum,json=optEnum,enum=pb2.Enum" json:"opt_enum,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

type xxx_Nests_OptGroup_OptNestedGroup struct {
	m *Nests_OptGroup_OptNestedGroup
}

func (m *Nests_OptGroup_OptNestedGroup) ProtoReflect() protoreflect.Message {
	return xxx_Nests_OptGroup_OptNestedGroup{m}
}
func (m xxx_Nests_OptGroup_OptNestedGroup) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[18].Type
}
func (m xxx_Nests_OptGroup_OptNestedGroup) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[18].KnownFieldsOf(m.m)
}
func (m xxx_Nests_OptGroup_OptNestedGroup) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[18].UnknownFieldsOf(m.m)
}
func (m xxx_Nests_OptGroup_OptNestedGroup) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *Nests_OptGroup_OptNestedGroup) Reset()         { *m = Nests_OptGroup_OptNestedGroup{} }
func (m *Nests_OptGroup_OptNestedGroup) String() string { return proto.CompactTextString(m) }
func (*Nests_OptGroup_OptNestedGroup) ProtoMessage()    {}
func (*Nests_OptGroup_OptNestedGroup) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{3, 0, 0}
}

func (m *Nests_OptGroup_OptNestedGroup) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Nests_OptGroup_OptNestedGroup.Unmarshal(m, b)
}
func (m *Nests_OptGroup_OptNestedGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Nests_OptGroup_OptNestedGroup.Marshal(b, m, deterministic)
}
func (m *Nests_OptGroup_OptNestedGroup) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Nests_OptGroup_OptNestedGroup.Merge(m, src)
}
func (m *Nests_OptGroup_OptNestedGroup) XXX_Size() int {
	return xxx_messageInfo_Nests_OptGroup_OptNestedGroup.Size(m)
}
func (m *Nests_OptGroup_OptNestedGroup) XXX_DiscardUnknown() {
	xxx_messageInfo_Nests_OptGroup_OptNestedGroup.DiscardUnknown(m)
}

var xxx_messageInfo_Nests_OptGroup_OptNestedGroup proto.InternalMessageInfo

func (m *Nests_OptGroup_OptNestedGroup) GetOptEnum() Enum {
	if m != nil && m.OptEnum != nil {
		return *m.OptEnum
	}
	return Enum_UNKNOWN
}

var E_OptExtBool = &proto.ExtensionDesc{
	ExtendedType:  (*Extensions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         21,
	Name:          "pb2.opt_ext_bool",
	Tag:           "varint,21,opt,name=opt_ext_bool",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

var E_OptExtString = &proto.ExtensionDesc{
	ExtendedType:  (*Extensions)(nil),
	ExtensionType: (*string)(nil),
	Field:         22,
	Name:          "pb2.opt_ext_string",
	Tag:           "bytes,22,opt,name=opt_ext_string",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

var E_OptExtEnum = &proto.ExtensionDesc{
	ExtendedType:  (*Extensions)(nil),
	ExtensionType: (*Enum)(nil),
	Field:         23,
	Name:          "pb2.opt_ext_enum",
	Tag:           "varint,23,opt,name=opt_ext_enum,enum=pb2.Enum",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

var E_OptExtNested = &proto.ExtensionDesc{
	ExtendedType:  (*Extensions)(nil),
	ExtensionType: (*Nested)(nil),
	Field:         24,
	Name:          "pb2.opt_ext_nested",
	Tag:           "bytes,24,opt,name=opt_ext_nested",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

var E_RptExtFixed32 = &proto.ExtensionDesc{
	ExtendedType:  (*Extensions)(nil),
	ExtensionType: ([]uint32)(nil),
	Field:         31,
	Name:          "pb2.rpt_ext_fixed32",
	Tag:           "fixed32,31,rep,name=rpt_ext_fixed32",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

var E_RptExtEnum = &proto.ExtensionDesc{
	ExtendedType:  (*Extensions)(nil),
	ExtensionType: ([]Enum)(nil),
	Field:         32,
	Name:          "pb2.rpt_ext_enum",
	Tag:           "varint,32,rep,name=rpt_ext_enum,enum=pb2.Enum",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

var E_RptExtNested = &proto.ExtensionDesc{
	ExtendedType:  (*Extensions)(nil),
	ExtensionType: ([]*Nested)(nil),
	Field:         33,
	Name:          "pb2.rpt_ext_nested",
	Tag:           "bytes,33,rep,name=rpt_ext_nested",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

var E_ExtensionsContainer_OptExtBool = &proto.ExtensionDesc{
	ExtendedType:  (*Extensions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         51,
	Name:          "pb2.ExtensionsContainer.opt_ext_bool",
	Tag:           "varint,51,opt,name=opt_ext_bool",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

var E_ExtensionsContainer_OptExtString = &proto.ExtensionDesc{
	ExtendedType:  (*Extensions)(nil),
	ExtensionType: (*string)(nil),
	Field:         52,
	Name:          "pb2.ExtensionsContainer.opt_ext_string",
	Tag:           "bytes,52,opt,name=opt_ext_string",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

var E_ExtensionsContainer_OptExtEnum = &proto.ExtensionDesc{
	ExtendedType:  (*Extensions)(nil),
	ExtensionType: (*Enum)(nil),
	Field:         53,
	Name:          "pb2.ExtensionsContainer.opt_ext_enum",
	Tag:           "varint,53,opt,name=opt_ext_enum,enum=pb2.Enum",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

var E_ExtensionsContainer_OptExtNested = &proto.ExtensionDesc{
	ExtendedType:  (*Extensions)(nil),
	ExtensionType: (*Nested)(nil),
	Field:         54,
	Name:          "pb2.ExtensionsContainer.opt_ext_nested",
	Tag:           "bytes,54,opt,name=opt_ext_nested",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

var E_ExtensionsContainer_RptExtString = &proto.ExtensionDesc{
	ExtendedType:  (*Extensions)(nil),
	ExtensionType: ([]string)(nil),
	Field:         61,
	Name:          "pb2.ExtensionsContainer.rpt_ext_string",
	Tag:           "bytes,61,rep,name=rpt_ext_string",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

var E_ExtensionsContainer_RptExtEnum = &proto.ExtensionDesc{
	ExtendedType:  (*Extensions)(nil),
	ExtensionType: ([]Enum)(nil),
	Field:         62,
	Name:          "pb2.ExtensionsContainer.rpt_ext_enum",
	Tag:           "varint,62,rep,name=rpt_ext_enum,enum=pb2.Enum",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

var E_ExtensionsContainer_RptExtNested = &proto.ExtensionDesc{
	ExtendedType:  (*Extensions)(nil),
	ExtensionType: ([]*Nested)(nil),
	Field:         63,
	Name:          "pb2.ExtensionsContainer.rpt_ext_nested",
	Tag:           "bytes,63,rep,name=rpt_ext_nested",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

var E_MessageSetExtension_MessageSetExtension = &proto.ExtensionDesc{
	ExtendedType:  (*MessageSet)(nil),
	ExtensionType: (*MessageSetExtension)(nil),
	Field:         10,
	Name:          "pb2.MessageSetExtension",
	Tag:           "bytes,10,opt,name=message_set_extension",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

var E_MessageSetExtension_NotMessageSetExtension = &proto.ExtensionDesc{
	ExtendedType:  (*MessageSet)(nil),
	ExtensionType: (*MessageSetExtension)(nil),
	Field:         20,
	Name:          "pb2.MessageSetExtension.not_message_set_extension",
	Tag:           "bytes,20,opt,name=not_message_set_extension",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

var E_MessageSetExtension_ExtNested = &proto.ExtensionDesc{
	ExtendedType:  (*MessageSet)(nil),
	ExtensionType: (*Nested)(nil),
	Field:         30,
	Name:          "pb2.MessageSetExtension.ext_nested",
	Tag:           "bytes,30,opt,name=ext_nested",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

func init() {
	proto.RegisterFile("encoding/textpb/testprotos/pb2/test.proto", fileDescriptor_c8d7acc1bcec9a72)
	proto.RegisterEnum("pb2.Enum", Enum_name, Enum_value)
	proto.RegisterEnum("pb2.Enums_NestedEnum", Enums_NestedEnum_name, Enums_NestedEnum_value)
	proto.RegisterType((*Scalars)(nil), "pb2.Scalars")
	proto.RegisterType((*Repeats)(nil), "pb2.Repeats")
	proto.RegisterType((*Enums)(nil), "pb2.Enums")
	proto.RegisterType((*Nests)(nil), "pb2.Nests")
	proto.RegisterType((*Nested)(nil), "pb2.Nested")
	proto.RegisterType((*Requireds)(nil), "pb2.Requireds")
	proto.RegisterType((*PartialRequired)(nil), "pb2.PartialRequired")
	proto.RegisterType((*Oneofs)(nil), "pb2.Oneofs")
	proto.RegisterType((*Maps)(nil), "pb2.Maps")
	proto.RegisterMapType((map[bool]uint32)(nil), "pb2.Maps.BoolToUint32Entry")
	proto.RegisterMapType((map[int32]string)(nil), "pb2.Maps.Int32ToStrEntry")
	proto.RegisterMapType((map[int64]bool)(nil), "pb2.Maps.Sfixed64ToBoolEntry")
	proto.RegisterMapType((map[string]*Nested)(nil), "pb2.Maps.StrToNestedEntry")
	proto.RegisterMapType((map[string]*Oneofs)(nil), "pb2.Maps.StrToOneofsEntry")
	proto.RegisterMapType((map[uint64]Enum)(nil), "pb2.Maps.Uint64ToEnumEntry")
	proto.RegisterType((*NestedWithRequired)(nil), "pb2.NestedWithRequired")
	proto.RegisterType((*IndirectRequired)(nil), "pb2.IndirectRequired")
	proto.RegisterMapType((map[string]*NestedWithRequired)(nil), "pb2.IndirectRequired.StrToNestedEntry")
	proto.RegisterType((*Extensions)(nil), "pb2.Extensions")
	proto.RegisterType((*ExtensionsContainer)(nil), "pb2.ExtensionsContainer")
	proto.RegisterType((*MessageSet)(nil), "pb2.MessageSet")
	proto.RegisterType((*MessageSetExtension)(nil), "pb2.MessageSetExtension")
	proto.RegisterType((*KnownTypes)(nil), "pb2.KnownTypes")
	proto.RegisterType((*Nests_OptGroup)(nil), "pb2.Nests.OptGroup")
	proto.RegisterType((*Nests_RptGroup)(nil), "pb2.Nests.RptGroup")
	proto.RegisterType((*Nests_OptGroup_OptNestedGroup)(nil), "pb2.Nests.OptGroup.OptNestedGroup")
	proto.RegisterExtension(E_OptExtBool)
	proto.RegisterExtension(E_OptExtString)
	proto.RegisterExtension(E_OptExtEnum)
	proto.RegisterExtension(E_OptExtNested)
	proto.RegisterExtension(E_RptExtFixed32)
	proto.RegisterExtension(E_RptExtEnum)
	proto.RegisterExtension(E_RptExtNested)
	proto.RegisterExtension(E_ExtensionsContainer_OptExtBool)
	proto.RegisterExtension(E_ExtensionsContainer_OptExtString)
	proto.RegisterExtension(E_ExtensionsContainer_OptExtEnum)
	proto.RegisterExtension(E_ExtensionsContainer_OptExtNested)
	proto.RegisterExtension(E_ExtensionsContainer_RptExtString)
	proto.RegisterExtension(E_ExtensionsContainer_RptExtEnum)
	proto.RegisterExtension(E_ExtensionsContainer_RptExtNested)
	proto.RegisterExtension(E_MessageSetExtension_MessageSetExtension)
	proto.RegisterExtension(E_MessageSetExtension_NotMessageSetExtension)
	proto.RegisterExtension(E_MessageSetExtension_ExtNested)
}

var fileDescriptor_c8d7acc1bcec9a72 = []byte{
	// 1945 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x58, 0xdb, 0x6e, 0x1b, 0xc9,
	0x11, 0xdd, 0x99, 0xe1, 0xb5, 0xa9, 0x0b, 0x3d, 0x92, 0xbd, 0x14, 0xbd, 0xbb, 0x1a, 0x13, 0x9b,
	0x80, 0x11, 0xb0, 0x12, 0x32, 0xa2, 0x19, 0x81, 0x5a, 0xdb, 0xb0, 0xd6, 0xf4, 0xae, 0xd7, 0x59,
	0x29, 0x20, 0xe9, 0x18, 0x58, 0x20, 0x10, 0x48, 0xb1, 0xc5, 0x1d, 0x84, 0x9c, 0x1e, 0xf6, 0x34,
	0x6d, 0xe9, 0x3f, 0xf2, 0x0d, 0xc9, 0x1f, 0xe4, 0x21, 0xf9, 0x93, 0xfc, 0x44, 0x5e, 0xf2, 0x10,
	0x20, 0x0f, 0x0e, 0xaa, 0x7a, 0x2e, 0xcd, 0x19, 0xde, 0xde, 0xa6, 0xbb, 0xea, 0x9c, 0xaa, 0xae,
	0xea, 0xae, 0xea, 0x69, 0xf2, 0x1b, 0xea, 0xde, 0xb0, 0xa1, 0xe3, 0x8e, 0x4e, 0x04, 0xbd, 0x13,
	0xde, 0xe0, 0x44, 0x50, 0x5f, 0x78, 0x9c, 0x09, 0xe6, 0x9f, 0x78, 0x03, 0x1b, 0x87, 0xc7, 0x38,
	0x36, 0x0d, 0x6f, 0x60, 0x57, 0x0f, 0x46, 0x8c, 0x8d, 0xc6, 0xf4, 0x04, 0xa7, 0x06, 0xb3, 0xdb,
	0x93, 0xbe, 0x7b, 0x2f, 0xe5, 0xd5, 0xc7, 0x49, 0x11, 0x9d, 0x78, 0x22, 0x14, 0x7e, 0x95, 0x14,
	0x0e, 0x67, 0xbc, 0x2f, 0x1c, 0xe6, 0x06, 0xf2, 0x2f, 0x92, 0x72, 0x5f, 0xf0, 0xd9, 0x4d, 0x60,
	0xba, 0x7a, 0x98, 0x94, 0x0a, 0x67, 0x42, 0x7d, 0xd1, 0x9f, 0x78, 0xcb, 0xe8, 0x3f, 0xf2, 0xbe,
	0xe7, 0x51, 0xee, 0x4b, 0x79, 0xed, 0x5f, 0x06, 0xc9, 0x77, 0x6f, 0xfa, 0xe3, 0x3e, 0xf7, 0xcd,
	0x03, 0x52, 0x60, 0x9e, 0xb8, 0x1e, 0x30, 0x36, 0xae, 0x68, 0x96, 0x56, 0x2f, 0x74, 0xf2, 0xcc,
	0x13, 0x17, 0x8c, 0x8d, 0xcd, 0xc7, 0xa4, 0x08, 0x22, 0xc7, 0x15, 0xa7, 0x76, 0x45, 0xb7, 0xb4,
	0x7a, 0xb6, 0x03, 0xba, 0x6f, 0x60, 0xac, 0x08, 0x9b, 0x8d, 0x8a, 0x61, 0x69, 0x75, 0x23, 0x14,
	0x36, 0x1b, 0xe6, 0x97, 0x84, 0x80, 0x70, 0x26, 0xa1, 0x19, 0x4b, 0xab, 0x6f, 0x77, 0x40, 0xfd,
	0x1d, 0x4e, 0xa8, 0xe2, 0x66, 0xa3, 0x92, 0xb5, 0xb4, 0x7a, 0x26, 0x12, 0xc7, 0x68, 0x5f, 0xa2,
	0x73, 0x96, 0x56, 0x7f, 0x80, 0xe2, 0xee, 0x1c, 0xda, 0x97, 0xe8, 0xbc, 0xa5, 0xd5, 0xcd, 0x48,
	0xdc, 0x6c, 0x98, 0x87, 0xa4, 0x04, 0xe2, 0x5b, 0xe7, 0x8e, 0x0e, 0x4f, 0xed, 0x4a, 0xc1, 0xd2,
	0xea, 0xf9, 0x0e, 0x20, 0x5e, 0xcb, 0x99, 0x39, 0x85, 0x66, 0xa3, 0x52, 0xb4, 0xb4, 0x7a, 0x2e,
	0x56, 0x68, 0x36, 0xcc, 0x27, 0x64, 0x0b, 0x0d, 0x84, 0x14, 0xc4, 0xd2, 0xea, 0xbb, 0x1d, 0x00,
	0x75, 0x83, 0xa9, 0x79, 0x95, 0x66, 0xa3, 0x52, 0xb2, 0xb4, 0x7a, 0x59, 0x51, 0x69, 0x36, 0xc2,
	0x00, 0xdd, 0x8e, 0x59, 0x5f, 0x54, 0xf6, 0x2d, 0xad, 0xae, 0x63, 0x80, 0x5e, 0xc3, 0x38, 0x5c,
	0xc3, 0x90, 0xcd, 0x06, 0x63, 0x5a, 0x79, 0x68, 0x69, 0x75, 0x0d, 0xd7, 0xf0, 0x0a, 0x27, 0x42,
	0xec, 0xe0, 0x5e, 0x50, 0xbf, 0xb2, 0x63, 0x69, 0xf5, 0x2d, 0xc4, 0x5e, 0xc0, 0x38, 0x5a, 0xbf,
	0xe0, 0x8e, 0x3b, 0xaa, 0x6c, 0x5b, 0x5a, 0xbd, 0x28, 0xd7, 0x8f, 0x13, 0xb5, 0xbf, 0xe8, 0x24,
	0xdf, 0xa1, 0x1e, 0xed, 0x0b, 0x4c, 0x2e, 0x8f, 0x93, 0x6b, 0x40, 0x72, 0x79, 0x9c, 0x5c, 0xae,
	0x24, 0xd7, 0x80, 0xe4, 0x72, 0x25, 0xb9, 0x5c, 0x49, 0xae, 0x01, 0xc9, 0xe5, 0x4a, 0x72, 0xb9,
	0x9a, 0x5c, 0x03, 0x92, 0xcb, 0xd5, 0xe4, 0x72, 0x35, 0xb9, 0x06, 0x24, 0x97, 0x47, 0xc9, 0x0d,
	0xa8, 0x65, 0x58, 0x72, 0x96, 0x01, 0x61, 0xe1, 0x4a, 0x58, 0x78, 0x1c, 0x96, 0xbc, 0x65, 0x40,
	0x58, 0x78, 0x14, 0x96, 0x40, 0x1c, 0xac, 0x7c, 0xd7, 0x32, 0x60, 0xe5, 0x3c, 0x5c, 0x79, 0x48,
	0x1d, 0x46, 0xcd, 0x80, 0xa8, 0xf1, 0x20, 0x6a, 0xb5, 0xff, 0x69, 0x24, 0xdb, 0x76, 0x67, 0x13,
	0xdf, 0xfc, 0x5a, 0xee, 0x78, 0xea, 0xce, 0x26, 0xb8, 0xe3, 0x77, 0xec, 0xe2, 0xb1, 0x37, 0xb0,
	0x8f, 0x41, 0x8a, 0x9b, 0x1f, 0x3e, 0x40, 0x8b, 0x87, 0x5a, 0x10, 0x9e, 0x79, 0x2d, 0x1e, 0x68,
	0x3d, 0x23, 0xbb, 0xc0, 0xe5, 0x52, 0x5f, 0xd0, 0xa1, 0x54, 0x36, 0x90, 0xf2, 0x61, 0xa4, 0xec,
	0x1f, 0x5f, 0xa2, 0x14, 0x81, 0xdb, 0xcc, 0x13, 0xf1, 0x10, 0xe0, 0x3c, 0x01, 0xcf, 0xa0, 0xad,
	0x65, 0x70, 0xae, 0xc2, 0x6b, 0x75, 0x42, 0x14, 0xb2, 0x3c, 0x31, 0xde, 0x5d, 0x5e, 0x95, 0x35,
	0xf8, 0x78, 0x75, 0xd5, 0x2d, 0xeb, 0x66, 0x81, 0x64, 0x5e, 0xbd, 0x69, 0xff, 0x5c, 0x26, 0xb5,
	0x7f, 0x1b, 0x24, 0x0b, 0xaa, 0xbe, 0x79, 0x24, 0x77, 0x8f, 0x34, 0x89, 0xeb, 0x2f, 0xd9, 0x25,
	0xb4, 0x26, 0xa9, 0x70, 0x2b, 0xc9, 0x4f, 0xf3, 0x04, 0x23, 0x35, 0xe2, 0x6c, 0xe6, 0xe1, 0xf9,
	0x27, 0xf6, 0x5e, 0xa4, 0xe9, 0x1f, 0x5f, 0x79, 0xe2, 0x7b, 0x10, 0x75, 0x22, 0x25, 0x20, 0x8f,
	0xd7, 0x83, 0x1b, 0x27, 0x49, 0xce, 0x55, 0x72, 0x1e, 0x92, 0xc3, 0xa2, 0xe7, 0xc9, 0x3b, 0x11,
	0x79, 0xa8, 0x54, 0xfd, 0x8f, 0x46, 0x0a, 0xa1, 0xcd, 0x55, 0x65, 0x6b, 0xfe, 0x7c, 0xe8, 0x89,
	0xf3, 0x91, 0x08, 0x80, 0xb1, 0x32, 0x00, 0x3f, 0x92, 0x1d, 0xe6, 0x09, 0xa9, 0x1a, 0x7a, 0x0a,
	0x61, 0xa8, 0x2d, 0x08, 0x03, 0x7c, 0x48, 0x98, 0x74, 0x3c, 0x81, 0xac, 0x36, 0xc9, 0xce, 0xbc,
	0xc6, 0x66, 0x1b, 0xb1, 0xfa, 0x2b, 0x52, 0xe8, 0x28, 0xab, 0x5e, 0x72, 0x9e, 0x3b, 0x3b, 0x9c,
	0xfa, 0x94, 0x7f, 0xa0, 0xc3, 0xeb, 0x5b, 0x87, 0x8e, 0x87, 0xb5, 0x2e, 0xc9, 0x05, 0x8b, 0x98,
	0x8f, 0x87, 0xb6, 0x3a, 0x1e, 0xfa, 0xaa, 0x78, 0xd4, 0xfe, 0xab, 0x93, 0x62, 0x87, 0x4e, 0x67,
	0x0e, 0xa7, 0x43, 0x59, 0x5d, 0xe8, 0x34, 0xf4, 0x46, 0x47, 0x6f, 0xe8, 0x14, 0x73, 0x70, 0x48,
	0x4a, 0x20, 0x0a, 0x2b, 0xa8, 0x6e, 0xe9, 0x50, 0x84, 0x39, 0x9d, 0x2a, 0x45, 0x38, 0x52, 0xc0,
	0x1a, 0xa3, 0x43, 0x11, 0x0e, 0x15, 0x64, 0x11, 0x06, 0x85, 0xa8, 0x08, 0x67, 0x2c, 0x1d, 0x8a,
	0x30, 0xa7, 0x53, 0xb5, 0x08, 0xc7, 0x2a, 0x58, 0x6b, 0x74, 0x28, 0xc2, 0x91, 0x4a, 0x50, 0x6d,
	0xc0, 0x4c, 0x50, 0x6d, 0x74, 0xac, 0x36, 0x74, 0x1a, 0x57, 0x1b, 0x3a, 0x8d, 0xab, 0x8d, 0x8e,
	0xd5, 0x86, 0x4e, 0x95, 0x6a, 0x03, 0xf4, 0x32, 0x6e, 0x05, 0x4b, 0xc7, 0x6a, 0x43, 0xa7, 0x4a,
	0xb5, 0x81, 0xd5, 0x63, 0xb5, 0x29, 0x5a, 0x3a, 0x56, 0x1b, 0x3a, 0x95, 0x35, 0xfa, 0x6b, 0x19,
	0x1a, 0x4c, 0x2d, 0xb1, 0xf4, 0x64, 0xf5, 0xa0, 0x53, 0x3c, 0xb1, 0x47, 0xd2, 0x42, 0x10, 0xfa,
	0x92, 0xa5, 0xa7, 0x8f, 0x0b, 0x9d, 0x06, 0xa1, 0xbf, 0x22, 0xbb, 0x7f, 0xe8, 0x73, 0xe1, 0xf4,
	0xc7, 0x61, 0x02, 0x12, 0x0e, 0x6a, 0x49, 0x07, 0x57, 0x9f, 0x83, 0xda, 0x6b, 0x92, 0xbb, 0x72,
	0x29, 0xbb, 0xf5, 0x4d, 0x93, 0x18, 0xbe, 0xe0, 0x72, 0x67, 0xfc, 0xf0, 0x59, 0x07, 0x06, 0xe6,
	0x21, 0x31, 0x26, 0xfe, 0x68, 0xc1, 0x76, 0x00, 0x85, 0x89, 0x3f, 0xba, 0xc8, 0x93, 0xec, 0xcc,
	0x75, 0x98, 0x5b, 0xfb, 0x67, 0x8e, 0x64, 0x7e, 0xea, 0x7b, 0xbe, 0x79, 0x4e, 0xb6, 0xb0, 0x03,
	0x5c, 0x0b, 0x76, 0x2d, 0xf9, 0xe0, 0xf8, 0x1f, 0x20, 0x16, 0x14, 0x8e, 0xb1, 0xb7, 0xf4, 0x58,
	0x57, 0xf0, 0xb6, 0x2b, 0xf8, 0x7d, 0x87, 0x38, 0xd1, 0x84, 0xf9, 0x3d, 0x29, 0x87, 0x79, 0x04,
	0x3c, 0xee, 0x29, 0x1d, 0x09, 0xbe, 0x8c, 0x09, 0xc2, 0xb4, 0xf6, 0x18, 0x6c, 0x32, 0x49, 0xb2,
	0xe3, 0xcf, 0x4d, 0x9a, 0x2f, 0xc9, 0x0e, 0x80, 0x81, 0x24, 0xe8, 0x50, 0xb2, 0x0c, 0x3d, 0x8e,
	0x69, 0x40, 0xaf, 0xc7, 0x64, 0xbb, 0x92, 0x24, 0x5b, 0x03, 0x65, 0x0a, 0x28, 0x64, 0xf7, 0x02,
	0x92, 0xa8, 0x28, 0xcf, 0x51, 0xc8, 0x66, 0xd6, 0x63, 0x90, 0xc6, 0x80, 0x62, 0xa6, 0x4c, 0x99,
	0xcf, 0xc9, 0xb6, 0x2f, 0x38, 0xe0, 0x83, 0xe4, 0x66, 0x91, 0xa1, 0xaa, 0xac, 0x45, 0xf0, 0x1e,
	0x0b, 0xab, 0x37, 0x10, 0x94, 0xfc, 0x78, 0x46, 0xc1, 0x33, 0xcc, 0x11, 0x76, 0xca, 0x34, 0x5e,
	0x26, 0x50, 0xc5, 0xcb, 0x99, 0xea, 0x33, 0xb2, 0x9b, 0x88, 0xb6, 0x59, 0x26, 0xc6, 0x9f, 0xe9,
	0x3d, 0x66, 0x39, 0xdb, 0x81, 0x4f, 0x73, 0x9f, 0x64, 0x3f, 0xf4, 0xc7, 0x33, 0x1a, 0xec, 0x0d,
	0x39, 0x68, 0xe9, 0x67, 0x5a, 0xf5, 0x25, 0xd9, 0x5b, 0x10, 0x6b, 0x95, 0xa2, 0xbc, 0x80, 0xa2,
	0xa0, 0x52, 0xbc, 0x20, 0x0f, 0x52, 0x71, 0x56, 0x09, 0x0a, 0x0b, 0x08, 0xb6, 0x55, 0x82, 0x1f,
	0xc9, 0x83, 0x54, 0x94, 0x55, 0x82, 0x8c, 0x24, 0x38, 0x54, 0x09, 0xe6, 0x8e, 0x99, 0xc2, 0xf5,
	0x96, 0x94, 0x93, 0xf1, 0x56, 0xa9, 0x8a, 0x92, 0xea, 0x89, 0x4a, 0x95, 0x38, 0x89, 0x0b, 0xc8,
	0x94, 0xe0, 0x6f, 0x4a, 0x26, 0x21, 0x0a, 0x59, 0xed, 0x94, 0x98, 0xd2, 0xc2, 0x7b, 0x47, 0xfc,
	0xb2, 0xe1, 0xc9, 0xae, 0xfd, 0x4d, 0x27, 0xe5, 0x37, 0xee, 0xd0, 0xe1, 0xf4, 0x46, 0x44, 0x98,
	0xe6, 0x82, 0xc6, 0xfe, 0xb9, 0xb2, 0x04, 0xd5, 0x80, 0xda, 0xe3, 0x9a, 0x73, 0x3d, 0x5b, 0x9e,
	0xb9, 0xe5, 0x38, 0xae, 0xf4, 0xc6, 0xc4, 0x16, 0x97, 0xe7, 0xec, 0xd7, 0x08, 0x4d, 0x7a, 0xb7,
	0x7a, 0xbb, 0x57, 0xdf, 0x6f, 0x94, 0x9f, 0x6f, 0xe6, 0x43, 0xba, 0xd4, 0x49, 0x25, 0xbc, 0x0e,
	0x21, 0xed, 0x3b, 0x41, 0x5d, 0xdf, 0x61, 0xae, 0xbf, 0xae, 0x13, 0xaa, 0x77, 0x0a, 0xba, 0xf9,
	0xaf, 0xd0, 0x51, 0xa6, 0xb0, 0x5f, 0xa6, 0xb5, 0x7f, 0x18, 0x64, 0x2f, 0xb6, 0xf5, 0x1d, 0x73,
	0x45, 0xdf, 0x71, 0x29, 0xb7, 0x7f, 0x2b, 0x7f, 0x15, 0xe8, 0x9d, 0x64, 0x36, 0x77, 0xe5, 0x0e,
	0x8d, 0x34, 0x2b, 0xa7, 0x68, 0x0a, 0x3c, 0x6b, 0xdf, 0xa1, 0x35, 0xfb, 0x29, 0x5e, 0x3b, 0x10,
	0x22, 0x7d, 0x4d, 0x83, 0x1a, 0xe8, 0xfc, 0x96, 0x04, 0x49, 0xff, 0xed, 0x6f, 0x63, 0x4b, 0x50,
	0xb5, 0xd2, 0xa0, 0xa7, 0xc9, 0x23, 0x12, 0x18, 0x85, 0x6f, 0xfb, 0x22, 0x36, 0x2a, 0x13, 0x9a,
	0xc6, 0x37, 0xd3, 0xe7, 0x22, 0xf0, 0x40, 0x8e, 0xc0, 0x71, 0xbe, 0xc6, 0xf1, 0x67, 0x78, 0x6b,
	0xdf, 0xe2, 0x09, 0xc7, 0xf9, 0x4a, 0xc7, 0x9f, 0x27, 0x2f, 0xe0, 0x84, 0xcf, 0x39, 0xce, 0xd7,
	0x38, 0xfe, 0x22, 0x7d, 0x13, 0x0d, 0x3c, 0x08, 0xba, 0x6b, 0x95, 0x90, 0x9f, 0xa8, 0xef, 0xf7,
	0x47, 0xb4, 0x4b, 0xc5, 0x51, 0xa1, 0x90, 0x29, 0x7f, 0xfa, 0xf4, 0xe9, 0x53, 0xbe, 0xa5, 0x17,
	0xb4, 0xda, 0xdf, 0x75, 0xb2, 0x17, 0x0b, 0x23, 0xd6, 0x35, 0xbb, 0xc9, 0xfe, 0x13, 0x79, 0x38,
	0x91, 0xa8, 0x6b, 0x9f, 0xa2, 0x7b, 0x01, 0x4e, 0x7a, 0x17, 0x33, 0xe2, 0xff, 0x65, 0xc9, 0xae,
	0x24, 0xa6, 0x23, 0x43, 0x9d, 0xbd, 0x49, 0x7a, 0xd2, 0x1e, 0x92, 0x03, 0x97, 0x89, 0xeb, 0x0d,
	0x4d, 0xec, 0xaf, 0x31, 0xf1, 0xc8, 0x65, 0x62, 0xc1, 0xbc, 0x7d, 0x4e, 0x48, 0x2a, 0xae, 0x0a,
	0xed, 0x57, 0x0b, 0x6e, 0x8b, 0x34, 0x0a, 0xea, 0x5f, 0xf3, 0x84, 0xbc, 0x75, 0xd9, 0x47, 0xb7,
	0x77, 0xef, 0x51, 0xdf, 0x7c, 0x9a, 0xb8, 0xb2, 0x43, 0x3b, 0x93, 0x0f, 0x15, 0xc7, 0xe1, 0x43,
	0x05, 0xb6, 0xe6, 0x3f, 0xc2, 0xe9, 0x8d, 0x8f, 0xde, 0x59, 0xf2, 0xe8, 0x41, 0x23, 0x4e, 0xe2,
	0xf0, 0x20, 0x4a, 0x60, 0xfc, 0x44, 0x71, 0x96, 0x7c, 0xa2, 0x58, 0x82, 0x6c, 0x36, 0xe6, 0x90,
	0xcd, 0x86, 0x79, 0x9e, 0x7a, 0xbf, 0x28, 0xd9, 0x5f, 0xa4, 0xa0, 0xef, 0x14, 0xab, 0xca, 0xeb,
	0xc6, 0x79, 0xea, 0x75, 0x63, 0x19, 0x38, 0x34, 0xac, 0xbc, 0x7d, 0x9c, 0xa9, 0xaf, 0x06, 0xb9,
	0x25, 0x3e, 0xe3, 0xf5, 0x35, 0xf6, 0x59, 0xde, 0x66, 0xcf, 0xe7, 0x9e, 0x14, 0xf2, 0x4b, 0xcc,
	0xca, 0xbb, 0x6d, 0x6c, 0x36, 0xb8, 0xeb, 0x9e, 0xcf, 0xed, 0xe5, 0xc2, 0x12, 0xb0, 0xdc, 0xd9,
	0x31, 0x38, 0xa8, 0x9b, 0x67, 0xea, 0x6b, 0x45, 0x71, 0x89, 0xcf, 0x78, 0x2f, 0x8e, 0x7d, 0x96,
	0xd7, 0xe4, 0xa0, 0x62, 0x85, 0xaf, 0x5f, 0xc1, 0x36, 0x3d, 0x48, 0x7b, 0x1d, 0x28, 0xe0, 0x0b,
	0x4b, 0x38, 0x30, 0x5f, 0x10, 0xf8, 0x9d, 0xbe, 0x8e, 0x5e, 0xbf, 0xf0, 0x1d, 0x65, 0xd1, 0xae,
	0xea, 0x85, 0x1a, 0x58, 0xae, 0xa2, 0x51, 0xd8, 0x32, 0xe5, 0xe3, 0x5a, 0xe5, 0x20, 0xe8, 0x2a,
	0x0b, 0x56, 0x3d, 0xbb, 0x11, 0xe1, 0x82, 0x67, 0x37, 0x22, 0xdc, 0xc9, 0x63, 0xc7, 0x17, 0x95,
	0xea, 0x12, 0x9b, 0xbf, 0x77, 0x7c, 0x11, 0xef, 0x64, 0x18, 0x99, 0xa7, 0x32, 0x4e, 0xb2, 0x87,
	0x3d, 0x46, 0xdc, 0xa3, 0x14, 0x2e, 0x0e, 0x11, 0x7e, 0x85, 0x20, 0x7c, 0x3d, 0x0c, 0xce, 0x5b,
	0x1a, 0xd4, 0x06, 0x29, 0x82, 0xf0, 0xcb, 0xfc, 0x86, 0x80, 0xd1, 0xeb, 0xbe, 0x7b, 0x5f, 0xb1,
	0x10, 0xb2, 0x9f, 0x82, 0xbc, 0x74, 0xef, 0x3b, 0x39, 0xe6, 0x89, 0x97, 0xee, 0xfd, 0xd1, 0x53,
	0x92, 0xc1, 0x5b, 0x6b, 0x89, 0xe4, 0xdf, 0x5d, 0xbe, 0xbd, 0xbc, 0x7a, 0x7f, 0x59, 0xfe, 0xcc,
	0x2c, 0x92, 0xec, 0xeb, 0x37, 0x9d, 0x6e, 0xaf, 0xac, 0x99, 0x84, 0xe4, 0xba, 0xed, 0xef, 0xae,
	0x2e, 0x5f, 0x95, 0x75, 0x98, 0xee, 0xb5, 0x2f, 0x7b, 0x3f, 0x94, 0x49, 0x6b, 0x6d, 0x67, 0x7b,
	0x98, 0xec, 0x6c, 0xad, 0x0d, 0x3a, 0xdb, 0xa3, 0x74, 0x67, 0x6b, 0xad, 0xed, 0x6c, 0x9f, 0xaf,
	0xe8, 0x6c, 0xad, 0x0d, 0x3a, 0x5b, 0x65, 0x4d, 0x67, 0x6b, 0xfd, 0x4e, 0xbe, 0xd4, 0x00, 0x47,
	0xf8, 0xfb, 0x99, 0x22, 0x39, 0xb4, 0x8c, 0x7a, 0x1e, 0xdf, 0x68, 0xda, 0x77, 0xe1, 0x6b, 0x63,
	0x6b, 0x6d, 0x6f, 0xb3, 0x56, 0xf4, 0xb6, 0xd6, 0x06, 0xbd, 0xed, 0xc9, 0x9a, 0xde, 0x76, 0xf1,
	0xfc, 0xe7, 0x6f, 0x47, 0x8e, 0xf8, 0x65, 0x36, 0x38, 0xbe, 0x61, 0x93, 0x93, 0x11, 0x1b, 0xf7,
	0xdd, 0x51, 0xfc, 0x34, 0xfc, 0xc1, 0x3e, 0x59, 0xfd, 0xe8, 0xfd, 0xff, 0x00, 0x00, 0x00, 0xff,
	0xff, 0x59, 0x20, 0x4f, 0x36, 0x15, 0x17, 0x00, 0x00,
}

func init() {
	xxx_Test_ProtoFile_FileDesc.Enums = xxx_Test_ProtoFile_EnumDescs[0:1]
	xxx_Test_ProtoFile_FileDesc.Messages = xxx_Test_ProtoFile_MessageDescs[0:16]
	xxx_Test_ProtoFile_MessageDescs[2].Enums = xxx_Test_ProtoFile_EnumDescs[1:2]
	xxx_Test_ProtoFile_MessageDescs[3].Messages = xxx_Test_ProtoFile_MessageDescs[16:18]
	xxx_Test_ProtoFile_MessageDescs[8].Messages = xxx_Test_ProtoFile_MessageDescs[19:25]
	xxx_Test_ProtoFile_MessageDescs[10].Messages = xxx_Test_ProtoFile_MessageDescs[25:26]
	xxx_Test_ProtoFile_MessageDescs[16].Messages = xxx_Test_ProtoFile_MessageDescs[18:19]
	xxx_Test_ProtoFile_MessageDescs[2].Fields[0].EnumType = xxx_Test_ProtoFile_EnumTypes[0]
	xxx_Test_ProtoFile_MessageDescs[2].Fields[1].EnumType = xxx_Test_ProtoFile_EnumTypes[0]
	xxx_Test_ProtoFile_MessageDescs[2].Fields[2].EnumType = xxx_Test_ProtoFile_EnumTypes[1]
	xxx_Test_ProtoFile_MessageDescs[2].Fields[3].EnumType = xxx_Test_ProtoFile_EnumTypes[1]
	xxx_Test_ProtoFile_MessageDescs[3].Fields[0].MessageType = xxx_Test_ProtoFile_MessageTypes[4].Type
	xxx_Test_ProtoFile_MessageDescs[3].Fields[1].MessageType = xxx_Test_ProtoFile_MessageTypes[16].Type
	xxx_Test_ProtoFile_MessageDescs[3].Fields[2].MessageType = xxx_Test_ProtoFile_MessageTypes[4].Type
	xxx_Test_ProtoFile_MessageDescs[3].Fields[3].MessageType = xxx_Test_ProtoFile_MessageTypes[17].Type
	xxx_Test_ProtoFile_MessageDescs[4].Fields[1].MessageType = xxx_Test_ProtoFile_MessageTypes[4].Type
	xxx_Test_ProtoFile_MessageDescs[5].Fields[9].EnumType = xxx_Test_ProtoFile_EnumTypes[0]
	xxx_Test_ProtoFile_MessageDescs[5].Fields[10].MessageType = xxx_Test_ProtoFile_MessageTypes[4].Type
	xxx_Test_ProtoFile_MessageDescs[7].Fields[1].MessageType = xxx_Test_ProtoFile_MessageTypes[4].Type
	xxx_Test_ProtoFile_MessageDescs[8].Fields[0].MessageType = xxx_Test_ProtoFile_MessageDescs[19].Reference()
	xxx_Test_ProtoFile_MessageDescs[8].Fields[1].MessageType = xxx_Test_ProtoFile_MessageDescs[20].Reference()
	xxx_Test_ProtoFile_MessageDescs[8].Fields[2].MessageType = xxx_Test_ProtoFile_MessageDescs[21].Reference()
	xxx_Test_ProtoFile_MessageDescs[8].Fields[3].MessageType = xxx_Test_ProtoFile_MessageDescs[22].Reference()
	xxx_Test_ProtoFile_MessageDescs[8].Fields[4].MessageType = xxx_Test_ProtoFile_MessageDescs[23].Reference()
	xxx_Test_ProtoFile_MessageDescs[8].Fields[5].MessageType = xxx_Test_ProtoFile_MessageDescs[24].Reference()
	xxx_Test_ProtoFile_MessageDescs[10].Fields[0].MessageType = xxx_Test_ProtoFile_MessageTypes[9].Type
	xxx_Test_ProtoFile_MessageDescs[10].Fields[1].MessageType = xxx_Test_ProtoFile_MessageTypes[9].Type
	xxx_Test_ProtoFile_MessageDescs[10].Fields[2].MessageType = xxx_Test_ProtoFile_MessageDescs[25].Reference()
	xxx_Test_ProtoFile_MessageDescs[15].Fields[0].MessageType = protoimpl.X.MessageTypeOf((*wrappers.BoolValue)(nil))
	xxx_Test_ProtoFile_MessageDescs[15].Fields[1].MessageType = protoimpl.X.MessageTypeOf((*wrappers.Int32Value)(nil))
	xxx_Test_ProtoFile_MessageDescs[15].Fields[2].MessageType = protoimpl.X.MessageTypeOf((*wrappers.Int64Value)(nil))
	xxx_Test_ProtoFile_MessageDescs[15].Fields[3].MessageType = protoimpl.X.MessageTypeOf((*wrappers.UInt32Value)(nil))
	xxx_Test_ProtoFile_MessageDescs[15].Fields[4].MessageType = protoimpl.X.MessageTypeOf((*wrappers.UInt64Value)(nil))
	xxx_Test_ProtoFile_MessageDescs[15].Fields[5].MessageType = protoimpl.X.MessageTypeOf((*wrappers.FloatValue)(nil))
	xxx_Test_ProtoFile_MessageDescs[15].Fields[6].MessageType = protoimpl.X.MessageTypeOf((*wrappers.DoubleValue)(nil))
	xxx_Test_ProtoFile_MessageDescs[15].Fields[7].MessageType = protoimpl.X.MessageTypeOf((*wrappers.StringValue)(nil))
	xxx_Test_ProtoFile_MessageDescs[15].Fields[8].MessageType = protoimpl.X.MessageTypeOf((*wrappers.BytesValue)(nil))
	xxx_Test_ProtoFile_MessageDescs[15].Fields[9].MessageType = protoimpl.X.MessageTypeOf((*duration.Duration)(nil))
	xxx_Test_ProtoFile_MessageDescs[15].Fields[10].MessageType = protoimpl.X.MessageTypeOf((*timestamp.Timestamp)(nil))
	xxx_Test_ProtoFile_MessageDescs[15].Fields[11].MessageType = protoimpl.X.MessageTypeOf((*_struct.Struct)(nil))
	xxx_Test_ProtoFile_MessageDescs[15].Fields[12].MessageType = protoimpl.X.MessageTypeOf((*_struct.ListValue)(nil))
	xxx_Test_ProtoFile_MessageDescs[15].Fields[13].MessageType = protoimpl.X.MessageTypeOf((*_struct.Value)(nil))
	xxx_Test_ProtoFile_MessageDescs[15].Fields[14].MessageType = protoimpl.X.MessageTypeOf((*empty.Empty)(nil))
	xxx_Test_ProtoFile_MessageDescs[15].Fields[15].MessageType = protoimpl.X.MessageTypeOf((*any.Any)(nil))
	xxx_Test_ProtoFile_MessageDescs[16].Fields[2].MessageType = xxx_Test_ProtoFile_MessageTypes[4].Type
	xxx_Test_ProtoFile_MessageDescs[16].Fields[3].MessageType = xxx_Test_ProtoFile_MessageTypes[18].Type
	xxx_Test_ProtoFile_MessageDescs[18].Fields[0].EnumType = xxx_Test_ProtoFile_EnumTypes[0]
	xxx_Test_ProtoFile_MessageDescs[22].Fields[1].EnumType = xxx_Test_ProtoFile_EnumTypes[0]
	xxx_Test_ProtoFile_MessageDescs[23].Fields[1].MessageType = xxx_Test_ProtoFile_MessageTypes[4].Type
	xxx_Test_ProtoFile_MessageDescs[24].Fields[1].MessageType = xxx_Test_ProtoFile_MessageTypes[7].Type
	xxx_Test_ProtoFile_MessageDescs[25].Fields[1].MessageType = xxx_Test_ProtoFile_MessageTypes[9].Type
	var err error
	Test_ProtoFile, err = prototype.NewFile(&xxx_Test_ProtoFile_FileDesc)
	if err != nil {
		panic(err)
	}
}

const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)

var Test_ProtoFile protoreflect.FileDescriptor

var xxx_Test_ProtoFile_FileDesc = prototype.File{
	Syntax:  protoreflect.Proto2,
	Path:    "encoding/textpb/testprotos/pb2/test.proto",
	Package: "pb2",
	Imports: []protoreflect.FileImport{
		{FileDescriptor: prototype.PlaceholderFile("google/protobuf/any.proto", "google.protobuf")},
		{FileDescriptor: prototype.PlaceholderFile("google/protobuf/empty.proto", "google.protobuf")},
		{FileDescriptor: prototype.PlaceholderFile("google/protobuf/duration.proto", "google.protobuf")},
		{FileDescriptor: prototype.PlaceholderFile("google/protobuf/struct.proto", "google.protobuf")},
		{FileDescriptor: prototype.PlaceholderFile("google/protobuf/timestamp.proto", "google.protobuf")},
		{FileDescriptor: prototype.PlaceholderFile("google/protobuf/wrappers.proto", "google.protobuf")},
	},
}
var xxx_Test_ProtoFile_EnumTypes = [2]protoreflect.EnumType{
	prototype.GoEnum(
		xxx_Test_ProtoFile_EnumDescs[0].Reference(),
		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
			return Enum(n)
		},
	),
	prototype.GoEnum(
		xxx_Test_ProtoFile_EnumDescs[1].Reference(),
		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
			return Enums_NestedEnum(n)
		},
	),
}
var xxx_Test_ProtoFile_EnumDescs = [2]prototype.Enum{
	{
		Name: "Enum",
		Values: []prototype.EnumValue{
			{Name: "UNKNOWN", Number: 0},
			{Name: "FIRST", Number: 1},
			{Name: "SECOND", Number: 2},
			{Name: "TENTH", Number: 10},
		},
	},
	{
		Name: "NestedEnum",
		Values: []prototype.EnumValue{
			{Name: "UNO", Number: 1},
			{Name: "DOS", Number: 2},
			{Name: "DIEZ", Number: 10},
		},
	},
}
var xxx_Test_ProtoFile_MessageTypes = [26]protoimpl.MessageType{
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[0].Reference(),
		func(protoreflect.MessageType) protoreflect.Message {
			return xxx_Scalars{new(Scalars)}
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[1].Reference(),
		func(protoreflect.MessageType) protoreflect.Message {
			return xxx_Repeats{new(Repeats)}
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[2].Reference(),
		func(protoreflect.MessageType) protoreflect.Message {
			return xxx_Enums{new(Enums)}
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[3].Reference(),
		func(protoreflect.MessageType) protoreflect.Message {
			return xxx_Nests{new(Nests)}
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[4].Reference(),
		func(protoreflect.MessageType) protoreflect.Message {
			return xxx_Nested{new(Nested)}
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[5].Reference(),
		func(protoreflect.MessageType) protoreflect.Message {
			return xxx_Requireds{new(Requireds)}
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[6].Reference(),
		func(protoreflect.MessageType) protoreflect.Message {
			return xxx_PartialRequired{new(PartialRequired)}
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[7].Reference(),
		func(protoreflect.MessageType) protoreflect.Message {
			return xxx_Oneofs{new(Oneofs)}
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[8].Reference(),
		func(protoreflect.MessageType) protoreflect.Message {
			return xxx_Maps{new(Maps)}
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[9].Reference(),
		func(protoreflect.MessageType) protoreflect.Message {
			return xxx_NestedWithRequired{new(NestedWithRequired)}
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[10].Reference(),
		func(protoreflect.MessageType) protoreflect.Message {
			return xxx_IndirectRequired{new(IndirectRequired)}
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[11].Reference(),
		func(protoreflect.MessageType) protoreflect.Message {
			return xxx_Extensions{new(Extensions)}
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[12].Reference(),
		func(protoreflect.MessageType) protoreflect.Message {
			return xxx_ExtensionsContainer{new(ExtensionsContainer)}
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[13].Reference(),
		func(protoreflect.MessageType) protoreflect.Message {
			return xxx_MessageSet{new(MessageSet)}
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[14].Reference(),
		func(protoreflect.MessageType) protoreflect.Message {
			return xxx_MessageSetExtension{new(MessageSetExtension)}
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[15].Reference(),
		func(protoreflect.MessageType) protoreflect.Message {
			return xxx_KnownTypes{new(KnownTypes)}
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[16].Reference(),
		func(protoreflect.MessageType) protoreflect.Message {
			return xxx_Nests_OptGroup{new(Nests_OptGroup)}
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[17].Reference(),
		func(protoreflect.MessageType) protoreflect.Message {
			return xxx_Nests_RptGroup{new(Nests_RptGroup)}
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[18].Reference(),
		func(protoreflect.MessageType) protoreflect.Message {
			return xxx_Nests_OptGroup_OptNestedGroup{new(Nests_OptGroup_OptNestedGroup)}
		},
	)},
	{ /* no message type for Maps_Int32ToStrEntry */ },
	{ /* no message type for Maps_Sfixed64ToBoolEntry */ },
	{ /* no message type for Maps_BoolToUint32Entry */ },
	{ /* no message type for Maps_Uint64ToEnumEntry */ },
	{ /* no message type for Maps_StrToNestedEntry */ },
	{ /* no message type for Maps_StrToOneofsEntry */ },
	{ /* no message type for IndirectRequired_StrToNestedEntry */ },
}
var xxx_Test_ProtoFile_MessageDescs = [26]prototype.Message{
	{
		Name: "Scalars",
		Fields: []prototype.Field{
			{
				Name:        "opt_bool",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.BoolKind,
				JSONName:    "optBool",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_int32",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Int32Kind,
				JSONName:    "optInt32",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_int64",
				Number:      3,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Int64Kind,
				JSONName:    "optInt64",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_uint32",
				Number:      4,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Uint32Kind,
				JSONName:    "optUint32",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_uint64",
				Number:      5,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Uint64Kind,
				JSONName:    "optUint64",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_sint32",
				Number:      6,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Sint32Kind,
				JSONName:    "optSint32",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_sint64",
				Number:      7,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Sint64Kind,
				JSONName:    "optSint64",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_fixed32",
				Number:      8,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Fixed32Kind,
				JSONName:    "optFixed32",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_fixed64",
				Number:      9,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Fixed64Kind,
				JSONName:    "optFixed64",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_sfixed32",
				Number:      10,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Sfixed32Kind,
				JSONName:    "optSfixed32",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_sfixed64",
				Number:      11,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Sfixed64Kind,
				JSONName:    "optSfixed64",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_float",
				Number:      20,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.FloatKind,
				JSONName:    "optFloat",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_double",
				Number:      21,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.DoubleKind,
				JSONName:    "optDouble",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_bytes",
				Number:      14,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.BytesKind,
				JSONName:    "optBytes",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_string",
				Number:      13,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.StringKind,
				JSONName:    "optString",
				IsPacked:    prototype.False,
			},
		},
	},
	{
		Name: "Repeats",
		Fields: []prototype.Field{
			{
				Name:        "rpt_bool",
				Number:      1,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.BoolKind,
				JSONName:    "rptBool",
				IsPacked:    prototype.False,
			},
			{
				Name:        "rpt_int32",
				Number:      2,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.Int32Kind,
				JSONName:    "rptInt32",
				IsPacked:    prototype.False,
			},
			{
				Name:        "rpt_int64",
				Number:      3,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.Int64Kind,
				JSONName:    "rptInt64",
				IsPacked:    prototype.False,
			},
			{
				Name:        "rpt_uint32",
				Number:      4,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.Uint32Kind,
				JSONName:    "rptUint32",
				IsPacked:    prototype.False,
			},
			{
				Name:        "rpt_uint64",
				Number:      5,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.Uint64Kind,
				JSONName:    "rptUint64",
				IsPacked:    prototype.False,
			},
			{
				Name:        "rpt_float",
				Number:      6,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.FloatKind,
				JSONName:    "rptFloat",
				IsPacked:    prototype.False,
			},
			{
				Name:        "rpt_double",
				Number:      7,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.DoubleKind,
				JSONName:    "rptDouble",
				IsPacked:    prototype.False,
			},
			{
				Name:        "rpt_string",
				Number:      15,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.StringKind,
				JSONName:    "rptString",
				IsPacked:    prototype.False,
			},
			{
				Name:        "rpt_bytes",
				Number:      14,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.BytesKind,
				JSONName:    "rptBytes",
				IsPacked:    prototype.False,
			},
		},
	},
	{
		Name: "Enums",
		Fields: []prototype.Field{
			{
				Name:        "opt_enum",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.EnumKind,
				JSONName:    "optEnum",
				IsPacked:    prototype.False,
			},
			{
				Name:        "rpt_enum",
				Number:      2,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.EnumKind,
				JSONName:    "rptEnum",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_nested_enum",
				Number:      3,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.EnumKind,
				JSONName:    "optNestedEnum",
				IsPacked:    prototype.False,
			},
			{
				Name:        "rpt_nested_enum",
				Number:      4,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.EnumKind,
				JSONName:    "rptNestedEnum",
				IsPacked:    prototype.False,
			},
		},
	},
	{
		Name: "Nests",
		Fields: []prototype.Field{
			{
				Name:        "opt_nested",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optNested",
				IsPacked:    prototype.False,
			},
			{
				Name:        "optgroup",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.GroupKind,
				JSONName:    "optgroup",
				IsPacked:    prototype.False,
			},
			{
				Name:        "rpt_nested",
				Number:      3,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.MessageKind,
				JSONName:    "rptNested",
				IsPacked:    prototype.False,
			},
			{
				Name:        "rptgroup",
				Number:      4,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.GroupKind,
				JSONName:    "rptgroup",
				IsPacked:    prototype.False,
			},
		},
		ReservedNames: []protoreflect.Name{"reserved_field"},
	},
	{
		Name: "Nested",
		Fields: []prototype.Field{
			{
				Name:        "opt_string",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.StringKind,
				JSONName:    "optString",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_nested",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optNested",
				IsPacked:    prototype.False,
			},
		},
	},
	{
		Name: "Requireds",
		Fields: []prototype.Field{
			{
				Name:        "req_bool",
				Number:      1,
				Cardinality: protoreflect.Required,
				Kind:        protoreflect.BoolKind,
				JSONName:    "reqBool",
				IsPacked:    prototype.False,
			},
			{
				Name:        "req_fixed32",
				Number:      2,
				Cardinality: protoreflect.Required,
				Kind:        protoreflect.Fixed32Kind,
				JSONName:    "reqFixed32",
				IsPacked:    prototype.False,
			},
			{
				Name:        "req_fixed64",
				Number:      3,
				Cardinality: protoreflect.Required,
				Kind:        protoreflect.Fixed64Kind,
				JSONName:    "reqFixed64",
				IsPacked:    prototype.False,
			},
			{
				Name:        "req_sfixed32",
				Number:      4,
				Cardinality: protoreflect.Required,
				Kind:        protoreflect.Sfixed32Kind,
				JSONName:    "reqSfixed32",
				IsPacked:    prototype.False,
			},
			{
				Name:        "req_sfixed64",
				Number:      5,
				Cardinality: protoreflect.Required,
				Kind:        protoreflect.Sfixed64Kind,
				JSONName:    "reqSfixed64",
				IsPacked:    prototype.False,
			},
			{
				Name:        "req_float",
				Number:      6,
				Cardinality: protoreflect.Required,
				Kind:        protoreflect.FloatKind,
				JSONName:    "reqFloat",
				IsPacked:    prototype.False,
			},
			{
				Name:        "req_double",
				Number:      7,
				Cardinality: protoreflect.Required,
				Kind:        protoreflect.DoubleKind,
				JSONName:    "reqDouble",
				IsPacked:    prototype.False,
			},
			{
				Name:        "req_string",
				Number:      8,
				Cardinality: protoreflect.Required,
				Kind:        protoreflect.StringKind,
				JSONName:    "reqString",
				IsPacked:    prototype.False,
			},
			{
				Name:        "req_bytes",
				Number:      9,
				Cardinality: protoreflect.Required,
				Kind:        protoreflect.BytesKind,
				JSONName:    "reqBytes",
				IsPacked:    prototype.False,
			},
			{
				Name:        "req_enum",
				Number:      10,
				Cardinality: protoreflect.Required,
				Kind:        protoreflect.EnumKind,
				JSONName:    "reqEnum",
				IsPacked:    prototype.False,
			},
			{
				Name:        "req_nested",
				Number:      11,
				Cardinality: protoreflect.Required,
				Kind:        protoreflect.MessageKind,
				JSONName:    "reqNested",
				IsPacked:    prototype.False,
			},
		},
	},
	{
		Name: "PartialRequired",
		Fields: []prototype.Field{
			{
				Name:        "req_string",
				Number:      1,
				Cardinality: protoreflect.Required,
				Kind:        protoreflect.StringKind,
				JSONName:    "reqString",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_string",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.StringKind,
				JSONName:    "optString",
				IsPacked:    prototype.False,
			},
		},
	},
	{
		Name: "Oneofs",
		Fields: []prototype.Field{
			{
				Name:        "str",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.StringKind,
				JSONName:    "str",
				OneofName:   "union",
				IsPacked:    prototype.False,
			},
			{
				Name:        "msg",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "msg",
				OneofName:   "union",
				IsPacked:    prototype.False,
			},
		},
		Oneofs: []prototype.Oneof{
			{Name: "union"},
		},
	},
	{
		Name: "Maps",
		Fields: []prototype.Field{
			{
				Name:        "int32_to_str",
				Number:      1,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.MessageKind,
				JSONName:    "int32ToStr",
				IsPacked:    prototype.False,
			},
			{
				Name:        "sfixed64_to_bool",
				Number:      2,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.MessageKind,
				JSONName:    "sfixed64ToBool",
				IsPacked:    prototype.False,
			},
			{
				Name:        "bool_to_uint32",
				Number:      3,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.MessageKind,
				JSONName:    "boolToUint32",
				IsPacked:    prototype.False,
			},
			{
				Name:        "uint64_to_enum",
				Number:      4,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.MessageKind,
				JSONName:    "uint64ToEnum",
				IsPacked:    prototype.False,
			},
			{
				Name:        "str_to_nested",
				Number:      5,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.MessageKind,
				JSONName:    "strToNested",
				IsPacked:    prototype.False,
			},
			{
				Name:        "str_to_oneofs",
				Number:      6,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.MessageKind,
				JSONName:    "strToOneofs",
				IsPacked:    prototype.False,
			},
		},
	},
	{
		Name: "NestedWithRequired",
		Fields: []prototype.Field{
			{
				Name:        "req_string",
				Number:      1,
				Cardinality: protoreflect.Required,
				Kind:        protoreflect.StringKind,
				JSONName:    "reqString",
				IsPacked:    prototype.False,
			},
		},
	},
	{
		Name: "IndirectRequired",
		Fields: []prototype.Field{
			{
				Name:        "opt_nested",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optNested",
				IsPacked:    prototype.False,
			},
			{
				Name:        "rpt_nested",
				Number:      2,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.MessageKind,
				JSONName:    "rptNested",
				IsPacked:    prototype.False,
			},
			{
				Name:        "str_to_nested",
				Number:      3,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.MessageKind,
				JSONName:    "strToNested",
				IsPacked:    prototype.False,
			},
		},
	},
	{
		Name: "Extensions",
		Fields: []prototype.Field{
			{
				Name:        "opt_string",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.StringKind,
				JSONName:    "optString",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_bool",
				Number:      101,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.BoolKind,
				JSONName:    "optBool",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_int32",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Int32Kind,
				JSONName:    "optInt32",
				IsPacked:    prototype.False,
			},
		},
		ExtensionRanges: [][2]protoreflect.FieldNumber{{20, 101}},
	},
	{
		Name: "ExtensionsContainer",
	},
	{
		Name:            "MessageSet",
		ExtensionRanges: [][2]protoreflect.FieldNumber{{4, 2147483647}},
	},
	{
		Name: "MessageSetExtension",
		Fields: []prototype.Field{
			{
				Name:        "opt_string",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.StringKind,
				JSONName:    "optString",
				IsPacked:    prototype.False,
			},
		},
	},
	{
		Name: "KnownTypes",
		Fields: []prototype.Field{
			{
				Name:        "opt_bool",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optBool",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_int32",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optInt32",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_int64",
				Number:      3,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optInt64",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_uint32",
				Number:      4,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optUint32",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_uint64",
				Number:      5,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optUint64",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_float",
				Number:      6,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optFloat",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_double",
				Number:      7,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optDouble",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_string",
				Number:      8,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optString",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_bytes",
				Number:      9,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optBytes",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_duration",
				Number:      20,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optDuration",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_timestamp",
				Number:      21,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optTimestamp",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_struct",
				Number:      25,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optStruct",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_list",
				Number:      26,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optList",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_value",
				Number:      27,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optValue",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_empty",
				Number:      30,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optEmpty",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_any",
				Number:      32,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optAny",
				IsPacked:    prototype.False,
			},
		},
	},
	{
		Name: "OptGroup",
		Fields: []prototype.Field{
			{
				Name:        "opt_bool",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.BoolKind,
				JSONName:    "optBool",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_string",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.StringKind,
				JSONName:    "optString",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_nested",
				Number:      3,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optNested",
				IsPacked:    prototype.False,
			},
			{
				Name:        "optnestedgroup",
				Number:      4,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.GroupKind,
				JSONName:    "optnestedgroup",
				IsPacked:    prototype.False,
			},
		},
	},
	{
		Name: "RptGroup",
		Fields: []prototype.Field{
			{
				Name:        "rpt_bool",
				Number:      1,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.BoolKind,
				JSONName:    "rptBool",
				IsPacked:    prototype.False,
			},
		},
	},
	{
		Name: "OptNestedGroup",
		Fields: []prototype.Field{
			{
				Name:        "opt_enum",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.EnumKind,
				JSONName:    "optEnum",
				IsPacked:    prototype.False,
			},
		},
	},
	{
		Name: "Int32ToStrEntry",
		Fields: []prototype.Field{
			{
				Name:        "key",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Int32Kind,
				JSONName:    "key",
				IsPacked:    prototype.False,
			},
			{
				Name:        "value",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.StringKind,
				JSONName:    "value",
				IsPacked:    prototype.False,
			},
		},
		IsMapEntry: true,
	},
	{
		Name: "Sfixed64ToBoolEntry",
		Fields: []prototype.Field{
			{
				Name:        "key",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Sfixed64Kind,
				JSONName:    "key",
				IsPacked:    prototype.False,
			},
			{
				Name:        "value",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.BoolKind,
				JSONName:    "value",
				IsPacked:    prototype.False,
			},
		},
		IsMapEntry: true,
	},
	{
		Name: "BoolToUint32Entry",
		Fields: []prototype.Field{
			{
				Name:        "key",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.BoolKind,
				JSONName:    "key",
				IsPacked:    prototype.False,
			},
			{
				Name:        "value",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Uint32Kind,
				JSONName:    "value",
				IsPacked:    prototype.False,
			},
		},
		IsMapEntry: true,
	},
	{
		Name: "Uint64ToEnumEntry",
		Fields: []prototype.Field{
			{
				Name:        "key",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Uint64Kind,
				JSONName:    "key",
				IsPacked:    prototype.False,
			},
			{
				Name:        "value",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.EnumKind,
				JSONName:    "value",
				IsPacked:    prototype.False,
			},
		},
		IsMapEntry: true,
	},
	{
		Name: "StrToNestedEntry",
		Fields: []prototype.Field{
			{
				Name:        "key",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.StringKind,
				JSONName:    "key",
				IsPacked:    prototype.False,
			},
			{
				Name:        "value",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "value",
				IsPacked:    prototype.False,
			},
		},
		IsMapEntry: true,
	},
	{
		Name: "StrToOneofsEntry",
		Fields: []prototype.Field{
			{
				Name:        "key",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.StringKind,
				JSONName:    "key",
				IsPacked:    prototype.False,
			},
			{
				Name:        "value",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "value",
				IsPacked:    prototype.False,
			},
		},
		IsMapEntry: true,
	},
	{
		Name: "StrToNestedEntry",
		Fields: []prototype.Field{
			{
				Name:        "key",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.StringKind,
				JSONName:    "key",
				IsPacked:    prototype.False,
			},
			{
				Name:        "value",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "value",
				IsPacked:    prototype.False,
			},
		},
		IsMapEntry: true,
	},
}
