// Code generated by protoc-gen-go. DO NOT EDIT.
// source: datasets/google_message1/proto2/benchmark_message1_proto2.proto

package proto2

import (
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoiface "google.golang.org/protobuf/runtime/protoiface"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	sync "sync"
)

const (
	// Verify that runtime/protoimpl is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 0)
	// Verify that this generated code is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(0 - protoimpl.MinVersion)
)

type GoogleMessage1 struct {
	Field1        *string                   `protobuf:"bytes,1,req,name=field1" json:"field1,omitempty"`
	Field9        *string                   `protobuf:"bytes,9,opt,name=field9" json:"field9,omitempty"`
	Field18       *string                   `protobuf:"bytes,18,opt,name=field18" json:"field18,omitempty"`
	Field80       *bool                     `protobuf:"varint,80,opt,name=field80,def=0" json:"field80,omitempty"`
	Field81       *bool                     `protobuf:"varint,81,opt,name=field81,def=1" json:"field81,omitempty"`
	Field2        *int32                    `protobuf:"varint,2,req,name=field2" json:"field2,omitempty"`
	Field3        *int32                    `protobuf:"varint,3,req,name=field3" json:"field3,omitempty"`
	Field280      *int32                    `protobuf:"varint,280,opt,name=field280" json:"field280,omitempty"`
	Field6        *int32                    `protobuf:"varint,6,opt,name=field6,def=0" json:"field6,omitempty"`
	Field22       *int64                    `protobuf:"varint,22,opt,name=field22" json:"field22,omitempty"`
	Field4        *string                   `protobuf:"bytes,4,opt,name=field4" json:"field4,omitempty"`
	Field5        []uint64                  `protobuf:"fixed64,5,rep,name=field5" json:"field5,omitempty"`
	Field59       *bool                     `protobuf:"varint,59,opt,name=field59,def=0" json:"field59,omitempty"`
	Field7        *string                   `protobuf:"bytes,7,opt,name=field7" json:"field7,omitempty"`
	Field16       *int32                    `protobuf:"varint,16,opt,name=field16" json:"field16,omitempty"`
	Field130      *int32                    `protobuf:"varint,130,opt,name=field130,def=0" json:"field130,omitempty"`
	Field12       *bool                     `protobuf:"varint,12,opt,name=field12,def=1" json:"field12,omitempty"`
	Field17       *bool                     `protobuf:"varint,17,opt,name=field17,def=1" json:"field17,omitempty"`
	Field13       *bool                     `protobuf:"varint,13,opt,name=field13,def=1" json:"field13,omitempty"`
	Field14       *bool                     `protobuf:"varint,14,opt,name=field14,def=1" json:"field14,omitempty"`
	Field104      *int32                    `protobuf:"varint,104,opt,name=field104,def=0" json:"field104,omitempty"`
	Field100      *int32                    `protobuf:"varint,100,opt,name=field100,def=0" json:"field100,omitempty"`
	Field101      *int32                    `protobuf:"varint,101,opt,name=field101,def=0" json:"field101,omitempty"`
	Field102      *string                   `protobuf:"bytes,102,opt,name=field102" json:"field102,omitempty"`
	Field103      *string                   `protobuf:"bytes,103,opt,name=field103" json:"field103,omitempty"`
	Field29       *int32                    `protobuf:"varint,29,opt,name=field29,def=0" json:"field29,omitempty"`
	Field30       *bool                     `protobuf:"varint,30,opt,name=field30,def=0" json:"field30,omitempty"`
	Field60       *int32                    `protobuf:"varint,60,opt,name=field60,def=-1" json:"field60,omitempty"`
	Field271      *int32                    `protobuf:"varint,271,opt,name=field271,def=-1" json:"field271,omitempty"`
	Field272      *int32                    `protobuf:"varint,272,opt,name=field272,def=-1" json:"field272,omitempty"`
	Field150      *int32                    `protobuf:"varint,150,opt,name=field150" json:"field150,omitempty"`
	Field23       *int32                    `protobuf:"varint,23,opt,name=field23,def=0" json:"field23,omitempty"`
	Field24       *bool                     `protobuf:"varint,24,opt,name=field24,def=0" json:"field24,omitempty"`
	Field25       *int32                    `protobuf:"varint,25,opt,name=field25,def=0" json:"field25,omitempty"`
	Field15       *GoogleMessage1SubMessage `protobuf:"bytes,15,opt,name=field15" json:"field15,omitempty"`
	Field78       *bool                     `protobuf:"varint,78,opt,name=field78" json:"field78,omitempty"`
	Field67       *int32                    `protobuf:"varint,67,opt,name=field67,def=0" json:"field67,omitempty"`
	Field68       *int32                    `protobuf:"varint,68,opt,name=field68" json:"field68,omitempty"`
	Field128      *int32                    `protobuf:"varint,128,opt,name=field128,def=0" json:"field128,omitempty"`
	Field129      *string                   `protobuf:"bytes,129,opt,name=field129,def=xxxxxxxxxxxxxxxxxxxxx" json:"field129,omitempty"`
	Field131      *int32                    `protobuf:"varint,131,opt,name=field131,def=0" json:"field131,omitempty"`
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields
}

