cmd/protoc-gen-go: generate descriptor and plugin with reflection

In CL/152020, we checked in pre-generated versions of descriptor and plugin.
This CL makes it such that they are generated by protoc-gen-go.

We modify protoc-gen-go to avoid reflection support by default
since the binary size increase is still an issue to investigate.
Reflection support is temporarily enabled by setting a special
PROTOC_GEN_GO_ENABLE_REFLECT environment variable.

Reflection support is always enabled for descriptor and plugin.
Furthermore, we change descriptor to depend on the protoapi package
instead of the proto package. The reason we do not switch to protoapi
for all generated protos is because we still depend on v1 proto
for the table-driven InternalMessageInfo type. Dropping it from descriptor
is semantically correct, but does incur slight performance cost.
It does not seem appropriate to drop it for all generated messages.

We could move InternalMessageInfo to protoapi, but the logic behind that
is significant.

Change-Id: I5c3fff7f6eab1a5a2399049d42fa6bf42d4c93f9
Reviewed-on: https://go-review.googlesource.com/c/152547
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/cmd/protoc-gen-go/internal_gengo/main.go b/cmd/protoc-gen-go/internal_gengo/main.go
index 435eb5b..d64b2da 100644
--- a/cmd/protoc-gen-go/internal_gengo/main.go
+++ b/cmd/protoc-gen-go/internal_gengo/main.go
@@ -31,9 +31,10 @@
 const generatedCodeVersion = 3
 
 const (
-	fmtPackage   = protogen.GoImportPath("fmt")
-	mathPackage  = protogen.GoImportPath("math")
-	protoPackage = protogen.GoImportPath("github.com/golang/protobuf/proto")
+	fmtPackage      = protogen.GoImportPath("fmt")
+	mathPackage     = protogen.GoImportPath("math")
+	protoPackage    = protogen.GoImportPath("github.com/golang/protobuf/proto")
+	protoapiPackage = protogen.GoImportPath("github.com/golang/protobuf/protoapi")
 )
 
 type fileInfo struct {
@@ -46,6 +47,28 @@
 	fileReflect fileReflect
 }
 
