diff --git a/cmd/protoc-gen-go-grpc/testdata/grpc/grpc.pb.go b/cmd/protoc-gen-go-grpc/testdata/grpc/grpc.pb.go
index 8d22560..44f44d4 100644
--- a/cmd/protoc-gen-go-grpc/testdata/grpc/grpc.pb.go
+++ b/cmd/protoc-gen-go-grpc/testdata/grpc/grpc.pb.go
@@ -22,6 +22,11 @@
 
 func (x *Request) Reset() {
 	*x = Request{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_grpc_grpc_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Request) String() string {
@@ -55,6 +60,11 @@
 
 func (x *Response) Reset() {
 	*x = Response{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_grpc_grpc_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Response) String() string {
diff --git a/cmd/protoc-gen-go/internal_gengo/main.go b/cmd/protoc-gen-go/internal_gengo/main.go
index 12eeb36..8c7dfec 100644
--- a/cmd/protoc-gen-go/internal_gengo/main.go
+++ b/cmd/protoc-gen-go/internal_gengo/main.go
@@ -601,6 +601,15 @@
 	// Reset method.
 	g.P("func (x *", m.GoIdent, ") Reset() {")
 	g.P("*x = ", m.GoIdent, "{}")
+	if generateMessageStateFields {
+		idx := f.allMessagesByPtr[m.Message]
+		typesVar := messageTypesVarName(f)
+		g.P("if ", protoimplPackage.Ident("UnsafeEnabled"), " {")
+		g.P("mi := &", typesVar, "[", idx, "]")
+		g.P("ms := ", protoimplPackage.Ident("X"), ".MessageStateOf(", protoimplPackage.Ident("Pointer"), "(x))")
+		g.P("ms.StoreMessageInfo(mi)")
+		g.P("}")
+	}
 	g.P("}")
 	g.P()
 
diff --git a/cmd/protoc-gen-go/testdata/annotations/annotations.pb.go b/cmd/protoc-gen-go/testdata/annotations/annotations.pb.go
index 0efeb5e..6207c38 100644
--- a/cmd/protoc-gen-go/testdata/annotations/annotations.pb.go
+++ b/cmd/protoc-gen-go/testdata/annotations/annotations.pb.go
@@ -77,6 +77,11 @@
 
 func (x *AnnotationsTestMessage) Reset() {
 	*x = AnnotationsTestMessage{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_annotations_annotations_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *AnnotationsTestMessage) String() string {
diff --git a/cmd/protoc-gen-go/testdata/annotations/annotations.pb.go.meta b/cmd/protoc-gen-go/testdata/annotations/annotations.pb.go.meta
index 276710e..64491ce 100644
--- a/cmd/protoc-gen-go/testdata/annotations/annotations.pb.go.meta
+++ b/cmd/protoc-gen-go/testdata/annotations/annotations.pb.go.meta
@@ -1 +1 @@
-annotation:{path:5 path:0 source_file:"annotations/annotations.proto" begin:443 end:462} annotation:{path:5 path:0 path:2 path:0 source_file:"annotations/annotations.proto" begin:479 end:526} annotation:{path:4 path:0 source_file:"annotations/annotations.proto" begin:1804 end:1826} annotation:{path:4 path:0 path:2 path:0 source_file:"annotations/annotations.proto" begin:1950 end:1970} annotation:{path:4 path:0 path:2 path:0 source_file:"annotations/annotations.proto" begin:2864 end:2887}
\ No newline at end of file
+annotation:{path:5 path:0 source_file:"annotations/annotations.proto" begin:443 end:462} annotation:{path:5 path:0 path:2 path:0 source_file:"annotations/annotations.proto" begin:479 end:526} annotation:{path:4 path:0 source_file:"annotations/annotations.proto" begin:1804 end:1826} annotation:{path:4 path:0 path:2 path:0 source_file:"annotations/annotations.proto" begin:1950 end:1970} annotation:{path:4 path:0 path:2 path:0 source_file:"annotations/annotations.proto" begin:3036 end:3059}
\ No newline at end of file
diff --git a/cmd/protoc-gen-go/testdata/comments/comments.pb.go b/cmd/protoc-gen-go/testdata/comments/comments.pb.go
index 3c23def..22cb9a3 100644
--- a/cmd/protoc-gen-go/testdata/comments/comments.pb.go
+++ b/cmd/protoc-gen-go/testdata/comments/comments.pb.go
@@ -94,6 +94,11 @@
 
 func (x *Message1) Reset() {
 	*x = Message1{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_comments_comments_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message1) String() string {
@@ -169,6 +174,11 @@
 
 func (x *Message2) Reset() {
 	*x = Message2{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_comments_comments_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message2) String() string {
@@ -203,6 +213,11 @@
 
 func (x *Message1_Message1A) Reset() {
 	*x = Message1_Message1A{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_comments_comments_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message1_Message1A) String() string {
@@ -237,6 +252,11 @@
 
 func (x *Message1_Message1B) Reset() {
 	*x = Message1_Message1B{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_comments_comments_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message1_Message1B) String() string {
@@ -271,6 +291,11 @@
 
 func (x *Message2_Message2A) Reset() {
 	*x = Message2_Message2A{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_comments_comments_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message2_Message2A) String() string {
@@ -305,6 +330,11 @@
 
 func (x *Message2_Message2B) Reset() {
 	*x = Message2_Message2B{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_comments_comments_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message2_Message2B) String() string {
diff --git a/cmd/protoc-gen-go/testdata/comments/deprecated.pb.go b/cmd/protoc-gen-go/testdata/comments/deprecated.pb.go
index fe52dc8..5cc1b0f 100644
--- a/cmd/protoc-gen-go/testdata/comments/deprecated.pb.go
+++ b/cmd/protoc-gen-go/testdata/comments/deprecated.pb.go
@@ -71,6 +71,11 @@
 
 func (x *DeprecatedMessage) Reset() {
 	*x = DeprecatedMessage{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_comments_deprecated_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *DeprecatedMessage) String() string {
diff --git a/cmd/protoc-gen-go/testdata/extensions/base/base.pb.go b/cmd/protoc-gen-go/testdata/extensions/base/base.pb.go
index 8b30659..041e154 100644
--- a/cmd/protoc-gen-go/testdata/extensions/base/base.pb.go
+++ b/cmd/protoc-gen-go/testdata/extensions/base/base.pb.go
@@ -26,6 +26,11 @@
 
 func (x *BaseMessage) Reset() {
 	*x = BaseMessage{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_extensions_base_base_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *BaseMessage) String() string {
@@ -77,6 +82,11 @@
 
 func (x *MessageSetWireFormatMessage) Reset() {
 	*x = MessageSetWireFormatMessage{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_extensions_base_base_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *MessageSetWireFormatMessage) String() string {
diff --git a/cmd/protoc-gen-go/testdata/extensions/ext/ext.pb.go b/cmd/protoc-gen-go/testdata/extensions/ext/ext.pb.go
index 0f17349..ec8714f 100644
--- a/cmd/protoc-gen-go/testdata/extensions/ext/ext.pb.go
+++ b/cmd/protoc-gen-go/testdata/extensions/ext/ext.pb.go
@@ -80,6 +80,11 @@
 
 func (x *Message) Reset() {
 	*x = Message{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_extensions_ext_ext_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message) String() string {
@@ -122,6 +127,11 @@
 
 func (x *ExtensionGroup) Reset() {
 	*x = ExtensionGroup{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_extensions_ext_ext_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *ExtensionGroup) String() string {
@@ -163,6 +173,11 @@
 
 func (x *ExtendingMessage) Reset() {
 	*x = ExtendingMessage{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_extensions_ext_ext_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *ExtendingMessage) String() string {
@@ -198,6 +213,11 @@
 
 func (x *RepeatedGroup) Reset() {
 	*x = RepeatedGroup{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_extensions_ext_ext_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *RepeatedGroup) String() string {
@@ -240,6 +260,11 @@
 
 func (x *Extendable) Reset() {
 	*x = Extendable{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_extensions_ext_ext_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Extendable) String() string {
@@ -283,6 +308,11 @@
 
 func (x *MessageSetWireFormatExtension) Reset() {
 	*x = MessageSetWireFormatExtension{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_extensions_ext_ext_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *MessageSetWireFormatExtension) String() string {
@@ -316,6 +346,11 @@
 
 func (x *Message_M) Reset() {
 	*x = Message_M{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_extensions_ext_ext_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message_M) String() string {
@@ -349,6 +384,11 @@
 
 func (x *ExtendingMessage_ExtendingMessageSubmessage) Reset() {
 	*x = ExtendingMessage_ExtendingMessageSubmessage{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_extensions_ext_ext_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *ExtendingMessage_ExtendingMessageSubmessage) String() string {
diff --git a/cmd/protoc-gen-go/testdata/extensions/extra/extra.pb.go b/cmd/protoc-gen-go/testdata/extensions/extra/extra.pb.go
index 2714844..46dc1e0 100644
--- a/cmd/protoc-gen-go/testdata/extensions/extra/extra.pb.go
+++ b/cmd/protoc-gen-go/testdata/extensions/extra/extra.pb.go
@@ -24,6 +24,11 @@
 
 func (x *ExtraMessage) Reset() {
 	*x = ExtraMessage{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_extensions_extra_extra_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *ExtraMessage) String() string {
diff --git a/cmd/protoc-gen-go/testdata/extensions/proto3/ext3.pb.go b/cmd/protoc-gen-go/testdata/extensions/proto3/ext3.pb.go
index b21730c..23733e5 100644
--- a/cmd/protoc-gen-go/testdata/extensions/proto3/ext3.pb.go
+++ b/cmd/protoc-gen-go/testdata/extensions/proto3/ext3.pb.go
@@ -66,6 +66,11 @@
 
 func (x *Message) Reset() {
 	*x = Message{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_extensions_proto3_ext3_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message) String() string {
diff --git a/cmd/protoc-gen-go/testdata/fieldnames/fieldnames.pb.go b/cmd/protoc-gen-go/testdata/fieldnames/fieldnames.pb.go
index af5e87f..6a314bf 100644
--- a/cmd/protoc-gen-go/testdata/fieldnames/fieldnames.pb.go
+++ b/cmd/protoc-gen-go/testdata/fieldnames/fieldnames.pb.go
@@ -62,6 +62,11 @@
 
 func (x *Message) Reset() {
 	*x = Message{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_fieldnames_fieldnames_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message) String() string {
@@ -278,6 +283,11 @@
 
 func (x *Message_OneofMessageConflict) Reset() {
 	*x = Message_OneofMessageConflict{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_fieldnames_fieldnames_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message_OneofMessageConflict) String() string {
diff --git a/cmd/protoc-gen-go/testdata/import_public/a.pb.go b/cmd/protoc-gen-go/testdata/import_public/a.pb.go
index 66d07eb..10e86fe 100644
--- a/cmd/protoc-gen-go/testdata/import_public/a.pb.go
+++ b/cmd/protoc-gen-go/testdata/import_public/a.pb.go
@@ -65,6 +65,11 @@
 
 func (x *Public) Reset() {
 	*x = Public{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_import_public_a_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Public) String() string {
diff --git a/cmd/protoc-gen-go/testdata/import_public/b.pb.go b/cmd/protoc-gen-go/testdata/import_public/b.pb.go
index 4eb052e..96f246d 100644
--- a/cmd/protoc-gen-go/testdata/import_public/b.pb.go
+++ b/cmd/protoc-gen-go/testdata/import_public/b.pb.go
@@ -26,6 +26,11 @@
 
 func (x *Local) Reset() {
 	*x = Local{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_import_public_b_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Local) String() string {
diff --git a/cmd/protoc-gen-go/testdata/import_public/c.pb.go b/cmd/protoc-gen-go/testdata/import_public/c.pb.go
index 64e3087..d7fe3ff 100644
--- a/cmd/protoc-gen-go/testdata/import_public/c.pb.go
+++ b/cmd/protoc-gen-go/testdata/import_public/c.pb.go
@@ -29,6 +29,11 @@
 
 func (x *UsingPublicImport) Reset() {
 	*x = UsingPublicImport{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_import_public_c_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *UsingPublicImport) String() string {
diff --git a/cmd/protoc-gen-go/testdata/import_public/sub/a.pb.go b/cmd/protoc-gen-go/testdata/import_public/sub/a.pb.go
index ec0b448..6777f24 100644
--- a/cmd/protoc-gen-go/testdata/import_public/sub/a.pb.go
+++ b/cmd/protoc-gen-go/testdata/import_public/sub/a.pb.go
@@ -210,6 +210,11 @@
 
 func (x *M) Reset() {
 	*x = M{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_import_public_sub_a_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *M) String() string {
@@ -322,6 +327,11 @@
 
 func (x *M_Submessage) Reset() {
 	*x = M_Submessage{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_import_public_sub_a_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *M_Submessage) String() string {
diff --git a/cmd/protoc-gen-go/testdata/import_public/sub/b.pb.go b/cmd/protoc-gen-go/testdata/import_public/sub/b.pb.go
index 529378b..b261b61 100644
--- a/cmd/protoc-gen-go/testdata/import_public/sub/b.pb.go
+++ b/cmd/protoc-gen-go/testdata/import_public/sub/b.pb.go
@@ -22,6 +22,11 @@
 
 func (x *M2) Reset() {
 	*x = M2{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_import_public_sub_b_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *M2) String() string {
diff --git a/cmd/protoc-gen-go/testdata/import_public/sub2/a.pb.go b/cmd/protoc-gen-go/testdata/import_public/sub2/a.pb.go
index 5dadbda..cc97fb8 100644
--- a/cmd/protoc-gen-go/testdata/import_public/sub2/a.pb.go
+++ b/cmd/protoc-gen-go/testdata/import_public/sub2/a.pb.go
@@ -22,6 +22,11 @@
 
 func (x *Sub2Message) Reset() {
 	*x = Sub2Message{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_import_public_sub2_a_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Sub2Message) String() string {
diff --git a/cmd/protoc-gen-go/testdata/imports/fmt/m.pb.go b/cmd/protoc-gen-go/testdata/imports/fmt/m.pb.go
index 3532869..5dc4544 100644
--- a/cmd/protoc-gen-go/testdata/imports/fmt/m.pb.go
+++ b/cmd/protoc-gen-go/testdata/imports/fmt/m.pb.go
@@ -22,6 +22,11 @@
 
 func (x *M) Reset() {
 	*x = M{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_imports_fmt_m_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *M) String() string {
diff --git a/cmd/protoc-gen-go/testdata/imports/test_a_1/m1.pb.go b/cmd/protoc-gen-go/testdata/imports/test_a_1/m1.pb.go
index f277bb0..c4fbd38 100644
--- a/cmd/protoc-gen-go/testdata/imports/test_a_1/m1.pb.go
+++ b/cmd/protoc-gen-go/testdata/imports/test_a_1/m1.pb.go
@@ -65,6 +65,11 @@
 
 func (x *M1) Reset() {
 	*x = M1{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_imports_test_a_1_m1_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *M1) String() string {
@@ -100,6 +105,11 @@
 
 func (x *M1_1) Reset() {
 	*x = M1_1{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_imports_test_a_1_m1_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *M1_1) String() string {
diff --git a/cmd/protoc-gen-go/testdata/imports/test_a_1/m2.pb.go b/cmd/protoc-gen-go/testdata/imports/test_a_1/m2.pb.go
index f60fb18..c1b44ce 100644
--- a/cmd/protoc-gen-go/testdata/imports/test_a_1/m2.pb.go
+++ b/cmd/protoc-gen-go/testdata/imports/test_a_1/m2.pb.go
@@ -22,6 +22,11 @@
 
 func (x *M2) Reset() {
 	*x = M2{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_imports_test_a_1_m2_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *M2) String() string {
diff --git a/cmd/protoc-gen-go/testdata/imports/test_a_2/m3.pb.go b/cmd/protoc-gen-go/testdata/imports/test_a_2/m3.pb.go
index 0fc62de..0785771 100644
--- a/cmd/protoc-gen-go/testdata/imports/test_a_2/m3.pb.go
+++ b/cmd/protoc-gen-go/testdata/imports/test_a_2/m3.pb.go
@@ -22,6 +22,11 @@
 
 func (x *M3) Reset() {
 	*x = M3{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_imports_test_a_2_m3_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *M3) String() string {
diff --git a/cmd/protoc-gen-go/testdata/imports/test_a_2/m4.pb.go b/cmd/protoc-gen-go/testdata/imports/test_a_2/m4.pb.go
index 17e06ab..b352e9f 100644
--- a/cmd/protoc-gen-go/testdata/imports/test_a_2/m4.pb.go
+++ b/cmd/protoc-gen-go/testdata/imports/test_a_2/m4.pb.go
@@ -22,6 +22,11 @@
 
 func (x *M4) Reset() {
 	*x = M4{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_imports_test_a_2_m4_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *M4) String() string {
diff --git a/cmd/protoc-gen-go/testdata/imports/test_b_1/m1.pb.go b/cmd/protoc-gen-go/testdata/imports/test_b_1/m1.pb.go
index 36898b7..0dbcd26 100644
--- a/cmd/protoc-gen-go/testdata/imports/test_b_1/m1.pb.go
+++ b/cmd/protoc-gen-go/testdata/imports/test_b_1/m1.pb.go
@@ -22,6 +22,11 @@
 
 func (x *M1) Reset() {
 	*x = M1{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_imports_test_b_1_m1_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *M1) String() string {
diff --git a/cmd/protoc-gen-go/testdata/imports/test_b_1/m2.pb.go b/cmd/protoc-gen-go/testdata/imports/test_b_1/m2.pb.go
index a2bc2cb..643ec75 100644
--- a/cmd/protoc-gen-go/testdata/imports/test_b_1/m2.pb.go
+++ b/cmd/protoc-gen-go/testdata/imports/test_b_1/m2.pb.go
@@ -22,6 +22,11 @@
 
 func (x *M2) Reset() {
 	*x = M2{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_imports_test_b_1_m2_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *M2) String() string {
diff --git a/cmd/protoc-gen-go/testdata/imports/test_import_a1m1.pb.go b/cmd/protoc-gen-go/testdata/imports/test_import_a1m1.pb.go
index 825a26e..a571c97 100644
--- a/cmd/protoc-gen-go/testdata/imports/test_import_a1m1.pb.go
+++ b/cmd/protoc-gen-go/testdata/imports/test_import_a1m1.pb.go
@@ -25,6 +25,11 @@
 
 func (x *A1M1) Reset() {
 	*x = A1M1{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_imports_test_import_a1m1_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *A1M1) String() string {
diff --git a/cmd/protoc-gen-go/testdata/imports/test_import_a1m2.pb.go b/cmd/protoc-gen-go/testdata/imports/test_import_a1m2.pb.go
index d1110cf..46af226 100644
--- a/cmd/protoc-gen-go/testdata/imports/test_import_a1m2.pb.go
+++ b/cmd/protoc-gen-go/testdata/imports/test_import_a1m2.pb.go
@@ -25,6 +25,11 @@
 
 func (x *A1M2) Reset() {
 	*x = A1M2{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_imports_test_import_a1m2_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *A1M2) String() string {
diff --git a/cmd/protoc-gen-go/testdata/imports/test_import_all.pb.go b/cmd/protoc-gen-go/testdata/imports/test_import_all.pb.go
index 2d24461..26fff77 100644
--- a/cmd/protoc-gen-go/testdata/imports/test_import_all.pb.go
+++ b/cmd/protoc-gen-go/testdata/imports/test_import_all.pb.go
@@ -32,6 +32,11 @@
 
 func (x *All) Reset() {
 	*x = All{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_imports_test_import_all_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *All) String() string {
diff --git a/cmd/protoc-gen-go/testdata/issue780_oneof_conflict/test.pb.go b/cmd/protoc-gen-go/testdata/issue780_oneof_conflict/test.pb.go
index 39e64b4..679086a 100644
--- a/cmd/protoc-gen-go/testdata/issue780_oneof_conflict/test.pb.go
+++ b/cmd/protoc-gen-go/testdata/issue780_oneof_conflict/test.pb.go
@@ -22,6 +22,11 @@
 
 func (x *Foo) Reset() {
 	*x = Foo{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_issue780_oneof_conflict_test_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Foo) String() string {
diff --git a/cmd/protoc-gen-go/testdata/nopackage/nopackage.pb.go b/cmd/protoc-gen-go/testdata/nopackage/nopackage.pb.go
index b9adbb6..403803b 100644
--- a/cmd/protoc-gen-go/testdata/nopackage/nopackage.pb.go
+++ b/cmd/protoc-gen-go/testdata/nopackage/nopackage.pb.go
@@ -83,6 +83,11 @@
 
 func (x *Message) Reset() {
 	*x = Message{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_nopackage_nopackage_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message) String() string {
diff --git a/cmd/protoc-gen-go/testdata/proto2/enum.pb.go b/cmd/protoc-gen-go/testdata/proto2/enum.pb.go
index 9d27ede..b5a3eb2 100644
--- a/cmd/protoc-gen-go/testdata/proto2/enum.pb.go
+++ b/cmd/protoc-gen-go/testdata/proto2/enum.pb.go
@@ -362,6 +362,11 @@
 
 func (x *EnumContainerMessage1) Reset() {
 	*x = EnumContainerMessage1{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_proto2_enum_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *EnumContainerMessage1) String() string {
@@ -409,6 +414,11 @@
 
 func (x *EnumContainerMessage1_EnumContainerMessage2) Reset() {
 	*x = EnumContainerMessage1_EnumContainerMessage2{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_proto2_enum_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *EnumContainerMessage1_EnumContainerMessage2) String() string {
diff --git a/cmd/protoc-gen-go/testdata/proto2/fields.pb.go b/cmd/protoc-gen-go/testdata/proto2/fields.pb.go
index b2ee899..54f23a2 100644
--- a/cmd/protoc-gen-go/testdata/proto2/fields.pb.go
+++ b/cmd/protoc-gen-go/testdata/proto2/fields.pb.go
@@ -218,6 +218,11 @@
 
 func (x *FieldTestMessage) Reset() {
 	*x = FieldTestMessage{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_proto2_fields_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *FieldTestMessage) String() string {
@@ -1115,6 +1120,11 @@
 
 func (x *FieldTestMessage_OptionalGroup) Reset() {
 	*x = FieldTestMessage_OptionalGroup{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_proto2_fields_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *FieldTestMessage_OptionalGroup) String() string {
@@ -1157,6 +1167,11 @@
 
 func (x *FieldTestMessage_RequiredGroup) Reset() {
 	*x = FieldTestMessage_RequiredGroup{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_proto2_fields_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *FieldTestMessage_RequiredGroup) String() string {
@@ -1199,6 +1214,11 @@
 
 func (x *FieldTestMessage_RepeatedGroup) Reset() {
 	*x = FieldTestMessage_RepeatedGroup{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_proto2_fields_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *FieldTestMessage_RepeatedGroup) String() string {
@@ -1241,6 +1261,11 @@
 
 func (x *FieldTestMessage_OneofGroup) Reset() {
 	*x = FieldTestMessage_OneofGroup{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_proto2_fields_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *FieldTestMessage_OneofGroup) String() string {
@@ -1281,6 +1306,11 @@
 
 func (x *FieldTestMessage_Message) Reset() {
 	*x = FieldTestMessage_Message{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_proto2_fields_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *FieldTestMessage_Message) String() string {
diff --git a/cmd/protoc-gen-go/testdata/proto2/nested_messages.pb.go b/cmd/protoc-gen-go/testdata/proto2/nested_messages.pb.go
index 77a1e55..a3eb4d5 100644
--- a/cmd/protoc-gen-go/testdata/proto2/nested_messages.pb.go
+++ b/cmd/protoc-gen-go/testdata/proto2/nested_messages.pb.go
@@ -25,6 +25,11 @@
 
 func (x *Layer1) Reset() {
 	*x = Layer1{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_proto2_nested_messages_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Layer1) String() string {
@@ -74,6 +79,11 @@
 
 func (x *Layer1_Layer2) Reset() {
 	*x = Layer1_Layer2{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_proto2_nested_messages_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Layer1_Layer2) String() string {
@@ -114,6 +124,11 @@
 
 func (x *Layer1_Layer2_Layer3) Reset() {
 	*x = Layer1_Layer2_Layer3{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_proto2_nested_messages_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Layer1_Layer2_Layer3) String() string {
diff --git a/cmd/protoc-gen-go/testdata/proto2/proto2.pb.go b/cmd/protoc-gen-go/testdata/proto2/proto2.pb.go
index 571ac38..a5f191d 100644
--- a/cmd/protoc-gen-go/testdata/proto2/proto2.pb.go
+++ b/cmd/protoc-gen-go/testdata/proto2/proto2.pb.go
@@ -25,6 +25,11 @@
 
 func (x *Message) Reset() {
 	*x = Message{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_proto2_proto2_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message) String() string {
diff --git a/cmd/protoc-gen-go/testdata/proto3/fields.pb.go b/cmd/protoc-gen-go/testdata/proto3/fields.pb.go
index 08485ad..c17b2c4 100644
--- a/cmd/protoc-gen-go/testdata/proto3/fields.pb.go
+++ b/cmd/protoc-gen-go/testdata/proto3/fields.pb.go
@@ -103,6 +103,11 @@
 
 func (x *FieldTestMessage) Reset() {
 	*x = FieldTestMessage{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_proto3_fields_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *FieldTestMessage) String() string {
@@ -395,6 +400,11 @@
 
 func (x *FieldTestMessage_Message) Reset() {
 	*x = FieldTestMessage_Message{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_proto3_fields_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *FieldTestMessage_Message) String() string {
diff --git a/encoding/testprotos/pb2/test.pb.go b/encoding/testprotos/pb2/test.pb.go
index 280deda..0662b2f 100644
--- a/encoding/testprotos/pb2/test.pb.go
+++ b/encoding/testprotos/pb2/test.pb.go
@@ -167,6 +167,11 @@
 
 func (x *Scalars) Reset() {
 	*x = Scalars{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb2_test_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Scalars) String() string {
@@ -311,6 +316,11 @@
 
 func (x *Enums) Reset() {
 	*x = Enums{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb2_test_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Enums) String() string {
@@ -383,6 +393,11 @@
 
 func (x *Repeats) Reset() {
 	*x = Repeats{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb2_test_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Repeats) String() string {
@@ -483,6 +498,11 @@
 
 func (x *Nested) Reset() {
 	*x = Nested{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb2_test_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Nested) String() string {
@@ -536,6 +556,11 @@
 
 func (x *Nests) Reset() {
 	*x = Nests{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb2_test_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Nests) String() string {
@@ -605,6 +630,11 @@
 
 func (x *Requireds) Reset() {
 	*x = Requireds{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb2_test_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Requireds) String() string {
@@ -684,6 +714,11 @@
 
 func (x *PartialRequired) Reset() {
 	*x = PartialRequired{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb2_test_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *PartialRequired) String() string {
@@ -733,6 +768,11 @@
 
 func (x *NestedWithRequired) Reset() {
 	*x = NestedWithRequired{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb2_test_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *NestedWithRequired) String() string {
@@ -780,6 +820,11 @@
 
 func (x *IndirectRequired) Reset() {
 	*x = IndirectRequired{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb2_test_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *IndirectRequired) String() string {
@@ -863,6 +908,11 @@
 
 func (x *Extensions) Reset() {
 	*x = Extensions{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb2_test_proto_msgTypes[9]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Extensions) String() string {
@@ -926,6 +976,11 @@
 
 func (x *ExtensionsContainer) Reset() {
 	*x = ExtensionsContainer{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb2_test_proto_msgTypes[10]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *ExtensionsContainer) String() string {
@@ -960,6 +1015,11 @@
 
 func (x *MessageSet) Reset() {
 	*x = MessageSet{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb2_test_proto_msgTypes[11]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *MessageSet) String() string {
@@ -1004,6 +1064,11 @@
 
 func (x *MessageSetExtension) Reset() {
 	*x = MessageSetExtension{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb2_test_proto_msgTypes[12]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *MessageSetExtension) String() string {
@@ -1045,6 +1110,11 @@
 
 func (x *FakeMessageSet) Reset() {
 	*x = FakeMessageSet{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb2_test_proto_msgTypes[13]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *FakeMessageSet) String() string {
@@ -1089,6 +1159,11 @@
 
 func (x *FakeMessageSetExtension) Reset() {
 	*x = FakeMessageSetExtension{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb2_test_proto_msgTypes[14]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *FakeMessageSetExtension) String() string {
@@ -1149,6 +1224,11 @@
 
 func (x *KnownTypes) Reset() {
 	*x = KnownTypes{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb2_test_proto_msgTypes[15]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *KnownTypes) String() string {
@@ -1312,6 +1392,11 @@
 
 func (x *Nests_OptGroup) Reset() {
 	*x = Nests_OptGroup{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb2_test_proto_msgTypes[16]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Nests_OptGroup) String() string {
@@ -1368,6 +1453,11 @@
 
 func (x *Nests_RptGroup) Reset() {
 	*x = Nests_RptGroup{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb2_test_proto_msgTypes[17]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Nests_RptGroup) String() string {
@@ -1410,6 +1500,11 @@
 
 func (x *Nests_OptGroup_OptNestedGroup) Reset() {
 	*x = Nests_OptGroup_OptNestedGroup{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb2_test_proto_msgTypes[18]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Nests_OptGroup_OptNestedGroup) String() string {
diff --git a/encoding/testprotos/pb3/test.pb.go b/encoding/testprotos/pb3/test.pb.go
index 3bff060..1f7a420 100644
--- a/encoding/testprotos/pb3/test.pb.go
+++ b/encoding/testprotos/pb3/test.pb.go
@@ -145,6 +145,11 @@
 
 func (x *Scalars) Reset() {
 	*x = Scalars{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb3_test_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Scalars) String() string {
@@ -287,6 +292,11 @@
 
 func (x *Enums) Reset() {
 	*x = Enums{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb3_test_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Enums) String() string {
@@ -337,6 +347,11 @@
 
 func (x *Nests) Reset() {
 	*x = Nests{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb3_test_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Nests) String() string {
@@ -381,6 +396,11 @@
 
 func (x *Nested) Reset() {
 	*x = Nested{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb3_test_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Nested) String() string {
@@ -435,6 +455,11 @@
 
 func (x *Oneofs) Reset() {
 	*x = Oneofs{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb3_test_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Oneofs) String() string {
@@ -525,6 +550,11 @@
 
 func (x *Maps) Reset() {
 	*x = Maps{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb3_test_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Maps) String() string {
@@ -596,6 +626,11 @@
 
 func (x *JSONNames) Reset() {
 	*x = JSONNames{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb3_test_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *JSONNames) String() string {
diff --git a/internal/impl/message_reflect_test.go b/internal/impl/message_reflect_test.go
index 9026e6e..c5a4a6a 100644
--- a/internal/impl/message_reflect_test.go
+++ b/internal/impl/message_reflect_test.go
@@ -1416,6 +1416,19 @@
 	return strings.Join(ss, ".")
 }
 
+func TestReset(t *testing.T) {
+	mi := new(testpb.TestAllTypes)
+
+	// ProtoReflect is implemented using a messageState cache.
+	m := mi.ProtoReflect()
+
+	// Reset must not clear the messageState cache.
+	mi.Reset()
+
+	// If Reset accidentally cleared the messageState cache, this panics.
+	m.Descriptor()
+}
+
 // The MessageState implementation makes the assumption that when a
 // concrete message is unsafe casted as a *MessageState, the Go GC does
 // not reclaim the memory for the remainder of the concrete message.
diff --git a/internal/testprotos/benchmarks/benchmarks.pb.go b/internal/testprotos/benchmarks/benchmarks.pb.go
index 7490e11..ec73b74 100644
--- a/internal/testprotos/benchmarks/benchmarks.pb.go
+++ b/internal/testprotos/benchmarks/benchmarks.pb.go
@@ -74,6 +74,11 @@
 
 func (x *BenchmarkDataset) Reset() {
 	*x = BenchmarkDataset{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_benchmarks_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *BenchmarkDataset) String() string {
diff --git a/internal/testprotos/benchmarks/datasets/google_message1/proto2/benchmark_message1_proto2.pb.go b/internal/testprotos/benchmarks/datasets/google_message1/proto2/benchmark_message1_proto2.pb.go
index f07bfc5..fb776fa 100644
--- a/internal/testprotos/benchmarks/datasets/google_message1/proto2/benchmark_message1_proto2.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message1/proto2/benchmark_message1_proto2.pb.go
@@ -90,6 +90,11 @@
 
 func (x *GoogleMessage1) Reset() {
 	*x = GoogleMessage1{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *GoogleMessage1) String() string {
@@ -444,6 +449,11 @@
 
 func (x *GoogleMessage1SubMessage) Reset() {
 	*x = GoogleMessage1SubMessage{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *GoogleMessage1SubMessage) String() string {
diff --git a/internal/testprotos/benchmarks/datasets/google_message1/proto3/benchmark_message1_proto3.pb.go b/internal/testprotos/benchmarks/datasets/google_message1/proto3/benchmark_message1_proto3.pb.go
index 50628be..87a8249 100644
--- a/internal/testprotos/benchmarks/datasets/google_message1/proto3/benchmark_message1_proto3.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message1/proto3/benchmark_message1_proto3.pb.go
@@ -62,6 +62,11 @@
 
 func (x *GoogleMessage1) Reset() {
 	*x = GoogleMessage1{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message1_proto3_benchmark_message1_proto3_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *GoogleMessage1) String() string {
@@ -403,6 +408,11 @@
 
 func (x *GoogleMessage1SubMessage) Reset() {
 	*x = GoogleMessage1SubMessage{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message1_proto3_benchmark_message1_proto3_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *GoogleMessage1SubMessage) String() string {
diff --git a/internal/testprotos/benchmarks/datasets/google_message2/benchmark_message2.pb.go b/internal/testprotos/benchmarks/datasets/google_message2/benchmark_message2.pb.go
index 72ef204..2f157bd 100644
--- a/internal/testprotos/benchmarks/datasets/google_message2/benchmark_message2.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message2/benchmark_message2.pb.go
@@ -70,6 +70,11 @@
 
 func (x *GoogleMessage2) Reset() {
 	*x = GoogleMessage2{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message2_benchmark_message2_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *GoogleMessage2) String() string {
@@ -332,6 +337,11 @@
 
 func (x *GoogleMessage2GroupedMessage) Reset() {
 	*x = GoogleMessage2GroupedMessage{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message2_benchmark_message2_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *GoogleMessage2GroupedMessage) String() string {
@@ -464,6 +474,11 @@
 
 func (x *GoogleMessage2_Group1) Reset() {
 	*x = GoogleMessage2_Group1{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message2_benchmark_message2_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *GoogleMessage2_Group1) String() string {
diff --git a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3.pb.go b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3.pb.go
index 36bd4aa..1b42eb6 100644
--- a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3.pb.go
@@ -35,6 +35,11 @@
 
 func (x *GoogleMessage3) Reset() {
 	*x = GoogleMessage3{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *GoogleMessage3) String() string {
@@ -178,6 +183,11 @@
 
 func (x *Message1327) Reset() {
 	*x = Message1327{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message1327) String() string {
@@ -250,6 +260,11 @@
 
 func (x *Message3672) Reset() {
 	*x = Message3672{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message3672) String() string {
@@ -361,6 +376,11 @@
 
 func (x *Message3804) Reset() {
 	*x = Message3804{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message3804) String() string {
@@ -445,6 +465,11 @@
 
 func (x *Message6849) Reset() {
 	*x = Message6849{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6849) String() string {
@@ -487,6 +512,11 @@
 
 func (x *Message6866) Reset() {
 	*x = Message6866{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6866) String() string {
@@ -529,6 +559,11 @@
 
 func (x *Message6870) Reset() {
 	*x = Message6870{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6870) String() string {
@@ -615,6 +650,11 @@
 
 func (x *Message7651) Reset() {
 	*x = Message7651{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message7651) String() string {
@@ -970,6 +1010,11 @@
 
 func (x *Message7864) Reset() {
 	*x = Message7864{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message7864) String() string {
@@ -1066,6 +1111,11 @@
 
 func (x *Message7929) Reset() {
 	*x = Message7929{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[9]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message7929) String() string {
@@ -1257,6 +1307,11 @@
 
 func (x *Message8508) Reset() {
 	*x = Message8508{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[10]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8508) String() string {
@@ -1412,6 +1467,11 @@
 
 func (x *Message9122) Reset() {
 	*x = Message9122{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[11]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message9122) String() string {
@@ -1461,6 +1521,11 @@
 
 func (x *Message10177) Reset() {
 	*x = Message10177{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[12]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message10177) String() string {
@@ -1505,6 +1570,11 @@
 
 func (x *Message10278) Reset() {
 	*x = Message10278{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[13]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message10278) String() string {
@@ -1561,6 +1631,11 @@
 
 func (x *Message10323) Reset() {
 	*x = Message10323{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[14]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message10323) String() string {
@@ -1604,6 +1679,11 @@
 
 func (x *Message10324) Reset() {
 	*x = Message10324{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[15]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message10324) String() string {
@@ -1653,6 +1733,11 @@
 
 func (x *Message11990) Reset() {
 	*x = Message11990{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[16]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message11990) String() string {
@@ -1697,6 +1782,11 @@
 
 func (x *Message12691) Reset() {
 	*x = Message12691{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[17]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12691) String() string {
@@ -1772,6 +1862,11 @@
 
 func (x *Message12870) Reset() {
 	*x = Message12870{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[18]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12870) String() string {
@@ -1948,6 +2043,11 @@
 
 func (x *Message13154) Reset() {
 	*x = Message13154{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[19]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message13154) String() string {
@@ -2029,6 +2129,11 @@
 
 func (x *Message16507) Reset() {
 	*x = Message16507{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[20]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message16507) String() string {
@@ -2297,6 +2402,11 @@
 
 func (x *Message16564) Reset() {
 	*x = Message16564{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[21]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message16564) String() string {
@@ -2340,6 +2450,11 @@
 
 func (x *Message16661) Reset() {
 	*x = Message16661{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[22]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message16661) String() string {
@@ -2392,6 +2507,11 @@
 
 func (x *Message16746) Reset() {
 	*x = Message16746{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[23]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message16746) String() string {
@@ -2456,6 +2576,11 @@
 
 func (x *Message17786) Reset() {
 	*x = Message17786{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[24]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message17786) String() string {
@@ -2505,6 +2630,11 @@
 
 func (x *Message22857) Reset() {
 	*x = Message22857{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[25]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message22857) String() string {
@@ -2548,6 +2678,11 @@
 
 func (x *Message24404) Reset() {
 	*x = Message24404{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[26]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message24404) String() string {
@@ -2598,6 +2733,11 @@
 
 func (x *Message27300) Reset() {
 	*x = Message27300{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[27]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message27300) String() string {
@@ -2669,6 +2809,11 @@
 
 func (x *Message27453) Reset() {
 	*x = Message27453{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[28]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message27453) String() string {
@@ -2866,6 +3011,11 @@
 
 func (x *Message3672_Message3673) Reset() {
 	*x = Message3672_Message3673{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[29]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message3672_Message3673) String() string {
@@ -2916,6 +3066,11 @@
 
 func (x *Message3672_Message3674) Reset() {
 	*x = Message3672_Message3674{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[30]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message3672_Message3674) String() string {
@@ -2990,6 +3145,11 @@
 
 func (x *Message17786_Message17787) Reset() {
 	*x = Message17786_Message17787{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[31]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message17786_Message17787) String() string {
@@ -3237,6 +3397,11 @@
 
 func (x *Message24404_Message24405) Reset() {
 	*x = Message24404_Message24405{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_proto_msgTypes[32]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message24404_Message24405) String() string {
diff --git a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_1.pb.go b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_1.pb.go
index 2edd5ba..92ed658 100644
--- a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_1.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_1.pb.go
@@ -21,6 +21,11 @@
 
 func (x *Message34390) Reset() {
 	*x = Message34390{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message34390) String() string {
@@ -64,6 +69,11 @@
 
 func (x *Message34624) Reset() {
 	*x = Message34624{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message34624) String() string {
@@ -126,6 +136,11 @@
 
 func (x *Message34791) Reset() {
 	*x = Message34791{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message34791) String() string {
@@ -264,6 +279,11 @@
 
 func (x *Message35483) Reset() {
 	*x = Message35483{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message35483) String() string {
@@ -348,6 +368,11 @@
 
 func (x *Message35807) Reset() {
 	*x = Message35807{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message35807) String() string {
@@ -440,6 +465,11 @@
 
 func (x *Message37487) Reset() {
 	*x = Message37487{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message37487) String() string {
@@ -493,6 +523,11 @@
 
 func (x *Message13062) Reset() {
 	*x = Message13062{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message13062) String() string {
@@ -563,6 +598,11 @@
 
 func (x *Message952) Reset() {
 	*x = Message952{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message952) String() string {
@@ -667,6 +707,11 @@
 
 func (x *Message36876) Reset() {
 	*x = Message36876{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message36876) String() string {
@@ -1141,6 +1186,11 @@
 
 func (x *Message1328) Reset() {
 	*x = Message1328{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[9]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message1328) String() string {
@@ -1174,6 +1224,11 @@
 
 func (x *Message6850) Reset() {
 	*x = Message6850{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[10]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6850) String() string {
@@ -1241,6 +1296,11 @@
 
 func (x *Message6863) Reset() {
 	*x = Message6863{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[11]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6863) String() string {
@@ -1505,6 +1565,11 @@
 
 func (x *Message6871) Reset() {
 	*x = Message6871{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[12]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6871) String() string {
@@ -1541,6 +1606,11 @@
 
 func (x *Message7547) Reset() {
 	*x = Message7547{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[13]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message7547) String() string {
@@ -1601,6 +1671,11 @@
 
 func (x *Message7648) Reset() {
 	*x = Message7648{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[14]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message7648) String() string {
@@ -1718,6 +1793,11 @@
 
 func (x *Message7865) Reset() {
 	*x = Message7865{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[15]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message7865) String() string {
@@ -1754,6 +1834,11 @@
 
 func (x *Message7928) Reset() {
 	*x = Message7928{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[16]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message7928) String() string {
@@ -1805,6 +1890,11 @@
 
 func (x *Message7919) Reset() {
 	*x = Message7919{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[17]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message7919) String() string {
@@ -1862,6 +1952,11 @@
 
 func (x *Message7920) Reset() {
 	*x = Message7920{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[18]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message7920) String() string {
@@ -1914,6 +2009,11 @@
 
 func (x *Message7921) Reset() {
 	*x = Message7921{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[19]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message7921) String() string {
@@ -1981,6 +2081,11 @@
 
 func (x *Message8511) Reset() {
 	*x = Message8511{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[20]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8511) String() string {
@@ -2056,6 +2161,11 @@
 
 func (x *Message8512) Reset() {
 	*x = Message8512{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[21]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8512) String() string {
@@ -2136,6 +2246,11 @@
 
 func (x *Message8513) Reset() {
 	*x = Message8513{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[22]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8513) String() string {
@@ -2203,6 +2318,11 @@
 
 func (x *Message8514) Reset() {
 	*x = Message8514{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[23]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8514) String() string {
@@ -2275,6 +2395,11 @@
 
 func (x *Message8515) Reset() {
 	*x = Message8515{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[24]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8515) String() string {
@@ -2337,6 +2462,11 @@
 
 func (x *Message10320) Reset() {
 	*x = Message10320{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[25]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message10320) String() string {
@@ -2423,6 +2553,11 @@
 
 func (x *Message10321) Reset() {
 	*x = Message10321{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[26]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message10321) String() string {
@@ -2481,6 +2616,11 @@
 
 func (x *Message10322) Reset() {
 	*x = Message10322{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[27]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message10322) String() string {
@@ -2540,6 +2680,11 @@
 
 func (x *Message11988) Reset() {
 	*x = Message11988{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[28]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message11988) String() string {
@@ -2606,6 +2751,11 @@
 
 func (x *Message12668) Reset() {
 	*x = Message12668{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[29]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12668) String() string {
@@ -2675,6 +2825,11 @@
 
 func (x *Message12825) Reset() {
 	*x = Message12825{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[30]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12825) String() string {
@@ -2761,6 +2916,11 @@
 
 func (x *Message16478) Reset() {
 	*x = Message16478{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[31]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message16478) String() string {
@@ -2819,6 +2979,11 @@
 
 func (x *Message16552) Reset() {
 	*x = Message16552{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[32]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message16552) String() string {
@@ -2877,6 +3042,11 @@
 
 func (x *Message16660) Reset() {
 	*x = Message16660{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[33]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message16660) String() string {
@@ -2957,6 +3127,11 @@
 
 func (x *Message16727) Reset() {
 	*x = Message16727{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[34]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message16727) String() string {
@@ -3170,6 +3345,11 @@
 
 func (x *Message16725) Reset() {
 	*x = Message16725{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[35]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message16725) String() string {
@@ -3240,6 +3420,11 @@
 
 func (x *Message17726) Reset() {
 	*x = Message17726{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[36]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message17726) String() string {
@@ -3430,6 +3615,11 @@
 
 func (x *Message17782) Reset() {
 	*x = Message17782{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[37]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message17782) String() string {
@@ -3484,6 +3674,11 @@
 
 func (x *Message17783) Reset() {
 	*x = Message17783{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[38]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message17783) String() string {
@@ -3640,6 +3835,11 @@
 
 func (x *Message16945) Reset() {
 	*x = Message16945{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[39]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message16945) String() string {
@@ -4934,6 +5134,11 @@
 
 func (x *Message34791_Message34792) Reset() {
 	*x = Message34791_Message34792{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[40]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message34791_Message34792) String() string {
@@ -4987,6 +5192,11 @@
 
 func (x *Message36876_Message36877) Reset() {
 	*x = Message36876_Message36877{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[41]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message36876_Message36877) String() string {
@@ -5055,6 +5265,11 @@
 
 func (x *Message36876_Message36878) Reset() {
 	*x = Message36876_Message36878{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[42]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message36876_Message36878) String() string {
@@ -5091,6 +5306,11 @@
 
 func (x *Message36876_Message36879) Reset() {
 	*x = Message36876_Message36879{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[43]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message36876_Message36879) String() string {
@@ -5138,6 +5358,11 @@
 
 func (x *Message36876_Message36880) Reset() {
 	*x = Message36876_Message36880{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[44]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message36876_Message36880) String() string {
@@ -5171,6 +5396,11 @@
 
 func (x *Message36876_Message36881) Reset() {
 	*x = Message36876_Message36881{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[45]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message36876_Message36881) String() string {
@@ -5204,6 +5434,11 @@
 
 func (x *Message36876_Message36882) Reset() {
 	*x = Message36876_Message36882{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[46]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message36876_Message36882) String() string {
@@ -5237,6 +5472,11 @@
 
 func (x *Message36876_Message36883) Reset() {
 	*x = Message36876_Message36883{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[47]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message36876_Message36883) String() string {
@@ -5270,6 +5510,11 @@
 
 func (x *Message36876_Message36884) Reset() {
 	*x = Message36876_Message36884{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[48]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message36876_Message36884) String() string {
@@ -5303,6 +5548,11 @@
 
 func (x *Message36876_Message36885) Reset() {
 	*x = Message36876_Message36885{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[49]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message36876_Message36885) String() string {
@@ -5336,6 +5586,11 @@
 
 func (x *Message36876_Message36886) Reset() {
 	*x = Message36876_Message36886{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[50]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message36876_Message36886) String() string {
@@ -5369,6 +5624,11 @@
 
 func (x *Message36876_Message36887) Reset() {
 	*x = Message36876_Message36887{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[51]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message36876_Message36887) String() string {
@@ -5409,6 +5669,11 @@
 
 func (x *Message36876_Message36888) Reset() {
 	*x = Message36876_Message36888{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[52]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message36876_Message36888) String() string {
@@ -5510,6 +5775,11 @@
 
 func (x *Message36876_Message36889) Reset() {
 	*x = Message36876_Message36889{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[53]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message36876_Message36889) String() string {
@@ -5718,6 +5988,11 @@
 
 func (x *Message36876_Message36910) Reset() {
 	*x = Message36876_Message36910{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[54]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message36876_Message36910) String() string {
@@ -5756,6 +6031,11 @@
 
 func (x *Message36876_Message36911) Reset() {
 	*x = Message36876_Message36911{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[55]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message36876_Message36911) String() string {
@@ -5820,6 +6100,11 @@
 
 func (x *Message36876_Message36912) Reset() {
 	*x = Message36876_Message36912{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[56]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message36876_Message36912) String() string {
@@ -5874,6 +6159,11 @@
 
 func (x *Message17783_Message17784) Reset() {
 	*x = Message17783_Message17784{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[57]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message17783_Message17784) String() string {
@@ -5956,6 +6246,11 @@
 
 func (x *Message17783_Message17785) Reset() {
 	*x = Message17783_Message17785{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_1_proto_msgTypes[58]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message17783_Message17785) String() string {
diff --git a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_2.pb.go b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_2.pb.go
index 893fd8c..c6c3ace 100644
--- a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_2.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_2.pb.go
@@ -25,6 +25,11 @@
 
 func (x *Message22853) Reset() {
 	*x = Message22853{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message22853) String() string {
@@ -119,6 +124,11 @@
 
 func (x *Message24345) Reset() {
 	*x = Message24345{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message24345) String() string {
@@ -330,6 +340,11 @@
 
 func (x *Message24403) Reset() {
 	*x = Message24403{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message24403) String() string {
@@ -403,6 +418,11 @@
 
 func (x *Message24391) Reset() {
 	*x = Message24391{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message24391) String() string {
@@ -611,6 +631,11 @@
 
 func (x *Message27454) Reset() {
 	*x = Message27454{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message27454) String() string {
@@ -650,6 +675,11 @@
 
 func (x *Message27357) Reset() {
 	*x = Message27357{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message27357) String() string {
@@ -723,6 +753,11 @@
 
 func (x *Message27360) Reset() {
 	*x = Message27360{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message27360) String() string {
@@ -790,6 +825,11 @@
 
 func (x *Message34387) Reset() {
 	*x = Message34387{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message34387) String() string {
@@ -877,6 +917,11 @@
 
 func (x *Message34621) Reset() {
 	*x = Message34621{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message34621) String() string {
@@ -1051,6 +1096,11 @@
 
 func (x *Message35476) Reset() {
 	*x = Message35476{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[9]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message35476) String() string {
@@ -1190,6 +1240,11 @@
 
 func (x *Message949) Reset() {
 	*x = Message949{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[10]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message949) String() string {
@@ -1275,6 +1330,11 @@
 
 func (x *Message36869) Reset() {
 	*x = Message36869{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[11]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message36869) String() string {
@@ -1328,6 +1388,11 @@
 
 func (x *Message33968) Reset() {
 	*x = Message33968{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[12]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message33968) String() string {
@@ -1413,6 +1478,11 @@
 
 func (x *Message6644) Reset() {
 	*x = Message6644{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[13]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6644) String() string {
@@ -1560,6 +1630,11 @@
 
 func (x *Message18831) Reset() {
 	*x = Message18831{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[14]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message18831) String() string {
@@ -1603,6 +1678,11 @@
 
 func (x *Message13090) Reset() {
 	*x = Message13090{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[15]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message13090) String() string {
@@ -1656,6 +1736,11 @@
 
 func (x *Message11874) Reset() {
 	*x = Message11874{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[16]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message11874) String() string {
@@ -1730,6 +1815,11 @@
 
 func (x *Message4144) Reset() {
 	*x = Message4144{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[17]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message4144) String() string {
@@ -1782,6 +1872,11 @@
 
 func (x *Message35573) Reset() {
 	*x = Message35573{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[18]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message35573) String() string {
@@ -1905,6 +2000,11 @@
 
 func (x *Message36858) Reset() {
 	*x = Message36858{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[19]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message36858) String() string {
@@ -2044,6 +2144,11 @@
 
 func (x *Message13174) Reset() {
 	*x = Message13174{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[20]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message13174) String() string {
@@ -2330,6 +2435,11 @@
 
 func (x *Message18283) Reset() {
 	*x = Message18283{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[21]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message18283) String() string {
@@ -3107,6 +3217,11 @@
 
 func (x *Message13169) Reset() {
 	*x = Message13169{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[22]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message13169) String() string {
@@ -3163,6 +3278,11 @@
 
 func (x *Message19255) Reset() {
 	*x = Message19255{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[23]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message19255) String() string {
@@ -3207,6 +3327,11 @@
 
 func (x *Message35542) Reset() {
 	*x = Message35542{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[24]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message35542) String() string {
@@ -3274,6 +3399,11 @@
 
 func (x *Message3901) Reset() {
 	*x = Message3901{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[25]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message3901) String() string {
@@ -3391,6 +3521,11 @@
 
 func (x *Message33968_Message33969) Reset() {
 	*x = Message33968_Message33969{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[26]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message33968_Message33969) String() string {
@@ -3432,6 +3567,11 @@
 
 func (x *Message18831_Message18832) Reset() {
 	*x = Message18831_Message18832{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[27]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message18831_Message18832) String() string {
@@ -3520,6 +3660,11 @@
 
 func (x *Message18831_Message18832_Message18833) Reset() {
 	*x = Message18831_Message18832_Message18833{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[28]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message18831_Message18832_Message18833) String() string {
@@ -3595,6 +3740,11 @@
 
 func (x *Message4144_Message4145) Reset() {
 	*x = Message4144_Message4145{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[29]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message4144_Message4145) String() string {
@@ -3670,6 +3820,11 @@
 
 func (x *Message35573_Message35574) Reset() {
 	*x = Message35573_Message35574{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[30]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message35573_Message35574) String() string {
@@ -3742,6 +3897,11 @@
 
 func (x *Message35573_Message35575) Reset() {
 	*x = Message35573_Message35575{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[31]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message35573_Message35575) String() string {
@@ -4067,6 +4227,11 @@
 
 func (x *Message35573_Message35575_Message35576) Reset() {
 	*x = Message35573_Message35575_Message35576{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[32]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message35573_Message35575_Message35576) String() string {
@@ -4278,6 +4443,11 @@
 
 func (x *Message36858_Message36859) Reset() {
 	*x = Message36858_Message36859{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_2_proto_msgTypes[33]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message36858_Message36859) String() string {
diff --git a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_3.pb.go b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_3.pb.go
index fd3d431..0562c1a 100644
--- a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_3.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_3.pb.go
@@ -31,6 +31,11 @@
 
 func (x *Message35546) Reset() {
 	*x = Message35546{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message35546) String() string {
@@ -180,6 +185,11 @@
 
 func (x *Message2356) Reset() {
 	*x = Message2356{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message2356) String() string {
@@ -473,6 +483,11 @@
 
 func (x *Message7029) Reset() {
 	*x = Message7029{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message7029) String() string {
@@ -802,6 +817,11 @@
 
 func (x *Message35538) Reset() {
 	*x = Message35538{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message35538) String() string {
@@ -855,6 +875,11 @@
 
 func (x *Message18921) Reset() {
 	*x = Message18921{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message18921) String() string {
@@ -974,6 +999,11 @@
 
 func (x *Message35540) Reset() {
 	*x = Message35540{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message35540) String() string {
@@ -1016,6 +1046,11 @@
 
 func (x *Message3886) Reset() {
 	*x = Message3886{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message3886) String() string {
@@ -1065,6 +1100,11 @@
 
 func (x *Message6743) Reset() {
 	*x = Message6743{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6743) String() string {
@@ -1165,6 +1205,11 @@
 
 func (x *Message6773) Reset() {
 	*x = Message6773{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6773) String() string {
@@ -1296,6 +1341,11 @@
 
 func (x *Message8224) Reset() {
 	*x = Message8224{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[9]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8224) String() string {
@@ -1528,6 +1578,11 @@
 
 func (x *Message8392) Reset() {
 	*x = Message8392{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[10]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8392) String() string {
@@ -1649,6 +1704,11 @@
 
 func (x *Message8130) Reset() {
 	*x = Message8130{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[11]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8130) String() string {
@@ -1859,6 +1919,11 @@
 
 func (x *Message8478) Reset() {
 	*x = Message8478{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[12]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8478) String() string {
@@ -1958,6 +2023,11 @@
 
 func (x *Message8479) Reset() {
 	*x = Message8479{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[13]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8479) String() string {
@@ -2062,6 +2132,11 @@
 
 func (x *Message10319) Reset() {
 	*x = Message10319{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[14]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message10319) String() string {
@@ -2149,6 +2224,11 @@
 
 func (x *Message4016) Reset() {
 	*x = Message4016{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[15]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message4016) String() string {
@@ -2215,6 +2295,11 @@
 
 func (x *Message12669) Reset() {
 	*x = Message12669{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[16]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12669) String() string {
@@ -2283,6 +2368,11 @@
 
 func (x *Message12819) Reset() {
 	*x = Message12819{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[17]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12819) String() string {
@@ -2367,6 +2457,11 @@
 
 func (x *Message12820) Reset() {
 	*x = Message12820{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[18]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12820) String() string {
@@ -2462,6 +2557,11 @@
 
 func (x *Message12821) Reset() {
 	*x = Message12821{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[19]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12821) String() string {
@@ -2536,6 +2636,11 @@
 
 func (x *Message12818) Reset() {
 	*x = Message12818{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[20]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12818) String() string {
@@ -2611,6 +2716,11 @@
 
 func (x *Message16479) Reset() {
 	*x = Message16479{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[21]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message16479) String() string {
@@ -2692,6 +2802,11 @@
 
 func (x *Message16722) Reset() {
 	*x = Message16722{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[22]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message16722) String() string {
@@ -2774,6 +2889,11 @@
 
 func (x *Message16724) Reset() {
 	*x = Message16724{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[23]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message16724) String() string {
@@ -2898,6 +3018,11 @@
 
 func (x *Message17728) Reset() {
 	*x = Message17728{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[24]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message17728) String() string {
@@ -2947,6 +3072,11 @@
 
 func (x *Message24356) Reset() {
 	*x = Message24356{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[25]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message24356) String() string {
@@ -3100,6 +3230,11 @@
 
 func (x *Message24376) Reset() {
 	*x = Message24376{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[26]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message24376) String() string {
@@ -3247,6 +3382,11 @@
 
 func (x *Message24366) Reset() {
 	*x = Message24366{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[27]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message24366) String() string {
@@ -3388,6 +3528,11 @@
 
 func (x *Message35546_Message35547) Reset() {
 	*x = Message35546_Message35547{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[28]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message35546_Message35547) String() string {
@@ -3438,6 +3583,11 @@
 
 func (x *Message35546_Message35548) Reset() {
 	*x = Message35546_Message35548{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[29]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message35546_Message35548) String() string {
@@ -3498,6 +3648,11 @@
 
 func (x *Message2356_Message2357) Reset() {
 	*x = Message2356_Message2357{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[30]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message2356_Message2357) String() string {
@@ -3615,6 +3770,11 @@
 
 func (x *Message2356_Message2358) Reset() {
 	*x = Message2356_Message2358{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[31]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message2356_Message2358) String() string {
@@ -3657,6 +3817,11 @@
 
 func (x *Message2356_Message2359) Reset() {
 	*x = Message2356_Message2359{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[32]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message2356_Message2359) String() string {
@@ -3750,6 +3915,11 @@
 
 func (x *Message7029_Message7030) Reset() {
 	*x = Message7029_Message7030{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[33]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message7029_Message7030) String() string {
@@ -3811,6 +3981,11 @@
 
 func (x *Message7029_Message7031) Reset() {
 	*x = Message7029_Message7031{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[34]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message7029_Message7031) String() string {
@@ -3910,6 +4085,11 @@
 
 func (x *Message18921_Message18922) Reset() {
 	*x = Message18921_Message18922{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[35]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message18921_Message18922) String() string {
@@ -4109,6 +4289,11 @@
 
 func (x *Message3886_Message3887) Reset() {
 	*x = Message3886_Message3887{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_3_proto_msgTypes[36]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message3886_Message3887) String() string {
diff --git a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_4.pb.go b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_4.pb.go
index eb31d78..81e5a99 100644
--- a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_4.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_4.pb.go
@@ -19,6 +19,11 @@
 
 func (x *Message24346) Reset() {
 	*x = Message24346{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message24346) String() string {
@@ -54,6 +59,11 @@
 
 func (x *Message24401) Reset() {
 	*x = Message24401{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message24401) String() string {
@@ -96,6 +106,11 @@
 
 func (x *Message24402) Reset() {
 	*x = Message24402{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message24402) String() string {
@@ -155,6 +170,11 @@
 
 func (x *Message24379) Reset() {
 	*x = Message24379{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message24379) String() string {
@@ -317,6 +337,11 @@
 
 func (x *Message27358) Reset() {
 	*x = Message27358{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message27358) String() string {
@@ -375,6 +400,11 @@
 
 func (x *Message34381) Reset() {
 	*x = Message34381{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message34381) String() string {
@@ -486,6 +516,11 @@
 
 func (x *Message34619) Reset() {
 	*x = Message34619{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message34619) String() string {
@@ -603,6 +638,11 @@
 
 func (x *Message730) Reset() {
 	*x = Message730{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message730) String() string {
@@ -884,6 +924,11 @@
 
 func (x *Message33958) Reset() {
 	*x = Message33958{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message33958) String() string {
@@ -951,6 +996,11 @@
 
 func (x *Message6637) Reset() {
 	*x = Message6637{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[9]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6637) String() string {
@@ -1038,6 +1088,11 @@
 
 func (x *Message6643) Reset() {
 	*x = Message6643{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[10]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6643) String() string {
@@ -1217,6 +1272,11 @@
 
 func (x *Message6126) Reset() {
 	*x = Message6126{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[11]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6126) String() string {
@@ -1394,6 +1454,11 @@
 
 func (x *Message13083) Reset() {
 	*x = Message13083{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[12]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message13083) String() string {
@@ -1501,6 +1566,11 @@
 
 func (x *Message13088) Reset() {
 	*x = Message13088{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[13]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message13088) String() string {
@@ -1565,6 +1635,11 @@
 
 func (x *Message10391) Reset() {
 	*x = Message10391{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[14]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message10391) String() string {
@@ -1675,6 +1750,11 @@
 
 func (x *Message11873) Reset() {
 	*x = Message11873{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[15]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message11873) String() string {
@@ -1807,6 +1887,11 @@
 
 func (x *Message35506) Reset() {
 	*x = Message35506{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[16]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message35506) String() string {
@@ -1870,6 +1955,11 @@
 
 func (x *Message13151) Reset() {
 	*x = Message13151{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[17]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message13151) String() string {
@@ -1912,6 +2002,11 @@
 
 func (x *Message18253) Reset() {
 	*x = Message18253{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[18]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message18253) String() string {
@@ -1954,6 +2049,11 @@
 
 func (x *Message16685) Reset() {
 	*x = Message16685{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[19]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message16685) String() string {
@@ -2005,6 +2105,11 @@
 
 func (x *Message16816) Reset() {
 	*x = Message16816{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[20]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message16816) String() string {
@@ -2120,6 +2225,11 @@
 
 func (x *Message13168) Reset() {
 	*x = Message13168{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[21]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message13168) String() string {
@@ -2244,6 +2354,11 @@
 
 func (x *Message13167) Reset() {
 	*x = Message13167{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[22]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message13167) String() string {
@@ -2371,6 +2486,11 @@
 
 func (x *Message1374) Reset() {
 	*x = Message1374{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[23]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message1374) String() string {
@@ -2418,6 +2538,11 @@
 
 func (x *Message18943) Reset() {
 	*x = Message18943{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[24]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message18943) String() string {
@@ -2451,6 +2576,11 @@
 
 func (x *Message18944) Reset() {
 	*x = Message18944{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[25]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message18944) String() string {
@@ -2516,6 +2646,11 @@
 
 func (x *Message18856) Reset() {
 	*x = Message18856{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[26]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message18856) String() string {
@@ -2773,6 +2908,11 @@
 
 func (x *Message3850) Reset() {
 	*x = Message3850{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[27]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message3850) String() string {
@@ -2853,6 +2993,11 @@
 
 func (x *Message6721) Reset() {
 	*x = Message6721{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[28]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6721) String() string {
@@ -2916,6 +3061,11 @@
 
 func (x *Message6742) Reset() {
 	*x = Message6742{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[29]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6742) String() string {
@@ -2959,6 +3109,11 @@
 
 func (x *Message6726) Reset() {
 	*x = Message6726{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[30]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6726) String() string {
@@ -3010,6 +3165,11 @@
 
 func (x *Message6733) Reset() {
 	*x = Message6733{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[31]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6733) String() string {
@@ -3067,6 +3227,11 @@
 
 func (x *Message6723) Reset() {
 	*x = Message6723{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[32]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6723) String() string {
@@ -3117,6 +3282,11 @@
 
 func (x *Message6725) Reset() {
 	*x = Message6725{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[33]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6725) String() string {
@@ -3166,6 +3336,11 @@
 
 func (x *Message6734) Reset() {
 	*x = Message6734{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[34]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6734) String() string {
@@ -3210,6 +3385,11 @@
 
 func (x *Message8184) Reset() {
 	*x = Message8184{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[35]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8184) String() string {
@@ -3268,6 +3448,11 @@
 
 func (x *Message8477) Reset() {
 	*x = Message8477{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[36]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8477) String() string {
@@ -3327,6 +3512,11 @@
 
 func (x *Message8454) Reset() {
 	*x = Message8454{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[37]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8454) String() string {
@@ -3392,6 +3582,11 @@
 
 func (x *Message8476) Reset() {
 	*x = Message8476{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[38]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8476) String() string {
@@ -3451,6 +3646,11 @@
 
 func (x *Message8455) Reset() {
 	*x = Message8455{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[39]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8455) String() string {
@@ -3515,6 +3715,11 @@
 
 func (x *Message8475) Reset() {
 	*x = Message8475{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[40]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8475) String() string {
@@ -3562,6 +3767,11 @@
 
 func (x *Message12559) Reset() {
 	*x = Message12559{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[41]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12559) String() string {
@@ -3599,6 +3809,11 @@
 
 func (x *Message12817) Reset() {
 	*x = Message12817{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[42]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12817) String() string {
@@ -3663,6 +3878,11 @@
 
 func (x *Message16480) Reset() {
 	*x = Message16480{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[43]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message16480) String() string {
@@ -3789,6 +4009,11 @@
 
 func (x *Message24317) Reset() {
 	*x = Message24317{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[44]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message24317) String() string {
@@ -4032,6 +4257,11 @@
 
 func (x *Message33958_Message33959) Reset() {
 	*x = Message33958_Message33959{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[45]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message33958_Message33959) String() string {
@@ -4112,6 +4342,11 @@
 
 func (x *Message13083_Message13084) Reset() {
 	*x = Message13083_Message13084{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[46]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message13083_Message13084) String() string {
@@ -4173,6 +4408,11 @@
 
 func (x *Message13083_Message13085) Reset() {
 	*x = Message13083_Message13085{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[47]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message13083_Message13085) String() string {
@@ -4206,6 +4446,11 @@
 
 func (x *Message13083_Message13086) Reset() {
 	*x = Message13083_Message13086{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[48]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message13083_Message13086) String() string {
@@ -4239,6 +4484,11 @@
 
 func (x *Message13083_Message13087) Reset() {
 	*x = Message13083_Message13087{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[49]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message13083_Message13087) String() string {
@@ -4275,6 +4525,11 @@
 
 func (x *Message13088_Message13089) Reset() {
 	*x = Message13088_Message13089{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[50]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message13088_Message13089) String() string {
@@ -4325,6 +4580,11 @@
 
 func (x *Message18253_Message18254) Reset() {
 	*x = Message18253_Message18254{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[51]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message18253_Message18254) String() string {
@@ -4372,6 +4632,11 @@
 
 func (x *Message16816_Message16817) Reset() {
 	*x = Message16816_Message16817{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[52]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message16816_Message16817) String() string {
@@ -4405,6 +4670,11 @@
 
 func (x *Message16816_Message16818) Reset() {
 	*x = Message16816_Message16818{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_4_proto_msgTypes[53]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message16816_Message16818) String() string {
diff --git a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_5.pb.go b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_5.pb.go
index 0bb74db..16c00ee 100644
--- a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_5.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_5.pb.go
@@ -19,6 +19,11 @@
 
 func (x *Message24377) Reset() {
 	*x = Message24377{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message24377) String() string {
@@ -52,6 +57,11 @@
 
 func (x *Message24378) Reset() {
 	*x = Message24378{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message24378) String() string {
@@ -91,6 +101,11 @@
 
 func (x *Message24400) Reset() {
 	*x = Message24400{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message24400) String() string {
@@ -159,6 +174,11 @@
 
 func (x *Message24380) Reset() {
 	*x = Message24380{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message24380) String() string {
@@ -192,6 +212,11 @@
 
 func (x *Message24381) Reset() {
 	*x = Message24381{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message24381) String() string {
@@ -230,6 +255,11 @@
 
 func (x *Message719) Reset() {
 	*x = Message719{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message719) String() string {
@@ -302,6 +332,11 @@
 
 func (x *Message728) Reset() {
 	*x = Message728{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message728) String() string {
@@ -417,6 +452,11 @@
 
 func (x *Message704) Reset() {
 	*x = Message704{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message704) String() string {
@@ -537,6 +577,11 @@
 
 func (x *Message697) Reset() {
 	*x = Message697{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message697) String() string {
@@ -833,6 +878,11 @@
 
 func (x *Message0) Reset() {
 	*x = Message0{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[9]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message0) String() string {
@@ -878,6 +928,11 @@
 
 func (x *Message6578) Reset() {
 	*x = Message6578{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[10]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6578) String() string {
@@ -929,6 +984,11 @@
 
 func (x *Message6024) Reset() {
 	*x = Message6024{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[11]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6024) String() string {
@@ -986,6 +1046,11 @@
 
 func (x *Message6052) Reset() {
 	*x = Message6052{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[12]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6052) String() string {
@@ -1036,6 +1101,11 @@
 
 func (x *Message6054) Reset() {
 	*x = Message6054{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[13]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6054) String() string {
@@ -1087,6 +1157,11 @@
 
 func (x *Message10573) Reset() {
 	*x = Message10573{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[14]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message10573) String() string {
@@ -1146,6 +1221,11 @@
 
 func (x *Message10824) Reset() {
 	*x = Message10824{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[15]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message10824) String() string {
@@ -1200,6 +1280,11 @@
 
 func (x *Message10582) Reset() {
 	*x = Message10582{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[16]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message10582) String() string {
@@ -1347,6 +1432,11 @@
 
 func (x *Message10155) Reset() {
 	*x = Message10155{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[17]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message10155) String() string {
@@ -1886,6 +1976,11 @@
 
 func (x *Message11866) Reset() {
 	*x = Message11866{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[18]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message11866) String() string {
@@ -1964,6 +2059,11 @@
 
 func (x *Message10469) Reset() {
 	*x = Message10469{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[19]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message10469) String() string {
@@ -2063,6 +2163,11 @@
 
 func (x *Message10818) Reset() {
 	*x = Message10818{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[20]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message10818) String() string {
@@ -2134,6 +2239,11 @@
 
 func (x *Message10773) Reset() {
 	*x = Message10773{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[21]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message10773) String() string {
@@ -2333,6 +2443,11 @@
 
 func (x *Message13145) Reset() {
 	*x = Message13145{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[22]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message13145) String() string {
@@ -2396,6 +2511,11 @@
 
 func (x *Message16686) Reset() {
 	*x = Message16686{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[23]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message16686) String() string {
@@ -2432,6 +2552,11 @@
 
 func (x *Message12796) Reset() {
 	*x = Message12796{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[24]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12796) String() string {
@@ -2479,6 +2604,11 @@
 
 func (x *Message6722) Reset() {
 	*x = Message6722{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[25]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6722) String() string {
@@ -2512,6 +2642,11 @@
 
 func (x *Message6727) Reset() {
 	*x = Message6727{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[26]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6727) String() string {
@@ -2545,6 +2680,11 @@
 
 func (x *Message6724) Reset() {
 	*x = Message6724{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[27]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6724) String() string {
@@ -2578,6 +2718,11 @@
 
 func (x *Message6735) Reset() {
 	*x = Message6735{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[28]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6735) String() string {
@@ -2614,6 +2759,11 @@
 
 func (x *Message8183) Reset() {
 	*x = Message8183{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[29]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8183) String() string {
@@ -2674,6 +2824,11 @@
 
 func (x *Message8301) Reset() {
 	*x = Message8301{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[30]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8301) String() string {
@@ -2793,6 +2948,11 @@
 
 func (x *Message8456) Reset() {
 	*x = Message8456{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[31]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8456) String() string {
@@ -2849,6 +3009,11 @@
 
 func (x *Message8302) Reset() {
 	*x = Message8302{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[32]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8302) String() string {
@@ -3038,6 +3203,11 @@
 
 func (x *Message8457) Reset() {
 	*x = Message8457{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[33]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8457) String() string {
@@ -3079,6 +3249,11 @@
 
 func (x *Message8449) Reset() {
 	*x = Message8449{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[34]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8449) String() string {
@@ -3165,6 +3340,11 @@
 
 func (x *Message13358) Reset() {
 	*x = Message13358{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[35]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message13358) String() string {
@@ -3224,6 +3404,11 @@
 
 func (x *Message13912) Reset() {
 	*x = Message13912{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[36]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message13912) String() string {
@@ -3289,6 +3474,11 @@
 
 func (x *Message24316) Reset() {
 	*x = Message24316{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[37]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message24316) String() string {
@@ -3350,6 +3540,11 @@
 
 func (x *Message24312) Reset() {
 	*x = Message24312{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[38]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message24312) String() string {
@@ -3436,6 +3631,11 @@
 
 func (x *Message24313) Reset() {
 	*x = Message24313{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[39]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message24313) String() string {
@@ -3543,6 +3743,11 @@
 
 func (x *Message24315) Reset() {
 	*x = Message24315{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[40]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message24315) String() string {
@@ -3602,6 +3807,11 @@
 
 func (x *Message716) Reset() {
 	*x = Message716{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[41]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message716) String() string {
@@ -3667,6 +3877,11 @@
 
 func (x *Message718) Reset() {
 	*x = Message718{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[42]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message718) String() string {
@@ -3727,6 +3942,11 @@
 
 func (x *Message703) Reset() {
 	*x = Message703{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[43]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message703) String() string {
@@ -3809,6 +4029,11 @@
 
 func (x *Message715) Reset() {
 	*x = Message715{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[44]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message715) String() string {
@@ -3936,6 +4161,11 @@
 
 func (x *Message700) Reset() {
 	*x = Message700{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[45]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message700) String() string {
@@ -3986,6 +4216,11 @@
 
 func (x *Message699) Reset() {
 	*x = Message699{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[46]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message699) String() string {
@@ -4042,6 +4277,11 @@
 
 func (x *Message698) Reset() {
 	*x = Message698{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[47]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message698) String() string {
@@ -4136,6 +4376,11 @@
 
 func (x *Message10155_Message10156) Reset() {
 	*x = Message10155_Message10156{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_5_proto_msgTypes[48]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message10155_Message10156) String() string {
diff --git a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_6.pb.go b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_6.pb.go
index b3d82cb..171978d 100644
--- a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_6.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_6.pb.go
@@ -19,6 +19,11 @@
 
 func (x *Message10576) Reset() {
 	*x = Message10576{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message10576) String() string {
@@ -55,6 +60,11 @@
 
 func (x *Message10154) Reset() {
 	*x = Message10154{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message10154) String() string {
@@ -165,6 +175,11 @@
 
 func (x *Message8944) Reset() {
 	*x = Message8944{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8944) String() string {
@@ -660,6 +675,11 @@
 
 func (x *Message9182) Reset() {
 	*x = Message9182{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message9182) String() string {
@@ -891,6 +911,11 @@
 
 func (x *Message9160) Reset() {
 	*x = Message9160{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message9160) String() string {
@@ -940,6 +965,11 @@
 
 func (x *Message9242) Reset() {
 	*x = Message9242{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message9242) String() string {
@@ -982,6 +1012,11 @@
 
 func (x *Message8890) Reset() {
 	*x = Message8890{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8890) String() string {
@@ -1024,6 +1059,11 @@
 
 func (x *Message9123) Reset() {
 	*x = Message9123{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message9123) String() string {
@@ -1069,6 +1109,11 @@
 
 func (x *Message9628) Reset() {
 	*x = Message9628{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message9628) String() string {
@@ -1196,6 +1241,11 @@
 
 func (x *Message11014) Reset() {
 	*x = Message11014{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[9]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message11014) String() string {
@@ -1688,6 +1738,11 @@
 
 func (x *Message10801) Reset() {
 	*x = Message10801{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[10]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message10801) String() string {
@@ -1744,6 +1799,11 @@
 
 func (x *Message10749) Reset() {
 	*x = Message10749{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[11]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message10749) String() string {
@@ -1788,6 +1848,11 @@
 
 func (x *Message8298) Reset() {
 	*x = Message8298{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[12]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8298) String() string {
@@ -1845,6 +1910,11 @@
 
 func (x *Message8300) Reset() {
 	*x = Message8300{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[13]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8300) String() string {
@@ -1898,6 +1968,11 @@
 
 func (x *Message8291) Reset() {
 	*x = Message8291{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[14]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8291) String() string {
@@ -1973,6 +2048,11 @@
 
 func (x *Message8296) Reset() {
 	*x = Message8296{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[15]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8296) String() string {
@@ -2051,6 +2131,11 @@
 
 func (x *Message7965) Reset() {
 	*x = Message7965{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[16]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message7965) String() string {
@@ -2101,6 +2186,11 @@
 
 func (x *Message8290) Reset() {
 	*x = Message8290{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[17]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8290) String() string {
@@ -2151,6 +2241,11 @@
 
 func (x *Message717) Reset() {
 	*x = Message717{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[18]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message717) String() string {
@@ -2201,6 +2296,11 @@
 
 func (x *Message713) Reset() {
 	*x = Message713{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[19]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message713) String() string {
@@ -2256,6 +2356,11 @@
 
 func (x *Message705) Reset() {
 	*x = Message705{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[20]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message705) String() string {
@@ -2344,6 +2449,11 @@
 
 func (x *Message709) Reset() {
 	*x = Message709{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[21]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message709) String() string {
@@ -2415,6 +2525,11 @@
 
 func (x *Message702) Reset() {
 	*x = Message702{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[22]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message702) String() string {
@@ -2468,6 +2583,11 @@
 
 func (x *Message714) Reset() {
 	*x = Message714{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[23]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message714) String() string {
@@ -2542,6 +2662,11 @@
 
 func (x *Message710) Reset() {
 	*x = Message710{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[24]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message710) String() string {
@@ -2615,6 +2740,11 @@
 
 func (x *Message706) Reset() {
 	*x = Message706{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[25]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message706) String() string {
@@ -2682,6 +2812,11 @@
 
 func (x *Message707) Reset() {
 	*x = Message707{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[26]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message707) String() string {
@@ -2755,6 +2890,11 @@
 
 func (x *Message711) Reset() {
 	*x = Message711{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[27]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message711) String() string {
@@ -2826,6 +2966,11 @@
 
 func (x *Message712) Reset() {
 	*x = Message712{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[28]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message712) String() string {
@@ -2945,6 +3090,11 @@
 
 func (x *Message8939) Reset() {
 	*x = Message8939{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[29]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8939) String() string {
@@ -3134,6 +3284,11 @@
 
 func (x *Message9181) Reset() {
 	*x = Message9181{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[30]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message9181) String() string {
@@ -3178,6 +3333,11 @@
 
 func (x *Message9164) Reset() {
 	*x = Message9164{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[31]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message9164) String() string {
@@ -3235,6 +3395,11 @@
 
 func (x *Message9165) Reset() {
 	*x = Message9165{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[32]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message9165) String() string {
@@ -3285,6 +3450,11 @@
 
 func (x *Message9166) Reset() {
 	*x = Message9166{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[33]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message9166) String() string {
@@ -3341,6 +3511,11 @@
 
 func (x *Message9151) Reset() {
 	*x = Message9151{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[34]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message9151) String() string {
@@ -3435,6 +3610,11 @@
 
 func (x *Message8888) Reset() {
 	*x = Message8888{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[35]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8888) String() string {
@@ -3502,6 +3682,11 @@
 
 func (x *Message9627) Reset() {
 	*x = Message9627{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[36]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message9627) String() string {
@@ -3570,6 +3755,11 @@
 
 func (x *Message11020) Reset() {
 	*x = Message11020{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[37]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message11020) String() string {
@@ -3627,6 +3817,11 @@
 
 func (x *Message11013) Reset() {
 	*x = Message11013{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[38]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message11013) String() string {
@@ -3821,6 +4016,11 @@
 
 func (x *Message8939_Message8940) Reset() {
 	*x = Message8939_Message8940{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[39]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8939_Message8940) String() string {
@@ -3861,6 +4061,11 @@
 
 func (x *Message8939_Message8941) Reset() {
 	*x = Message8939_Message8941{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[40]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8939_Message8941) String() string {
@@ -3943,6 +4148,11 @@
 
 func (x *Message8939_Message8943) Reset() {
 	*x = Message8939_Message8943{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_6_proto_msgTypes[41]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8939_Message8943) String() string {
diff --git a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_7.pb.go b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_7.pb.go
index 3453667..ccf6d43 100644
--- a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_7.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_7.pb.go
@@ -18,6 +18,11 @@
 
 func (x *Message11018) Reset() {
 	*x = Message11018{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_7_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message11018) String() string {
@@ -56,6 +61,11 @@
 
 func (x *Message10800) Reset() {
 	*x = Message10800{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_7_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message10800) String() string {
@@ -117,6 +127,11 @@
 
 func (x *Message10802) Reset() {
 	*x = Message10802{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_7_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message10802) String() string {
@@ -155,6 +170,11 @@
 
 func (x *Message10748) Reset() {
 	*x = Message10748{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_7_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message10748) String() string {
@@ -219,6 +239,11 @@
 
 func (x *Message7966) Reset() {
 	*x = Message7966{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_7_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message7966) String() string {
@@ -273,6 +298,11 @@
 
 func (x *Message708) Reset() {
 	*x = Message708{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_7_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message708) String() string {
@@ -348,6 +378,11 @@
 
 func (x *Message8942) Reset() {
 	*x = Message8942{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_7_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8942) String() string {
@@ -384,6 +419,11 @@
 
 func (x *Message11011) Reset() {
 	*x = Message11011{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_7_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message11011) String() string {
@@ -431,6 +471,11 @@
 
 func (x *UnusedEmptyMessage) Reset() {
 	*x = UnusedEmptyMessage{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_7_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *UnusedEmptyMessage) String() string {
@@ -466,6 +511,11 @@
 
 func (x *Message741) Reset() {
 	*x = Message741{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message3_benchmark_message3_7_proto_msgTypes[9]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message741) String() string {
diff --git a/internal/testprotos/benchmarks/datasets/google_message4/benchmark_message4.pb.go b/internal/testprotos/benchmarks/datasets/google_message4/benchmark_message4.pb.go
index 230f405..afccc12 100644
--- a/internal/testprotos/benchmarks/datasets/google_message4/benchmark_message4.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message4/benchmark_message4.pb.go
@@ -36,6 +36,11 @@
 
 func (x *GoogleMessage4) Reset() {
 	*x = GoogleMessage4{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *GoogleMessage4) String() string {
@@ -203,6 +208,11 @@
 
 func (x *Message37489) Reset() {
 	*x = Message37489{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message37489) String() string {
@@ -386,6 +396,11 @@
 
 func (x *Message7319) Reset() {
 	*x = Message7319{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message7319) String() string {
@@ -443,6 +458,11 @@
 
 func (x *Message12717) Reset() {
 	*x = Message12717{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12717) String() string {
@@ -544,6 +564,11 @@
 
 func (x *Message37331) Reset() {
 	*x = Message37331{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message37331) String() string {
@@ -609,6 +634,11 @@
 
 func (x *Message8815) Reset() {
 	*x = Message8815{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8815) String() string {
@@ -670,6 +700,11 @@
 
 func (x *Message7330) Reset() {
 	*x = Message7330{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message7330) String() string {
@@ -748,6 +783,11 @@
 
 func (x *Message12960) Reset() {
 	*x = Message12960{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12960) String() string {
@@ -855,6 +895,11 @@
 
 func (x *Message176) Reset() {
 	*x = Message176{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message176) String() string {
@@ -1305,6 +1350,11 @@
 
 func (x *Message8817) Reset() {
 	*x = Message8817{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[9]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8817) String() string {
@@ -1363,6 +1413,11 @@
 
 func (x *Message8835) Reset() {
 	*x = Message8835{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[10]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8835) String() string {
@@ -1421,6 +1476,11 @@
 
 func (x *Message37333) Reset() {
 	*x = Message37333{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[11]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message37333) String() string {
@@ -1478,6 +1538,11 @@
 
 func (x *Message13000) Reset() {
 	*x = Message13000{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[12]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message13000) String() string {
@@ -1530,6 +1595,11 @@
 
 func (x *Message37335) Reset() {
 	*x = Message37335{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[13]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message37335) String() string {
@@ -1595,6 +1665,11 @@
 
 func (x *Message8848) Reset() {
 	*x = Message8848{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[14]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8848) String() string {
@@ -1652,6 +1727,11 @@
 
 func (x *Message13035) Reset() {
 	*x = Message13035{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[15]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message13035) String() string {
@@ -1702,6 +1782,11 @@
 
 func (x *Message8856) Reset() {
 	*x = Message8856{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[16]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8856) String() string {
@@ -1756,6 +1841,11 @@
 
 func (x *Message12908) Reset() {
 	*x = Message12908{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[17]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12908) String() string {
@@ -1835,6 +1925,11 @@
 
 func (x *Message12910) Reset() {
 	*x = Message12910{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[18]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12910) String() string {
@@ -1901,6 +1996,11 @@
 
 func (x *Message37327) Reset() {
 	*x = Message37327{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[19]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message37327) String() string {
@@ -2017,6 +2117,11 @@
 
 func (x *Message37329) Reset() {
 	*x = Message37329{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[20]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message37329) String() string {
@@ -2091,6 +2196,11 @@
 
 func (x *Message2517) Reset() {
 	*x = Message2517{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[21]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message2517) String() string {
@@ -2164,6 +2274,11 @@
 
 func (x *Message12748) Reset() {
 	*x = Message12748{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[22]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12748) String() string {
@@ -2227,6 +2342,11 @@
 
 func (x *Message12687) Reset() {
 	*x = Message12687{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[23]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12687) String() string {
@@ -2271,6 +2391,11 @@
 
 func (x *Message11948) Reset() {
 	*x = Message11948{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[24]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message11948) String() string {
@@ -2327,6 +2452,11 @@
 
 func (x *Message11976) Reset() {
 	*x = Message11976{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[25]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message11976) String() string {
@@ -2370,6 +2500,11 @@
 
 func (x *Message7320) Reset() {
 	*x = Message7320{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[26]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message7320) String() string {
@@ -2422,6 +2557,11 @@
 
 func (x *Message3069) Reset() {
 	*x = Message3069{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[27]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message3069) String() string {
@@ -2487,6 +2627,11 @@
 
 func (x *Message12948) Reset() {
 	*x = Message12948{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[28]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12948) String() string {
@@ -2535,6 +2680,11 @@
 
 func (x *Message8768) Reset() {
 	*x = Message8768{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[29]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8768) String() string {
@@ -2625,6 +2775,11 @@
 
 func (x *Message12979) Reset() {
 	*x = Message12979{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[30]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12979) String() string {
@@ -2733,6 +2888,11 @@
 
 func (x *Message37173) Reset() {
 	*x = Message37173{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[31]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message37173) String() string {
@@ -2950,6 +3110,11 @@
 
 func (x *Message12799) Reset() {
 	*x = Message12799{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[32]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12799) String() string {
@@ -3060,6 +3225,11 @@
 
 func (x *Message12870) Reset() {
 	*x = Message12870{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[33]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12870) String() string {
@@ -3241,6 +3411,11 @@
 
 func (x *Message3804) Reset() {
 	*x = Message3804{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[34]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message3804) String() string {
@@ -3327,6 +3502,11 @@
 
 func (x *Message12903) Reset() {
 	*x = Message12903{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[35]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12903) String() string {
@@ -3384,6 +3564,11 @@
 
 func (x *Message37326) Reset() {
 	*x = Message37326{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[36]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message37326) String() string {
@@ -3463,6 +3648,11 @@
 
 func (x *Message2356) Reset() {
 	*x = Message2356{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[37]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message2356) String() string {
@@ -3714,6 +3904,11 @@
 
 func (x *Message0) Reset() {
 	*x = Message0{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[38]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message0) String() string {
@@ -3760,6 +3955,11 @@
 
 func (x *Message971) Reset() {
 	*x = Message971{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[39]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message971) String() string {
@@ -3814,6 +4014,11 @@
 
 func (x *Message176_Message178) Reset() {
 	*x = Message176_Message178{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[40]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message176_Message178) String() string {
@@ -3850,6 +4055,11 @@
 
 func (x *Message3069_Message3070) Reset() {
 	*x = Message3069_Message3070{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[41]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message3069_Message3070) String() string {
@@ -3910,6 +4120,11 @@
 
 func (x *Message2356_Message2357) Reset() {
 	*x = Message2356_Message2357{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[42]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message2356_Message2357) String() string {
@@ -4027,6 +4242,11 @@
 
 func (x *Message2356_Message2358) Reset() {
 	*x = Message2356_Message2358{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[43]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message2356_Message2358) String() string {
@@ -4060,6 +4280,11 @@
 
 func (x *Message2356_Message2359) Reset() {
 	*x = Message2356_Message2359{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_proto_msgTypes[44]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message2356_Message2359) String() string {
diff --git a/internal/testprotos/benchmarks/datasets/google_message4/benchmark_message4_1.pb.go b/internal/testprotos/benchmarks/datasets/google_message4/benchmark_message4_1.pb.go
index 537999d..52e1fc4 100644
--- a/internal/testprotos/benchmarks/datasets/google_message4/benchmark_message4_1.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message4/benchmark_message4_1.pb.go
@@ -21,6 +21,11 @@
 
 func (x *Message2463) Reset() {
 	*x = Message2463{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message2463) String() string {
@@ -64,6 +69,11 @@
 
 func (x *Message12686) Reset() {
 	*x = Message12686{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12686) String() string {
@@ -111,6 +121,11 @@
 
 func (x *Message11949) Reset() {
 	*x = Message11949{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message11949) String() string {
@@ -155,6 +170,11 @@
 
 func (x *Message11975) Reset() {
 	*x = Message11975{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message11975) String() string {
@@ -267,6 +287,11 @@
 
 func (x *Message7287) Reset() {
 	*x = Message7287{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message7287) String() string {
@@ -405,6 +430,11 @@
 
 func (x *Message3061) Reset() {
 	*x = Message3061{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message3061) String() string {
@@ -774,6 +804,11 @@
 
 func (x *Message12949) Reset() {
 	*x = Message12949{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12949) String() string {
@@ -858,6 +893,11 @@
 
 func (x *Message8572) Reset() {
 	*x = Message8572{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8572) String() string {
@@ -1247,6 +1287,11 @@
 
 func (x *Message8774) Reset() {
 	*x = Message8774{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8774) String() string {
@@ -1327,6 +1372,11 @@
 
 func (x *Message12776) Reset() {
 	*x = Message12776{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[9]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12776) String() string {
@@ -1449,6 +1499,11 @@
 
 func (x *Message12798) Reset() {
 	*x = Message12798{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[10]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12798) String() string {
@@ -1514,6 +1569,11 @@
 
 func (x *Message12797) Reset() {
 	*x = Message12797{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[11]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12797) String() string {
@@ -1576,6 +1636,11 @@
 
 func (x *Message12825) Reset() {
 	*x = Message12825{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[12]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12825) String() string {
@@ -1658,6 +1723,11 @@
 
 func (x *Message8590) Reset() {
 	*x = Message8590{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[13]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8590) String() string {
@@ -1691,6 +1761,11 @@
 
 func (x *Message8587) Reset() {
 	*x = Message8587{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[14]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8587) String() string {
@@ -1727,6 +1802,11 @@
 
 func (x *Message1374) Reset() {
 	*x = Message1374{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[15]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message1374) String() string {
@@ -1777,6 +1857,11 @@
 
 func (x *Message2462) Reset() {
 	*x = Message2462{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[16]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message2462) String() string {
@@ -1832,6 +1917,11 @@
 
 func (x *Message12685) Reset() {
 	*x = Message12685{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[17]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12685) String() string {
@@ -1922,6 +2012,11 @@
 
 func (x *Message10320) Reset() {
 	*x = Message10320{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[18]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message10320) String() string {
@@ -2008,6 +2103,11 @@
 
 func (x *Message11947) Reset() {
 	*x = Message11947{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[19]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message11947) String() string {
@@ -2065,6 +2165,11 @@
 
 func (x *Message11920) Reset() {
 	*x = Message11920{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[20]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message11920) String() string {
@@ -2131,6 +2236,11 @@
 
 func (x *Message6643) Reset() {
 	*x = Message6643{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[21]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6643) String() string {
@@ -2311,6 +2421,11 @@
 
 func (x *Message6133) Reset() {
 	*x = Message6133{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[22]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6133) String() string {
@@ -2498,6 +2613,11 @@
 
 func (x *Message6109) Reset() {
 	*x = Message6109{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[23]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6109) String() string {
@@ -2627,6 +2747,11 @@
 
 func (x *Message3046) Reset() {
 	*x = Message3046{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[24]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message3046) String() string {
@@ -2678,6 +2803,11 @@
 
 func (x *Message3060) Reset() {
 	*x = Message3060{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[25]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message3060) String() string {
@@ -2735,6 +2865,11 @@
 
 func (x *Message3041) Reset() {
 	*x = Message3041{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[26]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message3041) String() string {
@@ -2788,6 +2923,11 @@
 
 func (x *Message3040) Reset() {
 	*x = Message3040{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[27]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message3040) String() string {
@@ -2863,6 +3003,11 @@
 
 func (x *Message3050) Reset() {
 	*x = Message3050{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[28]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message3050) String() string {
@@ -2946,6 +3091,11 @@
 
 func (x *Message7905) Reset() {
 	*x = Message7905{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[29]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message7905) String() string {
@@ -3030,6 +3180,11 @@
 
 func (x *Message3886) Reset() {
 	*x = Message3886{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[30]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message3886) String() string {
@@ -3077,6 +3232,11 @@
 
 func (x *Message7864) Reset() {
 	*x = Message7864{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[31]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message7864) String() string {
@@ -3154,6 +3314,11 @@
 
 func (x *Message3922) Reset() {
 	*x = Message3922{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[32]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message3922) String() string {
@@ -3204,6 +3369,11 @@
 
 func (x *Message3052) Reset() {
 	*x = Message3052{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[33]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message3052) String() string {
@@ -3300,6 +3470,11 @@
 
 func (x *Message8575) Reset() {
 	*x = Message8575{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[34]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message8575) String() string {
@@ -3350,6 +3525,11 @@
 
 func (x *Message7843) Reset() {
 	*x = Message7843{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[35]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message7843) String() string {
@@ -3497,6 +3677,11 @@
 
 func (x *Message3919) Reset() {
 	*x = Message3919{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[36]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message3919) String() string {
@@ -3558,6 +3743,11 @@
 
 func (x *Message7929) Reset() {
 	*x = Message7929{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[37]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message7929) String() string {
@@ -3735,6 +3925,11 @@
 
 func (x *Message3061_Message3062) Reset() {
 	*x = Message3061_Message3062{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[38]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message3061_Message3062) String() string {
@@ -3794,6 +3989,11 @@
 
 func (x *Message3061_Message3063) Reset() {
 	*x = Message3061_Message3063{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[39]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message3061_Message3063) String() string {
@@ -3875,6 +4075,11 @@
 
 func (x *Message3061_Message3064) Reset() {
 	*x = Message3061_Message3064{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[40]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message3061_Message3064) String() string {
@@ -4041,6 +4246,11 @@
 
 func (x *Message3061_Message3065) Reset() {
 	*x = Message3061_Message3065{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[41]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message3061_Message3065) String() string {
@@ -4083,6 +4293,11 @@
 
 func (x *Message3061_Message3066) Reset() {
 	*x = Message3061_Message3066{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[42]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message3061_Message3066) String() string {
@@ -4177,6 +4392,11 @@
 
 func (x *Message3886_Message3887) Reset() {
 	*x = Message3886_Message3887{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_1_proto_msgTypes[43]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message3886_Message3887) String() string {
diff --git a/internal/testprotos/benchmarks/datasets/google_message4/benchmark_message4_2.pb.go b/internal/testprotos/benchmarks/datasets/google_message4/benchmark_message4_2.pb.go
index 7006ee9..d2144b0 100644
--- a/internal/testprotos/benchmarks/datasets/google_message4/benchmark_message4_2.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message4/benchmark_message4_2.pb.go
@@ -25,6 +25,11 @@
 
 func (x *Message12774) Reset() {
 	*x = Message12774{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12774) String() string {
@@ -103,6 +108,11 @@
 
 func (x *Message12796) Reset() {
 	*x = Message12796{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12796) String() string {
@@ -156,6 +166,11 @@
 
 func (x *Message12821) Reset() {
 	*x = Message12821{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12821) String() string {
@@ -233,6 +248,11 @@
 
 func (x *Message12820) Reset() {
 	*x = Message12820{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12820) String() string {
@@ -329,6 +349,11 @@
 
 func (x *Message12819) Reset() {
 	*x = Message12819{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12819) String() string {
@@ -410,6 +435,11 @@
 
 func (x *Message12818) Reset() {
 	*x = Message12818{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12818) String() string {
@@ -486,6 +516,11 @@
 
 func (x *Message10319) Reset() {
 	*x = Message10319{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message10319) String() string {
@@ -571,6 +606,11 @@
 
 func (x *Message6578) Reset() {
 	*x = Message6578{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6578) String() string {
@@ -638,6 +678,11 @@
 
 func (x *Message6126) Reset() {
 	*x = Message6126{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6126) String() string {
@@ -811,6 +856,11 @@
 
 func (x *Message5881) Reset() {
 	*x = Message5881{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[9]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message5881) String() string {
@@ -886,6 +936,11 @@
 
 func (x *Message6110) Reset() {
 	*x = Message6110{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[10]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6110) String() string {
@@ -926,6 +981,11 @@
 
 func (x *Message6107) Reset() {
 	*x = Message6107{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[11]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6107) String() string {
@@ -1004,6 +1064,11 @@
 
 func (x *Message6129) Reset() {
 	*x = Message6129{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[12]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6129) String() string {
@@ -1102,6 +1167,11 @@
 
 func (x *Message5908) Reset() {
 	*x = Message5908{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[13]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message5908) String() string {
@@ -1492,6 +1562,11 @@
 
 func (x *Message3850) Reset() {
 	*x = Message3850{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[14]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message3850) String() string {
@@ -1567,6 +1642,11 @@
 
 func (x *Message7865) Reset() {
 	*x = Message7865{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[15]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message7865) String() string {
@@ -1608,6 +1688,11 @@
 
 func (x *Message7511) Reset() {
 	*x = Message7511{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[16]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message7511) String() string {
@@ -1690,6 +1775,11 @@
 
 func (x *Message3920) Reset() {
 	*x = Message3920{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[17]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message3920) String() string {
@@ -1726,6 +1816,11 @@
 
 func (x *Message7928) Reset() {
 	*x = Message7928{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[18]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message7928) String() string {
@@ -1778,6 +1873,11 @@
 
 func (x *Message7921) Reset() {
 	*x = Message7921{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[19]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message7921) String() string {
@@ -1842,6 +1942,11 @@
 
 func (x *Message7920) Reset() {
 	*x = Message7920{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[20]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message7920) String() string {
@@ -1893,6 +1998,11 @@
 
 func (x *Message7919) Reset() {
 	*x = Message7919{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[21]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message7919) String() string {
@@ -1951,6 +2061,11 @@
 
 func (x *Message12817) Reset() {
 	*x = Message12817{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[22]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message12817) String() string {
@@ -2008,6 +2123,11 @@
 
 func (x *Message6054) Reset() {
 	*x = Message6054{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[23]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6054) String() string {
@@ -2055,6 +2175,11 @@
 
 func (x *Message6127) Reset() {
 	*x = Message6127{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[24]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6127) String() string {
@@ -2091,6 +2216,11 @@
 
 func (x *Message6052) Reset() {
 	*x = Message6052{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[25]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6052) String() string {
@@ -2142,6 +2272,11 @@
 
 func (x *Message6024) Reset() {
 	*x = Message6024{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[26]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6024) String() string {
@@ -2201,6 +2336,11 @@
 
 func (x *Message5861) Reset() {
 	*x = Message5861{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[27]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message5861) String() string {
@@ -2264,6 +2404,11 @@
 
 func (x *Message5880) Reset() {
 	*x = Message5880{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[28]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message5880) String() string {
@@ -2311,6 +2456,11 @@
 
 func (x *Message5867) Reset() {
 	*x = Message5867{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[29]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message5867) String() string {
@@ -2391,6 +2541,11 @@
 
 func (x *Message4016) Reset() {
 	*x = Message4016{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[30]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message4016) String() string {
@@ -2452,6 +2607,11 @@
 
 func (x *Message6108) Reset() {
 	*x = Message6108{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[31]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message6108) String() string {
@@ -2490,6 +2650,11 @@
 
 func (x *Message5907) Reset() {
 	*x = Message5907{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[32]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message5907) String() string {
@@ -2551,6 +2716,11 @@
 
 func (x *UnusedEmptyMessage) Reset() {
 	*x = UnusedEmptyMessage{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[33]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *UnusedEmptyMessage) String() string {
@@ -2587,6 +2757,11 @@
 
 func (x *Message5903) Reset() {
 	*x = Message5903{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datasets_google_message4_benchmark_message4_2_proto_msgTypes[34]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message5903) String() string {
diff --git a/internal/testprotos/conformance/conformance.pb.go b/internal/testprotos/conformance/conformance.pb.go
index d4e89c7..af78555 100644
--- a/internal/testprotos/conformance/conformance.pb.go
+++ b/internal/testprotos/conformance/conformance.pb.go
@@ -174,6 +174,11 @@
 
 func (x *FailureSet) Reset() {
 	*x = FailureSet{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_conformance_conformance_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *FailureSet) String() string {
@@ -249,6 +254,11 @@
 
 func (x *ConformanceRequest) Reset() {
 	*x = ConformanceRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_conformance_conformance_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *ConformanceRequest) String() string {
@@ -393,6 +403,11 @@
 
 func (x *ConformanceResponse) Reset() {
 	*x = ConformanceResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_conformance_conformance_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *ConformanceResponse) String() string {
@@ -567,6 +582,11 @@
 
 func (x *JspbEncodingConfig) Reset() {
 	*x = JspbEncodingConfig{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_conformance_conformance_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *JspbEncodingConfig) String() string {
diff --git a/internal/testprotos/conformance/test_messages_proto2.pb.go b/internal/testprotos/conformance/test_messages_proto2.pb.go
index c32c92e..a60d5c8 100644
--- a/internal/testprotos/conformance/test_messages_proto2.pb.go
+++ b/internal/testprotos/conformance/test_messages_proto2.pb.go
@@ -283,6 +283,11 @@
 
 func (x *TestAllTypesProto2) Reset() {
 	*x = TestAllTypesProto2{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_test_messages_proto2_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *TestAllTypesProto2) String() string {
@@ -1022,6 +1027,11 @@
 
 func (x *ForeignMessageProto2) Reset() {
 	*x = ForeignMessageProto2{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_test_messages_proto2_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *ForeignMessageProto2) String() string {
@@ -1069,6 +1079,11 @@
 
 func (x *UnknownToTestAllTypes) Reset() {
 	*x = UnknownToTestAllTypes{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_test_messages_proto2_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *UnknownToTestAllTypes) String() string {
@@ -1147,6 +1162,11 @@
 
 func (x *TestAllTypesProto2_NestedMessage) Reset() {
 	*x = TestAllTypesProto2_NestedMessage{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_test_messages_proto2_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *TestAllTypesProto2_NestedMessage) String() string {
@@ -1198,6 +1218,11 @@
 
 func (x *TestAllTypesProto2_Data) Reset() {
 	*x = TestAllTypesProto2_Data{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_test_messages_proto2_proto_msgTypes[23]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *TestAllTypesProto2_Data) String() string {
@@ -1247,6 +1272,11 @@
 
 func (x *TestAllTypesProto2_MessageSetCorrect) Reset() {
 	*x = TestAllTypesProto2_MessageSetCorrect{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_test_messages_proto2_proto_msgTypes[24]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *TestAllTypesProto2_MessageSetCorrect) String() string {
@@ -1291,6 +1321,11 @@
 
 func (x *TestAllTypesProto2_MessageSetCorrectExtension1) Reset() {
 	*x = TestAllTypesProto2_MessageSetCorrectExtension1{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_test_messages_proto2_proto_msgTypes[25]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *TestAllTypesProto2_MessageSetCorrectExtension1) String() string {
@@ -1333,6 +1368,11 @@
 
 func (x *TestAllTypesProto2_MessageSetCorrectExtension2) Reset() {
 	*x = TestAllTypesProto2_MessageSetCorrectExtension2{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_test_messages_proto2_proto_msgTypes[26]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *TestAllTypesProto2_MessageSetCorrectExtension2) String() string {
@@ -1375,6 +1415,11 @@
 
 func (x *UnknownToTestAllTypes_OptionalGroup) Reset() {
 	*x = UnknownToTestAllTypes_OptionalGroup{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_test_messages_proto2_proto_msgTypes[27]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *UnknownToTestAllTypes_OptionalGroup) String() string {
diff --git a/internal/testprotos/conformance/test_messages_proto3.pb.go b/internal/testprotos/conformance/test_messages_proto3.pb.go
index 5c5bfc5..49c4565 100644
--- a/internal/testprotos/conformance/test_messages_proto3.pb.go
+++ b/internal/testprotos/conformance/test_messages_proto3.pb.go
@@ -357,6 +357,11 @@
 
 func (x *TestAllTypesProto3) Reset() {
 	*x = TestAllTypesProto3{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_test_messages_proto3_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *TestAllTypesProto3) String() string {
@@ -1304,6 +1309,11 @@
 
 func (x *ForeignMessage) Reset() {
 	*x = ForeignMessage{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_test_messages_proto3_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *ForeignMessage) String() string {
@@ -1347,6 +1357,11 @@
 
 func (x *TestAllTypesProto3_NestedMessage) Reset() {
 	*x = TestAllTypesProto3_NestedMessage{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_test_messages_proto3_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *TestAllTypesProto3_NestedMessage) String() string {
diff --git a/internal/testprotos/fieldtrack/fieldtrack.pb.go b/internal/testprotos/fieldtrack/fieldtrack.pb.go
index 08bf2fc..c784e84 100644
--- a/internal/testprotos/fieldtrack/fieldtrack.pb.go
+++ b/internal/testprotos/fieldtrack/fieldtrack.pb.go
@@ -80,6 +80,11 @@
 
 func (x *TestFieldTrack) Reset() {
 	*x = TestFieldTrack{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_fieldtrack_fieldtrack_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *TestFieldTrack) String() string {
diff --git a/internal/testprotos/irregular/test.pb.go b/internal/testprotos/irregular/test.pb.go
index 00e6ed4..1a80d04 100644
--- a/internal/testprotos/irregular/test.pb.go
+++ b/internal/testprotos/irregular/test.pb.go
@@ -39,6 +39,11 @@
 
 func (x *Message) Reset() {
 	*x = Message{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_irregular_test_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message) String() string {
diff --git a/internal/testprotos/legacy/legacy.pb.go b/internal/testprotos/legacy/legacy.pb.go
index 1eee7c0..c4eaef8 100644
--- a/internal/testprotos/legacy/legacy.pb.go
+++ b/internal/testprotos/legacy/legacy.pb.go
@@ -47,6 +47,11 @@
 
 func (x *Legacy) Reset() {
 	*x = Legacy{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_legacy_legacy_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Legacy) String() string {
diff --git a/internal/testprotos/messageset/messagesetpb/message_set.pb.go b/internal/testprotos/messageset/messagesetpb/message_set.pb.go
index 59a1dfd..1268e72 100644
--- a/internal/testprotos/messageset/messagesetpb/message_set.pb.go
+++ b/internal/testprotos/messageset/messagesetpb/message_set.pb.go
@@ -24,6 +24,11 @@
 
 func (x *MessageSet) Reset() {
 	*x = MessageSet{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_messageset_messagesetpb_message_set_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *MessageSet) String() string {
diff --git a/internal/testprotos/messageset/msetextpb/msetextpb.pb.go b/internal/testprotos/messageset/msetextpb/msetextpb.pb.go
index 07bef95..9a49c69 100644
--- a/internal/testprotos/messageset/msetextpb/msetextpb.pb.go
+++ b/internal/testprotos/messageset/msetextpb/msetextpb.pb.go
@@ -26,6 +26,11 @@
 
 func (x *Ext1) Reset() {
 	*x = Ext1{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_messageset_msetextpb_msetextpb_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Ext1) String() string {
@@ -75,6 +80,11 @@
 
 func (x *Ext2) Reset() {
 	*x = Ext2{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_messageset_msetextpb_msetextpb_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Ext2) String() string {
diff --git a/internal/testprotos/test/test.pb.go b/internal/testprotos/test/test.pb.go
index dc0b124..800551f 100644
--- a/internal/testprotos/test/test.pb.go
+++ b/internal/testprotos/test/test.pb.go
@@ -373,6 +373,11 @@
 
 func (x *TestAllTypes) Reset() {
 	*x = TestAllTypes{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test_test_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *TestAllTypes) String() string {
@@ -1111,6 +1116,11 @@
 
 func (x *TestDeprecatedMessage) Reset() {
 	*x = TestDeprecatedMessage{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test_test_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *TestDeprecatedMessage) String() string {
@@ -1181,6 +1191,11 @@
 
 func (x *ForeignMessage) Reset() {
 	*x = ForeignMessage{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test_test_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *ForeignMessage) String() string {
@@ -1228,6 +1243,11 @@
 
 func (x *TestReservedFields) Reset() {
 	*x = TestReservedFields{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test_test_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *TestReservedFields) String() string {
@@ -1262,6 +1282,11 @@
 
 func (x *TestAllExtensions) Reset() {
 	*x = TestAllExtensions{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test_test_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *TestAllExtensions) String() string {
@@ -1306,6 +1331,11 @@
 
 func (x *OptionalGroupExtension) Reset() {
 	*x = OptionalGroupExtension{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test_test_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *OptionalGroupExtension) String() string {
@@ -1348,6 +1378,11 @@
 
 func (x *RepeatedGroupExtension) Reset() {
 	*x = RepeatedGroupExtension{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test_test_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *RepeatedGroupExtension) String() string {
@@ -1388,6 +1423,11 @@
 
 func (x *TestNestedExtension) Reset() {
 	*x = TestNestedExtension{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test_test_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *TestNestedExtension) String() string {
@@ -1423,6 +1463,11 @@
 
 func (x *TestRequired) Reset() {
 	*x = TestRequired{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test_test_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *TestRequired) String() string {
@@ -1470,6 +1515,11 @@
 
 func (x *TestRequiredForeign) Reset() {
 	*x = TestRequiredForeign{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test_test_proto_msgTypes[9]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *TestRequiredForeign) String() string {
@@ -1551,6 +1601,11 @@
 
 func (x *TestRequiredGroupFields) Reset() {
 	*x = TestRequiredGroupFields{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test_test_proto_msgTypes[10]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *TestRequiredGroupFields) String() string {
@@ -1602,6 +1657,11 @@
 
 func (x *TestWeak) Reset() {
 	*x = TestWeak{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test_test_proto_msgTypes[11]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *TestWeak) String() string {
@@ -1696,6 +1756,11 @@
 
 func (x *TestPackedTypes) Reset() {
 	*x = TestPackedTypes{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test_test_proto_msgTypes[12]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *TestPackedTypes) String() string {
@@ -1842,6 +1907,11 @@
 
 func (x *TestUnpackedTypes) Reset() {
 	*x = TestUnpackedTypes{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test_test_proto_msgTypes[13]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *TestUnpackedTypes) String() string {
@@ -1974,6 +2044,11 @@
 
 func (x *TestPackedExtensions) Reset() {
 	*x = TestPackedExtensions{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test_test_proto_msgTypes[14]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *TestPackedExtensions) String() string {
@@ -2017,6 +2092,11 @@
 
 func (x *TestUnpackedExtensions) Reset() {
 	*x = TestUnpackedExtensions{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test_test_proto_msgTypes[15]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *TestUnpackedExtensions) String() string {
@@ -2060,6 +2140,11 @@
 
 func (x *FooRequest) Reset() {
 	*x = FooRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test_test_proto_msgTypes[16]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *FooRequest) String() string {
@@ -2093,6 +2178,11 @@
 
 func (x *FooResponse) Reset() {
 	*x = FooResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test_test_proto_msgTypes[17]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *FooResponse) String() string {
@@ -2133,6 +2223,11 @@
 
 func (x *WeirdDefault) Reset() {
 	*x = WeirdDefault{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test_test_proto_msgTypes[18]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *WeirdDefault) String() string {
@@ -2176,6 +2271,11 @@
 
 func (x *TestAllTypes_NestedMessage) Reset() {
 	*x = TestAllTypes_NestedMessage{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test_test_proto_msgTypes[19]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *TestAllTypes_NestedMessage) String() string {
@@ -2225,6 +2325,11 @@
 
 func (x *TestAllTypes_OptionalGroup) Reset() {
 	*x = TestAllTypes_OptionalGroup{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test_test_proto_msgTypes[20]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *TestAllTypes_OptionalGroup) String() string {
@@ -2267,6 +2372,11 @@
 
 func (x *TestAllTypes_RepeatedGroup) Reset() {
 	*x = TestAllTypes_RepeatedGroup{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test_test_proto_msgTypes[21]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *TestAllTypes_RepeatedGroup) String() string {
@@ -2309,6 +2419,11 @@
 
 func (x *TestRequiredGroupFields_OptionalGroup) Reset() {
 	*x = TestRequiredGroupFields_OptionalGroup{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test_test_proto_msgTypes[40]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *TestRequiredGroupFields_OptionalGroup) String() string {
@@ -2351,6 +2466,11 @@
 
 func (x *TestRequiredGroupFields_RepeatedGroup) Reset() {
 	*x = TestRequiredGroupFields_RepeatedGroup{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test_test_proto_msgTypes[41]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *TestRequiredGroupFields_RepeatedGroup) String() string {
diff --git a/internal/testprotos/test/test_import.pb.go b/internal/testprotos/test/test_import.pb.go
index d2eb69d..52fba44 100644
--- a/internal/testprotos/test/test_import.pb.go
+++ b/internal/testprotos/test/test_import.pb.go
@@ -75,6 +75,11 @@
 
 func (x *ImportMessage) Reset() {
 	*x = ImportMessage{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test_test_import_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *ImportMessage) String() string {
diff --git a/internal/testprotos/test/test_public.pb.go b/internal/testprotos/test/test_public.pb.go
index 0055855..f718776 100644
--- a/internal/testprotos/test/test_public.pb.go
+++ b/internal/testprotos/test/test_public.pb.go
@@ -22,6 +22,11 @@
 
 func (x *PublicImportMessage) Reset() {
 	*x = PublicImportMessage{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test_test_public_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *PublicImportMessage) String() string {
diff --git a/internal/testprotos/test/weak1/test_weak.pb.go b/internal/testprotos/test/weak1/test_weak.pb.go
index c62ba49..7ec89f2 100644
--- a/internal/testprotos/test/weak1/test_weak.pb.go
+++ b/internal/testprotos/test/weak1/test_weak.pb.go
@@ -24,6 +24,11 @@
 
 func (x *WeakImportMessage1) Reset() {
 	*x = WeakImportMessage1{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test_weak1_test_weak_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *WeakImportMessage1) String() string {
diff --git a/internal/testprotos/test/weak2/test_weak.pb.go b/internal/testprotos/test/weak2/test_weak.pb.go
index e04031c..e3f0380 100644
--- a/internal/testprotos/test/weak2/test_weak.pb.go
+++ b/internal/testprotos/test/weak2/test_weak.pb.go
@@ -24,6 +24,11 @@
 
 func (x *WeakImportMessage2) Reset() {
 	*x = WeakImportMessage2{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test_weak2_test_weak_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *WeakImportMessage2) String() string {
diff --git a/internal/testprotos/test3/test.pb.go b/internal/testprotos/test3/test.pb.go
index cd75988..145cf43 100644
--- a/internal/testprotos/test3/test.pb.go
+++ b/internal/testprotos/test3/test.pb.go
@@ -197,6 +197,11 @@
 
 func (x *TestAllTypes) Reset() {
 	*x = TestAllTypes{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test3_test_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *TestAllTypes) String() string {
@@ -774,6 +779,11 @@
 
 func (x *ForeignMessage) Reset() {
 	*x = ForeignMessage{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test3_test_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *ForeignMessage) String() string {
@@ -824,6 +834,11 @@
 
 func (x *TestAllTypes_NestedMessage) Reset() {
 	*x = TestAllTypes_NestedMessage{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test3_test_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *TestAllTypes_NestedMessage) String() string {
diff --git a/internal/testprotos/test3/test_import.pb.go b/internal/testprotos/test3/test_import.pb.go
index 878330d..78ce012 100644
--- a/internal/testprotos/test3/test_import.pb.go
+++ b/internal/testprotos/test3/test_import.pb.go
@@ -65,6 +65,11 @@
 
 func (x *ImportMessage) Reset() {
 	*x = ImportMessage{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test3_test_import_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *ImportMessage) String() string {
diff --git a/reflect/protoregistry/testprotos/test.pb.go b/reflect/protoregistry/testprotos/test.pb.go
index d4f9d12..499c918 100644
--- a/reflect/protoregistry/testprotos/test.pb.go
+++ b/reflect/protoregistry/testprotos/test.pb.go
@@ -185,6 +185,11 @@
 
 func (x *Message1) Reset() {
 	*x = Message1{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message1) String() string {
@@ -227,6 +232,11 @@
 
 func (x *Message2) Reset() {
 	*x = Message2{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message2) String() string {
@@ -260,6 +270,11 @@
 
 func (x *Message3) Reset() {
 	*x = Message3{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message3) String() string {
@@ -295,6 +310,11 @@
 
 func (x *Message4) Reset() {
 	*x = Message4{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_test_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Message4) String() string {
diff --git a/types/descriptorpb/descriptor.pb.go b/types/descriptorpb/descriptor.pb.go
index ed41f31..071428b 100644
--- a/types/descriptorpb/descriptor.pb.go
+++ b/types/descriptorpb/descriptor.pb.go
@@ -481,6 +481,11 @@
 
 func (x *FileDescriptorSet) Reset() {
 	*x = FileDescriptorSet{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_descriptor_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *FileDescriptorSet) String() string {
@@ -546,6 +551,11 @@
 
 func (x *FileDescriptorProto) Reset() {
 	*x = FileDescriptorProto{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_descriptor_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *FileDescriptorProto) String() string {
@@ -677,6 +687,11 @@
 
 func (x *DescriptorProto) Reset() {
 	*x = DescriptorProto{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_descriptor_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *DescriptorProto) String() string {
@@ -784,6 +799,11 @@
 
 func (x *ExtensionRangeOptions) Reset() {
 	*x = ExtensionRangeOptions{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_descriptor_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *ExtensionRangeOptions) String() string {
@@ -865,6 +885,11 @@
 
 func (x *FieldDescriptorProto) Reset() {
 	*x = FieldDescriptorProto{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_descriptor_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *FieldDescriptorProto) String() string {
@@ -972,6 +997,11 @@
 
 func (x *OneofDescriptorProto) Reset() {
 	*x = OneofDescriptorProto{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_descriptor_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *OneofDescriptorProto) String() string {
@@ -1031,6 +1061,11 @@
 
 func (x *EnumDescriptorProto) Reset() {
 	*x = EnumDescriptorProto{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_descriptor_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *EnumDescriptorProto) String() string {
@@ -1104,6 +1139,11 @@
 
 func (x *EnumValueDescriptorProto) Reset() {
 	*x = EnumValueDescriptorProto{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_descriptor_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *EnumValueDescriptorProto) String() string {
@@ -1163,6 +1203,11 @@
 
 func (x *ServiceDescriptorProto) Reset() {
 	*x = ServiceDescriptorProto{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_descriptor_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *ServiceDescriptorProto) String() string {
@@ -1235,6 +1280,11 @@
 
 func (x *MethodDescriptorProto) Reset() {
 	*x = MethodDescriptorProto{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_descriptor_proto_msgTypes[9]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *MethodDescriptorProto) String() string {
@@ -1411,6 +1461,11 @@
 
 func (x *FileOptions) Reset() {
 	*x = FileOptions{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_descriptor_proto_msgTypes[10]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *FileOptions) String() string {
@@ -1662,6 +1717,11 @@
 
 func (x *MessageOptions) Reset() {
 	*x = MessageOptions{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_descriptor_proto_msgTypes[11]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *MessageOptions) String() string {
@@ -1811,6 +1871,11 @@
 
 func (x *FieldOptions) Reset() {
 	*x = FieldOptions{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_descriptor_proto_msgTypes[12]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *FieldOptions) String() string {
@@ -1906,6 +1971,11 @@
 
 func (x *OneofOptions) Reset() {
 	*x = OneofOptions{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_descriptor_proto_msgTypes[13]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *OneofOptions) String() string {
@@ -1972,6 +2042,11 @@
 
 func (x *EnumOptions) Reset() {
 	*x = EnumOptions{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_descriptor_proto_msgTypes[14]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *EnumOptions) String() string {
@@ -2049,6 +2124,11 @@
 
 func (x *EnumValueOptions) Reset() {
 	*x = EnumValueOptions{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_descriptor_proto_msgTypes[15]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *EnumValueOptions) String() string {
@@ -2119,6 +2199,11 @@
 
 func (x *ServiceOptions) Reset() {
 	*x = ServiceOptions{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_descriptor_proto_msgTypes[16]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *ServiceOptions) String() string {
@@ -2191,6 +2276,11 @@
 
 func (x *MethodOptions) Reset() {
 	*x = MethodOptions{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_descriptor_proto_msgTypes[17]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *MethodOptions) String() string {
@@ -2270,6 +2360,11 @@
 
 func (x *UninterpretedOption) Reset() {
 	*x = UninterpretedOption{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_descriptor_proto_msgTypes[18]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *UninterpretedOption) String() string {
@@ -2399,6 +2494,11 @@
 
 func (x *SourceCodeInfo) Reset() {
 	*x = SourceCodeInfo{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_descriptor_proto_msgTypes[19]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *SourceCodeInfo) String() string {
@@ -2446,6 +2546,11 @@
 
 func (x *GeneratedCodeInfo) Reset() {
 	*x = GeneratedCodeInfo{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_descriptor_proto_msgTypes[20]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *GeneratedCodeInfo) String() string {
@@ -2490,6 +2595,11 @@
 
 func (x *DescriptorProto_ExtensionRange) Reset() {
 	*x = DescriptorProto_ExtensionRange{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_descriptor_proto_msgTypes[21]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *DescriptorProto_ExtensionRange) String() string {
@@ -2550,6 +2660,11 @@
 
 func (x *DescriptorProto_ReservedRange) Reset() {
 	*x = DescriptorProto_ReservedRange{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_descriptor_proto_msgTypes[22]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *DescriptorProto_ReservedRange) String() string {
@@ -2606,6 +2721,11 @@
 
 func (x *EnumDescriptorProto_EnumReservedRange) Reset() {
 	*x = EnumDescriptorProto_EnumReservedRange{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_descriptor_proto_msgTypes[23]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *EnumDescriptorProto_EnumReservedRange) String() string {
@@ -2661,6 +2781,11 @@
 
 func (x *UninterpretedOption_NamePart) Reset() {
 	*x = UninterpretedOption_NamePart{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_descriptor_proto_msgTypes[24]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *UninterpretedOption_NamePart) String() string {
@@ -2789,6 +2914,11 @@
 
 func (x *SourceCodeInfo_Location) Reset() {
 	*x = SourceCodeInfo_Location{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_descriptor_proto_msgTypes[25]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *SourceCodeInfo_Location) String() string {
@@ -2870,6 +3000,11 @@
 
 func (x *GeneratedCodeInfo_Annotation) Reset() {
 	*x = GeneratedCodeInfo_Annotation{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_descriptor_proto_msgTypes[26]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *GeneratedCodeInfo_Annotation) String() string {
diff --git a/types/known/anypb/any.pb.go b/types/known/anypb/any.pb.go
index 04843d3..4089bed 100644
--- a/types/known/anypb/any.pb.go
+++ b/types/known/anypb/any.pb.go
@@ -160,6 +160,11 @@
 
 func (x *Any) Reset() {
 	*x = Any{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_any_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Any) String() string {
diff --git a/types/known/apipb/api.pb.go b/types/known/apipb/api.pb.go
index e742c23..a2af295 100644
--- a/types/known/apipb/api.pb.go
+++ b/types/known/apipb/api.pb.go
@@ -96,6 +96,11 @@
 
 func (x *Api) Reset() {
 	*x = Api{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_api_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Api) String() string {
@@ -194,6 +199,11 @@
 
 func (x *Method) Reset() {
 	*x = Method{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_api_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Method) String() string {
@@ -360,6 +370,11 @@
 
 func (x *Mixin) Reset() {
 	*x = Mixin{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_api_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Mixin) String() string {
diff --git a/types/known/durationpb/duration.pb.go b/types/known/durationpb/duration.pb.go
index 2983e01..3659fdf 100644
--- a/types/known/durationpb/duration.pb.go
+++ b/types/known/durationpb/duration.pb.go
@@ -120,6 +120,11 @@
 
 func (x *Duration) Reset() {
 	*x = Duration{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_duration_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Duration) String() string {
diff --git a/types/known/emptypb/empty.pb.go b/types/known/emptypb/empty.pb.go
index 08a7907..e7fcea3 100644
--- a/types/known/emptypb/empty.pb.go
+++ b/types/known/emptypb/empty.pb.go
@@ -57,6 +57,11 @@
 
 func (x *Empty) Reset() {
 	*x = Empty{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_empty_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Empty) String() string {
diff --git a/types/known/fieldmaskpb/field_mask.pb.go b/types/known/fieldmaskpb/field_mask.pb.go
index 13e963b..b8a464e 100644
--- a/types/known/fieldmaskpb/field_mask.pb.go
+++ b/types/known/fieldmaskpb/field_mask.pb.go
@@ -250,6 +250,11 @@
 
 func (x *FieldMask) Reset() {
 	*x = FieldMask{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_field_mask_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *FieldMask) String() string {
diff --git a/types/known/sourcecontextpb/source_context.pb.go b/types/known/sourcecontextpb/source_context.pb.go
index 45ac295..0980d5a 100644
--- a/types/known/sourcecontextpb/source_context.pb.go
+++ b/types/known/sourcecontextpb/source_context.pb.go
@@ -54,6 +54,11 @@
 
 func (x *SourceContext) Reset() {
 	*x = SourceContext{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_source_context_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *SourceContext) String() string {
diff --git a/types/known/structpb/struct.pb.go b/types/known/structpb/struct.pb.go
index 905c84d..9eb2bbe 100644
--- a/types/known/structpb/struct.pb.go
+++ b/types/known/structpb/struct.pb.go
@@ -107,6 +107,11 @@
 
 func (x *Struct) Reset() {
 	*x = Struct{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_struct_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Struct) String() string {
@@ -164,6 +169,11 @@
 
 func (x *Value) Reset() {
 	*x = Value{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_struct_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Value) String() string {
@@ -298,6 +308,11 @@
 
 func (x *ListValue) Reset() {
 	*x = ListValue{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_struct_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *ListValue) String() string {
diff --git a/types/known/timestamppb/timestamp.pb.go b/types/known/timestamppb/timestamp.pb.go
index c1a50aa..884a038 100644
--- a/types/known/timestamppb/timestamp.pb.go
+++ b/types/known/timestamppb/timestamp.pb.go
@@ -142,6 +142,11 @@
 
 func (x *Timestamp) Reset() {
 	*x = Timestamp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_timestamp_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Timestamp) String() string {
diff --git a/types/known/typepb/type.pb.go b/types/known/typepb/type.pb.go
index 75ab832..a42c8fc 100644
--- a/types/known/typepb/type.pb.go
+++ b/types/known/typepb/type.pb.go
@@ -287,6 +287,11 @@
 
 func (x *Type) Reset() {
 	*x = Type{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_type_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Type) String() string {
@@ -386,6 +391,11 @@
 
 func (x *Field) Reset() {
 	*x = Field{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_type_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Field) String() string {
@@ -501,6 +511,11 @@
 
 func (x *Enum) Reset() {
 	*x = Enum{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_type_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Enum) String() string {
@@ -577,6 +592,11 @@
 
 func (x *EnumValue) Reset() {
 	*x = EnumValue{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_type_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *EnumValue) String() string {
@@ -644,6 +664,11 @@
 
 func (x *Option) Reset() {
 	*x = Option{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_type_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Option) String() string {
diff --git a/types/known/wrapperspb/wrappers.pb.go b/types/known/wrapperspb/wrappers.pb.go
index 4dd89e3..f753cf9 100644
--- a/types/known/wrapperspb/wrappers.pb.go
+++ b/types/known/wrapperspb/wrappers.pb.go
@@ -64,6 +64,11 @@
 
 func (x *DoubleValue) Reset() {
 	*x = DoubleValue{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_wrappers_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *DoubleValue) String() string {
@@ -110,6 +115,11 @@
 
 func (x *FloatValue) Reset() {
 	*x = FloatValue{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_wrappers_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *FloatValue) String() string {
@@ -156,6 +166,11 @@
 
 func (x *Int64Value) Reset() {
 	*x = Int64Value{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_wrappers_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Int64Value) String() string {
@@ -202,6 +217,11 @@
 
 func (x *UInt64Value) Reset() {
 	*x = UInt64Value{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_wrappers_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *UInt64Value) String() string {
@@ -248,6 +268,11 @@
 
 func (x *Int32Value) Reset() {
 	*x = Int32Value{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_wrappers_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Int32Value) String() string {
@@ -294,6 +319,11 @@
 
 func (x *UInt32Value) Reset() {
 	*x = UInt32Value{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_wrappers_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *UInt32Value) String() string {
@@ -340,6 +370,11 @@
 
 func (x *BoolValue) Reset() {
 	*x = BoolValue{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_wrappers_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *BoolValue) String() string {
@@ -386,6 +421,11 @@
 
 func (x *StringValue) Reset() {
 	*x = StringValue{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_wrappers_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *StringValue) String() string {
@@ -432,6 +472,11 @@
 
 func (x *BytesValue) Reset() {
 	*x = BytesValue{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_wrappers_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *BytesValue) String() string {
diff --git a/types/pluginpb/plugin.pb.go b/types/pluginpb/plugin.pb.go
index 210e767..f5dbec8 100644
--- a/types/pluginpb/plugin.pb.go
+++ b/types/pluginpb/plugin.pb.go
@@ -73,6 +73,11 @@
 
 func (x *Version) Reset() {
 	*x = Version{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_compiler_plugin_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *Version) String() string {
@@ -159,6 +164,11 @@
 
 func (x *CodeGeneratorRequest) Reset() {
 	*x = CodeGeneratorRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_compiler_plugin_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *CodeGeneratorRequest) String() string {
@@ -232,6 +242,11 @@
 
 func (x *CodeGeneratorResponse) Reset() {
 	*x = CodeGeneratorResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_compiler_plugin_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *CodeGeneratorResponse) String() string {
@@ -333,6 +348,11 @@
 
 func (x *CodeGeneratorResponse_File) Reset() {
 	*x = CodeGeneratorResponse_File{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_protobuf_compiler_plugin_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *CodeGeneratorResponse_File) String() string {