func (x *GoogleMessage1) Reset() {
	*x = GoogleMessage1{}
}

func (x *GoogleMessage1) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GoogleMessage1) ProtoMessage() {}

func (x *GoogleMessage1) ProtoReflect() protoreflect.Message {
	return file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_msgTypes[0].MessageOf(x)
}

func (m *GoogleMessage1) XXX_Methods() *protoiface.Methods {
	return file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_msgTypes[0].Methods()
}

// Deprecated: Use GoogleMessage1.ProtoReflect.Type instead.
func (*GoogleMessage1) Descriptor() ([]byte, []int) {
	return file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_rawDescGZIP(), []int{0}
}

const Default_GoogleMessage1_Field80 bool = false
const Default_GoogleMessage1_Field81 bool = true
const Default_GoogleMessage1_Field6 int32 = 0
const Default_GoogleMessage1_Field59 bool = false
const Default_GoogleMessage1_Field130 int32 = 0
const Default_GoogleMessage1_Field12 bool = true
const Default_GoogleMessage1_Field17 bool = true
const Default_GoogleMessage1_Field13 bool = true
const Default_GoogleMessage1_Field14 bool = true
const Default_GoogleMessage1_Field104 int32 = 0
const Default_GoogleMessage1_Field100 int32 = 0
const Default_GoogleMessage1_Field101 int32 = 0
const Default_GoogleMessage1_Field29 int32 = 0
const Default_GoogleMessage1_Field30 bool = false
const Default_GoogleMessage1_Field60 int32 = -1
const Default_GoogleMessage1_Field271 int32 = -1
const Default_GoogleMessage1_Field272 int32 = -1
const Default_GoogleMessage1_Field23 int32 = 0
const Default_GoogleMessage1_Field24 bool = false
const Default_GoogleMessage1_Field25 int32 = 0
const Default_GoogleMessage1_Field67 int32 = 0
const Default_GoogleMessage1_Field128 int32 = 0
const Default_GoogleMessage1_Field129 string = "xxxxxxxxxxxxxxxxxxxxx"
const Default_GoogleMessage1_Field131 int32 = 0

func (x *GoogleMessage1) GetField1() string {
	if x != nil && x.Field1 != nil {
		return *x.Field1
	}
	return ""
}

func (x *GoogleMessage1) GetField9() string {
	if x != nil && x.Field9 != nil {
		return *x.Field9
	}
	return ""
}

func (x *GoogleMessage1) GetField18() string {
	if x != nil && x.Field18 != nil {
		return *x.Field18
	}
	return ""
}

func (x *GoogleMessage1) GetField80() bool {
	if x != nil && x.Field80 != nil {
		return *x.Field80
	}
	return Default_GoogleMessage1_Field80
}

func (x *GoogleMessage1) GetField81() bool {
	if x != nil && x.Field81 != nil {
		return *x.Field81
	}
	return Default_GoogleMessage1_Field81
}

func (x *GoogleMessage1) GetField2() int32 {
	if x != nil && x.Field2 != nil {
		return *x.Field2
	}
	return 0
}

func (x *GoogleMessage1) GetField3() int32 {
	if x != nil && x.Field3 != nil {
		return *x.Field3
	}
	return 0
}

func (x *GoogleMessage1) GetField280() int32 {
	if x != nil && x.Field280 != nil {
		return *x.Field280
	}
	return 0
}