+// protoPackage returns the package to import, which is either the protoPackage
+// or the protoapiPackage constant.
+//
+// This special casing exists because we are unable to move InternalMessageInfo
+// to protoapi since the implementation behind that logic is heavy and
+// too intricately connected to other parts of the proto package.
+// The descriptor proto is special in that it avoids using InternalMessageInfo
+// so that it is able to depend solely on protoapi and break its dependency
+// on the proto package. It is still semantically correct for descriptor to
+// avoid using InternalMessageInfo, but it does incur some performance penalty.
+// This is acceptable for descriptor, which is a single proto file and is not
+// known to be in the hot path for any code.
+//
+// TODO: Remove this special-casing when the table-driven implementation has
+// been ported over to v2.
+func (f *fileInfo) protoPackage() protogen.GoImportPath {
+	if isDescriptor(f.File) {
+		return protoapiPackage
+	}
+	return protoPackage
+}
+
 // GenerateFile generates the contents of a .pb.go file.
 func GenerateFile(gen *protogen.Plugin, file *protogen.File, g *protogen.GeneratedFile) {
 	f := &fileInfo{
@@ -97,19 +120,21 @@
 	// detect unintended variations.
 	//
 	// TODO: Eventually remove this.
-	g.P("// Reference imports to suppress errors if they are not otherwise used.")
-	g.P("var _ = ", protoPackage.Ident("Marshal"))
-	g.P("var _ = ", fmtPackage.Ident("Errorf"))
-	g.P("var _ = ", mathPackage.Ident("Inf"))
-	g.P()
+	if !isDescriptor(file) {
+		g.P("// Reference imports to suppress errors if they are not otherwise used.")
+		g.P("var _ = ", protoPackage.Ident("Marshal"))
+		g.P("var _ = ", fmtPackage.Ident("Errorf"))
+		g.P("var _ = ", mathPackage.Ident("Inf"))
+		g.P()
 
-	g.P("// This is a compile-time assertion to ensure that this generated file")
-	g.P("// is compatible with the proto package it is being compiled against.")
-	g.P("// A compilation error at this line likely means your copy of the")
-	g.P("// proto package needs to be updated.")
-	g.P("const _ = ", protoPackage.Ident(fmt.Sprintf("ProtoPackageIsVersion%d", generatedCodeVersion)),
-		"// please upgrade the proto package")
-	g.P()
+		g.P("// This is a compile-time assertion to ensure that this generated file")
+		g.P("// is compatible with the proto package it is being compiled against.")
+		g.P("// A compilation error at this line likely means your copy of the")
+		g.P("// proto package needs to be updated.")
+		g.P("const _ = ", protoPackage.Ident(fmt.Sprintf("ProtoPackageIsVersion%d", generatedCodeVersion)),
+			"// please upgrade the proto package")
+		g.P()
+	}
 
 	for i, imps := 0, f.Desc.Imports(); i < imps.Len(); i++ {
 		genImport(gen, g, f, imps.Get(i))
@@ -235,7 +260,7 @@
 	w.Close()
 	b = buf.Bytes()
 
-	g.P("func init() { proto.RegisterFile(", strconv.Quote(f.Desc.Path()), ", ", f.descriptorVar, ") }")
+	g.P("func init() {", f.protoPackage().Ident("RegisterFile"), "(", strconv.Quote(f.Desc.Path()), ", ", f.descriptorVar, ") }")
 	g.P()
 	g.P("var ", f.descriptorVar, " = []byte{")
 	g.P("// ", len(b), " bytes of a gzipped FileDescriptorProto")
@@ -304,13 +329,13 @@
 		g.P()
 	}
 	g.P("func (x ", enum.GoIdent, ") String() string {")
-	g.P("return ", protoPackage.Ident("EnumName"), "(", enum.GoIdent, "_name, int32(x))")
+	g.P("return ", f.protoPackage().Ident("EnumName"), "(", enum.GoIdent, "_name, int32(x))")
 	g.P("}")
 	g.P()
 
 	if enum.Desc.Syntax() != protoreflect.Proto3 {
 		g.P("func (x *", enum.GoIdent, ") UnmarshalJSON(data []byte) error {")
-		g.P("value, err := ", protoPackage.Ident("UnmarshalJSONEnum"), "(", enum.GoIdent, `_value, data, "`, enum.GoIdent, `")`)
+		g.P("value, err := ", f.protoPackage().Ident("UnmarshalJSONEnum"), "(", enum.GoIdent, `_value, data, "`, enum.GoIdent, `")`)
 		g.P("if err != nil {")
 		g.P("return err")
 		g.P("}")
@@ -409,7 +434,7 @@
 			tags = append(tags, `protobuf_messageset:"1"`)
 		}
 		tags = append(tags, `json:"-"`)
-		g.P(protoPackage.Ident("XXX_InternalExtensions"), " `", strings.Join(tags, " "), "`")
+		g.P(f.protoPackage().Ident("XXX_InternalExtensions"), " `", strings.Join(tags, " "), "`")
 	}
 	// TODO XXX_InternalExtensions
 	g.P("XXX_unrecognized []byte `json:\"-\"`")
@@ -423,7 +448,7 @@
 	// Reset
 	g.P("func (m *", message.GoIdent, ") Reset() { *m = ", message.GoIdent, "{} }")
 	// String
-	g.P("func (m *", message.GoIdent, ") String() string { return ", protoPackage.Ident("CompactTextString"), "(m) }")
+	g.P("func (m *", message.GoIdent, ") String() string { return ", f.protoPackage().Ident("CompactTextString"), "(m) }")
 	// ProtoMessage
 	g.P("func (*", message.GoIdent, ") ProtoMessage() {}")
 	// Descriptor
@@ -438,7 +463,7 @@
 
 	// ExtensionRangeArray
 	if extranges := message.Desc.ExtensionRanges(); extranges.Len() > 0 {
-		protoExtRange := protoPackage.Ident("ExtensionRange")
+		protoExtRange := f.protoPackage().Ident("ExtensionRange")
 		extRangeVar := "extRange_" + message.GoIdent.GoName
 		g.P("var ", extRangeVar, " = []", protoExtRange, " {")
 		for i := 0; i < extranges.Len(); i++ {
@@ -462,30 +487,35 @@
 	// table-driven approach. Instead, we should only add a single method
 	// that allows getting access to the *InternalMessageInfo struct and then
 	// calling Unmarshal, Marshal, Merge, Size, and Discard directly on that.
-	messageInfoVar := "xxx_messageInfo_" + message.GoIdent.GoName
-	// XXX_Unmarshal
-	g.P("func (m *", message.GoIdent, ") XXX_Unmarshal(b []byte) error {")
-	g.P("return ", messageInfoVar, ".Unmarshal(m, b)")
-	g.P("}")
-	// XXX_Marshal
-	g.P("func (m *", message.GoIdent, ") XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {")
-	g.P("return ", messageInfoVar, ".Marshal(b, m, deterministic)")
-	g.P("}")
-	// XXX_Merge
-	g.P("func (m *", message.GoIdent, ") XXX_Merge(src proto.Message) {")
-	g.P(messageInfoVar, ".Merge(m, src)")
-	g.P("}")
-	// XXX_Size
-	g.P("func (m *", message.GoIdent, ") XXX_Size() int {")
-	g.P("return ", messageInfoVar, ".Size(m)")
-	g.P("}")
-	// XXX_DiscardUnknown
-	g.P("func (m *", message.GoIdent, ") XXX_DiscardUnknown() {")
-	g.P(messageInfoVar, ".DiscardUnknown(m)")
-	g.P("}")
-	g.P()
-	g.P("var ", messageInfoVar, " ", protoPackage.Ident("InternalMessageInfo"))
-	g.P()
+	if !isDescriptor(f.File) {
+		// NOTE: We avoid adding table-driven support for descriptor proto
+		// since this depends on the v1 proto package, which would eventually
+		// need to depend on the descriptor itself.
+		messageInfoVar := "xxx_messageInfo_" + message.GoIdent.GoName
+		// XXX_Unmarshal
+		g.P("func (m *", message.GoIdent, ") XXX_Unmarshal(b []byte) error {")
+		g.P("return ", messageInfoVar, ".Unmarshal(m, b)")
+		g.P("}")
+		// XXX_Marshal
+		g.P("func (m *", message.GoIdent, ") XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {")
+		g.P("return ", messageInfoVar, ".Marshal(b, m, deterministic)")
+		g.P("}")
+		// XXX_Merge
+		g.P("func (m *", message.GoIdent, ") XXX_Merge(src proto.Message) {")
+		g.P(messageInfoVar, ".Merge(m, src)")
+		g.P("}")
+		// XXX_Size
+		g.P("func (m *", message.GoIdent, ") XXX_Size() int {")
+		g.P("return ", messageInfoVar, ".Size(m)")
+		g.P("}")
+		// XXX_DiscardUnknown
+		g.P("func (m *", message.GoIdent, ") XXX_DiscardUnknown() {")
+		g.P(messageInfoVar, ".DiscardUnknown(m)")
+		g.P("}")
+		g.P()
+		g.P("var ", messageInfoVar, " ", protoPackage.Ident("InternalMessageInfo"))
+		g.P()
+	}
 
 	// Constants and vars holding the default values of fields.
 	for _, field := range message.Fields {
@@ -699,7 +729,7 @@
 		name = n
 	}
 
-	g.P("var ", extensionVar(f.File, extension), " = &", protoPackage.Ident("ExtensionDesc"), "{")
+	g.P("var ", extensionVar(f.File, extension), " = &", f.protoPackage().Ident("ExtensionDesc"), "{")
 	g.P("ExtendedType: (*", extension.ExtendedType.GoIdent, ")(nil),")
 	goType, pointer := fieldGoType(g, extension)
 	if pointer {
@@ -757,7 +787,7 @@
 	g.P("func init() {")
 	for _, enum := range f.allEnums {
 		name := enum.GoIdent.GoName
-		g.P(protoPackage.Ident("RegisterEnum"), fmt.Sprintf("(%q, %s_name, %s_value)", enumRegistryName(enum), name, name))
+		g.P(f.protoPackage().Ident("RegisterEnum"), fmt.Sprintf("(%q, %s_name, %s_value)", enumRegistryName(enum), name, name))
 	}
 	for _, message := range f.allMessages {
 		if message.Desc.IsMapEntry() {
@@ -769,7 +799,7 @@
 		}
 
 		name := message.GoIdent.GoName
-		g.P(protoPackage.Ident("RegisterType"), fmt.Sprintf("((*%s)(nil), %q)", name, message.Desc.FullName()))
+		g.P(f.protoPackage().Ident("RegisterType"), fmt.Sprintf("((*%s)(nil), %q)", name, message.Desc.FullName()))
 
 		// Types of map fields, sorted by the name of the field message type.
 		var mapFields []*protogen.Field
@@ -786,7 +816,7 @@
 		for _, field := range mapFields {
 			typeName := string(field.MessageType.Desc.FullName())
 			goType, _ := fieldGoType(g, field)
-			g.P(protoPackage.Ident("RegisterMapType"), fmt.Sprintf("((%v)(nil), %q)", goType, typeName))
+			g.P(f.protoPackage().Ident("RegisterMapType"), fmt.Sprintf("((%v)(nil), %q)", goType, typeName))
 		}
 	}
 	for _, extension := range f.Extensions {
@@ -797,7 +827,7 @@
 }
 
 func genRegisterExtension(gen *protogen.Plugin, g *protogen.GeneratedFile, f *fileInfo, extension *protogen.Extension) {
-	g.P(protoPackage.Ident("RegisterExtension"), "(", extensionVar(f.File, extension), ")")
+	g.P(f.protoPackage().Ident("RegisterExtension"), "(", extensionVar(f.File, extension), ")")
 }
 
 // deprecationComment returns a standard deprecation comment if deprecated is true.
diff --git a/cmd/protoc-gen-go/internal_gengo/reflect.go b/cmd/protoc-gen-go/internal_gengo/reflect.go
index a03373f..9200910 100644
--- a/cmd/protoc-gen-go/internal_gengo/reflect.go
+++ b/cmd/protoc-gen-go/internal_gengo/reflect.go
@@ -7,6 +7,7 @@
 import (
 	"fmt"
 	"math"
+	"os"
 	"reflect"
 	"strconv"
 	"strings"
@@ -16,7 +17,17 @@
 )
 
 // TODO: Remove this flag.
-const enableReflect = true
+// Remember to remove the copy in internal/protogen/goldentest.
+var enableReflectFlag = os.Getenv("PROTOC_GEN_GO_ENABLE_REFLECT") != ""
+
+func enableReflection(f *protogen.File) bool {
+	return enableReflectFlag || isDescriptor(f)
+}
+
+// TODO: Remove special-casing for descriptor proto.
+func isDescriptor(f *protogen.File) bool {
+	return f.Desc.Path() == "google/protobuf/descriptor.proto" && f.Desc.Package() == "google.protobuf"
+}
 
 // minimumVersion is minimum version of the v2 proto package that is required.
 // This is incremented every time the generated code relies on some property
@@ -68,7 +79,7 @@
 }
 
 func genReflectInitFunction(gen *protogen.Plugin, g *protogen.GeneratedFile, f *fileInfo) {
-	if !enableReflect {
+	if !enableReflection(f.File) {
 		return
 	}
 
@@ -160,7 +171,7 @@
 }
 
 func genReflectFileDescriptor(gen *protogen.Plugin, g *protogen.GeneratedFile, f *fileInfo) {
-	if !enableReflect {
+	if !enableReflection(f.File) {
 		return
 	}
 
@@ -318,7 +329,7 @@
 }
 
 func genReflectEnum(gen *protogen.Plugin, g *protogen.GeneratedFile, f *fileInfo, enum *protogen.Enum) {
-	if !enableReflect {
+	if !enableReflection(f.File) {
 		return
 	}
 
@@ -340,7 +351,7 @@
 }
 
 func genReflectMessage(gen *protogen.Plugin, g *protogen.GeneratedFile, f *fileInfo, message *protogen.Message) {
-	if !enableReflect {
+	if !enableReflection(f.File) {
 		return
 	}
 
diff --git a/go.mod b/go.mod
index b899c6f..d43698f 100644
--- a/go.mod
+++ b/go.mod
@@ -1,7 +1,7 @@
 module github.com/golang/protobuf/v2
 
 require (
-	github.com/golang/protobuf v1.2.1-0.20181130223505-8f3966804431
+	github.com/golang/protobuf v1.2.1-0.20181205191652-7e65e513332f
 	github.com/google/go-cmp v0.2.1-0.20181101181452-745b8ec83783
 	golang.org/x/tools v0.0.0-20180928181343-b3c0be4c978b
 )
diff --git a/go.sum b/go.sum
index dfd9fba..0cf2a8d 100644
--- a/go.sum
+++ b/go.sum
@@ -1,6 +1,6 @@
 github.com/golang/protobuf v1.2.1-0.20181127190454-8d0c54c12466/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0=
-github.com/golang/protobuf v1.2.1-0.20181130223505-8f3966804431 h1:OtJApg8lwJ831/LP3MINk4iuG5OrqxeBJUx3IMCKWY8=
-github.com/golang/protobuf v1.2.1-0.20181130223505-8f3966804431/go.mod h1:asK8yRb/+zxJTE0SbTESCku/4OjiDfbPwk4rEyIatUA=
+github.com/golang/protobuf v1.2.1-0.20181205191652-7e65e513332f h1:jEoef3K+ZQwZ7UB1iGu6KhX8hS9cYw1aXR7djS3Vn10=
+github.com/golang/protobuf v1.2.1-0.20181205191652-7e65e513332f/go.mod h1:asK8yRb/+zxJTE0SbTESCku/4OjiDfbPwk4rEyIatUA=
 github.com/golang/protobuf/v2 v2.0.0-20181127193627-d7e97bc71bcb/go.mod h1:MgUD+N3FwzDmj2CdMsT5ap7K7jx+c9cQDQ7fVhmH+Xw=
 github.com/google/go-cmp v0.2.1-0.20181101181452-745b8ec83783 h1:wVZ6laEGf86tNDTpR5mxFyFIclJJiXCxuJhcQKnsOHk=
 github.com/google/go-cmp v0.2.1-0.20181101181452-745b8ec83783/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
diff --git a/internal/protogen/goldentest/goldentest.go b/internal/protogen/goldentest/goldentest.go
index fc0dc57..0902ad7 100644
--- a/internal/protogen/goldentest/goldentest.go
+++ b/internal/protogen/goldentest/goldentest.go
@@ -119,6 +119,8 @@
 	// We set the RUN_AS_PROTOC_PLUGIN environment variable to indicate that
 	// the subprocess should act as a proto compiler rather than a test.
 	cmd.Env = append(os.Environ(), "RUN_AS_PROTOC_PLUGIN=1")
+	// TODO: Remove this when protoc-gen-go always generates reflection.
+	cmd.Env = append(cmd.Env, "PROTOC_GEN_GO_ENABLE_REFLECT=1")
 	out, err := cmd.CombinedOutput()
 	if len(out) > 0 || err != nil {
 		t.Log("RUNNING: ", strings.Join(cmd.Args, " "))
diff --git a/protogen/protogen_test.go b/protogen/protogen_test.go
index 4750e23..7882605 100644
--- a/protogen/protogen_test.go
+++ b/protogen/protogen_test.go
@@ -383,16 +383,6 @@
 		t.Fatal(err)
 	}
 	req := &pluginpb.CodeGeneratorRequest{}
-
-	// TODO: This is a hack, but the proto v1 UnmarshalText relies on global
-	// enum registration to work. The v2 textpb will not have this issue.
-	proto.RegisterEnum("google.protobuf.FieldDescriptorProto_Type", descriptorpb.FieldDescriptorProto_Type_name, descriptorpb.FieldDescriptorProto_Type_value)
-	proto.RegisterEnum("google.protobuf.FieldDescriptorProto_Label", descriptorpb.FieldDescriptorProto_Label_name, descriptorpb.FieldDescriptorProto_Label_value)
-	proto.RegisterEnum("google.protobuf.FileOptions_OptimizeMode", descriptorpb.FileOptions_OptimizeMode_name, descriptorpb.FileOptions_OptimizeMode_value)
-	proto.RegisterEnum("google.protobuf.FieldOptions_CType", descriptorpb.FieldOptions_CType_name, descriptorpb.FieldOptions_CType_value)
-	proto.RegisterEnum("google.protobuf.FieldOptions_JSType", descriptorpb.FieldOptions_JSType_name, descriptorpb.FieldOptions_JSType_value)
-	proto.RegisterEnum("google.protobuf.MethodOptions_IdempotencyLevel", descriptorpb.MethodOptions_IdempotencyLevel_name, descriptorpb.MethodOptions_IdempotencyLevel_value)
-
 	if err := proto.UnmarshalText(string(b), req); err != nil {
 		t.Fatal(err)
 	}
diff --git a/regenerate.bash b/regenerate.bash
index af3e487..acccb2b 100755
--- a/regenerate.bash
+++ b/regenerate.bash
@@ -21,9 +21,28 @@
 for dir in ${PROTO_DIRS[@]}; do
   for p in `find $dir -name "*.proto"`; do
     echo "# $p"
-    protoc -I$dir \
+    PROTOC_GEN_GO_ENABLE_REFLECT=1 protoc -I$dir \
       --go_out=paths=source_relative:$dir \
       --go-grpc_out=paths=source_relative:$dir \
       $p
   done
 done
+
+# Generate descriptor and plugin.
+# TODO: Make this more automated.
+
+echo "# types/descriptor/descriptor.proto"
+mkdir -p $tmpdir/src/google/protobuf
+cp ./types/descriptor/descriptor.proto $tmpdir/src/google/protobuf/descriptor.proto
+PROTOC_GEN_GO_ENABLE_REFLECT=1 protoc -I$tmpdir/src \
+  --go_out=paths=source_relative:$tmpdir/src \
+  $tmpdir/src/google/protobuf/descriptor.proto
+cp $tmpdir/src/google/protobuf/descriptor.pb.go ./types/descriptor/descriptor.pb.go
+
+echo "# types/plugin/plugin.proto"
+mkdir -p $tmpdir/src/google/protobuf/compiler
+cp ./types/plugin/plugin.proto $tmpdir/src/google/protobuf/compiler/plugin.proto
+PROTOC_GEN_GO_ENABLE_REFLECT=1 protoc -I$tmpdir/src \
+  --go_out=paths=source_relative:$tmpdir/src \
+  $tmpdir/src/google/protobuf/compiler/plugin.proto
+cp $tmpdir/src/google/protobuf/compiler/plugin.pb.go ./types/plugin/plugin.pb.go
diff --git a/types/descriptor/descriptor.pb.go b/types/descriptor/descriptor.pb.go
index 529c9e6..7fdc6d3 100644
--- a/types/descriptor/descriptor.pb.go
+++ b/types/descriptor/descriptor.pb.go
@@ -1,12 +1,10 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // source: google/protobuf/descriptor.proto
 
-package descriptor
+package descriptor_proto
 
 import (
-	"errors"
-
-	proto "github.com/golang/protobuf/protoapi"
+	protoapi "github.com/golang/protobuf/protoapi"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
 	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
@@ -107,11 +105,16 @@
 }
 
 func (x FieldDescriptorProto_Type) String() string {
-	return FieldDescriptorProto_Type_name[int32(x)]
+	return protoapi.EnumName(FieldDescriptorProto_Type_name, int32(x))
 }
 
 func (x *FieldDescriptorProto_Type) UnmarshalJSON(data []byte) error {
-	return errors.New("not implemented")
+	value, err := protoapi.UnmarshalJSONEnum(FieldDescriptorProto_Type_value, data, "FieldDescriptorProto_Type")
+	if err != nil {
+		return err
+	}
+	*x = FieldDescriptorProto_Type(value)
+	return nil
 }
 
 func (FieldDescriptorProto_Type) EnumDescriptor() ([]byte, []int) {
@@ -158,11 +161,16 @@
 }
 
 func (x FieldDescriptorProto_Label) String() string {
-	return FieldDescriptorProto_Label_name[int32(x)]
+	return protoapi.EnumName(FieldDescriptorProto_Label_name, int32(x))
 }
 
 func (x *FieldDescriptorProto_Label) UnmarshalJSON(data []byte) error {
-	return errors.New("not implemented")
+	value, err := protoapi.UnmarshalJSONEnum(FieldDescriptorProto_Label_value, data, "FieldDescriptorProto_Label")
+	if err != nil {
+		return err
+	}
+	*x = FieldDescriptorProto_Label(value)
+	return nil
 }
 
 func (FieldDescriptorProto_Label) EnumDescriptor() ([]byte, []int) {
@@ -210,11 +218,16 @@
 }
 
 func (x FileOptions_OptimizeMode) String() string {
-	return FileOptions_OptimizeMode_name[int32(x)]
+	return protoapi.EnumName(FileOptions_OptimizeMode_name, int32(x))
 }
 
 func (x *FileOptions_OptimizeMode) UnmarshalJSON(data []byte) error {
-	return errors.New("not implemented")
+	value, err := protoapi.UnmarshalJSONEnum(FileOptions_OptimizeMode_value, data, "FileOptions_OptimizeMode")
+	if err != nil {
+		return err
+	}
+	*x = FileOptions_OptimizeMode(value)
+	return nil
 }
 
 func (FileOptions_OptimizeMode) EnumDescriptor() ([]byte, []int) {
@@ -261,11 +274,16 @@
 }
 
 func (x FieldOptions_CType) String() string {
-	return FieldOptions_CType_name[int32(x)]
+	return protoapi.EnumName(FieldOptions_CType_name, int32(x))
 }
 
 func (x *FieldOptions_CType) UnmarshalJSON(data []byte) error {
-	return errors.New("not implemented")
+	value, err := protoapi.UnmarshalJSONEnum(FieldOptions_CType_value, data, "FieldOptions_CType")
+	if err != nil {
+		return err
+	}
+	*x = FieldOptions_CType(value)
+	return nil
 }
 
 func (FieldOptions_CType) EnumDescriptor() ([]byte, []int) {
@@ -314,11 +332,16 @@
 }
 
 func (x FieldOptions_JSType) String() string {
-	return FieldOptions_JSType_name[int32(x)]
+	return protoapi.EnumName(FieldOptions_JSType_name, int32(x))
 }
 
 func (x *FieldOptions_JSType) UnmarshalJSON(data []byte) error {
-	return errors.New("not implemented")
+	value, err := protoapi.UnmarshalJSONEnum(FieldOptions_JSType_value, data, "FieldOptions_JSType")
+	if err != nil {
+		return err
+	}
+	*x = FieldOptions_JSType(value)
+	return nil
 }
 
 func (FieldOptions_JSType) EnumDescriptor() ([]byte, []int) {
@@ -367,11 +390,16 @@
 }
 
 func (x MethodOptions_IdempotencyLevel) String() string {
-	return MethodOptions_IdempotencyLevel_name[int32(x)]
+	return protoapi.EnumName(MethodOptions_IdempotencyLevel_name, int32(x))
 }
 
 func (x *MethodOptions_IdempotencyLevel) UnmarshalJSON(data []byte) error {
-	return errors.New("not implemented")
+	value, err := protoapi.UnmarshalJSONEnum(MethodOptions_IdempotencyLevel_value, data, "MethodOptions_IdempotencyLevel")
+	if err != nil {
+		return err
+	}
+	*x = MethodOptions_IdempotencyLevel(value)
+	return nil
 }
 
 func (MethodOptions_IdempotencyLevel) EnumDescriptor() ([]byte, []int) {
@@ -407,7 +435,7 @@
 func (m xxx_FileDescriptorSet) ProtoMutable() {}
 
 func (m *FileDescriptorSet) Reset()         { *m = FileDescriptorSet{} }
-func (m *FileDescriptorSet) String() string { return "not implemented" }
+func (m *FileDescriptorSet) String() string { return protoapi.CompactTextString(m) }
 func (*FileDescriptorSet) ProtoMessage()    {}
 func (*FileDescriptorSet) Descriptor() ([]byte, []int) {
 	return fileDescriptor_e5baabe45344a177, []int{0}
@@ -470,7 +498,7 @@
 func (m xxx_FileDescriptorProto) ProtoMutable() {}
 
 func (m *FileDescriptorProto) Reset()         { *m = FileDescriptorProto{} }
-func (m *FileDescriptorProto) String() string { return "not implemented" }
+func (m *FileDescriptorProto) String() string { return protoapi.CompactTextString(m) }
 func (*FileDescriptorProto) ProtoMessage()    {}
 func (*FileDescriptorProto) Descriptor() ([]byte, []int) {
 	return fileDescriptor_e5baabe45344a177, []int{1}
@@ -599,7 +627,7 @@
 func (m xxx_DescriptorProto) ProtoMutable() {}
 
 func (m *DescriptorProto) Reset()         { *m = DescriptorProto{} }
-func (m *DescriptorProto) String() string { return "not implemented" }
+func (m *DescriptorProto) String() string { return protoapi.CompactTextString(m) }
 func (*DescriptorProto) ProtoMessage()    {}
 func (*DescriptorProto) Descriptor() ([]byte, []int) {
 	return fileDescriptor_e5baabe45344a177, []int{2}
@@ -706,7 +734,7 @@
 func (m xxx_DescriptorProto_ExtensionRange) ProtoMutable() {}
 
 func (m *DescriptorProto_ExtensionRange) Reset()         { *m = DescriptorProto_ExtensionRange{} }
-func (m *DescriptorProto_ExtensionRange) String() string { return "not implemented" }
+func (m *DescriptorProto_ExtensionRange) String() string { return protoapi.CompactTextString(m) }
 func (*DescriptorProto_ExtensionRange) ProtoMessage()    {}
 func (*DescriptorProto_ExtensionRange) Descriptor() ([]byte, []int) {
 	return fileDescriptor_e5baabe45344a177, []int{2, 0}
@@ -766,7 +794,7 @@
 func (m xxx_DescriptorProto_ReservedRange) ProtoMutable() {}
 
 func (m *DescriptorProto_ReservedRange) Reset()         { *m = DescriptorProto_ReservedRange{} }
-func (m *DescriptorProto_ReservedRange) String() string { return "not implemented" }
+func (m *DescriptorProto_ReservedRange) String() string { return protoapi.CompactTextString(m) }
 func (*DescriptorProto_ReservedRange) ProtoMessage()    {}
 func (*DescriptorProto_ReservedRange) Descriptor() ([]byte, []int) {
 	return fileDescriptor_e5baabe45344a177, []int{2, 1}
@@ -788,11 +816,11 @@
 
 type ExtensionRangeOptions struct {
 	// The parser stores options it doesn't recognize here. See above.
-	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
-	XXX_NoUnkeyedLiteral         struct{}               `json:"-"`
-	proto.XXX_InternalExtensions `json:"-"`
-	XXX_unrecognized             []byte `json:"-"`
-	XXX_sizecache                int32  `json:"-"`
+	UninterpretedOption             []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
+	XXX_NoUnkeyedLiteral            struct{}               `json:"-"`
+	protoapi.XXX_InternalExtensions `json:"-"`
+	XXX_unrecognized                []byte `json:"-"`
+	XXX_sizecache                   int32  `json:"-"`
 }
 
 type xxx_ExtensionRangeOptions struct{ m *ExtensionRangeOptions }
@@ -815,17 +843,17 @@
 func (m xxx_ExtensionRangeOptions) ProtoMutable() {}
 
 func (m *ExtensionRangeOptions) Reset()         { *m = ExtensionRangeOptions{} }
-func (m *ExtensionRangeOptions) String() string { return "not implemented" }
+func (m *ExtensionRangeOptions) String() string { return protoapi.CompactTextString(m) }
 func (*ExtensionRangeOptions) ProtoMessage()    {}
 func (*ExtensionRangeOptions) Descriptor() ([]byte, []int) {
 	return fileDescriptor_e5baabe45344a177, []int{3}
 }
 
-var extRange_ExtensionRangeOptions = []proto.ExtensionRange{
+var extRange_ExtensionRangeOptions = []protoapi.ExtensionRange{
 	{Start: 1000, End: 536870911},
 }
 
-func (*ExtensionRangeOptions) ExtensionRangeArray() []proto.ExtensionRange {
+func (*ExtensionRangeOptions) ExtensionRangeArray() []protoapi.ExtensionRange {
 	return extRange_ExtensionRangeOptions
 }
 
@@ -893,7 +921,7 @@
 func (m xxx_FieldDescriptorProto) ProtoMutable() {}
 
 func (m *FieldDescriptorProto) Reset()         { *m = FieldDescriptorProto{} }
-func (m *FieldDescriptorProto) String() string { return "not implemented" }
+func (m *FieldDescriptorProto) String() string { return protoapi.CompactTextString(m) }
 func (*FieldDescriptorProto) ProtoMessage()    {}
 func (*FieldDescriptorProto) Descriptor() ([]byte, []int) {
 	return fileDescriptor_e5baabe45344a177, []int{4}
@@ -998,7 +1026,7 @@
 func (m xxx_OneofDescriptorProto) ProtoMutable() {}
 
 func (m *OneofDescriptorProto) Reset()         { *m = OneofDescriptorProto{} }
-func (m *OneofDescriptorProto) String() string { return "not implemented" }
+func (m *OneofDescriptorProto) String() string { return protoapi.CompactTextString(m) }
 func (*OneofDescriptorProto) ProtoMessage()    {}
 func (*OneofDescriptorProto) Descriptor() ([]byte, []int) {
 	return fileDescriptor_e5baabe45344a177, []int{5}
@@ -1055,7 +1083,7 @@
 func (m xxx_EnumDescriptorProto) ProtoMutable() {}
 
 func (m *EnumDescriptorProto) Reset()         { *m = EnumDescriptorProto{} }
-func (m *EnumDescriptorProto) String() string { return "not implemented" }
+func (m *EnumDescriptorProto) String() string { return protoapi.CompactTextString(m) }
 func (*EnumDescriptorProto) ProtoMessage()    {}
 func (*EnumDescriptorProto) Descriptor() ([]byte, []int) {
 	return fileDescriptor_e5baabe45344a177, []int{6}
@@ -1132,7 +1160,7 @@
 func (m xxx_EnumDescriptorProto_EnumReservedRange) ProtoMutable() {}
 
 func (m *EnumDescriptorProto_EnumReservedRange) Reset()         { *m = EnumDescriptorProto_EnumReservedRange{} }
-func (m *EnumDescriptorProto_EnumReservedRange) String() string { return "not implemented" }
+func (m *EnumDescriptorProto_EnumReservedRange) String() string { return protoapi.CompactTextString(m) }
 func (*EnumDescriptorProto_EnumReservedRange) ProtoMessage()    {}
 func (*EnumDescriptorProto_EnumReservedRange) Descriptor() ([]byte, []int) {
 	return fileDescriptor_e5baabe45344a177, []int{6, 0}
@@ -1182,7 +1210,7 @@
 func (m xxx_EnumValueDescriptorProto) ProtoMutable() {}
 
 func (m *EnumValueDescriptorProto) Reset()         { *m = EnumValueDescriptorProto{} }
-func (m *EnumValueDescriptorProto) String() string { return "not implemented" }
+func (m *EnumValueDescriptorProto) String() string { return protoapi.CompactTextString(m) }
 func (*EnumValueDescriptorProto) ProtoMessage()    {}
 func (*EnumValueDescriptorProto) Descriptor() ([]byte, []int) {
 	return fileDescriptor_e5baabe45344a177, []int{7}
@@ -1239,7 +1267,7 @@
 func (m xxx_ServiceDescriptorProto) ProtoMutable() {}
 
 func (m *ServiceDescriptorProto) Reset()         { *m = ServiceDescriptorProto{} }
-func (m *ServiceDescriptorProto) String() string { return "not implemented" }
+func (m *ServiceDescriptorProto) String() string { return protoapi.CompactTextString(m) }
 func (*ServiceDescriptorProto) ProtoMessage()    {}
 func (*ServiceDescriptorProto) Descriptor() ([]byte, []int) {
 	return fileDescriptor_e5baabe45344a177, []int{8}
@@ -1303,7 +1331,7 @@
 func (m xxx_MethodDescriptorProto) ProtoMutable() {}
 
 func (m *MethodDescriptorProto) Reset()         { *m = MethodDescriptorProto{} }
-func (m *MethodDescriptorProto) String() string { return "not implemented" }
+func (m *MethodDescriptorProto) String() string { return protoapi.CompactTextString(m) }
 func (*MethodDescriptorProto) ProtoMessage()    {}
 func (*MethodDescriptorProto) Descriptor() ([]byte, []int) {
 	return fileDescriptor_e5baabe45344a177, []int{9}
@@ -1438,11 +1466,11 @@
 	RubyPackage *string `protobuf:"bytes,45,opt,name=ruby_package,json=rubyPackage" json:"ruby_package,omitempty"`
 	// The parser stores options it doesn't recognize here.
 	// See the documentation for the "Options" section above.
-	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
-	XXX_NoUnkeyedLiteral         struct{}               `json:"-"`
-	proto.XXX_InternalExtensions `json:"-"`
-	XXX_unrecognized             []byte `json:"-"`
-	XXX_sizecache                int32  `json:"-"`
+	UninterpretedOption             []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
+	XXX_NoUnkeyedLiteral            struct{}               `json:"-"`
+	protoapi.XXX_InternalExtensions `json:"-"`
+	XXX_unrecognized                []byte `json:"-"`
+	XXX_sizecache                   int32  `json:"-"`
 }
 
 type xxx_FileOptions struct{ m *FileOptions }
@@ -1465,17 +1493,17 @@
 func (m xxx_FileOptions) ProtoMutable() {}
 
 func (m *FileOptions) Reset()         { *m = FileOptions{} }
-func (m *FileOptions) String() string { return "not implemented" }
+func (m *FileOptions) String() string { return protoapi.CompactTextString(m) }
 func (*FileOptions) ProtoMessage()    {}
 func (*FileOptions) Descriptor() ([]byte, []int) {
 	return fileDescriptor_e5baabe45344a177, []int{10}
 }
 
-var extRange_FileOptions = []proto.ExtensionRange{
+var extRange_FileOptions = []protoapi.ExtensionRange{
 	{Start: 1000, End: 536870911},
 }
 
-func (*FileOptions) ExtensionRangeArray() []proto.ExtensionRange {
+func (*FileOptions) ExtensionRangeArray() []protoapi.ExtensionRange {
 	return extRange_FileOptions
 }
 
@@ -1689,11 +1717,11 @@
 	// parser.
 	MapEntry *bool `protobuf:"varint,7,opt,name=map_entry,json=mapEntry" json:"map_entry,omitempty"`
 	// The parser stores options it doesn't recognize here. See above.
-	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
-	XXX_NoUnkeyedLiteral         struct{}               `json:"-"`
-	proto.XXX_InternalExtensions `json:"-"`
-	XXX_unrecognized             []byte `json:"-"`
-	XXX_sizecache                int32  `json:"-"`
+	UninterpretedOption             []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
+	XXX_NoUnkeyedLiteral            struct{}               `json:"-"`
+	protoapi.XXX_InternalExtensions `json:"-"`
+	XXX_unrecognized                []byte `json:"-"`
+	XXX_sizecache                   int32  `json:"-"`
 }
 
 type xxx_MessageOptions struct{ m *MessageOptions }
@@ -1716,17 +1744,17 @@
 func (m xxx_MessageOptions) ProtoMutable() {}
 
 func (m *MessageOptions) Reset()         { *m = MessageOptions{} }
-func (m *MessageOptions) String() string { return "not implemented" }
+func (m *MessageOptions) String() string { return protoapi.CompactTextString(m) }
 func (*MessageOptions) ProtoMessage()    {}
 func (*MessageOptions) Descriptor() ([]byte, []int) {
 	return fileDescriptor_e5baabe45344a177, []int{11}
 }
 
-var extRange_MessageOptions = []proto.ExtensionRange{
+var extRange_MessageOptions = []protoapi.ExtensionRange{
 	{Start: 1000, End: 536870911},
 }
 
-func (*MessageOptions) ExtensionRangeArray() []proto.ExtensionRange {
+func (*MessageOptions) ExtensionRangeArray() []protoapi.ExtensionRange {
 	return extRange_MessageOptions
 }
 
@@ -1830,11 +1858,11 @@
 	// For Google-internal migration only. Do not use.
 	Weak *bool `protobuf:"varint,10,opt,name=weak,def=0" json:"weak,omitempty"`
 	// The parser stores options it doesn't recognize here. See above.
-	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
-	XXX_NoUnkeyedLiteral         struct{}               `json:"-"`
-	proto.XXX_InternalExtensions `json:"-"`
-	XXX_unrecognized             []byte `json:"-"`
-	XXX_sizecache                int32  `json:"-"`
+	UninterpretedOption             []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
+	XXX_NoUnkeyedLiteral            struct{}               `json:"-"`
+	protoapi.XXX_InternalExtensions `json:"-"`
+	XXX_unrecognized                []byte `json:"-"`
+	XXX_sizecache                   int32  `json:"-"`
 }
 
 type xxx_FieldOptions struct{ m *FieldOptions }
@@ -1857,17 +1885,17 @@
 func (m xxx_FieldOptions) ProtoMutable() {}
 
 func (m *FieldOptions) Reset()         { *m = FieldOptions{} }
-func (m *FieldOptions) String() string { return "not implemented" }
+func (m *FieldOptions) String() string { return protoapi.CompactTextString(m) }
 func (*FieldOptions) ProtoMessage()    {}
 func (*FieldOptions) Descriptor() ([]byte, []int) {
 	return fileDescriptor_e5baabe45344a177, []int{12}
 }
 
-var extRange_FieldOptions = []proto.ExtensionRange{
+var extRange_FieldOptions = []protoapi.ExtensionRange{
 	{Start: 1000, End: 536870911},
 }
 
-func (*FieldOptions) ExtensionRangeArray() []proto.ExtensionRange {
+func (*FieldOptions) ExtensionRangeArray() []protoapi.ExtensionRange {
 	return extRange_FieldOptions
 }
 
@@ -1928,11 +1956,11 @@
 
 type OneofOptions struct {
 	// The parser stores options it doesn't recognize here. See above.
-	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
-	XXX_NoUnkeyedLiteral         struct{}               `json:"-"`
-	proto.XXX_InternalExtensions `json:"-"`
-	XXX_unrecognized             []byte `json:"-"`
-	XXX_sizecache                int32  `json:"-"`
+	UninterpretedOption             []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
+	XXX_NoUnkeyedLiteral            struct{}               `json:"-"`
+	protoapi.XXX_InternalExtensions `json:"-"`
+	XXX_unrecognized                []byte `json:"-"`
+	XXX_sizecache                   int32  `json:"-"`
 }
 
 type xxx_OneofOptions struct{ m *OneofOptions }
@@ -1955,17 +1983,17 @@
 func (m xxx_OneofOptions) ProtoMutable() {}
 
 func (m *OneofOptions) Reset()         { *m = OneofOptions{} }
-func (m *OneofOptions) String() string { return "not implemented" }
+func (m *OneofOptions) String() string { return protoapi.CompactTextString(m) }
 func (*OneofOptions) ProtoMessage()    {}
 func (*OneofOptions) Descriptor() ([]byte, []int) {
 	return fileDescriptor_e5baabe45344a177, []int{13}
 }
 
-var extRange_OneofOptions = []proto.ExtensionRange{
+var extRange_OneofOptions = []protoapi.ExtensionRange{
 	{Start: 1000, End: 536870911},
 }
 
-func (*OneofOptions) ExtensionRangeArray() []proto.ExtensionRange {
+func (*OneofOptions) ExtensionRangeArray() []protoapi.ExtensionRange {
 	return extRange_OneofOptions
 }
 
@@ -1986,11 +2014,11 @@
 	// is a formalization for deprecating enums.
 	Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"`
 	// The parser stores options it doesn't recognize here. See above.
-	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
-	XXX_NoUnkeyedLiteral         struct{}               `json:"-"`
-	proto.XXX_InternalExtensions `json:"-"`
-	XXX_unrecognized             []byte `json:"-"`
-	XXX_sizecache                int32  `json:"-"`
+	UninterpretedOption             []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
+	XXX_NoUnkeyedLiteral            struct{}               `json:"-"`
+	protoapi.XXX_InternalExtensions `json:"-"`
+	XXX_unrecognized                []byte `json:"-"`
+	XXX_sizecache                   int32  `json:"-"`
 }
 
 type xxx_EnumOptions struct{ m *EnumOptions }
@@ -2013,17 +2041,17 @@
 func (m xxx_EnumOptions) ProtoMutable() {}
 
 func (m *EnumOptions) Reset()         { *m = EnumOptions{} }
-func (m *EnumOptions) String() string { return "not implemented" }
+func (m *EnumOptions) String() string { return protoapi.CompactTextString(m) }
 func (*EnumOptions) ProtoMessage()    {}
 func (*EnumOptions) Descriptor() ([]byte, []int) {
 	return fileDescriptor_e5baabe45344a177, []int{14}
 }
 
-var extRange_EnumOptions = []proto.ExtensionRange{
+var extRange_EnumOptions = []protoapi.ExtensionRange{
 	{Start: 1000, End: 536870911},
 }
 
-func (*EnumOptions) ExtensionRangeArray() []proto.ExtensionRange {
+func (*EnumOptions) ExtensionRangeArray() []protoapi.ExtensionRange {
 	return extRange_EnumOptions
 }
 
@@ -2057,11 +2085,11 @@
 	// this is a formalization for deprecating enum values.
 	Deprecated *bool `protobuf:"varint,1,opt,name=deprecated,def=0" json:"deprecated,omitempty"`
 	// The parser stores options it doesn't recognize here. See above.
-	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
-	XXX_NoUnkeyedLiteral         struct{}               `json:"-"`
-	proto.XXX_InternalExtensions `json:"-"`
-	XXX_unrecognized             []byte `json:"-"`
-	XXX_sizecache                int32  `json:"-"`
+	UninterpretedOption             []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
+	XXX_NoUnkeyedLiteral            struct{}               `json:"-"`
+	protoapi.XXX_InternalExtensions `json:"-"`
+	XXX_unrecognized                []byte `json:"-"`
+	XXX_sizecache                   int32  `json:"-"`
 }
 
 type xxx_EnumValueOptions struct{ m *EnumValueOptions }
@@ -2084,17 +2112,17 @@
 func (m xxx_EnumValueOptions) ProtoMutable() {}
 
 func (m *EnumValueOptions) Reset()         { *m = EnumValueOptions{} }
-func (m *EnumValueOptions) String() string { return "not implemented" }
+func (m *EnumValueOptions) String() string { return protoapi.CompactTextString(m) }
 func (*EnumValueOptions) ProtoMessage()    {}
 func (*EnumValueOptions) Descriptor() ([]byte, []int) {
 	return fileDescriptor_e5baabe45344a177, []int{15}
 }
 
-var extRange_EnumValueOptions = []proto.ExtensionRange{
+var extRange_EnumValueOptions = []protoapi.ExtensionRange{
 	{Start: 1000, End: 536870911},
 }
 
-func (*EnumValueOptions) ExtensionRangeArray() []proto.ExtensionRange {
+func (*EnumValueOptions) ExtensionRangeArray() []protoapi.ExtensionRange {
 	return extRange_EnumValueOptions
 }
 
@@ -2121,11 +2149,11 @@
 	// this is a formalization for deprecating services.
 	Deprecated *bool `protobuf:"varint,33,opt,name=deprecated,def=0" json:"deprecated,omitempty"`
 	// The parser stores options it doesn't recognize here. See above.
-	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
-	XXX_NoUnkeyedLiteral         struct{}               `json:"-"`
-	proto.XXX_InternalExtensions `json:"-"`
-	XXX_unrecognized             []byte `json:"-"`
-	XXX_sizecache                int32  `json:"-"`
+	UninterpretedOption             []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
+	XXX_NoUnkeyedLiteral            struct{}               `json:"-"`
+	protoapi.XXX_InternalExtensions `json:"-"`
+	XXX_unrecognized                []byte `json:"-"`
+	XXX_sizecache                   int32  `json:"-"`
 }
 
 type xxx_ServiceOptions struct{ m *ServiceOptions }
@@ -2148,17 +2176,17 @@
 func (m xxx_ServiceOptions) ProtoMutable() {}
 
 func (m *ServiceOptions) Reset()         { *m = ServiceOptions{} }
-func (m *ServiceOptions) String() string { return "not implemented" }
+func (m *ServiceOptions) String() string { return protoapi.CompactTextString(m) }
 func (*ServiceOptions) ProtoMessage()    {}
 func (*ServiceOptions) Descriptor() ([]byte, []int) {
 	return fileDescriptor_e5baabe45344a177, []int{16}
 }
 
-var extRange_ServiceOptions = []proto.ExtensionRange{
+var extRange_ServiceOptions = []protoapi.ExtensionRange{
 	{Start: 1000, End: 536870911},
 }
 
-func (*ServiceOptions) ExtensionRangeArray() []proto.ExtensionRange {
+func (*ServiceOptions) ExtensionRangeArray() []protoapi.ExtensionRange {
 	return extRange_ServiceOptions
 }
 
@@ -2186,11 +2214,11 @@
 	Deprecated       *bool                           `protobuf:"varint,33,opt,name=deprecated,def=0" json:"deprecated,omitempty"`
 	IdempotencyLevel *MethodOptions_IdempotencyLevel `protobuf:"varint,34,opt,name=idempotency_level,json=idempotencyLevel,enum=google.protobuf.MethodOptions_IdempotencyLevel,def=0" json:"idempotency_level,omitempty"`
 	// The parser stores options it doesn't recognize here. See above.
-	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
-	XXX_NoUnkeyedLiteral         struct{}               `json:"-"`
-	proto.XXX_InternalExtensions `json:"-"`
-	XXX_unrecognized             []byte `json:"-"`
-	XXX_sizecache                int32  `json:"-"`
+	UninterpretedOption             []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
+	XXX_NoUnkeyedLiteral            struct{}               `json:"-"`
+	protoapi.XXX_InternalExtensions `json:"-"`
+	XXX_unrecognized                []byte `json:"-"`
+	XXX_sizecache                   int32  `json:"-"`
 }
 
 type xxx_MethodOptions struct{ m *MethodOptions }
@@ -2213,17 +2241,17 @@
 func (m xxx_MethodOptions) ProtoMutable() {}
 
 func (m *MethodOptions) Reset()         { *m = MethodOptions{} }
-func (m *MethodOptions) String() string { return "not implemented" }
+func (m *MethodOptions) String() string { return protoapi.CompactTextString(m) }
 func (*MethodOptions) ProtoMessage()    {}
 func (*MethodOptions) Descriptor() ([]byte, []int) {
 	return fileDescriptor_e5baabe45344a177, []int{17}
 }
 
-var extRange_MethodOptions = []proto.ExtensionRange{
+var extRange_MethodOptions = []protoapi.ExtensionRange{
 	{Start: 1000, End: 536870911},
 }
 
-func (*MethodOptions) ExtensionRangeArray() []proto.ExtensionRange {
+func (*MethodOptions) ExtensionRangeArray() []protoapi.ExtensionRange {
 	return extRange_MethodOptions
 }
 
@@ -2292,7 +2320,7 @@
 func (m xxx_UninterpretedOption) ProtoMutable() {}
 
 func (m *UninterpretedOption) Reset()         { *m = UninterpretedOption{} }
-func (m *UninterpretedOption) String() string { return "not implemented" }
+func (m *UninterpretedOption) String() string { return protoapi.CompactTextString(m) }
 func (*UninterpretedOption) ProtoMessage()    {}
 func (*UninterpretedOption) Descriptor() ([]byte, []int) {
 	return fileDescriptor_e5baabe45344a177, []int{18}
@@ -2380,7 +2408,7 @@
 func (m xxx_UninterpretedOption_NamePart) ProtoMutable() {}
 
 func (m *UninterpretedOption_NamePart) Reset()         { *m = UninterpretedOption_NamePart{} }
-func (m *UninterpretedOption_NamePart) String() string { return "not implemented" }
+func (m *UninterpretedOption_NamePart) String() string { return protoapi.CompactTextString(m) }
 func (*UninterpretedOption_NamePart) ProtoMessage()    {}
 func (*UninterpretedOption_NamePart) Descriptor() ([]byte, []int) {
 	return fileDescriptor_e5baabe45344a177, []int{18, 0}
@@ -2472,7 +2500,7 @@
 func (m xxx_SourceCodeInfo) ProtoMutable() {}
 
 func (m *SourceCodeInfo) Reset()         { *m = SourceCodeInfo{} }
-func (m *SourceCodeInfo) String() string { return "not implemented" }
+func (m *SourceCodeInfo) String() string { return protoapi.CompactTextString(m) }
 func (*SourceCodeInfo) ProtoMessage()    {}
 func (*SourceCodeInfo) Descriptor() ([]byte, []int) {
 	return fileDescriptor_e5baabe45344a177, []int{19}
@@ -2591,7 +2619,7 @@
 func (m xxx_SourceCodeInfo_Location) ProtoMutable() {}
 
 func (m *SourceCodeInfo_Location) Reset()         { *m = SourceCodeInfo_Location{} }
-func (m *SourceCodeInfo_Location) String() string { return "not implemented" }
+func (m *SourceCodeInfo_Location) String() string { return protoapi.CompactTextString(m) }
 func (*SourceCodeInfo_Location) ProtoMessage()    {}
 func (*SourceCodeInfo_Location) Descriptor() ([]byte, []int) {
 	return fileDescriptor_e5baabe45344a177, []int{19, 0}
@@ -2664,7 +2692,7 @@
 func (m xxx_GeneratedCodeInfo) ProtoMutable() {}
 
 func (m *GeneratedCodeInfo) Reset()         { *m = GeneratedCodeInfo{} }
-func (m *GeneratedCodeInfo) String() string { return "not implemented" }
+func (m *GeneratedCodeInfo) String() string { return protoapi.CompactTextString(m) }
 func (*GeneratedCodeInfo) ProtoMessage()    {}
 func (*GeneratedCodeInfo) Descriptor() ([]byte, []int) {
 	return fileDescriptor_e5baabe45344a177, []int{20}
@@ -2715,7 +2743,7 @@
 func (m xxx_GeneratedCodeInfo_Annotation) ProtoMutable() {}
 
 func (m *GeneratedCodeInfo_Annotation) Reset()         { *m = GeneratedCodeInfo_Annotation{} }
-func (m *GeneratedCodeInfo_Annotation) String() string { return "not implemented" }
+func (m *GeneratedCodeInfo_Annotation) String() string { return protoapi.CompactTextString(m) }
 func (*GeneratedCodeInfo_Annotation) ProtoMessage()    {}
 func (*GeneratedCodeInfo_Annotation) Descriptor() ([]byte, []int) {
 	return fileDescriptor_e5baabe45344a177, []int{20, 0}
@@ -2749,170 +2777,210 @@
 	return 0
 }
 
+func init() {
+	protoapi.RegisterEnum("google.protobuf.FieldDescriptorProto_Type", FieldDescriptorProto_Type_name, FieldDescriptorProto_Type_value)
+	protoapi.RegisterEnum("google.protobuf.FieldDescriptorProto_Label", FieldDescriptorProto_Label_name, FieldDescriptorProto_Label_value)
+	protoapi.RegisterEnum("google.protobuf.FileOptions_OptimizeMode", FileOptions_OptimizeMode_name, FileOptions_OptimizeMode_value)
+	protoapi.RegisterEnum("google.protobuf.FieldOptions_CType", FieldOptions_CType_name, FieldOptions_CType_value)
+	protoapi.RegisterEnum("google.protobuf.FieldOptions_JSType", FieldOptions_JSType_name, FieldOptions_JSType_value)
+	protoapi.RegisterEnum("google.protobuf.MethodOptions_IdempotencyLevel", MethodOptions_IdempotencyLevel_name, MethodOptions_IdempotencyLevel_value)
+	protoapi.RegisterType((*FileDescriptorSet)(nil), "google.protobuf.FileDescriptorSet")
+	protoapi.RegisterType((*FileDescriptorProto)(nil), "google.protobuf.FileDescriptorProto")
+	protoapi.RegisterType((*DescriptorProto)(nil), "google.protobuf.DescriptorProto")
+	protoapi.RegisterType((*DescriptorProto_ExtensionRange)(nil), "google.protobuf.DescriptorProto.ExtensionRange")
+	protoapi.RegisterType((*DescriptorProto_ReservedRange)(nil), "google.protobuf.DescriptorProto.ReservedRange")
+	protoapi.RegisterType((*ExtensionRangeOptions)(nil), "google.protobuf.ExtensionRangeOptions")
+	protoapi.RegisterType((*FieldDescriptorProto)(nil), "google.protobuf.FieldDescriptorProto")
+	protoapi.RegisterType((*OneofDescriptorProto)(nil), "google.protobuf.OneofDescriptorProto")
+	protoapi.RegisterType((*EnumDescriptorProto)(nil), "google.protobuf.EnumDescriptorProto")
+	protoapi.RegisterType((*EnumDescriptorProto_EnumReservedRange)(nil), "google.protobuf.EnumDescriptorProto.EnumReservedRange")
+	protoapi.RegisterType((*EnumValueDescriptorProto)(nil), "google.protobuf.EnumValueDescriptorProto")
+	protoapi.RegisterType((*ServiceDescriptorProto)(nil), "google.protobuf.ServiceDescriptorProto")
+	protoapi.RegisterType((*MethodDescriptorProto)(nil), "google.protobuf.MethodDescriptorProto")
+	protoapi.RegisterType((*FileOptions)(nil), "google.protobuf.FileOptions")
+	protoapi.RegisterType((*MessageOptions)(nil), "google.protobuf.MessageOptions")
+	protoapi.RegisterType((*FieldOptions)(nil), "google.protobuf.FieldOptions")
+	protoapi.RegisterType((*OneofOptions)(nil), "google.protobuf.OneofOptions")
+	protoapi.RegisterType((*EnumOptions)(nil), "google.protobuf.EnumOptions")
+	protoapi.RegisterType((*EnumValueOptions)(nil), "google.protobuf.EnumValueOptions")
+	protoapi.RegisterType((*ServiceOptions)(nil), "google.protobuf.ServiceOptions")
+	protoapi.RegisterType((*MethodOptions)(nil), "google.protobuf.MethodOptions")
+	protoapi.RegisterType((*UninterpretedOption)(nil), "google.protobuf.UninterpretedOption")
+	protoapi.RegisterType((*UninterpretedOption_NamePart)(nil), "google.protobuf.UninterpretedOption.NamePart")
+	protoapi.RegisterType((*SourceCodeInfo)(nil), "google.protobuf.SourceCodeInfo")
+	protoapi.RegisterType((*SourceCodeInfo_Location)(nil), "google.protobuf.SourceCodeInfo.Location")
+	protoapi.RegisterType((*GeneratedCodeInfo)(nil), "google.protobuf.GeneratedCodeInfo")
+	protoapi.RegisterType((*GeneratedCodeInfo_Annotation)(nil), "google.protobuf.GeneratedCodeInfo.Annotation")
+}
+
+func init() {
+	protoapi.RegisterFile("google/protobuf/descriptor.proto", fileDescriptor_e5baabe45344a177)
+}
+
 var fileDescriptor_e5baabe45344a177 = []byte{
 	// 2589 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0xdd, 0x8e, 0xdb, 0xc6,
-	0x15, 0x0e, 0xf5, 0xb7, 0xd2, 0x91, 0x56, 0x3b, 0x3b, 0xbb, 0xb1, 0xe9, 0xcd, 0x8f, 0xd7, 0xca,
-	0x8f, 0xd7, 0x4e, 0xac, 0x0d, 0x1c, 0xdb, 0x71, 0xd6, 0x45, 0x5a, 0xad, 0x44, 0x6f, 0xe4, 0xee,
-	0x4a, 0x2a, 0xa5, 0x6d, 0x7e, 0x80, 0x82, 0x98, 0x25, 0x47, 0x12, 0x6d, 0x8a, 0x64, 0x48, 0xca,
-	0xf6, 0x06, 0xbd, 0x30, 0xd0, 0xab, 0x5e, 0x15, 0xe8, 0x55, 0x51, 0x14, 0xbd, 0xe8, 0x4d, 0x80,
-	0x3e, 0x40, 0x81, 0xde, 0xf5, 0x09, 0x0a, 0xe4, 0x0d, 0x8a, 0xb6, 0x40, 0xfb, 0x08, 0xbd, 0x2c,
-	0x66, 0x86, 0xa4, 0x48, 0x49, 0x1b, 0x6f, 0x02, 0xc4, 0xb9, 0x92, 0xe6, 0x3b, 0xdf, 0x39, 0x73,
-	0xe6, 0xcc, 0x99, 0x99, 0x33, 0x43, 0xd8, 0x1e, 0x39, 0xce, 0xc8, 0xa2, 0xbb, 0xae, 0xe7, 0x04,
-	0xce, 0xc9, 0x74, 0xb8, 0x6b, 0x50, 0x5f, 0xf7, 0x4c, 0x37, 0x70, 0xbc, 0x3a, 0xc7, 0xf0, 0x9a,
-	0x60, 0xd4, 0x23, 0x46, 0xed, 0x08, 0xd6, 0xef, 0x9b, 0x16, 0x6d, 0xc5, 0xc4, 0x3e, 0x0d, 0xf0,
-	0x5d, 0xc8, 0x0d, 0x4d, 0x8b, 0xca, 0xd2, 0x76, 0x76, 0xa7, 0x7c, 0xf3, 0xcd, 0xfa, 0x9c, 0x52,
-	0x3d, 0xad, 0xd1, 0x63, 0xb0, 0xca, 0x35, 0x6a, 0xff, 0xce, 0xc1, 0xc6, 0x12, 0x29, 0xc6, 0x90,
-	0xb3, 0xc9, 0x84, 0x59, 0x94, 0x76, 0x4a, 0x2a, 0xff, 0x8f, 0x65, 0x58, 0x71, 0x89, 0xfe, 0x88,
-	0x8c, 0xa8, 0x9c, 0xe1, 0x70, 0xd4, 0xc4, 0xaf, 0x03, 0x18, 0xd4, 0xa5, 0xb6, 0x41, 0x6d, 0xfd,
-	0x54, 0xce, 0x6e, 0x67, 0x77, 0x4a, 0x6a, 0x02, 0xc1, 0xef, 0xc0, 0xba, 0x3b, 0x3d, 0xb1, 0x4c,
-	0x5d, 0x4b, 0xd0, 0x60, 0x3b, 0xbb, 0x93, 0x57, 0x91, 0x10, 0xb4, 0x66, 0xe4, 0xab, 0xb0, 0xf6,
-	0x84, 0x92, 0x47, 0x49, 0x6a, 0x99, 0x53, 0xab, 0x0c, 0x4e, 0x10, 0x9b, 0x50, 0x99, 0x50, 0xdf,
-	0x27, 0x23, 0xaa, 0x05, 0xa7, 0x2e, 0x95, 0x73, 0x7c, 0xf4, 0xdb, 0x0b, 0xa3, 0x9f, 0x1f, 0x79,
-	0x39, 0xd4, 0x1a, 0x9c, 0xba, 0x14, 0x37, 0xa0, 0x44, 0xed, 0xe9, 0x44, 0x58, 0xc8, 0x9f, 0x11,
-	0x3f, 0xc5, 0x9e, 0x4e, 0xe6, 0xad, 0x14, 0x99, 0x5a, 0x68, 0x62, 0xc5, 0xa7, 0xde, 0x63, 0x53,
-	0xa7, 0x72, 0x81, 0x1b, 0xb8, 0xba, 0x60, 0xa0, 0x2f, 0xe4, 0xf3, 0x36, 0x22, 0x3d, 0xdc, 0x84,
-	0x12, 0x7d, 0x1a, 0x50, 0xdb, 0x37, 0x1d, 0x5b, 0x5e, 0xe1, 0x46, 0xde, 0x5a, 0x32, 0x8b, 0xd4,
-	0x32, 0xe6, 0x4d, 0xcc, 0xf4, 0xf0, 0x1d, 0x58, 0x71, 0xdc, 0xc0, 0x74, 0x6c, 0x5f, 0x2e, 0x6e,
-	0x4b, 0x3b, 0xe5, 0x9b, 0xaf, 0x2e, 0x4d, 0x84, 0xae, 0xe0, 0xa8, 0x11, 0x19, 0xb7, 0x01, 0xf9,
-	0xce, 0xd4, 0xd3, 0xa9, 0xa6, 0x3b, 0x06, 0xd5, 0x4c, 0x7b, 0xe8, 0xc8, 0x25, 0x6e, 0xe0, 0xf2,
-	0xe2, 0x40, 0x38, 0xb1, 0xe9, 0x18, 0xb4, 0x6d, 0x0f, 0x1d, 0xb5, 0xea, 0xa7, 0xda, 0xf8, 0x02,
-	0x14, 0xfc, 0x53, 0x3b, 0x20, 0x4f, 0xe5, 0x0a, 0xcf, 0x90, 0xb0, 0x55, 0xfb, 0x6b, 0x01, 0xd6,
-	0xce, 0x93, 0x62, 0xf7, 0x20, 0x3f, 0x64, 0xa3, 0x94, 0x33, 0xdf, 0x26, 0x06, 0x42, 0x27, 0x1d,
-	0xc4, 0xc2, 0x77, 0x0c, 0x62, 0x03, 0xca, 0x36, 0xf5, 0x03, 0x6a, 0x88, 0x8c, 0xc8, 0x9e, 0x33,
-	0xa7, 0x40, 0x28, 0x2d, 0xa6, 0x54, 0xee, 0x3b, 0xa5, 0xd4, 0xa7, 0xb0, 0x16, 0xbb, 0xa4, 0x79,
-	0xc4, 0x1e, 0x45, 0xb9, 0xb9, 0xfb, 0x3c, 0x4f, 0xea, 0x4a, 0xa4, 0xa7, 0x32, 0x35, 0xb5, 0x4a,
-	0x53, 0x6d, 0xdc, 0x02, 0x70, 0x6c, 0xea, 0x0c, 0x35, 0x83, 0xea, 0x96, 0x5c, 0x3c, 0x23, 0x4a,
-	0x5d, 0x46, 0x59, 0x88, 0x92, 0x23, 0x50, 0xdd, 0xc2, 0x1f, 0xce, 0x52, 0x6d, 0xe5, 0x8c, 0x4c,
-	0x39, 0x12, 0x8b, 0x6c, 0x21, 0xdb, 0x8e, 0xa1, 0xea, 0x51, 0x96, 0xf7, 0xd4, 0x08, 0x47, 0x56,
-	0xe2, 0x4e, 0xd4, 0x9f, 0x3b, 0x32, 0x35, 0x54, 0x13, 0x03, 0x5b, 0xf5, 0x92, 0x4d, 0xfc, 0x06,
-	0xc4, 0x80, 0xc6, 0xd3, 0x0a, 0xf8, 0x2e, 0x54, 0x89, 0xc0, 0x0e, 0x99, 0xd0, 0xad, 0x2f, 0xa1,
-	0x9a, 0x0e, 0x0f, 0xde, 0x84, 0xbc, 0x1f, 0x10, 0x2f, 0xe0, 0x59, 0x98, 0x57, 0x45, 0x03, 0x23,
-	0xc8, 0x52, 0xdb, 0xe0, 0xbb, 0x5c, 0x5e, 0x65, 0x7f, 0xf1, 0x4f, 0x66, 0x03, 0xce, 0xf2, 0x01,
-	0xbf, 0xbd, 0x38, 0xa3, 0x29, 0xcb, 0xf3, 0xe3, 0xde, 0xfa, 0x00, 0x56, 0x53, 0x03, 0x38, 0x6f,
-	0xd7, 0xb5, 0x5f, 0xc2, 0xcb, 0x4b, 0x4d, 0xe3, 0x4f, 0x61, 0x73, 0x6a, 0x9b, 0x76, 0x40, 0x3d,
-	0xd7, 0xa3, 0x2c, 0x63, 0x45, 0x57, 0xf2, 0x7f, 0x56, 0xce, 0xc8, 0xb9, 0xe3, 0x24, 0x5b, 0x58,
-	0x51, 0x37, 0xa6, 0x8b, 0xe0, 0xf5, 0x52, 0xf1, 0xbf, 0x2b, 0xe8, 0xd9, 0xb3, 0x67, 0xcf, 0x32,
-	0xb5, 0xdf, 0x15, 0x60, 0x73, 0xd9, 0x9a, 0x59, 0xba, 0x7c, 0x2f, 0x40, 0xc1, 0x9e, 0x4e, 0x4e,
-	0xa8, 0xc7, 0x83, 0x94, 0x57, 0xc3, 0x16, 0x6e, 0x40, 0xde, 0x22, 0x27, 0xd4, 0x92, 0x73, 0xdb,
-	0xd2, 0x4e, 0xf5, 0xe6, 0x3b, 0xe7, 0x5a, 0x95, 0xf5, 0x43, 0xa6, 0xa2, 0x0a, 0x4d, 0xfc, 0x11,
-	0xe4, 0xc2, 0x2d, 0x9a, 0x59, 0xb8, 0x7e, 0x3e, 0x0b, 0x6c, 0x2d, 0xa9, 0x5c, 0x0f, 0xbf, 0x02,
-	0x25, 0xf6, 0x2b, 0x72, 0xa3, 0xc0, 0x7d, 0x2e, 0x32, 0x80, 0xe5, 0x05, 0xde, 0x82, 0x22, 0x5f,
-	0x26, 0x06, 0x8d, 0x8e, 0xb6, 0xb8, 0xcd, 0x12, 0xcb, 0xa0, 0x43, 0x32, 0xb5, 0x02, 0xed, 0x31,
-	0xb1, 0xa6, 0x94, 0x27, 0x7c, 0x49, 0xad, 0x84, 0xe0, 0xcf, 0x19, 0x86, 0x2f, 0x43, 0x59, 0xac,
-	0x2a, 0xd3, 0x36, 0xe8, 0x53, 0xbe, 0x7b, 0xe6, 0x55, 0xb1, 0xd0, 0xda, 0x0c, 0x61, 0xdd, 0x3f,
-	0xf4, 0x1d, 0x3b, 0x4a, 0x4d, 0xde, 0x05, 0x03, 0x78, 0xf7, 0x1f, 0xcc, 0x6f, 0xdc, 0xaf, 0x2d,
-	0x1f, 0xde, 0x7c, 0x4e, 0xd5, 0xfe, 0x92, 0x81, 0x1c, 0xdf, 0x2f, 0xd6, 0xa0, 0x3c, 0xf8, 0xac,
-	0xa7, 0x68, 0xad, 0xee, 0xf1, 0xfe, 0xa1, 0x82, 0x24, 0x5c, 0x05, 0xe0, 0xc0, 0xfd, 0xc3, 0x6e,
-	0x63, 0x80, 0x32, 0x71, 0xbb, 0xdd, 0x19, 0xdc, 0xb9, 0x85, 0xb2, 0xb1, 0xc2, 0xb1, 0x00, 0x72,
-	0x49, 0xc2, 0xfb, 0x37, 0x51, 0x1e, 0x23, 0xa8, 0x08, 0x03, 0xed, 0x4f, 0x95, 0xd6, 0x9d, 0x5b,
-	0xa8, 0x90, 0x46, 0xde, 0xbf, 0x89, 0x56, 0xf0, 0x2a, 0x94, 0x38, 0xb2, 0xdf, 0xed, 0x1e, 0xa2,
-	0x62, 0x6c, 0xb3, 0x3f, 0x50, 0xdb, 0x9d, 0x03, 0x54, 0x8a, 0x6d, 0x1e, 0xa8, 0xdd, 0xe3, 0x1e,
-	0x82, 0xd8, 0xc2, 0x91, 0xd2, 0xef, 0x37, 0x0e, 0x14, 0x54, 0x8e, 0x19, 0xfb, 0x9f, 0x0d, 0x94,
-	0x3e, 0xaa, 0xa4, 0xdc, 0x7a, 0xff, 0x26, 0x5a, 0x8d, 0xbb, 0x50, 0x3a, 0xc7, 0x47, 0xa8, 0x8a,
-	0xd7, 0x61, 0x55, 0x74, 0x11, 0x39, 0xb1, 0x36, 0x07, 0xdd, 0xb9, 0x85, 0xd0, 0xcc, 0x11, 0x61,
-	0x65, 0x3d, 0x05, 0xdc, 0xb9, 0x85, 0x70, 0xad, 0x09, 0x79, 0x9e, 0x5d, 0x18, 0x43, 0xf5, 0xb0,
-	0xb1, 0xaf, 0x1c, 0x6a, 0xdd, 0xde, 0xa0, 0xdd, 0xed, 0x34, 0x0e, 0x91, 0x34, 0xc3, 0x54, 0xe5,
-	0x67, 0xc7, 0x6d, 0x55, 0x69, 0xa1, 0x4c, 0x12, 0xeb, 0x29, 0x8d, 0x81, 0xd2, 0x42, 0xd9, 0x9a,
-	0x0e, 0x9b, 0xcb, 0xf6, 0xc9, 0xa5, 0x2b, 0x23, 0x31, 0xc5, 0x99, 0x33, 0xa6, 0x98, 0xdb, 0x5a,
-	0x98, 0xe2, 0x7f, 0x65, 0x60, 0x63, 0xc9, 0x59, 0xb1, 0xb4, 0x93, 0x1f, 0x43, 0x5e, 0xa4, 0xa8,
-	0x38, 0x3d, 0xaf, 0x2d, 0x3d, 0x74, 0x78, 0xc2, 0x2e, 0x9c, 0xa0, 0x5c, 0x2f, 0x59, 0x41, 0x64,
-	0xcf, 0xa8, 0x20, 0x98, 0x89, 0x85, 0x3d, 0xfd, 0x17, 0x0b, 0x7b, 0xba, 0x38, 0xf6, 0xee, 0x9c,
-	0xe7, 0xd8, 0xe3, 0xd8, 0xb7, 0xdb, 0xdb, 0xf3, 0x4b, 0xf6, 0xf6, 0x7b, 0xb0, 0xbe, 0x60, 0xe8,
-	0xdc, 0x7b, 0xec, 0xaf, 0x24, 0x90, 0xcf, 0x0a, 0xce, 0x73, 0x76, 0xba, 0x4c, 0x6a, 0xa7, 0xbb,
-	0x37, 0x1f, 0xc1, 0x2b, 0x67, 0x4f, 0xc2, 0xc2, 0x5c, 0x7f, 0x25, 0xc1, 0x85, 0xe5, 0x95, 0xe2,
-	0x52, 0x1f, 0x3e, 0x82, 0xc2, 0x84, 0x06, 0x63, 0x27, 0xaa, 0x96, 0xde, 0x5e, 0x72, 0x06, 0x33,
-	0xf1, 0xfc, 0x64, 0x87, 0x5a, 0xc9, 0x43, 0x3c, 0x7b, 0x56, 0xb9, 0x27, 0xbc, 0x59, 0xf0, 0xf4,
-	0xd7, 0x19, 0x78, 0x79, 0xa9, 0xf1, 0xa5, 0x8e, 0xbe, 0x06, 0x60, 0xda, 0xee, 0x34, 0x10, 0x15,
-	0x91, 0xd8, 0x60, 0x4b, 0x1c, 0xe1, 0x9b, 0x17, 0xdb, 0x3c, 0xa7, 0x41, 0x2c, 0xcf, 0x72, 0x39,
-	0x08, 0x88, 0x13, 0xee, 0xce, 0x1c, 0xcd, 0x71, 0x47, 0x5f, 0x3f, 0x63, 0xa4, 0x0b, 0x89, 0xf9,
-	0x1e, 0x20, 0xdd, 0x32, 0xa9, 0x1d, 0x68, 0x7e, 0xe0, 0x51, 0x32, 0x31, 0xed, 0x11, 0x3f, 0x41,
-	0x8a, 0x7b, 0xf9, 0x21, 0xb1, 0x7c, 0xaa, 0xae, 0x09, 0x71, 0x3f, 0x92, 0x32, 0x0d, 0x9e, 0x40,
-	0x5e, 0x42, 0xa3, 0x90, 0xd2, 0x10, 0xe2, 0x58, 0xa3, 0xf6, 0xdb, 0x12, 0x94, 0x13, 0x75, 0x35,
-	0xbe, 0x02, 0x95, 0x87, 0xe4, 0x31, 0xd1, 0xa2, 0xbb, 0x92, 0x88, 0x44, 0x99, 0x61, 0xbd, 0xf0,
-	0xbe, 0xf4, 0x1e, 0x6c, 0x72, 0x8a, 0x33, 0x0d, 0xa8, 0xa7, 0xe9, 0x16, 0xf1, 0x7d, 0x1e, 0xb4,
-	0x22, 0xa7, 0x62, 0x26, 0xeb, 0x32, 0x51, 0x33, 0x92, 0xe0, 0xdb, 0xb0, 0xc1, 0x35, 0x26, 0x53,
-	0x2b, 0x30, 0x5d, 0x8b, 0x6a, 0xec, 0xf6, 0xe6, 0xf3, 0x93, 0x24, 0xf6, 0x6c, 0x9d, 0x31, 0x8e,
-	0x42, 0x02, 0xf3, 0xc8, 0xc7, 0x2d, 0x78, 0x8d, 0xab, 0x8d, 0xa8, 0x4d, 0x3d, 0x12, 0x50, 0x8d,
-	0x7e, 0x31, 0x25, 0x96, 0xaf, 0x11, 0xdb, 0xd0, 0xc6, 0xc4, 0x1f, 0xcb, 0x9b, 0xcc, 0xc0, 0x7e,
-	0x46, 0x96, 0xd4, 0x4b, 0x8c, 0x78, 0x10, 0xf2, 0x14, 0x4e, 0x6b, 0xd8, 0xc6, 0xc7, 0xc4, 0x1f,
-	0xe3, 0x3d, 0xb8, 0xc0, 0xad, 0xf8, 0x81, 0x67, 0xda, 0x23, 0x4d, 0x1f, 0x53, 0xfd, 0x91, 0x36,
-	0x0d, 0x86, 0x77, 0xe5, 0x57, 0x92, 0xfd, 0x73, 0x0f, 0xfb, 0x9c, 0xd3, 0x64, 0x94, 0xe3, 0x60,
-	0x78, 0x17, 0xf7, 0xa1, 0xc2, 0x26, 0x63, 0x62, 0x7e, 0x49, 0xb5, 0xa1, 0xe3, 0xf1, 0xa3, 0xb1,
-	0xba, 0x64, 0x6b, 0x4a, 0x44, 0xb0, 0xde, 0x0d, 0x15, 0x8e, 0x1c, 0x83, 0xee, 0xe5, 0xfb, 0x3d,
-	0x45, 0x69, 0xa9, 0xe5, 0xc8, 0xca, 0x7d, 0xc7, 0x63, 0x09, 0x35, 0x72, 0xe2, 0x00, 0x97, 0x45,
-	0x42, 0x8d, 0x9c, 0x28, 0xbc, 0xb7, 0x61, 0x43, 0xd7, 0xc5, 0x98, 0x4d, 0x5d, 0x0b, 0xef, 0x58,
-	0xbe, 0x8c, 0x52, 0xc1, 0xd2, 0xf5, 0x03, 0x41, 0x08, 0x73, 0xdc, 0xc7, 0x1f, 0xc2, 0xcb, 0xb3,
-	0x60, 0x25, 0x15, 0xd7, 0x17, 0x46, 0x39, 0xaf, 0x7a, 0x1b, 0x36, 0xdc, 0xd3, 0x45, 0x45, 0x9c,
-	0xea, 0xd1, 0x3d, 0x9d, 0x57, 0xfb, 0x00, 0x36, 0xdd, 0xb1, 0xbb, 0xa8, 0x77, 0x3d, 0xa9, 0x87,
-	0xdd, 0xb1, 0x3b, 0xaf, 0xf8, 0x16, 0xbf, 0x70, 0x7b, 0x54, 0x27, 0x01, 0x35, 0xe4, 0x8b, 0x49,
-	0x7a, 0x42, 0x80, 0x77, 0x01, 0xe9, 0xba, 0x46, 0x6d, 0x72, 0x62, 0x51, 0x8d, 0x78, 0xd4, 0x26,
-	0xbe, 0x7c, 0x39, 0x49, 0xae, 0xea, 0xba, 0xc2, 0xa5, 0x0d, 0x2e, 0xc4, 0xd7, 0x61, 0xdd, 0x39,
-	0x79, 0xa8, 0x8b, 0x94, 0xd4, 0x5c, 0x8f, 0x0e, 0xcd, 0xa7, 0xf2, 0x9b, 0x3c, 0xbe, 0x6b, 0x4c,
-	0xc0, 0x13, 0xb2, 0xc7, 0x61, 0x7c, 0x0d, 0x90, 0xee, 0x8f, 0x89, 0xe7, 0xf2, 0x3d, 0xd9, 0x77,
-	0x89, 0x4e, 0xe5, 0xb7, 0x04, 0x55, 0xe0, 0x9d, 0x08, 0x66, 0x4b, 0xc2, 0x7f, 0x62, 0x0e, 0x83,
-	0xc8, 0xe2, 0x55, 0xb1, 0x24, 0x38, 0x16, 0x5a, 0xdb, 0x01, 0xc4, 0x42, 0x91, 0xea, 0x78, 0x87,
-	0xd3, 0xaa, 0xee, 0xd8, 0x4d, 0xf6, 0xfb, 0x06, 0xac, 0x32, 0xe6, 0xac, 0xd3, 0x6b, 0xa2, 0x20,
-	0x73, 0xc7, 0x89, 0x1e, 0x6f, 0xc1, 0x05, 0x46, 0x9a, 0xd0, 0x80, 0x18, 0x24, 0x20, 0x09, 0xf6,
-	0xbb, 0x9c, 0xcd, 0xe2, 0x7e, 0x14, 0x0a, 0x53, 0x7e, 0x7a, 0xd3, 0x93, 0xd3, 0x38, 0xb3, 0x6e,
-	0x08, 0x3f, 0x19, 0x16, 0xe5, 0xd6, 0xf7, 0x56, 0x74, 0xd7, 0xf6, 0xa0, 0x92, 0x4c, 0x7c, 0x5c,
-	0x02, 0x91, 0xfa, 0x48, 0x62, 0x55, 0x50, 0xb3, 0xdb, 0x62, 0xf5, 0xcb, 0xe7, 0x0a, 0xca, 0xb0,
-	0x3a, 0xea, 0xb0, 0x3d, 0x50, 0x34, 0xf5, 0xb8, 0x33, 0x68, 0x1f, 0x29, 0x28, 0x9b, 0x28, 0xd8,
-	0x1f, 0xe4, 0x8a, 0x6f, 0xa3, 0xab, 0xb5, 0xaf, 0x33, 0x50, 0x4d, 0xdf, 0xc0, 0xf0, 0x8f, 0xe0,
-	0x62, 0xf4, 0x5c, 0xe2, 0xd3, 0x40, 0x7b, 0x62, 0x7a, 0x7c, 0x45, 0x4e, 0x88, 0x38, 0x1d, 0xe3,
-	0x9c, 0xd8, 0x0c, 0x59, 0x7d, 0x1a, 0x7c, 0x62, 0x7a, 0x6c, 0xbd, 0x4d, 0x48, 0x80, 0x0f, 0xe1,
-	0xb2, 0xed, 0x68, 0x7e, 0x40, 0x6c, 0x83, 0x78, 0x86, 0x36, 0x7b, 0xa8, 0xd2, 0x88, 0xae, 0x53,
-	0xdf, 0x77, 0xc4, 0x49, 0x18, 0x5b, 0x79, 0xd5, 0x76, 0xfa, 0x21, 0x79, 0x76, 0x44, 0x34, 0x42,
-	0xea, 0x5c, 0xfe, 0x66, 0xcf, 0xca, 0xdf, 0x57, 0xa0, 0x34, 0x21, 0xae, 0x46, 0xed, 0xc0, 0x3b,
-	0xe5, 0x75, 0x77, 0x51, 0x2d, 0x4e, 0x88, 0xab, 0xb0, 0xf6, 0x0b, 0xb9, 0xfe, 0x3c, 0xc8, 0x15,
-	0x8b, 0xa8, 0xf4, 0x20, 0x57, 0x2c, 0x21, 0xa8, 0xfd, 0x33, 0x0b, 0x95, 0x64, 0x1d, 0xce, 0xae,
-	0x35, 0x3a, 0x3f, 0xb2, 0x24, 0xbe, 0xa9, 0xbd, 0xf1, 0x8d, 0x55, 0x7b, 0xbd, 0xc9, 0xce, 0xb2,
-	0xbd, 0x82, 0xa8, 0x8e, 0x55, 0xa1, 0xc9, 0xea, 0x08, 0x96, 0x6c, 0x54, 0x54, 0x23, 0x45, 0x35,
-	0x6c, 0xe1, 0x03, 0x28, 0x3c, 0xf4, 0xb9, 0xed, 0x02, 0xb7, 0xfd, 0xe6, 0x37, 0xdb, 0x7e, 0xd0,
-	0xe7, 0xc6, 0x4b, 0x0f, 0xfa, 0x5a, 0xa7, 0xab, 0x1e, 0x35, 0x0e, 0xd5, 0x50, 0x1d, 0x5f, 0x82,
-	0x9c, 0x45, 0xbe, 0x3c, 0x4d, 0x9f, 0x7a, 0x1c, 0x3a, 0xef, 0x24, 0x5c, 0x82, 0xdc, 0x13, 0x4a,
-	0x1e, 0xa5, 0xcf, 0x1a, 0x0e, 0x7d, 0x8f, 0x8b, 0x61, 0x17, 0xf2, 0x3c, 0x5e, 0x18, 0x20, 0x8c,
-	0x18, 0x7a, 0x09, 0x17, 0x21, 0xd7, 0xec, 0xaa, 0x6c, 0x41, 0x20, 0xa8, 0x08, 0x54, 0xeb, 0xb5,
-	0x95, 0xa6, 0x82, 0x32, 0xb5, 0xdb, 0x50, 0x10, 0x41, 0x60, 0x8b, 0x25, 0x0e, 0x03, 0x7a, 0x29,
-	0x6c, 0x86, 0x36, 0xa4, 0x48, 0x7a, 0x7c, 0xb4, 0xaf, 0xa8, 0x28, 0x93, 0x9e, 0xea, 0x1c, 0xca,
-	0xd7, 0x7c, 0xa8, 0x24, 0x0b, 0xf1, 0x17, 0x73, 0xc9, 0xfe, 0x9b, 0x04, 0xe5, 0x44, 0x61, 0xcd,
-	0x2a, 0x22, 0x62, 0x59, 0xce, 0x13, 0x8d, 0x58, 0x26, 0xf1, 0xc3, 0xd4, 0x00, 0x0e, 0x35, 0x18,
-	0x72, 0xde, 0xa9, 0x7b, 0x41, 0x4b, 0x24, 0x8f, 0x0a, 0xb5, 0x3f, 0x4a, 0x80, 0xe6, 0x2b, 0xdb,
-	0x39, 0x37, 0xa5, 0x1f, 0xd2, 0xcd, 0xda, 0x1f, 0x24, 0xa8, 0xa6, 0xcb, 0xd9, 0x39, 0xf7, 0xae,
-	0xfc, 0xa0, 0xee, 0xfd, 0x23, 0x03, 0xab, 0xa9, 0x22, 0xf6, 0xbc, 0xde, 0x7d, 0x01, 0xeb, 0xa6,
-	0x41, 0x27, 0xae, 0x13, 0x50, 0x5b, 0x3f, 0xd5, 0x2c, 0xfa, 0x98, 0x5a, 0x72, 0x8d, 0x6f, 0x1a,
-	0xbb, 0xdf, 0x5c, 0x26, 0xd7, 0xdb, 0x33, 0xbd, 0x43, 0xa6, 0xb6, 0xb7, 0xd1, 0x6e, 0x29, 0x47,
-	0xbd, 0xee, 0x40, 0xe9, 0x34, 0x3f, 0xd3, 0x8e, 0x3b, 0x3f, 0xed, 0x74, 0x3f, 0xe9, 0xa8, 0xc8,
-	0x9c, 0xa3, 0x7d, 0x8f, 0xcb, 0xbe, 0x07, 0x68, 0xde, 0x29, 0x7c, 0x11, 0x96, 0xb9, 0x85, 0x5e,
-	0xc2, 0x1b, 0xb0, 0xd6, 0xe9, 0x6a, 0xfd, 0x76, 0x4b, 0xd1, 0x94, 0xfb, 0xf7, 0x95, 0xe6, 0xa0,
-	0x2f, 0x1e, 0x3e, 0x62, 0xf6, 0x20, 0xb5, 0xc0, 0x6b, 0xbf, 0xcf, 0xc2, 0xc6, 0x12, 0x4f, 0x70,
-	0x23, 0xbc, 0xb2, 0x88, 0x5b, 0xd4, 0x8d, 0xf3, 0x78, 0x5f, 0x67, 0x35, 0x43, 0x8f, 0x78, 0x41,
-	0x78, 0xc3, 0xb9, 0x06, 0x2c, 0x4a, 0x76, 0x60, 0x0e, 0x4d, 0xea, 0x85, 0xef, 0x44, 0xe2, 0x1e,
-	0xb3, 0x36, 0xc3, 0xc5, 0x53, 0xd1, 0xbb, 0x80, 0x5d, 0xc7, 0x37, 0x03, 0xf3, 0x31, 0xd5, 0x4c,
-	0x3b, 0x7a, 0x54, 0x62, 0xf7, 0x9a, 0x9c, 0x8a, 0x22, 0x49, 0xdb, 0x0e, 0x62, 0xb6, 0x4d, 0x47,
-	0x64, 0x8e, 0xcd, 0x36, 0xf3, 0xac, 0x8a, 0x22, 0x49, 0xcc, 0xbe, 0x02, 0x15, 0xc3, 0x99, 0xb2,
-	0x62, 0x4f, 0xf0, 0xd8, 0xd9, 0x21, 0xa9, 0x65, 0x81, 0xc5, 0x94, 0xb0, 0x8c, 0x9f, 0xbd, 0x66,
-	0x55, 0xd4, 0xb2, 0xc0, 0x04, 0xe5, 0x2a, 0xac, 0x91, 0xd1, 0xc8, 0x63, 0xc6, 0x23, 0x43, 0xe2,
-	0x62, 0x52, 0x8d, 0x61, 0x4e, 0xdc, 0x7a, 0x00, 0xc5, 0x28, 0x0e, 0xec, 0xa8, 0x66, 0x91, 0xd0,
-	0x5c, 0x71, 0xdb, 0xce, 0xec, 0x94, 0xd4, 0xa2, 0x1d, 0x09, 0xaf, 0x40, 0xc5, 0xf4, 0xb5, 0xd9,
-	0xe3, 0x7c, 0x66, 0x3b, 0xb3, 0x53, 0x54, 0xcb, 0xa6, 0x1f, 0x3f, 0x6c, 0xd6, 0xbe, 0xca, 0x40,
-	0x35, 0xfd, 0x71, 0x01, 0xb7, 0xa0, 0x68, 0x39, 0x3a, 0xe1, 0xa9, 0x25, 0xbe, 0x6c, 0xed, 0x3c,
-	0xe7, 0x7b, 0x44, 0xfd, 0x30, 0xe4, 0xab, 0xb1, 0xe6, 0xd6, 0xdf, 0x25, 0x28, 0x46, 0x30, 0xbe,
-	0x00, 0x39, 0x97, 0x04, 0x63, 0x6e, 0x2e, 0xbf, 0x9f, 0x41, 0x92, 0xca, 0xdb, 0x0c, 0xf7, 0x5d,
-	0x62, 0xf3, 0x14, 0x08, 0x71, 0xd6, 0x66, 0xf3, 0x6a, 0x51, 0x62, 0xf0, 0x5b, 0x8f, 0x33, 0x99,
-	0x50, 0x3b, 0xf0, 0xa3, 0x79, 0x0d, 0xf1, 0x66, 0x08, 0xe3, 0x77, 0x60, 0x3d, 0xf0, 0x88, 0x69,
-	0xa5, 0xb8, 0x39, 0xce, 0x45, 0x91, 0x20, 0x26, 0xef, 0xc1, 0xa5, 0xc8, 0xae, 0x41, 0x03, 0xa2,
-	0x8f, 0xa9, 0x31, 0x53, 0x2a, 0xf0, 0xd7, 0x8d, 0x8b, 0x21, 0xa1, 0x15, 0xca, 0x23, 0xdd, 0xda,
-	0xd7, 0x12, 0xac, 0x47, 0xf7, 0x34, 0x23, 0x0e, 0xd6, 0x11, 0x00, 0xb1, 0x6d, 0x27, 0x48, 0x86,
-	0x6b, 0x31, 0x95, 0x17, 0xf4, 0xea, 0x8d, 0x58, 0x49, 0x4d, 0x18, 0xd8, 0x9a, 0x00, 0xcc, 0x24,
-	0x67, 0x86, 0xed, 0x32, 0x94, 0xc3, 0x2f, 0x47, 0xfc, 0xf3, 0xa3, 0xb8, 0xd9, 0x83, 0x80, 0xd8,
-	0x85, 0x0e, 0x6f, 0x42, 0xfe, 0x84, 0x8e, 0x4c, 0x3b, 0x7c, 0x0f, 0x16, 0x8d, 0xe8, 0xfd, 0x25,
-	0x17, 0xbf, 0xbf, 0xec, 0xff, 0x46, 0x82, 0x0d, 0xdd, 0x99, 0xcc, 0xfb, 0xbb, 0x8f, 0xe6, 0x9e,
-	0x17, 0xfc, 0x8f, 0xa5, 0xcf, 0x3f, 0x1a, 0x99, 0xc1, 0x78, 0x7a, 0x52, 0xd7, 0x9d, 0xc9, 0xee,
-	0xc8, 0xb1, 0x88, 0x3d, 0x9a, 0x7d, 0x3f, 0xe5, 0x7f, 0xf4, 0x1b, 0x23, 0x6a, 0xdf, 0x18, 0x39,
-	0x89, 0xaf, 0xa9, 0xf7, 0x66, 0x7f, 0xff, 0x27, 0x49, 0x7f, 0xca, 0x64, 0x0f, 0x7a, 0xfb, 0x7f,
-	0xce, 0x6c, 0x1d, 0x88, 0xee, 0x7a, 0x51, 0x78, 0x54, 0x3a, 0xb4, 0xa8, 0xce, 0x86, 0xfc, 0xff,
-	0x00, 0x00, 0x00, 0xff, 0xff, 0x3e, 0xe8, 0xef, 0xc4, 0x9b, 0x1d, 0x00, 0x00,
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0xdd, 0x6e, 0x1b, 0xc7,
+	0xf5, 0xcf, 0xf2, 0x4b, 0xe4, 0x21, 0x45, 0x8d, 0x46, 0x8a, 0xbd, 0x56, 0x3e, 0x2c, 0x33, 0x1f,
+	0x96, 0x9d, 0x84, 0x0a, 0x14, 0xdb, 0x71, 0xe4, 0x3f, 0x92, 0x3f, 0x45, 0xae, 0x15, 0xba, 0x12,
+	0xc9, 0x2e, 0xa9, 0xe6, 0x03, 0x28, 0x16, 0xa3, 0xdd, 0x21, 0xb9, 0xf6, 0x72, 0x77, 0xb3, 0xbb,
+	0xb4, 0xad, 0xa0, 0x17, 0x06, 0x7a, 0xd5, 0xbb, 0xa2, 0x57, 0x45, 0x51, 0xf4, 0xa2, 0x37, 0x01,
+	0xfa, 0x00, 0x05, 0x7a, 0xd7, 0x27, 0x28, 0x90, 0x37, 0x28, 0xda, 0x02, 0xed, 0x23, 0xf4, 0xb2,
+	0x98, 0x99, 0xdd, 0xe5, 0x2e, 0x49, 0xc5, 0x4a, 0x80, 0x24, 0x57, 0xe4, 0xfc, 0xce, 0xef, 0x9c,
+	0x39, 0x73, 0xe6, 0xcc, 0xcc, 0x99, 0x59, 0xd8, 0x1e, 0x39, 0xce, 0xc8, 0xa2, 0xbb, 0xae, 0xe7,
+	0x04, 0xce, 0xe9, 0x74, 0xb8, 0x6b, 0x50, 0x5f, 0xf7, 0x4c, 0x37, 0x70, 0xbc, 0x3a, 0xc7, 0xf0,
+	0x9a, 0x60, 0xd4, 0x23, 0x46, 0xed, 0x18, 0xd6, 0xef, 0x9b, 0x16, 0x6d, 0xc5, 0xc4, 0x3e, 0x0d,
+	0xf0, 0x5d, 0xc8, 0x0d, 0x4d, 0x8b, 0xca, 0xd2, 0x76, 0x76, 0xa7, 0xbc, 0xf7, 0x7a, 0x7d, 0x4e,
+	0xa9, 0x9e, 0xd6, 0xe8, 0x31, 0x58, 0xe5, 0x1a, 0xb5, 0x7f, 0xe5, 0x60, 0x63, 0x89, 0x14, 0x63,
+	0xc8, 0xd9, 0x64, 0xc2, 0x2c, 0x4a, 0x3b, 0x25, 0x95, 0xff, 0xc7, 0x32, 0xac, 0xb8, 0x44, 0x7f,
+	0x44, 0x46, 0x54, 0xce, 0x70, 0x38, 0x6a, 0xe2, 0x57, 0x01, 0x0c, 0xea, 0x52, 0xdb, 0xa0, 0xb6,
+	0x7e, 0x26, 0x67, 0xb7, 0xb3, 0x3b, 0x25, 0x35, 0x81, 0xe0, 0xb7, 0x60, 0xdd, 0x9d, 0x9e, 0x5a,
+	0xa6, 0xae, 0x25, 0x68, 0xb0, 0x9d, 0xdd, 0xc9, 0xab, 0x48, 0x08, 0x5a, 0x33, 0xf2, 0x75, 0x58,
+	0x7b, 0x42, 0xc9, 0xa3, 0x24, 0xb5, 0xcc, 0xa9, 0x55, 0x06, 0x27, 0x88, 0x4d, 0xa8, 0x4c, 0xa8,
+	0xef, 0x93, 0x11, 0xd5, 0x82, 0x33, 0x97, 0xca, 0x39, 0x3e, 0xfa, 0xed, 0x85, 0xd1, 0xcf, 0x8f,
+	0xbc, 0x1c, 0x6a, 0x0d, 0xce, 0x5c, 0x8a, 0x1b, 0x50, 0xa2, 0xf6, 0x74, 0x22, 0x2c, 0xe4, 0xcf,
+	0x89, 0x9f, 0x62, 0x4f, 0x27, 0xf3, 0x56, 0x8a, 0x4c, 0x2d, 0x34, 0xb1, 0xe2, 0x53, 0xef, 0xb1,
+	0xa9, 0x53, 0xb9, 0xc0, 0x0d, 0x5c, 0x5f, 0x30, 0xd0, 0x17, 0xf2, 0x79, 0x1b, 0x91, 0x1e, 0x6e,
+	0x42, 0x89, 0x3e, 0x0d, 0xa8, 0xed, 0x9b, 0x8e, 0x2d, 0xaf, 0x70, 0x23, 0x6f, 0x2c, 0x99, 0x45,
+	0x6a, 0x19, 0xf3, 0x26, 0x66, 0x7a, 0xf8, 0x0e, 0xac, 0x38, 0x6e, 0x60, 0x3a, 0xb6, 0x2f, 0x17,
+	0xb7, 0xa5, 0x9d, 0xf2, 0xde, 0xcb, 0x4b, 0x13, 0xa1, 0x2b, 0x38, 0x6a, 0x44, 0xc6, 0x6d, 0x40,
+	0xbe, 0x33, 0xf5, 0x74, 0xaa, 0xe9, 0x8e, 0x41, 0x35, 0xd3, 0x1e, 0x3a, 0x72, 0x89, 0x1b, 0xb8,
+	0xba, 0x38, 0x10, 0x4e, 0x6c, 0x3a, 0x06, 0x6d, 0xdb, 0x43, 0x47, 0xad, 0xfa, 0xa9, 0x36, 0xbe,
+	0x04, 0x05, 0xff, 0xcc, 0x0e, 0xc8, 0x53, 0xb9, 0xc2, 0x33, 0x24, 0x6c, 0xd5, 0xfe, 0x52, 0x80,
+	0xb5, 0x8b, 0xa4, 0xd8, 0x3d, 0xc8, 0x0f, 0xd9, 0x28, 0xe5, 0xcc, 0xb7, 0x89, 0x81, 0xd0, 0x49,
+	0x07, 0xb1, 0xf0, 0x1d, 0x83, 0xd8, 0x80, 0xb2, 0x4d, 0xfd, 0x80, 0x1a, 0x22, 0x23, 0xb2, 0x17,
+	0xcc, 0x29, 0x10, 0x4a, 0x8b, 0x29, 0x95, 0xfb, 0x4e, 0x29, 0xf5, 0x29, 0xac, 0xc5, 0x2e, 0x69,
+	0x1e, 0xb1, 0x47, 0x51, 0x6e, 0xee, 0x3e, 0xcf, 0x93, 0xba, 0x12, 0xe9, 0xa9, 0x4c, 0x4d, 0xad,
+	0xd2, 0x54, 0x1b, 0xb7, 0x00, 0x1c, 0x9b, 0x3a, 0x43, 0xcd, 0xa0, 0xba, 0x25, 0x17, 0xcf, 0x89,
+	0x52, 0x97, 0x51, 0x16, 0xa2, 0xe4, 0x08, 0x54, 0xb7, 0xf0, 0x07, 0xb3, 0x54, 0x5b, 0x39, 0x27,
+	0x53, 0x8e, 0xc5, 0x22, 0x5b, 0xc8, 0xb6, 0x13, 0xa8, 0x7a, 0x94, 0xe5, 0x3d, 0x35, 0xc2, 0x91,
+	0x95, 0xb8, 0x13, 0xf5, 0xe7, 0x8e, 0x4c, 0x0d, 0xd5, 0xc4, 0xc0, 0x56, 0xbd, 0x64, 0x13, 0xbf,
+	0x06, 0x31, 0xa0, 0xf1, 0xb4, 0x02, 0xbe, 0x0b, 0x55, 0x22, 0xb0, 0x43, 0x26, 0x74, 0xeb, 0x4b,
+	0xa8, 0xa6, 0xc3, 0x83, 0x37, 0x21, 0xef, 0x07, 0xc4, 0x0b, 0x78, 0x16, 0xe6, 0x55, 0xd1, 0xc0,
+	0x08, 0xb2, 0xd4, 0x36, 0xf8, 0x2e, 0x97, 0x57, 0xd9, 0x5f, 0xfc, 0xff, 0xb3, 0x01, 0x67, 0xf9,
+	0x80, 0xdf, 0x5c, 0x9c, 0xd1, 0x94, 0xe5, 0xf9, 0x71, 0x6f, 0xbd, 0x0f, 0xab, 0xa9, 0x01, 0x5c,
+	0xb4, 0xeb, 0xda, 0x2f, 0xe0, 0xc5, 0xa5, 0xa6, 0xf1, 0xa7, 0xb0, 0x39, 0xb5, 0x4d, 0x3b, 0xa0,
+	0x9e, 0xeb, 0x51, 0x96, 0xb1, 0xa2, 0x2b, 0xf9, 0xdf, 0x2b, 0xe7, 0xe4, 0xdc, 0x49, 0x92, 0x2d,
+	0xac, 0xa8, 0x1b, 0xd3, 0x45, 0xf0, 0x66, 0xa9, 0xf8, 0x9f, 0x15, 0xf4, 0xec, 0xd9, 0xb3, 0x67,
+	0x99, 0xda, 0x6f, 0x0b, 0xb0, 0xb9, 0x6c, 0xcd, 0x2c, 0x5d, 0xbe, 0x97, 0xa0, 0x60, 0x4f, 0x27,
+	0xa7, 0xd4, 0xe3, 0x41, 0xca, 0xab, 0x61, 0x0b, 0x37, 0x20, 0x6f, 0x91, 0x53, 0x6a, 0xc9, 0xb9,
+	0x6d, 0x69, 0xa7, 0xba, 0xf7, 0xd6, 0x85, 0x56, 0x65, 0xfd, 0x88, 0xa9, 0xa8, 0x42, 0x13, 0x7f,
+	0x08, 0xb9, 0x70, 0x8b, 0x66, 0x16, 0x6e, 0x5e, 0xcc, 0x02, 0x5b, 0x4b, 0x2a, 0xd7, 0xc3, 0x2f,
+	0x41, 0x89, 0xfd, 0x8a, 0xdc, 0x28, 0x70, 0x9f, 0x8b, 0x0c, 0x60, 0x79, 0x81, 0xb7, 0xa0, 0xc8,
+	0x97, 0x89, 0x41, 0xa3, 0xa3, 0x2d, 0x6e, 0xb3, 0xc4, 0x32, 0xe8, 0x90, 0x4c, 0xad, 0x40, 0x7b,
+	0x4c, 0xac, 0x29, 0xe5, 0x09, 0x5f, 0x52, 0x2b, 0x21, 0xf8, 0x33, 0x86, 0xe1, 0xab, 0x50, 0x16,
+	0xab, 0xca, 0xb4, 0x0d, 0xfa, 0x94, 0xef, 0x9e, 0x79, 0x55, 0x2c, 0xb4, 0x36, 0x43, 0x58, 0xf7,
+	0x0f, 0x7d, 0xc7, 0x8e, 0x52, 0x93, 0x77, 0xc1, 0x00, 0xde, 0xfd, 0xfb, 0xf3, 0x1b, 0xf7, 0x2b,
+	0xcb, 0x87, 0x37, 0x9f, 0x53, 0xb5, 0x3f, 0x67, 0x20, 0xc7, 0xf7, 0x8b, 0x35, 0x28, 0x0f, 0x3e,
+	0xeb, 0x29, 0x5a, 0xab, 0x7b, 0x72, 0x70, 0xa4, 0x20, 0x09, 0x57, 0x01, 0x38, 0x70, 0xff, 0xa8,
+	0xdb, 0x18, 0xa0, 0x4c, 0xdc, 0x6e, 0x77, 0x06, 0x77, 0x6e, 0xa1, 0x6c, 0xac, 0x70, 0x22, 0x80,
+	0x5c, 0x92, 0xf0, 0xde, 0x1e, 0xca, 0x63, 0x04, 0x15, 0x61, 0xa0, 0xfd, 0xa9, 0xd2, 0xba, 0x73,
+	0x0b, 0x15, 0xd2, 0xc8, 0x7b, 0x7b, 0x68, 0x05, 0xaf, 0x42, 0x89, 0x23, 0x07, 0xdd, 0xee, 0x11,
+	0x2a, 0xc6, 0x36, 0xfb, 0x03, 0xb5, 0xdd, 0x39, 0x44, 0xa5, 0xd8, 0xe6, 0xa1, 0xda, 0x3d, 0xe9,
+	0x21, 0x88, 0x2d, 0x1c, 0x2b, 0xfd, 0x7e, 0xe3, 0x50, 0x41, 0xe5, 0x98, 0x71, 0xf0, 0xd9, 0x40,
+	0xe9, 0xa3, 0x4a, 0xca, 0xad, 0xf7, 0xf6, 0xd0, 0x6a, 0xdc, 0x85, 0xd2, 0x39, 0x39, 0x46, 0x55,
+	0xbc, 0x0e, 0xab, 0xa2, 0x8b, 0xc8, 0x89, 0xb5, 0x39, 0xe8, 0xce, 0x2d, 0x84, 0x66, 0x8e, 0x08,
+	0x2b, 0xeb, 0x29, 0xe0, 0xce, 0x2d, 0x84, 0x6b, 0x4d, 0xc8, 0xf3, 0xec, 0xc2, 0x18, 0xaa, 0x47,
+	0x8d, 0x03, 0xe5, 0x48, 0xeb, 0xf6, 0x06, 0xed, 0x6e, 0xa7, 0x71, 0x84, 0xa4, 0x19, 0xa6, 0x2a,
+	0x3f, 0x3d, 0x69, 0xab, 0x4a, 0x0b, 0x65, 0x92, 0x58, 0x4f, 0x69, 0x0c, 0x94, 0x16, 0xca, 0xd6,
+	0x74, 0xd8, 0x5c, 0xb6, 0x4f, 0x2e, 0x5d, 0x19, 0x89, 0x29, 0xce, 0x9c, 0x33, 0xc5, 0xdc, 0xd6,
+	0xc2, 0x14, 0xff, 0x33, 0x03, 0x1b, 0x4b, 0xce, 0x8a, 0xa5, 0x9d, 0x7c, 0x04, 0x79, 0x91, 0xa2,
+	0xe2, 0xf4, 0xbc, 0xb1, 0xf4, 0xd0, 0xe1, 0x09, 0xbb, 0x70, 0x82, 0x72, 0xbd, 0x64, 0x05, 0x91,
+	0x3d, 0xa7, 0x82, 0x60, 0x26, 0x16, 0xf6, 0xf4, 0x9f, 0x2f, 0xec, 0xe9, 0xe2, 0xd8, 0xbb, 0x73,
+	0x91, 0x63, 0x8f, 0x63, 0xdf, 0x6e, 0x6f, 0xcf, 0x2f, 0xd9, 0xdb, 0xef, 0xc1, 0xfa, 0x82, 0xa1,
+	0x0b, 0xef, 0xb1, 0xbf, 0x94, 0x40, 0x3e, 0x2f, 0x38, 0xcf, 0xd9, 0xe9, 0x32, 0xa9, 0x9d, 0xee,
+	0xde, 0x7c, 0x04, 0xaf, 0x9d, 0x3f, 0x09, 0x0b, 0x73, 0xfd, 0x95, 0x04, 0x97, 0x96, 0x57, 0x8a,
+	0x4b, 0x7d, 0xf8, 0x10, 0x0a, 0x13, 0x1a, 0x8c, 0x9d, 0xa8, 0x5a, 0x7a, 0x73, 0xc9, 0x19, 0xcc,
+	0xc4, 0xf3, 0x93, 0x1d, 0x6a, 0x25, 0x0f, 0xf1, 0xec, 0x79, 0xe5, 0x9e, 0xf0, 0x66, 0xc1, 0xd3,
+	0x5f, 0x65, 0xe0, 0xc5, 0xa5, 0xc6, 0x97, 0x3a, 0xfa, 0x0a, 0x80, 0x69, 0xbb, 0xd3, 0x40, 0x54,
+	0x44, 0x62, 0x83, 0x2d, 0x71, 0x84, 0x6f, 0x5e, 0x6c, 0xf3, 0x9c, 0x06, 0xb1, 0x3c, 0xcb, 0xe5,
+	0x20, 0x20, 0x4e, 0xb8, 0x3b, 0x73, 0x34, 0xc7, 0x1d, 0x7d, 0xf5, 0x9c, 0x91, 0x2e, 0x24, 0xe6,
+	0xbb, 0x80, 0x74, 0xcb, 0xa4, 0x76, 0xa0, 0xf9, 0x81, 0x47, 0xc9, 0xc4, 0xb4, 0x47, 0xfc, 0x04,
+	0x29, 0xee, 0xe7, 0x87, 0xc4, 0xf2, 0xa9, 0xba, 0x26, 0xc4, 0xfd, 0x48, 0xca, 0x34, 0x78, 0x02,
+	0x79, 0x09, 0x8d, 0x42, 0x4a, 0x43, 0x88, 0x63, 0x8d, 0xda, 0x6f, 0x4a, 0x50, 0x4e, 0xd4, 0xd5,
+	0xf8, 0x1a, 0x54, 0x1e, 0x92, 0xc7, 0x44, 0x8b, 0xee, 0x4a, 0x22, 0x12, 0x65, 0x86, 0xf5, 0xc2,
+	0xfb, 0xd2, 0xbb, 0xb0, 0xc9, 0x29, 0xce, 0x34, 0xa0, 0x9e, 0xa6, 0x5b, 0xc4, 0xf7, 0x79, 0xd0,
+	0x8a, 0x9c, 0x8a, 0x99, 0xac, 0xcb, 0x44, 0xcd, 0x48, 0x82, 0x6f, 0xc3, 0x06, 0xd7, 0x98, 0x4c,
+	0xad, 0xc0, 0x74, 0x2d, 0xaa, 0xb1, 0xdb, 0x9b, 0xcf, 0x4f, 0x92, 0xd8, 0xb3, 0x75, 0xc6, 0x38,
+	0x0e, 0x09, 0xcc, 0x23, 0x1f, 0xb7, 0xe0, 0x15, 0xae, 0x36, 0xa2, 0x36, 0xf5, 0x48, 0x40, 0x35,
+	0xfa, 0xc5, 0x94, 0x58, 0xbe, 0x46, 0x6c, 0x43, 0x1b, 0x13, 0x7f, 0x2c, 0x6f, 0x32, 0x03, 0x07,
+	0x19, 0x59, 0x52, 0xaf, 0x30, 0xe2, 0x61, 0xc8, 0x53, 0x38, 0xad, 0x61, 0x1b, 0x1f, 0x13, 0x7f,
+	0x8c, 0xf7, 0xe1, 0x12, 0xb7, 0xe2, 0x07, 0x9e, 0x69, 0x8f, 0x34, 0x7d, 0x4c, 0xf5, 0x47, 0xda,
+	0x34, 0x18, 0xde, 0x95, 0x5f, 0x4a, 0xf6, 0xcf, 0x3d, 0xec, 0x73, 0x4e, 0x93, 0x51, 0x4e, 0x82,
+	0xe1, 0x5d, 0xdc, 0x87, 0x0a, 0x9b, 0x8c, 0x89, 0xf9, 0x25, 0xd5, 0x86, 0x8e, 0xc7, 0x8f, 0xc6,
+	0xea, 0x92, 0xad, 0x29, 0x11, 0xc1, 0x7a, 0x37, 0x54, 0x38, 0x76, 0x0c, 0xba, 0x9f, 0xef, 0xf7,
+	0x14, 0xa5, 0xa5, 0x96, 0x23, 0x2b, 0xf7, 0x1d, 0x8f, 0x25, 0xd4, 0xc8, 0x89, 0x03, 0x5c, 0x16,
+	0x09, 0x35, 0x72, 0xa2, 0xf0, 0xde, 0x86, 0x0d, 0x5d, 0x17, 0x63, 0x36, 0x75, 0x2d, 0xbc, 0x63,
+	0xf9, 0x32, 0x4a, 0x05, 0x4b, 0xd7, 0x0f, 0x05, 0x21, 0xcc, 0x71, 0x1f, 0x7f, 0x00, 0x2f, 0xce,
+	0x82, 0x95, 0x54, 0x5c, 0x5f, 0x18, 0xe5, 0xbc, 0xea, 0x6d, 0xd8, 0x70, 0xcf, 0x16, 0x15, 0x71,
+	0xaa, 0x47, 0xf7, 0x6c, 0x5e, 0xed, 0x7d, 0xd8, 0x74, 0xc7, 0xee, 0xa2, 0xde, 0xcd, 0xa4, 0x1e,
+	0x76, 0xc7, 0xee, 0xbc, 0xe2, 0x1b, 0xfc, 0xc2, 0xed, 0x51, 0x9d, 0x04, 0xd4, 0x90, 0x2f, 0x27,
+	0xe9, 0x09, 0x01, 0xde, 0x05, 0xa4, 0xeb, 0x1a, 0xb5, 0xc9, 0xa9, 0x45, 0x35, 0xe2, 0x51, 0x9b,
+	0xf8, 0xf2, 0xd5, 0x24, 0xb9, 0xaa, 0xeb, 0x0a, 0x97, 0x36, 0xb8, 0x10, 0xdf, 0x84, 0x75, 0xe7,
+	0xf4, 0xa1, 0x2e, 0x52, 0x52, 0x73, 0x3d, 0x3a, 0x34, 0x9f, 0xca, 0xaf, 0xf3, 0xf8, 0xae, 0x31,
+	0x01, 0x4f, 0xc8, 0x1e, 0x87, 0xf1, 0x0d, 0x40, 0xba, 0x3f, 0x26, 0x9e, 0xcb, 0xf7, 0x64, 0xdf,
+	0x25, 0x3a, 0x95, 0xdf, 0x10, 0x54, 0x81, 0x77, 0x22, 0x98, 0x2d, 0x09, 0xff, 0x89, 0x39, 0x0c,
+	0x22, 0x8b, 0xd7, 0xc5, 0x92, 0xe0, 0x58, 0x68, 0x6d, 0x07, 0x10, 0x0b, 0x45, 0xaa, 0xe3, 0x1d,
+	0x4e, 0xab, 0xba, 0x63, 0x37, 0xd9, 0xef, 0x6b, 0xb0, 0xca, 0x98, 0xb3, 0x4e, 0x6f, 0x88, 0x82,
+	0xcc, 0x1d, 0x27, 0x7a, 0xbc, 0x05, 0x97, 0x18, 0x69, 0x42, 0x03, 0x62, 0x90, 0x80, 0x24, 0xd8,
+	0x6f, 0x73, 0x36, 0x8b, 0xfb, 0x71, 0x28, 0x4c, 0xf9, 0xe9, 0x4d, 0x4f, 0xcf, 0xe2, 0xcc, 0x7a,
+	0x47, 0xf8, 0xc9, 0xb0, 0x28, 0xb7, 0xbe, 0xb7, 0xa2, 0xbb, 0xb6, 0x0f, 0x95, 0x64, 0xe2, 0xe3,
+	0x12, 0x88, 0xd4, 0x47, 0x12, 0xab, 0x82, 0x9a, 0xdd, 0x16, 0xab, 0x5f, 0x3e, 0x57, 0x50, 0x86,
+	0xd5, 0x51, 0x47, 0xed, 0x81, 0xa2, 0xa9, 0x27, 0x9d, 0x41, 0xfb, 0x58, 0x41, 0xd9, 0x44, 0xc1,
+	0xfe, 0x20, 0x57, 0x7c, 0x13, 0x5d, 0xaf, 0x7d, 0x9d, 0x81, 0x6a, 0xfa, 0x06, 0x86, 0xff, 0x0f,
+	0x2e, 0x47, 0xcf, 0x25, 0x3e, 0x0d, 0xb4, 0x27, 0xa6, 0xc7, 0x57, 0xe4, 0x84, 0x88, 0xd3, 0x31,
+	0xce, 0x89, 0xcd, 0x90, 0xd5, 0xa7, 0xc1, 0x27, 0xa6, 0xc7, 0xd6, 0xdb, 0x84, 0x04, 0xf8, 0x08,
+	0xae, 0xda, 0x8e, 0xe6, 0x07, 0xc4, 0x36, 0x88, 0x67, 0x68, 0xb3, 0x87, 0x2a, 0x8d, 0xe8, 0x3a,
+	0xf5, 0x7d, 0x47, 0x9c, 0x84, 0xb1, 0x95, 0x97, 0x6d, 0xa7, 0x1f, 0x92, 0x67, 0x47, 0x44, 0x23,
+	0xa4, 0xce, 0xe5, 0x6f, 0xf6, 0xbc, 0xfc, 0x7d, 0x09, 0x4a, 0x13, 0xe2, 0x6a, 0xd4, 0x0e, 0xbc,
+	0x33, 0x5e, 0x77, 0x17, 0xd5, 0xe2, 0x84, 0xb8, 0x0a, 0x6b, 0xff, 0x20, 0xd7, 0x9f, 0x07, 0xb9,
+	0x62, 0x11, 0x95, 0x1e, 0xe4, 0x8a, 0x25, 0x04, 0xb5, 0x7f, 0x64, 0xa1, 0x92, 0xac, 0xc3, 0xd9,
+	0xb5, 0x46, 0xe7, 0x47, 0x96, 0xc4, 0x37, 0xb5, 0xd7, 0xbe, 0xb1, 0x6a, 0xaf, 0x37, 0xd9, 0x59,
+	0xb6, 0x5f, 0x10, 0xd5, 0xb1, 0x2a, 0x34, 0x59, 0x1d, 0xc1, 0x92, 0x8d, 0x8a, 0x6a, 0xa4, 0xa8,
+	0x86, 0x2d, 0x7c, 0x08, 0x85, 0x87, 0x3e, 0xb7, 0x5d, 0xe0, 0xb6, 0x5f, 0xff, 0x66, 0xdb, 0x0f,
+	0xfa, 0xdc, 0x78, 0xe9, 0x41, 0x5f, 0xeb, 0x74, 0xd5, 0xe3, 0xc6, 0x91, 0x1a, 0xaa, 0xe3, 0x2b,
+	0x90, 0xb3, 0xc8, 0x97, 0x67, 0xe9, 0x53, 0x8f, 0x43, 0x17, 0x9d, 0x84, 0x2b, 0x90, 0x7b, 0x42,
+	0xc9, 0xa3, 0xf4, 0x59, 0xc3, 0xa1, 0xef, 0x71, 0x31, 0xec, 0x42, 0x9e, 0xc7, 0x0b, 0x03, 0x84,
+	0x11, 0x43, 0x2f, 0xe0, 0x22, 0xe4, 0x9a, 0x5d, 0x95, 0x2d, 0x08, 0x04, 0x15, 0x81, 0x6a, 0xbd,
+	0xb6, 0xd2, 0x54, 0x50, 0xa6, 0x76, 0x1b, 0x0a, 0x22, 0x08, 0x6c, 0xb1, 0xc4, 0x61, 0x40, 0x2f,
+	0x84, 0xcd, 0xd0, 0x86, 0x14, 0x49, 0x4f, 0x8e, 0x0f, 0x14, 0x15, 0x65, 0xd2, 0x53, 0x9d, 0x43,
+	0xf9, 0x9a, 0x0f, 0x95, 0x64, 0x21, 0xfe, 0xc3, 0x5c, 0xb2, 0xff, 0x2a, 0x41, 0x39, 0x51, 0x58,
+	0xb3, 0x8a, 0x88, 0x58, 0x96, 0xf3, 0x44, 0x23, 0x96, 0x49, 0xfc, 0x30, 0x35, 0x80, 0x43, 0x0d,
+	0x86, 0x5c, 0x74, 0xea, 0x7e, 0xa0, 0x25, 0x92, 0x47, 0x85, 0xda, 0x1f, 0x24, 0x40, 0xf3, 0x95,
+	0xed, 0x9c, 0x9b, 0xd2, 0x8f, 0xe9, 0x66, 0xed, 0xf7, 0x12, 0x54, 0xd3, 0xe5, 0xec, 0x9c, 0x7b,
+	0xd7, 0x7e, 0x54, 0xf7, 0xfe, 0x9e, 0x81, 0xd5, 0x54, 0x11, 0x7b, 0x51, 0xef, 0xbe, 0x80, 0x75,
+	0xd3, 0xa0, 0x13, 0xd7, 0x09, 0xa8, 0xad, 0x9f, 0x69, 0x16, 0x7d, 0x4c, 0x2d, 0xb9, 0xc6, 0x37,
+	0x8d, 0xdd, 0x6f, 0x2e, 0x93, 0xeb, 0xed, 0x99, 0xde, 0x11, 0x53, 0xdb, 0xdf, 0x68, 0xb7, 0x94,
+	0xe3, 0x5e, 0x77, 0xa0, 0x74, 0x9a, 0x9f, 0x69, 0x27, 0x9d, 0x9f, 0x74, 0xba, 0x9f, 0x74, 0x54,
+	0x64, 0xce, 0xd1, 0xbe, 0xc7, 0x65, 0xdf, 0x03, 0x34, 0xef, 0x14, 0xbe, 0x0c, 0xcb, 0xdc, 0x42,
+	0x2f, 0xe0, 0x0d, 0x58, 0xeb, 0x74, 0xb5, 0x7e, 0xbb, 0xa5, 0x68, 0xca, 0xfd, 0xfb, 0x4a, 0x73,
+	0xd0, 0x17, 0x0f, 0x1f, 0x31, 0x7b, 0x90, 0x5a, 0xe0, 0xb5, 0xdf, 0x65, 0x61, 0x63, 0x89, 0x27,
+	0xb8, 0x11, 0x5e, 0x59, 0xc4, 0x2d, 0xea, 0x9d, 0x8b, 0x78, 0x5f, 0x67, 0x35, 0x43, 0x8f, 0x78,
+	0x41, 0x78, 0xc3, 0xb9, 0x01, 0x2c, 0x4a, 0x76, 0x60, 0x0e, 0x4d, 0xea, 0x85, 0xef, 0x44, 0xe2,
+	0x1e, 0xb3, 0x36, 0xc3, 0xc5, 0x53, 0xd1, 0xdb, 0x80, 0x5d, 0xc7, 0x37, 0x03, 0xf3, 0x31, 0xd5,
+	0x4c, 0x3b, 0x7a, 0x54, 0x62, 0xf7, 0x9a, 0x9c, 0x8a, 0x22, 0x49, 0xdb, 0x0e, 0x62, 0xb6, 0x4d,
+	0x47, 0x64, 0x8e, 0xcd, 0x36, 0xf3, 0xac, 0x8a, 0x22, 0x49, 0xcc, 0xbe, 0x06, 0x15, 0xc3, 0x99,
+	0xb2, 0x62, 0x4f, 0xf0, 0xd8, 0xd9, 0x21, 0xa9, 0x65, 0x81, 0xc5, 0x94, 0xb0, 0x8c, 0x9f, 0xbd,
+	0x66, 0x55, 0xd4, 0xb2, 0xc0, 0x04, 0xe5, 0x3a, 0xac, 0x91, 0xd1, 0xc8, 0x63, 0xc6, 0x23, 0x43,
+	0xe2, 0x62, 0x52, 0x8d, 0x61, 0x4e, 0xdc, 0x7a, 0x00, 0xc5, 0x28, 0x0e, 0xec, 0xa8, 0x66, 0x91,
+	0xd0, 0x5c, 0x71, 0xdb, 0xce, 0xec, 0x94, 0xd4, 0xa2, 0x1d, 0x09, 0xaf, 0x41, 0xc5, 0xf4, 0xb5,
+	0xd9, 0xe3, 0x7c, 0x66, 0x3b, 0xb3, 0x53, 0x54, 0xcb, 0xa6, 0x1f, 0x3f, 0x6c, 0xd6, 0xbe, 0xca,
+	0x40, 0x35, 0xfd, 0x71, 0x01, 0xb7, 0xa0, 0x68, 0x39, 0x3a, 0xe1, 0xa9, 0x25, 0xbe, 0x6c, 0xed,
+	0x3c, 0xe7, 0x7b, 0x44, 0xfd, 0x28, 0xe4, 0xab, 0xb1, 0xe6, 0xd6, 0xdf, 0x24, 0x28, 0x46, 0x30,
+	0xbe, 0x04, 0x39, 0x97, 0x04, 0x63, 0x6e, 0x2e, 0x7f, 0x90, 0x41, 0x92, 0xca, 0xdb, 0x0c, 0xf7,
+	0x5d, 0x62, 0xf3, 0x14, 0x08, 0x71, 0xd6, 0x66, 0xf3, 0x6a, 0x51, 0x62, 0xf0, 0x5b, 0x8f, 0x33,
+	0x99, 0x50, 0x3b, 0xf0, 0xa3, 0x79, 0x0d, 0xf1, 0x66, 0x08, 0xe3, 0xb7, 0x60, 0x3d, 0xf0, 0x88,
+	0x69, 0xa5, 0xb8, 0x39, 0xce, 0x45, 0x91, 0x20, 0x26, 0xef, 0xc3, 0x95, 0xc8, 0xae, 0x41, 0x03,
+	0xa2, 0x8f, 0xa9, 0x31, 0x53, 0x2a, 0xf0, 0xd7, 0x8d, 0xcb, 0x21, 0xa1, 0x15, 0xca, 0x23, 0xdd,
+	0xda, 0xd7, 0x12, 0xac, 0x47, 0xf7, 0x34, 0x23, 0x0e, 0xd6, 0x31, 0x00, 0xb1, 0x6d, 0x27, 0x48,
+	0x86, 0x6b, 0x31, 0x95, 0x17, 0xf4, 0xea, 0x8d, 0x58, 0x49, 0x4d, 0x18, 0xd8, 0x9a, 0x00, 0xcc,
+	0x24, 0xe7, 0x86, 0xed, 0x2a, 0x94, 0xc3, 0x2f, 0x47, 0xfc, 0xf3, 0xa3, 0xb8, 0xd9, 0x83, 0x80,
+	0xd8, 0x85, 0x0e, 0x6f, 0x42, 0xfe, 0x94, 0x8e, 0x4c, 0x3b, 0x7c, 0x0f, 0x16, 0x8d, 0xe8, 0xfd,
+	0x25, 0x17, 0xbf, 0xbf, 0x1c, 0xfc, 0x5a, 0x82, 0x0d, 0xdd, 0x99, 0xcc, 0xfb, 0x7b, 0x80, 0xe6,
+	0x9e, 0x17, 0xfc, 0x8f, 0xa5, 0xcf, 0x3f, 0x1a, 0x99, 0xc1, 0x78, 0x7a, 0x5a, 0xd7, 0x9d, 0xc9,
+	0xee, 0xc8, 0xb1, 0x88, 0x3d, 0x9a, 0x7d, 0x3f, 0x7d, 0xbc, 0xb7, 0xcb, 0xaa, 0x1e, 0x3f, 0xf1,
+	0x21, 0xf5, 0x5e, 0xa2, 0x54, 0xe5, 0xbc, 0xff, 0x4a, 0xd2, 0x1f, 0x33, 0xd9, 0xc3, 0xde, 0xc1,
+	0x9f, 0x32, 0x5b, 0x87, 0xa2, 0xbf, 0x5e, 0x14, 0x1f, 0x95, 0x0e, 0x2d, 0xaa, 0xb3, 0x31, 0xff,
+	0x2f, 0x00, 0x00, 0xff, 0xff, 0x9a, 0xd0, 0x4c, 0xbb, 0x9c, 0x1d, 0x00, 0x00,
 }
 
 func init() {
diff --git a/types/descriptor/descriptor.proto b/types/descriptor/descriptor.proto
index ed08fcb..3447a0d 100644
--- a/types/descriptor/descriptor.proto
+++ b/types/descriptor/descriptor.proto
@@ -40,7 +40,7 @@
 syntax = "proto2";
 
 package google.protobuf;
-option go_package = "github.com/golang/protobuf/protoc-gen-go/descriptor;descriptor";
+option go_package = "github.com/golang/protobuf/v2/types/descriptor;descriptor_proto";
 option java_package = "com.google.protobuf";
 option java_outer_classname = "DescriptorProtos";
 option csharp_namespace = "Google.Protobuf.Reflection";
diff --git a/types/plugin/plugin.pb.go b/types/plugin/plugin.pb.go
index bbc38cf..0beb617 100644
--- a/types/plugin/plugin.pb.go
+++ b/types/plugin/plugin.pb.go
@@ -1,15 +1,29 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // source: google/protobuf/compiler/plugin.proto
 
-package plugin_go
+package plugin_proto
 
 import (
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
 	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
 	descriptor "github.com/golang/protobuf/v2/types/descriptor"
+	math "math"
 )
 
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
 // The version number of protocol compiler.
 type Version struct {
 	Major *int32 `protobuf:"varint,1,opt,name=major" json:"major,omitempty"`
@@ -43,12 +57,30 @@
 func (m xxx_Version) ProtoMutable() {}
 
 func (m *Version) Reset()         { *m = Version{} }
-func (m *Version) String() string { return "not implemented" }
+func (m *Version) String() string { return proto.CompactTextString(m) }
 func (*Version) ProtoMessage()    {}
 func (*Version) Descriptor() ([]byte, []int) {
 	return fileDescriptor_3562add825dafed5, []int{0}
 }
 
+func (m *Version) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Version.Unmarshal(m, b)
+}
+func (m *Version) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Version.Marshal(b, m, deterministic)
+}
+func (m *Version) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Version.Merge(m, src)
+}
+func (m *Version) XXX_Size() int {
+	return xxx_messageInfo_Version.Size(m)
+}
+func (m *Version) XXX_DiscardUnknown() {
+	xxx_messageInfo_Version.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Version proto.InternalMessageInfo
+
 func (m *Version) GetMajor() int32 {
 	if m != nil && m.Major != nil {
 		return *m.Major
@@ -127,12 +159,30 @@
 func (m xxx_CodeGeneratorRequest) ProtoMutable() {}
 
 func (m *CodeGeneratorRequest) Reset()         { *m = CodeGeneratorRequest{} }
-func (m *CodeGeneratorRequest) String() string { return "not implemented" }
+func (m *CodeGeneratorRequest) String() string { return proto.CompactTextString(m) }
 func (*CodeGeneratorRequest) ProtoMessage()    {}
 func (*CodeGeneratorRequest) Descriptor() ([]byte, []int) {
 	return fileDescriptor_3562add825dafed5, []int{1}
 }
 
+func (m *CodeGeneratorRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CodeGeneratorRequest.Unmarshal(m, b)
+}
+func (m *CodeGeneratorRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CodeGeneratorRequest.Marshal(b, m, deterministic)
+}
+func (m *CodeGeneratorRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CodeGeneratorRequest.Merge(m, src)
+}
+func (m *CodeGeneratorRequest) XXX_Size() int {
+	return xxx_messageInfo_CodeGeneratorRequest.Size(m)
+}
+func (m *CodeGeneratorRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_CodeGeneratorRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CodeGeneratorRequest proto.InternalMessageInfo
+
 func (m *CodeGeneratorRequest) GetFileToGenerate() []string {
 	if m != nil {
 		return m.FileToGenerate
@@ -198,12 +248,30 @@
 func (m xxx_CodeGeneratorResponse) ProtoMutable() {}
 
 func (m *CodeGeneratorResponse) Reset()         { *m = CodeGeneratorResponse{} }
-func (m *CodeGeneratorResponse) String() string { return "not implemented" }
+func (m *CodeGeneratorResponse) String() string { return proto.CompactTextString(m) }
 func (*CodeGeneratorResponse) ProtoMessage()    {}
 func (*CodeGeneratorResponse) Descriptor() ([]byte, []int) {
 	return fileDescriptor_3562add825dafed5, []int{2}
 }
 
+func (m *CodeGeneratorResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CodeGeneratorResponse.Unmarshal(m, b)
+}
+func (m *CodeGeneratorResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CodeGeneratorResponse.Marshal(b, m, deterministic)
+}
+func (m *CodeGeneratorResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CodeGeneratorResponse.Merge(m, src)
+}
+func (m *CodeGeneratorResponse) XXX_Size() int {
+	return xxx_messageInfo_CodeGeneratorResponse.Size(m)
+}
+func (m *CodeGeneratorResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_CodeGeneratorResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CodeGeneratorResponse proto.InternalMessageInfo
+
 func (m *CodeGeneratorResponse) GetError() string {
 	if m != nil && m.Error != nil {
 		return *m.Error
@@ -297,12 +365,30 @@
 func (m xxx_CodeGeneratorResponse_File) ProtoMutable() {}
 
 func (m *CodeGeneratorResponse_File) Reset()         { *m = CodeGeneratorResponse_File{} }
-func (m *CodeGeneratorResponse_File) String() string { return "not implemented" }
+func (m *CodeGeneratorResponse_File) String() string { return proto.CompactTextString(m) }
 func (*CodeGeneratorResponse_File) ProtoMessage()    {}
 func (*CodeGeneratorResponse_File) Descriptor() ([]byte, []int) {
 	return fileDescriptor_3562add825dafed5, []int{2, 0}
 }
 
+func (m *CodeGeneratorResponse_File) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CodeGeneratorResponse_File.Unmarshal(m, b)
+}
+func (m *CodeGeneratorResponse_File) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CodeGeneratorResponse_File.Marshal(b, m, deterministic)
+}
+func (m *CodeGeneratorResponse_File) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CodeGeneratorResponse_File.Merge(m, src)
+}
+func (m *CodeGeneratorResponse_File) XXX_Size() int {
+	return xxx_messageInfo_CodeGeneratorResponse_File.Size(m)
+}
+func (m *CodeGeneratorResponse_File) XXX_DiscardUnknown() {
+	xxx_messageInfo_CodeGeneratorResponse_File.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CodeGeneratorResponse_File proto.InternalMessageInfo
+
 func (m *CodeGeneratorResponse_File) GetName() string {
 	if m != nil && m.Name != nil {
 		return *m.Name
@@ -324,35 +410,45 @@
 	return ""
 }
 
+func init() {
+	proto.RegisterType((*Version)(nil), "google.protobuf.compiler.Version")
+	proto.RegisterType((*CodeGeneratorRequest)(nil), "google.protobuf.compiler.CodeGeneratorRequest")
+	proto.RegisterType((*CodeGeneratorResponse)(nil), "google.protobuf.compiler.CodeGeneratorResponse")
+	proto.RegisterType((*CodeGeneratorResponse_File)(nil), "google.protobuf.compiler.CodeGeneratorResponse.File")
+}
+
+func init() {
+	proto.RegisterFile("google/protobuf/compiler/plugin.proto", fileDescriptor_3562add825dafed5)
+}
+
 var fileDescriptor_3562add825dafed5 = []byte{
-	// 417 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0xcf, 0x6a, 0x14, 0x41,
-	0x10, 0xc6, 0x19, 0x77, 0x63, 0x98, 0x8a, 0x64, 0x43, 0x13, 0xa5, 0x09, 0x39, 0x8c, 0x8b, 0xe2,
-	0x5c, 0x32, 0x0b, 0xc1, 0x8b, 0x78, 0x4b, 0x44, 0x3d, 0x78, 0x58, 0x1a, 0xf1, 0x20, 0xc8, 0x30,
-	0x99, 0xd4, 0x74, 0x5a, 0x66, 0xba, 0xc6, 0xee, 0x1e, 0xf1, 0x49, 0x7d, 0x0f, 0xdf, 0x40, 0xfa,
-	0xcf, 0x24, 0xb2, 0xb8, 0xa7, 0xee, 0xef, 0x57, 0xd5, 0xd5, 0x55, 0x1f, 0x05, 0x2f, 0x25, 0x91,
-	0xec, 0x71, 0x33, 0x1a, 0x72, 0x74, 0x33, 0x75, 0x9b, 0x96, 0x86, 0x51, 0xf5, 0x68, 0x36, 0x63,
-	0x3f, 0x49, 0xa5, 0xab, 0x10, 0x60, 0x3c, 0xa6, 0x55, 0x73, 0x5a, 0x35, 0xa7, 0x9d, 0x15, 0xbb,
-	0x05, 0x6e, 0xd1, 0xb6, 0x46, 0x8d, 0x8e, 0x4c, 0xcc, 0x5e, 0xb7, 0x70, 0xf8, 0x05, 0x8d, 0x55,
-	0xa4, 0xd9, 0x29, 0x1c, 0x0c, 0xcd, 0x77, 0x32, 0x3c, 0x2b, 0xb2, 0xf2, 0x40, 0x44, 0x11, 0xa8,
-	0xd2, 0x64, 0xf8, 0xa3, 0x44, 0xbd, 0xf0, 0x74, 0x6c, 0x5c, 0x7b, 0xc7, 0x17, 0x91, 0x06, 0xc1,
-	0x9e, 0xc1, 0x63, 0x3b, 0x75, 0x9d, 0xfa, 0xc5, 0x97, 0x45, 0x56, 0xe6, 0x22, 0xa9, 0xf5, 0x9f,
-	0x0c, 0x4e, 0xaf, 0xe9, 0x16, 0x3f, 0xa0, 0x46, 0xd3, 0x38, 0x32, 0x02, 0x7f, 0x4c, 0x68, 0x1d,
-	0x2b, 0xe1, 0xa4, 0x53, 0x3d, 0xd6, 0x8e, 0x6a, 0x19, 0x63, 0xc8, 0xb3, 0x62, 0x51, 0xe6, 0xe2,
-	0xd8, 0xf3, 0xcf, 0x94, 0x5e, 0x20, 0x3b, 0x87, 0x7c, 0x6c, 0x4c, 0x33, 0xa0, 0xc3, 0xd8, 0x4a,
-	0x2e, 0x1e, 0x00, 0xbb, 0x06, 0x08, 0xe3, 0xd4, 0xfe, 0x15, 0x5f, 0x15, 0x8b, 0xf2, 0xe8, 0xf2,
-	0x45, 0xb5, 0x6b, 0xcb, 0x7b, 0xd5, 0xe3, 0xbb, 0x7b, 0x03, 0xb6, 0x1e, 0x8b, 0x3c, 0x44, 0x7d,
-	0x84, 0x7d, 0x82, 0x93, 0xd9, 0xb8, 0xfa, 0x67, 0xf4, 0x24, 0x8c, 0x77, 0x74, 0xf9, 0xbc, 0xda,
-	0xe7, 0x70, 0x95, 0xcc, 0x13, 0xab, 0x99, 0x24, 0xb0, 0xfe, 0x9d, 0xc1, 0xd3, 0x9d, 0x99, 0xed,
-	0x48, 0xda, 0xa2, 0xf7, 0x0e, 0x8d, 0x49, 0x3e, 0xe7, 0x22, 0x0a, 0xf6, 0x11, 0x96, 0xff, 0x34,
-	0xff, 0x7a, 0xff, 0x8f, 0xff, 0x2d, 0x1a, 0x66, 0x13, 0xa1, 0xc2, 0xd9, 0x37, 0x58, 0x86, 0x79,
-	0x18, 0x2c, 0x75, 0x33, 0x60, 0xfa, 0x26, 0xdc, 0xd9, 0x2b, 0x58, 0x29, 0x6d, 0xd1, 0x38, 0x45,
-	0xba, 0x1e, 0x49, 0x69, 0x97, 0xcc, 0x3c, 0xbe, 0xc7, 0x5b, 0x4f, 0x19, 0x87, 0xc3, 0x96, 0xb4,
-	0x43, 0xed, 0xf8, 0x2a, 0x24, 0xcc, 0xf2, 0x4a, 0xc2, 0x79, 0x4b, 0xc3, 0xde, 0xfe, 0xae, 0x9e,
-	0x6c, 0xc3, 0x6e, 0x06, 0x7b, 0xed, 0xd7, 0x37, 0x52, 0xb9, 0xbb, 0xe9, 0xc6, 0x87, 0x37, 0x92,
-	0xfa, 0x46, 0xcb, 0x87, 0x65, 0x0c, 0x97, 0xf6, 0x42, 0xa2, 0xbe, 0x90, 0x94, 0x56, 0xfa, 0x6d,
-	0x3c, 0x6a, 0x49, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xf7, 0x15, 0x40, 0xc5, 0xfe, 0x02, 0x00,
-	0x00,
+	// 416 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0xcf, 0x6a, 0xd5, 0x40,
+	0x14, 0xc6, 0x89, 0xbd, 0xb5, 0xe4, 0x54, 0x7a, 0xcb, 0x50, 0x65, 0x28, 0x5d, 0xc4, 0x8b, 0x62,
+	0x56, 0x09, 0x5c, 0x04, 0x17, 0xee, 0x5a, 0x51, 0x17, 0x2e, 0x2e, 0x83, 0xb8, 0x10, 0x24, 0xa4,
+	0xe9, 0xb9, 0xe9, 0x48, 0x32, 0x67, 0x9c, 0x99, 0x14, 0x7d, 0x51, 0xdf, 0xc3, 0x37, 0x90, 0xf9,
+	0x93, 0x56, 0x2e, 0xde, 0x55, 0xf2, 0xfd, 0xbe, 0x33, 0x33, 0xe7, 0x7c, 0x1c, 0x78, 0xd9, 0x13,
+	0xf5, 0x03, 0xd6, 0xda, 0x90, 0xa3, 0xeb, 0x69, 0x5b, 0x77, 0x34, 0x6a, 0x39, 0xa0, 0xa9, 0xf5,
+	0x30, 0xf5, 0x52, 0x55, 0xc1, 0x60, 0x3c, 0x96, 0x55, 0x73, 0x59, 0x35, 0x97, 0x9d, 0x17, 0xbb,
+	0x17, 0xdc, 0xa0, 0xed, 0x8c, 0xd4, 0x8e, 0x4c, 0xac, 0x5e, 0x75, 0x70, 0xf4, 0x05, 0x8d, 0x95,
+	0xa4, 0xd8, 0x19, 0x1c, 0x8e, 0xed, 0x77, 0x32, 0x3c, 0x2b, 0xb2, 0xf2, 0x50, 0x44, 0x11, 0xa8,
+	0x54, 0x64, 0xf8, 0xa3, 0x44, 0xbd, 0xf0, 0x54, 0xb7, 0xae, 0xbb, 0xe5, 0x07, 0x91, 0x06, 0xc1,
+	0x9e, 0xc1, 0x63, 0x3b, 0x6d, 0xb7, 0xf2, 0x27, 0x5f, 0x14, 0x59, 0x99, 0x8b, 0xa4, 0x56, 0x7f,
+	0x32, 0x38, 0xbb, 0xa2, 0x1b, 0xfc, 0x80, 0x0a, 0x4d, 0xeb, 0xc8, 0x08, 0xfc, 0x31, 0xa1, 0x75,
+	0xac, 0x84, 0xd3, 0xad, 0x1c, 0xb0, 0x71, 0xd4, 0xf4, 0xd1, 0x43, 0x9e, 0x15, 0x07, 0x65, 0x2e,
+	0x4e, 0x3c, 0xff, 0x4c, 0xe9, 0x04, 0xb2, 0x0b, 0xc8, 0x75, 0x6b, 0xda, 0x11, 0x1d, 0xc6, 0x56,
+	0x72, 0xf1, 0x00, 0xd8, 0x15, 0x40, 0x18, 0xa7, 0xf1, 0xa7, 0xf8, 0xb2, 0x38, 0x28, 0x8f, 0xd7,
+	0x2f, 0xaa, 0xdd, 0x58, 0xde, 0xcb, 0x01, 0xdf, 0xdd, 0x07, 0xb0, 0xf1, 0x58, 0xe4, 0xc1, 0xf5,
+	0x0e, 0xfb, 0x04, 0xa7, 0x73, 0x70, 0xcd, 0x5d, 0xcc, 0x24, 0x8c, 0x77, 0xbc, 0x7e, 0x5e, 0xed,
+	0x4b, 0xb8, 0x4a, 0xe1, 0x89, 0xe5, 0x4c, 0x12, 0x58, 0xfd, 0xce, 0xe0, 0xe9, 0xce, 0xcc, 0x56,
+	0x93, 0xb2, 0xe8, 0xb3, 0x43, 0x63, 0x52, 0xce, 0xb9, 0x88, 0x82, 0x7d, 0x84, 0xc5, 0x3f, 0xcd,
+	0xbf, 0xde, 0xff, 0xe2, 0x7f, 0x2f, 0x0d, 0xb3, 0x89, 0x70, 0xc3, 0xf9, 0x37, 0x58, 0x84, 0x79,
+	0x18, 0x2c, 0x54, 0x3b, 0x62, 0x7a, 0x26, 0xfc, 0xb3, 0x57, 0xb0, 0x94, 0xca, 0xa2, 0x71, 0x92,
+	0x54, 0xa3, 0x49, 0x2a, 0x97, 0xc2, 0x3c, 0xb9, 0xc7, 0x1b, 0x4f, 0x19, 0x87, 0xa3, 0x8e, 0x94,
+	0x43, 0xe5, 0xf8, 0x32, 0x14, 0xcc, 0xf2, 0x12, 0xe1, 0xa2, 0xa3, 0x71, 0x6f, 0x7f, 0x97, 0x4f,
+	0x36, 0x61, 0x37, 0x43, 0xbc, 0xf6, 0xeb, 0x9b, 0x5e, 0xba, 0xdb, 0xe9, 0xda, 0xdb, 0x75, 0x4f,
+	0x43, 0xab, 0xfa, 0x87, 0x65, 0xbc, 0x5b, 0xd7, 0xee, 0x97, 0x46, 0x9b, 0xb6, 0xf9, 0x6d, 0xfc,
+	0x34, 0xc1, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xa3, 0xfc, 0xb6, 0x26, 0xfc, 0x02, 0x00, 0x00,
 }
 
 func init() {
diff --git a/types/plugin/plugin.proto b/types/plugin/plugin.proto
index 5b55745..e368027 100644
--- a/types/plugin/plugin.proto
+++ b/types/plugin/plugin.proto
@@ -49,7 +49,7 @@
 option java_package = "com.google.protobuf.compiler";
 option java_outer_classname = "PluginProtos";
 
-option go_package = "github.com/golang/protobuf/protoc-gen-go/plugin;plugin_go";
+option go_package = "github.com/golang/protobuf/v2/types/plugin;plugin_proto";
 
 import "google/protobuf/descriptor.proto";