func (x *GoogleMessage1) GetField6() int32 {
	if x != nil && x.Field6 != nil {
		return *x.Field6
	}
	return Default_GoogleMessage1_Field6
}

func (x *GoogleMessage1) GetField22() int64 {
	if x != nil && x.Field22 != nil {
		return *x.Field22
	}
	return 0
}

func (x *GoogleMessage1) GetField4() string {
	if x != nil && x.Field4 != nil {
		return *x.Field4
	}
	return ""
}

func (x *GoogleMessage1) GetField5() []uint64 {
	if x != nil {
		return x.Field5
	}
	return nil
}

func (x *GoogleMessage1) GetField59() bool {
	if x != nil && x.Field59 != nil {
		return *x.Field59
	}
	return Default_GoogleMessage1_Field59
}

func (x *GoogleMessage1) GetField7() string {
	if x != nil && x.Field7 != nil {
		return *x.Field7
	}
	return ""
}

func (x *GoogleMessage1) GetField16() int32 {
	if x != nil && x.Field16 != nil {
		return *x.Field16
	}
	return 0
}

func (x *GoogleMessage1) GetField130() int32 {
	if x != nil && x.Field130 != nil {
		return *x.Field130
	}
	return Default_GoogleMessage1_Field130
}

func (x *GoogleMessage1) GetField12() bool {
	if x != nil && x.Field12 != nil {
		return *x.Field12
	}
	return Default_GoogleMessage1_Field12
}

func (x *GoogleMessage1) GetField17() bool {
	if x != nil && x.Field17 != nil {
		return *x.Field17
	}
	return Default_GoogleMessage1_Field17
}

func (x *GoogleMessage1) GetField13() bool {
	if x != nil && x.Field13 != nil {
		return *x.Field13
	}
	return Default_GoogleMessage1_Field13
}

func (x *GoogleMessage1) GetField14() bool {
	if x != nil && x.Field14 != nil {
		return *x.Field14
	}
	return Default_GoogleMessage1_Field14
}

func (x *GoogleMessage1) GetField104() int32 {
	if x != nil && x.Field104 != nil {
		return *x.Field104
	}
	return Default_GoogleMessage1_Field104
}

func (x *GoogleMessage1) GetField100() int32 {
	if x != nil && x.Field100 != nil {
		return *x.Field100
	}
	return Default_GoogleMessage1_Field100
}

func (x *GoogleMessage1) GetField101() int32 {
	if x != nil && x.Field101 != nil {
		return *x.Field101
	}
	return Default_GoogleMessage1_Field101
}

func (x *GoogleMessage1) GetField102() string {
	if x != nil && x.Field102 != nil {
		return *x.Field102
	}
	return ""
}

func (x *GoogleMessage1) GetField103() string {
	if x != nil && x.Field103 != nil {
		return *x.Field103
	}
	return ""
}

func (x *GoogleMessage1) GetField29() int32 {
	if x != nil && x.Field29 != nil {
		return *x.Field29
	}
	return Default_GoogleMessage1_Field29
}

func (x *GoogleMessage1) GetField30() bool {
	if x != nil && x.Field30 != nil {
		return *x.Field30
	}
	return Default_GoogleMessage1_Field30
}

func (x *GoogleMessage1) GetField60() int32 {
	if x != nil && x.Field60 != nil {
		return *x.Field60
	}
	return Default_GoogleMessage1_Field60
}

func (x *GoogleMessage1) GetField271() int32 {
	if x != nil && x.Field271 != nil {
		return *x.Field271
	}
	return Default_GoogleMessage1_Field271
}

func (x *GoogleMessage1) GetField272() int32 {
	if x != nil && x.Field272 != nil {
		return *x.Field272
	}
	return Default_GoogleMessage1_Field272
}

func (x *GoogleMessage1) GetField150() int32 {
	if x != nil && x.Field150 != nil {
		return *x.Field150
	}
	return 0
}

func (x *GoogleMessage1) GetField23() int32 {
	if x != nil && x.Field23 != nil {
		return *x.Field23
	}
	return Default_GoogleMessage1_Field23
}

func (x *GoogleMessage1) GetField24() bool {
	if x != nil && x.Field24 != nil {
		return *x.Field24
	}
	return Default_GoogleMessage1_Field24
}

func (x *GoogleMessage1) GetField25() int32 {
	if x != nil && x.Field25 != nil {
		return *x.Field25
	}
	return Default_GoogleMessage1_Field25
}

func (x *GoogleMessage1) GetField15() *GoogleMessage1SubMessage {
	if x != nil {
		return x.Field15
	}
	return nil
}

func (x *GoogleMessage1) GetField78() bool {
	if x != nil && x.Field78 != nil {
		return *x.Field78
	}
	return false
}

func (x *GoogleMessage1) GetField67() int32 {
	if x != nil && x.Field67 != nil {
		return *x.Field67
	}
	return Default_GoogleMessage1_Field67
}

func (x *GoogleMessage1) GetField68() int32 {
	if x != nil && x.Field68 != nil {
		return *x.Field68
	}
	return 0
}

func (x *GoogleMessage1) GetField128() int32 {
	if x != nil && x.Field128 != nil {
		return *x.Field128
	}
	return Default_GoogleMessage1_Field128
}

func (x *GoogleMessage1) GetField129() string {
	if x != nil && x.Field129 != nil {
		return *x.Field129
	}
	return Default_GoogleMessage1_Field129
}

func (x *GoogleMessage1) GetField131() int32 {
	if x != nil && x.Field131 != nil {
		return *x.Field131
	}
	return Default_GoogleMessage1_Field131
}

type GoogleMessage1SubMessage struct {
	Field1        *int32  `protobuf:"varint,1,opt,name=field1,def=0" json:"field1,omitempty"`
	Field2        *int32  `protobuf:"varint,2,opt,name=field2,def=0" json:"field2,omitempty"`
	Field3        *int32  `protobuf:"varint,3,opt,name=field3,def=0" json:"field3,omitempty"`
	Field15       *string `protobuf:"bytes,15,opt,name=field15" json:"field15,omitempty"`
	Field12       *bool   `protobuf:"varint,12,opt,name=field12,def=1" json:"field12,omitempty"`
	Field13       *int64  `protobuf:"varint,13,opt,name=field13" json:"field13,omitempty"`
	Field14       *int64  `protobuf:"varint,14,opt,name=field14" json:"field14,omitempty"`
	Field16       *int32  `protobuf:"varint,16,opt,name=field16" json:"field16,omitempty"`
	Field19       *int32  `protobuf:"varint,19,opt,name=field19,def=2" json:"field19,omitempty"`
	Field20       *bool   `protobuf:"varint,20,opt,name=field20,def=1" json:"field20,omitempty"`
	Field28       *bool   `protobuf:"varint,28,opt,name=field28,def=1" json:"field28,omitempty"`
	Field21       *uint64 `protobuf:"fixed64,21,opt,name=field21" json:"field21,omitempty"`
	Field22       *int32  `protobuf:"varint,22,opt,name=field22" json:"field22,omitempty"`
	Field23       *bool   `protobuf:"varint,23,opt,name=field23,def=0" json:"field23,omitempty"`
	Field206      *bool   `protobuf:"varint,206,opt,name=field206,def=0" json:"field206,omitempty"`
	Field203      *uint32 `protobuf:"fixed32,203,opt,name=field203" json:"field203,omitempty"`
	Field204      *int32  `protobuf:"varint,204,opt,name=field204" json:"field204,omitempty"`
	Field205      *string `protobuf:"bytes,205,opt,name=field205" json:"field205,omitempty"`
	Field207      *uint64 `protobuf:"varint,207,opt,name=field207" json:"field207,omitempty"`
	Field300      *uint64 `protobuf:"varint,300,opt,name=field300" json:"field300,omitempty"`
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields
}

func (x *GoogleMessage1SubMessage) Reset() {
	*x = GoogleMessage1SubMessage{}
}

func (x *GoogleMessage1SubMessage) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GoogleMessage1SubMessage) ProtoMessage() {}

func (x *GoogleMessage1SubMessage) ProtoReflect() protoreflect.Message {
	return file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_msgTypes[1].MessageOf(x)
}

func (m *GoogleMessage1SubMessage) XXX_Methods() *protoiface.Methods {
	return file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_msgTypes[1].Methods()
}

// Deprecated: Use GoogleMessage1SubMessage.ProtoReflect.Type instead.
func (*GoogleMessage1SubMessage) Descriptor() ([]byte, []int) {
	return file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_rawDescGZIP(), []int{1}
}

const Default_GoogleMessage1SubMessage_Field1 int32 = 0
const Default_GoogleMessage1SubMessage_Field2 int32 = 0
const Default_GoogleMessage1SubMessage_Field3 int32 = 0
const Default_GoogleMessage1SubMessage_Field12 bool = true
const Default_GoogleMessage1SubMessage_Field19 int32 = 2
const Default_GoogleMessage1SubMessage_Field20 bool = true
const Default_GoogleMessage1SubMessage_Field28 bool = true
const Default_GoogleMessage1SubMessage_Field23 bool = false
const Default_GoogleMessage1SubMessage_Field206 bool = false

func (x *GoogleMessage1SubMessage) GetField1() int32 {
	if x != nil && x.Field1 != nil {
		return *x.Field1
	}
	return Default_GoogleMessage1SubMessage_Field1
}

func (x *GoogleMessage1SubMessage) GetField2() int32 {
	if x != nil && x.Field2 != nil {
		return *x.Field2
	}
	return Default_GoogleMessage1SubMessage_Field2
}

func (x *GoogleMessage1SubMessage) GetField3() int32 {
	if x != nil && x.Field3 != nil {
		return *x.Field3
	}
	return Default_GoogleMessage1SubMessage_Field3
}

func (x *GoogleMessage1SubMessage) GetField15() string {
	if x != nil && x.Field15 != nil {
		return *x.Field15
	}
	return ""
}

func (x *GoogleMessage1SubMessage) GetField12() bool {
	if x != nil && x.Field12 != nil {
		return *x.Field12
	}
	return Default_GoogleMessage1SubMessage_Field12
}

func (x *GoogleMessage1SubMessage) GetField13() int64 {
	if x != nil && x.Field13 != nil {
		return *x.Field13
	}
	return 0
}

func (x *GoogleMessage1SubMessage) GetField14() int64 {
	if x != nil && x.Field14 != nil {
		return *x.Field14
	}
	return 0
}

func (x *GoogleMessage1SubMessage) GetField16() int32 {
	if x != nil && x.Field16 != nil {
		return *x.Field16
	}
	return 0
}

func (x *GoogleMessage1SubMessage) GetField19() int32 {
	if x != nil && x.Field19 != nil {
		return *x.Field19
	}
	return Default_GoogleMessage1SubMessage_Field19
}

func (x *GoogleMessage1SubMessage) GetField20() bool {
	if x != nil && x.Field20 != nil {
		return *x.Field20
	}
	return Default_GoogleMessage1SubMessage_Field20
}

func (x *GoogleMessage1SubMessage) GetField28() bool {
	if x != nil && x.Field28 != nil {
		return *x.Field28
	}
	return Default_GoogleMessage1SubMessage_Field28
}

func (x *GoogleMessage1SubMessage) GetField21() uint64 {
	if x != nil && x.Field21 != nil {
		return *x.Field21
	}
	return 0
}

func (x *GoogleMessage1SubMessage) GetField22() int32 {
	if x != nil && x.Field22 != nil {
		return *x.Field22
	}
	return 0
}

func (x *GoogleMessage1SubMessage) GetField23() bool {
	if x != nil && x.Field23 != nil {
		return *x.Field23
	}
	return Default_GoogleMessage1SubMessage_Field23
}

func (x *GoogleMessage1SubMessage) GetField206() bool {
	if x != nil && x.Field206 != nil {
		return *x.Field206
	}
	return Default_GoogleMessage1SubMessage_Field206
}

func (x *GoogleMessage1SubMessage) GetField203() uint32 {
	if x != nil && x.Field203 != nil {
		return *x.Field203
	}
	return 0
}

func (x *GoogleMessage1SubMessage) GetField204() int32 {
	if x != nil && x.Field204 != nil {
		return *x.Field204
	}
	return 0
}

func (x *GoogleMessage1SubMessage) GetField205() string {
	if x != nil && x.Field205 != nil {
		return *x.Field205
	}
	return ""
}

func (x *GoogleMessage1SubMessage) GetField207() uint64 {
	if x != nil && x.Field207 != nil {
		return *x.Field207
	}
	return 0
}

func (x *GoogleMessage1SubMessage) GetField300() uint64 {
	if x != nil && x.Field300 != nil {
		return *x.Field300
	}
	return 0
}

var File_datasets_google_message1_proto2_benchmark_message1_proto2_proto protoreflect.FileDescriptor

var file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_rawDesc = []byte{
	0x0a, 0x3f, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
	0x65, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
	0x32, 0x2f, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x6d, 0x61, 0x72, 0x6b, 0x5f, 0x6d, 0x65, 0x73, 0x73,
	0x61, 0x67, 0x65, 0x31, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74,
	0x6f, 0x12, 0x11, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x2e, 0x70, 0x72,
	0x6f, 0x74, 0x6f, 0x32, 0x22, 0xf7, 0x09, 0x0a, 0x0e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x4d,
	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x31, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x31, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x12,
	0x16, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x39, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x39, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x31, 0x38, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31,
	0x38, 0x12, 0x1f, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x38, 0x30, 0x18, 0x50, 0x20, 0x01,
	0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x38, 0x30, 0x12, 0x1e, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x38, 0x31, 0x18, 0x51, 0x20,
	0x01, 0x28, 0x08, 0x3a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x38, 0x31, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x18, 0x02, 0x20, 0x02,
	0x28, 0x05, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69,
	0x65, 0x6c, 0x64, 0x33, 0x18, 0x03, 0x20, 0x02, 0x28, 0x05, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c,
	0x64, 0x33, 0x12, 0x1b, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x38, 0x30, 0x18, 0x98,
	0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x38, 0x30, 0x12,
	0x19, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x36, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x3a,
	0x01, 0x30, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x36, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69,
	0x65, 0x6c, 0x64, 0x32, 0x32, 0x18, 0x16, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x66, 0x69, 0x65,
	0x6c, 0x64, 0x32, 0x32, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x34, 0x18, 0x04,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x34, 0x12, 0x16, 0x0a, 0x06,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x35, 0x18, 0x05, 0x20, 0x03, 0x28, 0x06, 0x52, 0x06, 0x66, 0x69,
	0x65, 0x6c, 0x64, 0x35, 0x12, 0x1f, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x35, 0x39, 0x18,
	0x3b, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x07, 0x66, 0x69,
	0x65, 0x6c, 0x64, 0x35, 0x39, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x37, 0x18,
	0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x37, 0x12, 0x18, 0x0a,
	0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x36, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x36, 0x12, 0x1e, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x31, 0x33, 0x30, 0x18, 0x82, 0x01, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x01, 0x30, 0x52, 0x08, 0x66,
	0x69, 0x65, 0x6c, 0x64, 0x31, 0x33, 0x30, 0x12, 0x1e, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x31, 0x32, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x07,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x32, 0x12, 0x1e, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x31, 0x37, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x07,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x37, 0x12, 0x1e, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x31, 0x33, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x07,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x33, 0x12, 0x1e, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x31, 0x34, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x07,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x34, 0x12, 0x1d, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x31, 0x30, 0x34, 0x18, 0x68, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x01, 0x30, 0x52, 0x08, 0x66, 0x69,
	0x65, 0x6c, 0x64, 0x31, 0x30, 0x34, 0x12, 0x1d, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31,
	0x30, 0x30, 0x18, 0x64, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x01, 0x30, 0x52, 0x08, 0x66, 0x69, 0x65,
	0x6c, 0x64, 0x31, 0x30, 0x30, 0x12, 0x1d, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x30,
	0x31, 0x18, 0x65, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x01, 0x30, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c,
	0x64, 0x31, 0x30, 0x31, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x30, 0x32,
	0x18, 0x66, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x30, 0x32,
	0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x30, 0x33, 0x18, 0x67, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x30, 0x33, 0x12, 0x1b, 0x0a, 0x07,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x39, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x01, 0x30,
	0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x39, 0x12, 0x1f, 0x0a, 0x07, 0x66, 0x69, 0x65,
	0x6c, 0x64, 0x33, 0x30, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73,
	0x65, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x33, 0x30, 0x12, 0x1c, 0x0a, 0x07, 0x66, 0x69,
	0x65, 0x6c, 0x64, 0x36, 0x30, 0x18, 0x3c, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x02, 0x2d, 0x31, 0x52,
	0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x36, 0x30, 0x12, 0x1f, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c,
	0x64, 0x32, 0x37, 0x31, 0x18, 0x8f, 0x02, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x02, 0x2d, 0x31, 0x52,
	0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x37, 0x31, 0x12, 0x1f, 0x0a, 0x08, 0x66, 0x69, 0x65,
	0x6c, 0x64, 0x32, 0x37, 0x32, 0x18, 0x90, 0x02, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x02, 0x2d, 0x31,
	0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x37, 0x32, 0x12, 0x1b, 0x0a, 0x08, 0x66, 0x69,
	0x65, 0x6c, 0x64, 0x31, 0x35, 0x30, 0x18, 0x96, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x66,
	0x69, 0x65, 0x6c, 0x64, 0x31, 0x35, 0x30, 0x12, 0x1b, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x32, 0x33, 0x18, 0x17, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x01, 0x30, 0x52, 0x07, 0x66, 0x69, 0x65,
	0x6c, 0x64, 0x32, 0x33, 0x12, 0x1f, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x34, 0x18,
	0x18, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x07, 0x66, 0x69,
	0x65, 0x6c, 0x64, 0x32, 0x34, 0x12, 0x1b, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x35,
	0x18, 0x19, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x01, 0x30, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x32, 0x35, 0x12, 0x45, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x35, 0x18, 0x0f, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x6d, 0x61, 0x72, 0x6b, 0x73,
	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x4d, 0x65,
	0x73, 0x73, 0x61, 0x67, 0x65, 0x31, 0x53, 0x75, 0x62, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
	0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x35, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65,
	0x6c, 0x64, 0x37, 0x38, 0x18, 0x4e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c,
	0x64, 0x37, 0x38, 0x12, 0x1b, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x36, 0x37, 0x18, 0x43,
	0x20, 0x01, 0x28, 0x05, 0x3a, 0x01, 0x30, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x36, 0x37,
	0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x36, 0x38, 0x18, 0x44, 0x20, 0x01, 0x28,
	0x05, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x36, 0x38, 0x12, 0x1e, 0x0a, 0x08, 0x66, 0x69,
	0x65, 0x6c, 0x64, 0x31, 0x32, 0x38, 0x18, 0x80, 0x01, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x01, 0x30,
	0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x32, 0x38, 0x12, 0x32, 0x0a, 0x08, 0x66, 0x69,
	0x65, 0x6c, 0x64, 0x31, 0x32, 0x39, 0x18, 0x81, 0x01, 0x20, 0x01, 0x28, 0x09, 0x3a, 0x15, 0x78,
	0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
	0x78, 0x78, 0x78, 0x78, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x32, 0x39, 0x12, 0x1e,
	0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x33, 0x31, 0x18, 0x83, 0x01, 0x20, 0x01, 0x28,
	0x05, 0x3a, 0x01, 0x30, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x33, 0x31, 0x22, 0xda,
	0x04, 0x0a, 0x18, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
	0x31, 0x53, 0x75, 0x62, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x19, 0x0a, 0x06, 0x66,
	0x69, 0x65, 0x6c, 0x64, 0x31, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x01, 0x30, 0x52, 0x06,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x12, 0x19, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32,
	0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x01, 0x30, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x32, 0x12, 0x19, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x33, 0x18, 0x03, 0x20, 0x01, 0x28,
	0x05, 0x3a, 0x01, 0x30, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x33, 0x12, 0x18, 0x0a, 0x07,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x35, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x66,
	0x69, 0x65, 0x6c, 0x64, 0x31, 0x35, 0x12, 0x1e, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31,
	0x32, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x07, 0x66,
	0x69, 0x65, 0x6c, 0x64, 0x31, 0x32, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31,
	0x33, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x33,
	0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x34, 0x18, 0x0e, 0x20, 0x01, 0x28,
	0x03, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x34, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69,
	0x65, 0x6c, 0x64, 0x31, 0x36, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x66, 0x69, 0x65,
	0x6c, 0x64, 0x31, 0x36, 0x12, 0x1b, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x39, 0x18,
	0x13, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x01, 0x32, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31,
	0x39, 0x12, 0x1e, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x30, 0x18, 0x14, 0x20, 0x01,
	0x28, 0x08, 0x3a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32,
	0x30, 0x12, 0x1e, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x38, 0x18, 0x1c, 0x20, 0x01,
	0x28, 0x08, 0x3a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32,
	0x38, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x31, 0x18, 0x15, 0x20, 0x01,
	0x28, 0x06, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x31, 0x12, 0x18, 0x0a, 0x07, 0x66,
	0x69, 0x65, 0x6c, 0x64, 0x32, 0x32, 0x18, 0x16, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x66, 0x69,
	0x65, 0x6c, 0x64, 0x32, 0x32, 0x12, 0x1f, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x33,
	0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x07, 0x66,
	0x69, 0x65, 0x6c, 0x64, 0x32, 0x33, 0x12, 0x22, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32,
	0x30, 0x36, 0x18, 0xce, 0x01, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65,
	0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x30, 0x36, 0x12, 0x1b, 0x0a, 0x08, 0x66, 0x69,
	0x65, 0x6c, 0x64, 0x32, 0x30, 0x33, 0x18, 0xcb, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x08, 0x66,
	0x69, 0x65, 0x6c, 0x64, 0x32, 0x30, 0x33, 0x12, 0x1b, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x32, 0x30, 0x34, 0x18, 0xcc, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c,
	0x64, 0x32, 0x30, 0x34, 0x12, 0x1b, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x30, 0x35,
	0x18, 0xcd, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x30,
	0x35, 0x12, 0x1b, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x30, 0x37, 0x18, 0xcf, 0x01,
	0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x30, 0x37, 0x12, 0x1b,
	0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x33, 0x30, 0x30, 0x18, 0xac, 0x02, 0x20, 0x01, 0x28,
	0x04, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x33, 0x30, 0x30, 0x42, 0x80, 0x01, 0x0a, 0x1e,
	0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
	0x62, 0x75, 0x66, 0x2e, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x48, 0x01,
	0x5a, 0x59, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e,
	0x6f, 0x72, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x69, 0x6e, 0x74,
	0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73,
	0x2f, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x2f, 0x64, 0x61, 0x74, 0x61,
	0x73, 0x65, 0x74, 0x73, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x6d, 0x65, 0x73, 0x73,
	0x61, 0x67, 0x65, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xf8, 0x01, 0x01,
}

var (
	file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_rawDescOnce sync.Once
	file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_rawDescData = file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_rawDesc
)

func file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_rawDescGZIP() []byte {
	file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_rawDescOnce.Do(func() {
		file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_rawDescData = protoimpl.X.CompressGZIP(file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_rawDescData)
	})
	return file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_rawDescData
}

var file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
var file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_goTypes = []interface{}{
	(*GoogleMessage1)(nil),           // 0: benchmarks.proto2.GoogleMessage1
	(*GoogleMessage1SubMessage)(nil), // 1: benchmarks.proto2.GoogleMessage1SubMessage
}
var file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_depIdxs = []int32{
	1, // benchmarks.proto2.GoogleMessage1.field15:type_name -> benchmarks.proto2.GoogleMessage1SubMessage
	1, // starting offset of method output_type sub-list
	1, // starting offset of method input_type sub-list
	1, // starting offset of extension type_name sub-list
	1, // starting offset of extension extendee sub-list
	0, // starting offset of field type_name sub-list
}

func init() { file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_init() }
func file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_init() {
	if File_datasets_google_message1_proto2_benchmark_message1_proto2_proto != nil {
		return
	}
	if !protoimpl.UnsafeEnabled {
		file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GoogleMessage1); i {
			case 41:
				return &v.sizeCache
			case 42:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GoogleMessage1SubMessage); i {
			case 20:
				return &v.sizeCache
			case 21:
				return &v.unknownFields
			default:
				return nil
			}
		}
	}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			RawDescriptor: file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_rawDesc,
			NumEnums:      0,
			NumMessages:   2,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_goTypes,
		DependencyIndexes: file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_depIdxs,
		MessageInfos:      file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_msgTypes,
	}.Build()
	File_datasets_google_message1_proto2_benchmark_message1_proto2_proto = out.File
	file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_rawDesc = nil
	file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_goTypes = nil
	file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_depIdxs = nil
}
