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

package test_proto

import proto "github.com/golang/protobuf/proto"
import fmt "fmt"
import 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.ProtoPackageIsVersion2 // please upgrade the proto package

type FOO int32

const (
	FOO_FOO1 FOO = 1
)

var FOO_name = map[int32]string{
	1: "FOO1",
}
var FOO_value = map[string]int32{
	"FOO1": 1,
}

func (x FOO) Enum() *FOO {
	p := new(FOO)
	*p = x
	return p
}
func (x FOO) String() string {
	return proto.EnumName(FOO_name, int32(x))
}
func (x *FOO) UnmarshalJSON(data []byte) error {
	value, err := proto.UnmarshalJSONEnum(FOO_value, data, "FOO")
	if err != nil {
		return err
	}
	*x = FOO(value)
	return nil
}
func (FOO) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }

// An enum, for completeness.
type GoTest_KIND int32

const (
	GoTest_VOID GoTest_KIND = 0
	// Basic types
	GoTest_BOOL        GoTest_KIND = 1
	GoTest_BYTES       GoTest_KIND = 2
	GoTest_FINGERPRINT GoTest_KIND = 3
	GoTest_FLOAT       GoTest_KIND = 4
	GoTest_INT         GoTest_KIND = 5
	GoTest_STRING      GoTest_KIND = 6
	GoTest_TIME        GoTest_KIND = 7
	// Groupings
	GoTest_TUPLE GoTest_KIND = 8
	GoTest_ARRAY GoTest_KIND = 9
	GoTest_MAP   GoTest_KIND = 10
	// Table types
	GoTest_TABLE GoTest_KIND = 11
	// Functions
	GoTest_FUNCTION GoTest_KIND = 12
)

var GoTest_KIND_name = map[int32]string{
	0:  "VOID",
	1:  "BOOL",
	2:  "BYTES",
	3:  "FINGERPRINT",
	4:  "FLOAT",
	5:  "INT",
	6:  "STRING",
	7:  "TIME",
	8:  "TUPLE",
	9:  "ARRAY",
	10: "MAP",
	11: "TABLE",
	12: "FUNCTION",
}
var GoTest_KIND_value = map[string]int32{
	"VOID":        0,
	"BOOL":        1,
	"BYTES":       2,
	"FINGERPRINT": 3,
	"FLOAT":       4,
	"INT":         5,
	"STRING":      6,
	"TIME":        7,
	"TUPLE":       8,
	"ARRAY":       9,
	"MAP":         10,
	"TABLE":       11,
	"FUNCTION":    12,
}

func (x GoTest_KIND) Enum() *GoTest_KIND {
	p := new(GoTest_KIND)
	*p = x
	return p
}
func (x GoTest_KIND) String() string {
	return proto.EnumName(GoTest_KIND_name, int32(x))
}
func (x *GoTest_KIND) UnmarshalJSON(data []byte) error {
	value, err := proto.UnmarshalJSONEnum(GoTest_KIND_value, data, "GoTest_KIND")
	if err != nil {
		return err
	}
	*x = GoTest_KIND(value)
	return nil
}
func (GoTest_KIND) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} }

type MyMessage_Color int32

const (
	MyMessage_RED   MyMessage_Color = 0
	MyMessage_GREEN MyMessage_Color = 1
	MyMessage_BLUE  MyMessage_Color = 2
)

var MyMessage_Color_name = map[int32]string{
	0: "RED",
	1: "GREEN",
	2: "BLUE",
}
var MyMessage_Color_value = map[string]int32{
	"RED":   0,
	"GREEN": 1,
	"BLUE":  2,
}

func (x MyMessage_Color) Enum() *MyMessage_Color {
	p := new(MyMessage_Color)
	*p = x
	return p
}
func (x MyMessage_Color) String() string {
	return proto.EnumName(MyMessage_Color_name, int32(x))
}
func (x *MyMessage_Color) UnmarshalJSON(data []byte) error {
	value, err := proto.UnmarshalJSONEnum(MyMessage_Color_value, data, "MyMessage_Color")
	if err != nil {
		return err
	}
	*x = MyMessage_Color(value)
	return nil
}
func (MyMessage_Color) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{13, 0} }

type DefaultsMessage_DefaultsEnum int32

const (
	DefaultsMessage_ZERO DefaultsMessage_DefaultsEnum = 0
	DefaultsMessage_ONE  DefaultsMessage_DefaultsEnum = 1
	DefaultsMessage_TWO  DefaultsMessage_DefaultsEnum = 2
)

var DefaultsMessage_DefaultsEnum_name = map[int32]string{
	0: "ZERO",
	1: "ONE",
	2: "TWO",
}
var DefaultsMessage_DefaultsEnum_value = map[string]int32{
	"ZERO": 0,
	"ONE":  1,
	"TWO":  2,
}

func (x DefaultsMessage_DefaultsEnum) Enum() *DefaultsMessage_DefaultsEnum {
	p := new(DefaultsMessage_DefaultsEnum)
	*p = x
	return p
}
func (x DefaultsMessage_DefaultsEnum) String() string {
	return proto.EnumName(DefaultsMessage_DefaultsEnum_name, int32(x))
}
func (x *DefaultsMessage_DefaultsEnum) UnmarshalJSON(data []byte) error {
	value, err := proto.UnmarshalJSONEnum(DefaultsMessage_DefaultsEnum_value, data, "DefaultsMessage_DefaultsEnum")
	if err != nil {
		return err
	}
	*x = DefaultsMessage_DefaultsEnum(value)
	return nil
}
func (DefaultsMessage_DefaultsEnum) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor0, []int{16, 0}
}

type Defaults_Color int32

const (
	Defaults_RED   Defaults_Color = 0
	Defaults_GREEN Defaults_Color = 1
	Defaults_BLUE  Defaults_Color = 2
)

var Defaults_Color_name = map[int32]string{
	0: "RED",
	1: "GREEN",
	2: "BLUE",
}
var Defaults_Color_value = map[string]int32{
	"RED":   0,
	"GREEN": 1,
	"BLUE":  2,
}

func (x Defaults_Color) Enum() *Defaults_Color {
	p := new(Defaults_Color)
	*p = x
	return p
}
func (x Defaults_Color) String() string {
	return proto.EnumName(Defaults_Color_name, int32(x))
}
func (x *Defaults_Color) UnmarshalJSON(data []byte) error {
	value, err := proto.UnmarshalJSONEnum(Defaults_Color_value, data, "Defaults_Color")
	if err != nil {
		return err
	}
	*x = Defaults_Color(value)
	return nil
}
func (Defaults_Color) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{21, 0} }

type RepeatedEnum_Color int32

const (
	RepeatedEnum_RED RepeatedEnum_Color = 1
)

var RepeatedEnum_Color_name = map[int32]string{
	1: "RED",
}
var RepeatedEnum_Color_value = map[string]int32{
	"RED": 1,
}

func (x RepeatedEnum_Color) Enum() *RepeatedEnum_Color {
	p := new(RepeatedEnum_Color)
	*p = x
	return p
}
func (x RepeatedEnum_Color) String() string {
	return proto.EnumName(RepeatedEnum_Color_name, int32(x))
}
func (x *RepeatedEnum_Color) UnmarshalJSON(data []byte) error {
	value, err := proto.UnmarshalJSONEnum(RepeatedEnum_Color_value, data, "RepeatedEnum_Color")
	if err != nil {
		return err
	}
	*x = RepeatedEnum_Color(value)
	return nil
}
func (RepeatedEnum_Color) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{23, 0} }

type GoEnum struct {
	Foo                  *FOO     `protobuf:"varint,1,req,name=foo,enum=test_proto.FOO" json:"foo,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *GoEnum) Reset()                    { *m = GoEnum{} }
func (m *GoEnum) String() string            { return proto.CompactTextString(m) }
func (*GoEnum) ProtoMessage()               {}
func (*GoEnum) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
func (m *GoEnum) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GoEnum.Unmarshal(m, b)
}
func (m *GoEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GoEnum.Marshal(b, m, deterministic)
}
func (dst *GoEnum) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GoEnum.Merge(dst, src)
}
func (m *GoEnum) XXX_Size() int {
	return xxx_messageInfo_GoEnum.Size(m)
}
func (m *GoEnum) XXX_DiscardUnknown() {
	xxx_messageInfo_GoEnum.DiscardUnknown(m)
}

var xxx_messageInfo_GoEnum proto.InternalMessageInfo

func (m *GoEnum) GetFoo() FOO {
	if m != nil && m.Foo != nil {
		return *m.Foo
	}
	return FOO_FOO1
}

type GoTestField struct {
	Label                *string  `protobuf:"bytes,1,req,name=Label" json:"Label,omitempty"`
	Type                 *string  `protobuf:"bytes,2,req,name=Type" json:"Type,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *GoTestField) Reset()                    { *m = GoTestField{} }
func (m *GoTestField) String() string            { return proto.CompactTextString(m) }
func (*GoTestField) ProtoMessage()               {}
func (*GoTestField) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
func (m *GoTestField) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GoTestField.Unmarshal(m, b)
}
func (m *GoTestField) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GoTestField.Marshal(b, m, deterministic)
}
func (dst *GoTestField) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GoTestField.Merge(dst, src)
}
func (m *GoTestField) XXX_Size() int {
	return xxx_messageInfo_GoTestField.Size(m)
}
func (m *GoTestField) XXX_DiscardUnknown() {
	xxx_messageInfo_GoTestField.DiscardUnknown(m)
}

var xxx_messageInfo_GoTestField proto.InternalMessageInfo

func (m *GoTestField) GetLabel() string {
	if m != nil && m.Label != nil {
		return *m.Label
	}
	return ""
}

func (m *GoTestField) GetType() string {
	if m != nil && m.Type != nil {
		return *m.Type
	}
	return ""
}

type GoTest struct {
	// Some typical parameters
	Kind  *GoTest_KIND `protobuf:"varint,1,req,name=Kind,enum=test_proto.GoTest_KIND" json:"Kind,omitempty"`
	Table *string      `protobuf:"bytes,2,opt,name=Table" json:"Table,omitempty"`
	Param *int32       `protobuf:"varint,3,opt,name=Param" json:"Param,omitempty"`
	// Required, repeated and optional foreign fields.
	RequiredField *GoTestField   `protobuf:"bytes,4,req,name=RequiredField" json:"RequiredField,omitempty"`
	RepeatedField []*GoTestField `protobuf:"bytes,5,rep,name=RepeatedField" json:"RepeatedField,omitempty"`
	OptionalField *GoTestField   `protobuf:"bytes,6,opt,name=OptionalField" json:"OptionalField,omitempty"`
	// Required fields of all basic types
	F_BoolRequired     *bool    `protobuf:"varint,10,req,name=F_Bool_required,json=FBoolRequired" json:"F_Bool_required,omitempty"`
	F_Int32Required    *int32   `protobuf:"varint,11,req,name=F_Int32_required,json=FInt32Required" json:"F_Int32_required,omitempty"`
	F_Int64Required    *int64   `protobuf:"varint,12,req,name=F_Int64_required,json=FInt64Required" json:"F_Int64_required,omitempty"`
	F_Fixed32Required  *uint32  `protobuf:"fixed32,13,req,name=F_Fixed32_required,json=FFixed32Required" json:"F_Fixed32_required,omitempty"`
	F_Fixed64Required  *uint64  `protobuf:"fixed64,14,req,name=F_Fixed64_required,json=FFixed64Required" json:"F_Fixed64_required,omitempty"`
	F_Uint32Required   *uint32  `protobuf:"varint,15,req,name=F_Uint32_required,json=FUint32Required" json:"F_Uint32_required,omitempty"`
	F_Uint64Required   *uint64  `protobuf:"varint,16,req,name=F_Uint64_required,json=FUint64Required" json:"F_Uint64_required,omitempty"`
	F_FloatRequired    *float32 `protobuf:"fixed32,17,req,name=F_Float_required,json=FFloatRequired" json:"F_Float_required,omitempty"`
	F_DoubleRequired   *float64 `protobuf:"fixed64,18,req,name=F_Double_required,json=FDoubleRequired" json:"F_Double_required,omitempty"`
	F_StringRequired   *string  `protobuf:"bytes,19,req,name=F_String_required,json=FStringRequired" json:"F_String_required,omitempty"`
	F_BytesRequired    []byte   `protobuf:"bytes,101,req,name=F_Bytes_required,json=FBytesRequired" json:"F_Bytes_required,omitempty"`
	F_Sint32Required   *int32   `protobuf:"zigzag32,102,req,name=F_Sint32_required,json=FSint32Required" json:"F_Sint32_required,omitempty"`
	F_Sint64Required   *int64   `protobuf:"zigzag64,103,req,name=F_Sint64_required,json=FSint64Required" json:"F_Sint64_required,omitempty"`
	F_Sfixed32Required *int32   `protobuf:"fixed32,104,req,name=F_Sfixed32_required,json=FSfixed32Required" json:"F_Sfixed32_required,omitempty"`
	F_Sfixed64Required *int64   `protobuf:"fixed64,105,req,name=F_Sfixed64_required,json=FSfixed64Required" json:"F_Sfixed64_required,omitempty"`
	// Repeated fields of all basic types
	F_BoolRepeated     []bool    `protobuf:"varint,20,rep,name=F_Bool_repeated,json=FBoolRepeated" json:"F_Bool_repeated,omitempty"`
	F_Int32Repeated    []int32   `protobuf:"varint,21,rep,name=F_Int32_repeated,json=FInt32Repeated" json:"F_Int32_repeated,omitempty"`
	F_Int64Repeated    []int64   `protobuf:"varint,22,rep,name=F_Int64_repeated,json=FInt64Repeated" json:"F_Int64_repeated,omitempty"`
	F_Fixed32Repeated  []uint32  `protobuf:"fixed32,23,rep,name=F_Fixed32_repeated,json=FFixed32Repeated" json:"F_Fixed32_repeated,omitempty"`
	F_Fixed64Repeated  []uint64  `protobuf:"fixed64,24,rep,name=F_Fixed64_repeated,json=FFixed64Repeated" json:"F_Fixed64_repeated,omitempty"`
	F_Uint32Repeated   []uint32  `protobuf:"varint,25,rep,name=F_Uint32_repeated,json=FUint32Repeated" json:"F_Uint32_repeated,omitempty"`
	F_Uint64Repeated   []uint64  `protobuf:"varint,26,rep,name=F_Uint64_repeated,json=FUint64Repeated" json:"F_Uint64_repeated,omitempty"`
	F_FloatRepeated    []float32 `protobuf:"fixed32,27,rep,name=F_Float_repeated,json=FFloatRepeated" json:"F_Float_repeated,omitempty"`
	F_DoubleRepeated   []float64 `protobuf:"fixed64,28,rep,name=F_Double_repeated,json=FDoubleRepeated" json:"F_Double_repeated,omitempty"`
	F_StringRepeated   []string  `protobuf:"bytes,29,rep,name=F_String_repeated,json=FStringRepeated" json:"F_String_repeated,omitempty"`
	F_BytesRepeated    [][]byte  `protobuf:"bytes,201,rep,name=F_Bytes_repeated,json=FBytesRepeated" json:"F_Bytes_repeated,omitempty"`
	F_Sint32Repeated   []int32   `protobuf:"zigzag32,202,rep,name=F_Sint32_repeated,json=FSint32Repeated" json:"F_Sint32_repeated,omitempty"`
	F_Sint64Repeated   []int64   `protobuf:"zigzag64,203,rep,name=F_Sint64_repeated,json=FSint64Repeated" json:"F_Sint64_repeated,omitempty"`
	F_Sfixed32Repeated []int32   `protobuf:"fixed32,204,rep,name=F_Sfixed32_repeated,json=FSfixed32Repeated" json:"F_Sfixed32_repeated,omitempty"`
	F_Sfixed64Repeated []int64   `protobuf:"fixed64,205,rep,name=F_Sfixed64_repeated,json=FSfixed64Repeated" json:"F_Sfixed64_repeated,omitempty"`
	// Optional fields of all basic types
	F_BoolOptional     *bool    `protobuf:"varint,30,opt,name=F_Bool_optional,json=FBoolOptional" json:"F_Bool_optional,omitempty"`
	F_Int32Optional    *int32   `protobuf:"varint,31,opt,name=F_Int32_optional,json=FInt32Optional" json:"F_Int32_optional,omitempty"`
	F_Int64Optional    *int64   `protobuf:"varint,32,opt,name=F_Int64_optional,json=FInt64Optional" json:"F_Int64_optional,omitempty"`
	F_Fixed32Optional  *uint32  `protobuf:"fixed32,33,opt,name=F_Fixed32_optional,json=FFixed32Optional" json:"F_Fixed32_optional,omitempty"`
	F_Fixed64Optional  *uint64  `protobuf:"fixed64,34,opt,name=F_Fixed64_optional,json=FFixed64Optional" json:"F_Fixed64_optional,omitempty"`
	F_Uint32Optional   *uint32  `protobuf:"varint,35,opt,name=F_Uint32_optional,json=FUint32Optional" json:"F_Uint32_optional,omitempty"`
	F_Uint64Optional   *uint64  `protobuf:"varint,36,opt,name=F_Uint64_optional,json=FUint64Optional" json:"F_Uint64_optional,omitempty"`
	F_FloatOptional    *float32 `protobuf:"fixed32,37,opt,name=F_Float_optional,json=FFloatOptional" json:"F_Float_optional,omitempty"`
	F_DoubleOptional   *float64 `protobuf:"fixed64,38,opt,name=F_Double_optional,json=FDoubleOptional" json:"F_Double_optional,omitempty"`
	F_StringOptional   *string  `protobuf:"bytes,39,opt,name=F_String_optional,json=FStringOptional" json:"F_String_optional,omitempty"`
	F_BytesOptional    []byte   `protobuf:"bytes,301,opt,name=F_Bytes_optional,json=FBytesOptional" json:"F_Bytes_optional,omitempty"`
	F_Sint32Optional   *int32   `protobuf:"zigzag32,302,opt,name=F_Sint32_optional,json=FSint32Optional" json:"F_Sint32_optional,omitempty"`
	F_Sint64Optional   *int64   `protobuf:"zigzag64,303,opt,name=F_Sint64_optional,json=FSint64Optional" json:"F_Sint64_optional,omitempty"`
	F_Sfixed32Optional *int32   `protobuf:"fixed32,304,opt,name=F_Sfixed32_optional,json=FSfixed32Optional" json:"F_Sfixed32_optional,omitempty"`
	F_Sfixed64Optional *int64   `protobuf:"fixed64,305,opt,name=F_Sfixed64_optional,json=FSfixed64Optional" json:"F_Sfixed64_optional,omitempty"`
	// Default-valued fields of all basic types
	F_BoolDefaulted     *bool    `protobuf:"varint,40,opt,name=F_Bool_defaulted,json=FBoolDefaulted,def=1" json:"F_Bool_defaulted,omitempty"`
	F_Int32Defaulted    *int32   `protobuf:"varint,41,opt,name=F_Int32_defaulted,json=FInt32Defaulted,def=32" json:"F_Int32_defaulted,omitempty"`
	F_Int64Defaulted    *int64   `protobuf:"varint,42,opt,name=F_Int64_defaulted,json=FInt64Defaulted,def=64" json:"F_Int64_defaulted,omitempty"`
	F_Fixed32Defaulted  *uint32  `protobuf:"fixed32,43,opt,name=F_Fixed32_defaulted,json=FFixed32Defaulted,def=320" json:"F_Fixed32_defaulted,omitempty"`
	F_Fixed64Defaulted  *uint64  `protobuf:"fixed64,44,opt,name=F_Fixed64_defaulted,json=FFixed64Defaulted,def=640" json:"F_Fixed64_defaulted,omitempty"`
	F_Uint32Defaulted   *uint32  `protobuf:"varint,45,opt,name=F_Uint32_defaulted,json=FUint32Defaulted,def=3200" json:"F_Uint32_defaulted,omitempty"`
	F_Uint64Defaulted   *uint64  `protobuf:"varint,46,opt,name=F_Uint64_defaulted,json=FUint64Defaulted,def=6400" json:"F_Uint64_defaulted,omitempty"`
	F_FloatDefaulted    *float32 `protobuf:"fixed32,47,opt,name=F_Float_defaulted,json=FFloatDefaulted,def=314159" json:"F_Float_defaulted,omitempty"`
	F_DoubleDefaulted   *float64 `protobuf:"fixed64,48,opt,name=F_Double_defaulted,json=FDoubleDefaulted,def=271828" json:"F_Double_defaulted,omitempty"`
	F_StringDefaulted   *string  `protobuf:"bytes,49,opt,name=F_String_defaulted,json=FStringDefaulted,def=hello, \"world!\"\n" json:"F_String_defaulted,omitempty"`
	F_BytesDefaulted    []byte   `protobuf:"bytes,401,opt,name=F_Bytes_defaulted,json=FBytesDefaulted,def=Bignose" json:"F_Bytes_defaulted,omitempty"`
	F_Sint32Defaulted   *int32   `protobuf:"zigzag32,402,opt,name=F_Sint32_defaulted,json=FSint32Defaulted,def=-32" json:"F_Sint32_defaulted,omitempty"`
	F_Sint64Defaulted   *int64   `protobuf:"zigzag64,403,opt,name=F_Sint64_defaulted,json=FSint64Defaulted,def=-64" json:"F_Sint64_defaulted,omitempty"`
	F_Sfixed32Defaulted *int32   `protobuf:"fixed32,404,opt,name=F_Sfixed32_defaulted,json=FSfixed32Defaulted,def=-32" json:"F_Sfixed32_defaulted,omitempty"`
	F_Sfixed64Defaulted *int64   `protobuf:"fixed64,405,opt,name=F_Sfixed64_defaulted,json=FSfixed64Defaulted,def=-64" json:"F_Sfixed64_defaulted,omitempty"`
	// Packed repeated fields (no string or bytes).
	F_BoolRepeatedPacked     []bool                  `protobuf:"varint,50,rep,packed,name=F_Bool_repeated_packed,json=FBoolRepeatedPacked" json:"F_Bool_repeated_packed,omitempty"`
	F_Int32RepeatedPacked    []int32                 `protobuf:"varint,51,rep,packed,name=F_Int32_repeated_packed,json=FInt32RepeatedPacked" json:"F_Int32_repeated_packed,omitempty"`
	F_Int64RepeatedPacked    []int64                 `protobuf:"varint,52,rep,packed,name=F_Int64_repeated_packed,json=FInt64RepeatedPacked" json:"F_Int64_repeated_packed,omitempty"`
	F_Fixed32RepeatedPacked  []uint32                `protobuf:"fixed32,53,rep,packed,name=F_Fixed32_repeated_packed,json=FFixed32RepeatedPacked" json:"F_Fixed32_repeated_packed,omitempty"`
	F_Fixed64RepeatedPacked  []uint64                `protobuf:"fixed64,54,rep,packed,name=F_Fixed64_repeated_packed,json=FFixed64RepeatedPacked" json:"F_Fixed64_repeated_packed,omitempty"`
	F_Uint32RepeatedPacked   []uint32                `protobuf:"varint,55,rep,packed,name=F_Uint32_repeated_packed,json=FUint32RepeatedPacked" json:"F_Uint32_repeated_packed,omitempty"`
	F_Uint64RepeatedPacked   []uint64                `protobuf:"varint,56,rep,packed,name=F_Uint64_repeated_packed,json=FUint64RepeatedPacked" json:"F_Uint64_repeated_packed,omitempty"`
	F_FloatRepeatedPacked    []float32               `protobuf:"fixed32,57,rep,packed,name=F_Float_repeated_packed,json=FFloatRepeatedPacked" json:"F_Float_repeated_packed,omitempty"`
	F_DoubleRepeatedPacked   []float64               `protobuf:"fixed64,58,rep,packed,name=F_Double_repeated_packed,json=FDoubleRepeatedPacked" json:"F_Double_repeated_packed,omitempty"`
	F_Sint32RepeatedPacked   []int32                 `protobuf:"zigzag32,502,rep,packed,name=F_Sint32_repeated_packed,json=FSint32RepeatedPacked" json:"F_Sint32_repeated_packed,omitempty"`
	F_Sint64RepeatedPacked   []int64                 `protobuf:"zigzag64,503,rep,packed,name=F_Sint64_repeated_packed,json=FSint64RepeatedPacked" json:"F_Sint64_repeated_packed,omitempty"`
	F_Sfixed32RepeatedPacked []int32                 `protobuf:"fixed32,504,rep,packed,name=F_Sfixed32_repeated_packed,json=FSfixed32RepeatedPacked" json:"F_Sfixed32_repeated_packed,omitempty"`
	F_Sfixed64RepeatedPacked []int64                 `protobuf:"fixed64,505,rep,packed,name=F_Sfixed64_repeated_packed,json=FSfixed64RepeatedPacked" json:"F_Sfixed64_repeated_packed,omitempty"`
	Requiredgroup            *GoTest_RequiredGroup   `protobuf:"group,70,req,name=RequiredGroup,json=requiredgroup" json:"requiredgroup,omitempty"`
	Repeatedgroup            []*GoTest_RepeatedGroup `protobuf:"group,80,rep,name=RepeatedGroup,json=repeatedgroup" json:"repeatedgroup,omitempty"`
	Optionalgroup            *GoTest_OptionalGroup   `protobuf:"group,90,opt,name=OptionalGroup,json=optionalgroup" json:"optionalgroup,omitempty"`
	XXX_NoUnkeyedLiteral     struct{}                `json:"-"`
	XXX_unrecognized         []byte                  `json:"-"`
	XXX_sizecache            int32                   `json:"-"`
}

func (m *GoTest) Reset()                    { *m = GoTest{} }
func (m *GoTest) String() string            { return proto.CompactTextString(m) }
func (*GoTest) ProtoMessage()               {}
func (*GoTest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
func (m *GoTest) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GoTest.Unmarshal(m, b)
}
func (m *GoTest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GoTest.Marshal(b, m, deterministic)
}
func (dst *GoTest) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GoTest.Merge(dst, src)
}
func (m *GoTest) XXX_Size() int {
	return xxx_messageInfo_GoTest.Size(m)
}
func (m *GoTest) XXX_DiscardUnknown() {
	xxx_messageInfo_GoTest.DiscardUnknown(m)
}

var xxx_messageInfo_GoTest proto.InternalMessageInfo

const Default_GoTest_F_BoolDefaulted bool = true
const Default_GoTest_F_Int32Defaulted int32 = 32
const Default_GoTest_F_Int64Defaulted int64 = 64
const Default_GoTest_F_Fixed32Defaulted uint32 = 320
const Default_GoTest_F_Fixed64Defaulted uint64 = 640
const Default_GoTest_F_Uint32Defaulted uint32 = 3200
const Default_GoTest_F_Uint64Defaulted uint64 = 6400
const Default_GoTest_F_FloatDefaulted float32 = 314159
const Default_GoTest_F_DoubleDefaulted float64 = 271828
const Default_GoTest_F_StringDefaulted string = "hello, \"world!\"\n"

var Default_GoTest_F_BytesDefaulted []byte = []byte("Bignose")

const Default_GoTest_F_Sint32Defaulted int32 = -32
const Default_GoTest_F_Sint64Defaulted int64 = -64
const Default_GoTest_F_Sfixed32Defaulted int32 = -32
const Default_GoTest_F_Sfixed64Defaulted int64 = -64

func (m *GoTest) GetKind() GoTest_KIND {
	if m != nil && m.Kind != nil {
		return *m.Kind
	}
	return GoTest_VOID
}

func (m *GoTest) GetTable() string {
	if m != nil && m.Table != nil {
		return *m.Table
	}
	return ""
}

func (m *GoTest) GetParam() int32 {
	if m != nil && m.Param != nil {
		return *m.Param
	}
	return 0
}

func (m *GoTest) GetRequiredField() *GoTestField {
	if m != nil {
		return m.RequiredField
	}
	return nil
}

func (m *GoTest) GetRepeatedField() []*GoTestField {
	if m != nil {
		return m.RepeatedField
	}
	return nil
}

func (m *GoTest) GetOptionalField() *GoTestField {
	if m != nil {
		return m.OptionalField
	}
	return nil
}

func (m *GoTest) GetF_BoolRequired() bool {
	if m != nil && m.F_BoolRequired != nil {
		return *m.F_BoolRequired
	}
	return false
}

func (m *GoTest) GetF_Int32Required() int32 {
	if m != nil && m.F_Int32Required != nil {
		return *m.F_Int32Required
	}
	return 0
}

func (m *GoTest) GetF_Int64Required() int64 {
	if m != nil && m.F_Int64Required != nil {
		return *m.F_Int64Required
	}
	return 0
}

func (m *GoTest) GetF_Fixed32Required() uint32 {
	if m != nil && m.F_Fixed32Required != nil {
		return *m.F_Fixed32Required
	}
	return 0
}

func (m *GoTest) GetF_Fixed64Required() uint64 {
	if m != nil && m.F_Fixed64Required != nil {
		return *m.F_Fixed64Required
	}
	return 0
}

func (m *GoTest) GetF_Uint32Required() uint32 {
	if m != nil && m.F_Uint32Required != nil {
		return *m.F_Uint32Required
	}
	return 0
}

func (m *GoTest) GetF_Uint64Required() uint64 {
	if m != nil && m.F_Uint64Required != nil {
		return *m.F_Uint64Required
	}
	return 0
}

func (m *GoTest) GetF_FloatRequired() float32 {
	if m != nil && m.F_FloatRequired != nil {
		return *m.F_FloatRequired
	}
	return 0
}

func (m *GoTest) GetF_DoubleRequired() float64 {
	if m != nil && m.F_DoubleRequired != nil {
		return *m.F_DoubleRequired
	}
	return 0
}

func (m *GoTest) GetF_StringRequired() string {
	if m != nil && m.F_StringRequired != nil {
		return *m.F_StringRequired
	}
	return ""
}

func (m *GoTest) GetF_BytesRequired() []byte {
	if m != nil {
		return m.F_BytesRequired
	}
	return nil
}

func (m *GoTest) GetF_Sint32Required() int32 {
	if m != nil && m.F_Sint32Required != nil {
		return *m.F_Sint32Required
	}
	return 0
}

func (m *GoTest) GetF_Sint64Required() int64 {
	if m != nil && m.F_Sint64Required != nil {
		return *m.F_Sint64Required
	}
	return 0
}

func (m *GoTest) GetF_Sfixed32Required() int32 {
	if m != nil && m.F_Sfixed32Required != nil {
		return *m.F_Sfixed32Required
	}
	return 0
}

func (m *GoTest) GetF_Sfixed64Required() int64 {
	if m != nil && m.F_Sfixed64Required != nil {
		return *m.F_Sfixed64Required
	}
	return 0
}

func (m *GoTest) GetF_BoolRepeated() []bool {
	if m != nil {
		return m.F_BoolRepeated
	}
	return nil
}

func (m *GoTest) GetF_Int32Repeated() []int32 {
	if m != nil {
		return m.F_Int32Repeated
	}
	return nil
}

func (m *GoTest) GetF_Int64Repeated() []int64 {
	if m != nil {
		return m.F_Int64Repeated
	}
	return nil
}

func (m *GoTest) GetF_Fixed32Repeated() []uint32 {
	if m != nil {
		return m.F_Fixed32Repeated
	}
	return nil
}

func (m *GoTest) GetF_Fixed64Repeated() []uint64 {
	if m != nil {
		return m.F_Fixed64Repeated
	}
	return nil
}

func (m *GoTest) GetF_Uint32Repeated() []uint32 {
	if m != nil {
		return m.F_Uint32Repeated
	}
	return nil
}

func (m *GoTest) GetF_Uint64Repeated() []uint64 {
	if m != nil {
		return m.F_Uint64Repeated
	}
	return nil
}

func (m *GoTest) GetF_FloatRepeated() []float32 {
	if m != nil {
		return m.F_FloatRepeated
	}
	return nil
}

func (m *GoTest) GetF_DoubleRepeated() []float64 {
	if m != nil {
		return m.F_DoubleRepeated
	}
	return nil
}

func (m *GoTest) GetF_StringRepeated() []string {
	if m != nil {
		return m.F_StringRepeated
	}
	return nil
}

func (m *GoTest) GetF_BytesRepeated() [][]byte {
	if m != nil {
		return m.F_BytesRepeated
	}
	return nil
}

func (m *GoTest) GetF_Sint32Repeated() []int32 {
	if m != nil {
		return m.F_Sint32Repeated
	}
	return nil
}

func (m *GoTest) GetF_Sint64Repeated() []int64 {
	if m != nil {
		return m.F_Sint64Repeated
	}
	return nil
}

func (m *GoTest) GetF_Sfixed32Repeated() []int32 {
	if m != nil {
		return m.F_Sfixed32Repeated
	}
	return nil
}

func (m *GoTest) GetF_Sfixed64Repeated() []int64 {
	if m != nil {
		return m.F_Sfixed64Repeated
	}
	return nil
}

func (m *GoTest) GetF_BoolOptional() bool {
	if m != nil && m.F_BoolOptional != nil {
		return *m.F_BoolOptional
	}
	return false
}

func (m *GoTest) GetF_Int32Optional() int32 {
	if m != nil && m.F_Int32Optional != nil {
		return *m.F_Int32Optional
	}
	return 0
}

func (m *GoTest) GetF_Int64Optional() int64 {
	if m != nil && m.F_Int64Optional != nil {
		return *m.F_Int64Optional
	}
	return 0
}

func (m *GoTest) GetF_Fixed32Optional() uint32 {
	if m != nil && m.F_Fixed32Optional != nil {
		return *m.F_Fixed32Optional
	}
	return 0
}

func (m *GoTest) GetF_Fixed64Optional() uint64 {
	if m != nil && m.F_Fixed64Optional != nil {
		return *m.F_Fixed64Optional
	}
	return 0
}

func (m *GoTest) GetF_Uint32Optional() uint32 {
	if m != nil && m.F_Uint32Optional != nil {
		return *m.F_Uint32Optional
	}
	return 0
}

func (m *GoTest) GetF_Uint64Optional() uint64 {
	if m != nil && m.F_Uint64Optional != nil {
		return *m.F_Uint64Optional
	}
	return 0
}

func (m *GoTest) GetF_FloatOptional() float32 {
	if m != nil && m.F_FloatOptional != nil {
		return *m.F_FloatOptional
	}
	return 0
}

func (m *GoTest) GetF_DoubleOptional() float64 {
	if m != nil && m.F_DoubleOptional != nil {
		return *m.F_DoubleOptional
	}
	return 0
}

func (m *GoTest) GetF_StringOptional() string {
	if m != nil && m.F_StringOptional != nil {
		return *m.F_StringOptional
	}
	return ""
}

func (m *GoTest) GetF_BytesOptional() []byte {
	if m != nil {
		return m.F_BytesOptional
	}
	return nil
}

func (m *GoTest) GetF_Sint32Optional() int32 {
	if m != nil && m.F_Sint32Optional != nil {
		return *m.F_Sint32Optional
	}
	return 0
}

func (m *GoTest) GetF_Sint64Optional() int64 {
	if m != nil && m.F_Sint64Optional != nil {
		return *m.F_Sint64Optional
	}
	return 0
}

func (m *GoTest) GetF_Sfixed32Optional() int32 {
	if m != nil && m.F_Sfixed32Optional != nil {
		return *m.F_Sfixed32Optional
	}
	return 0
}

func (m *GoTest) GetF_Sfixed64Optional() int64 {
	if m != nil && m.F_Sfixed64Optional != nil {
		return *m.F_Sfixed64Optional
	}
	return 0
}

func (m *GoTest) GetF_BoolDefaulted() bool {
	if m != nil && m.F_BoolDefaulted != nil {
		return *m.F_BoolDefaulted
	}
	return Default_GoTest_F_BoolDefaulted
}

func (m *GoTest) GetF_Int32Defaulted() int32 {
	if m != nil && m.F_Int32Defaulted != nil {
		return *m.F_Int32Defaulted
	}
	return Default_GoTest_F_Int32Defaulted
}

func (m *GoTest) GetF_Int64Defaulted() int64 {
	if m != nil && m.F_Int64Defaulted != nil {
		return *m.F_Int64Defaulted
	}
	return Default_GoTest_F_Int64Defaulted
}

func (m *GoTest) GetF_Fixed32Defaulted() uint32 {
	if m != nil && m.F_Fixed32Defaulted != nil {
		return *m.F_Fixed32Defaulted
	}
	return Default_GoTest_F_Fixed32Defaulted
}

func (m *GoTest) GetF_Fixed64Defaulted() uint64 {
	if m != nil && m.F_Fixed64Defaulted != nil {
		return *m.F_Fixed64Defaulted
	}
	return Default_GoTest_F_Fixed64Defaulted
}

func (m *GoTest) GetF_Uint32Defaulted() uint32 {
	if m != nil && m.F_Uint32Defaulted != nil {
		return *m.F_Uint32Defaulted
	}
	return Default_GoTest_F_Uint32Defaulted
}

func (m *GoTest) GetF_Uint64Defaulted() uint64 {
	if m != nil && m.F_Uint64Defaulted != nil {
		return *m.F_Uint64Defaulted
	}
	return Default_GoTest_F_Uint64Defaulted
}

func (m *GoTest) GetF_FloatDefaulted() float32 {
	if m != nil && m.F_FloatDefaulted != nil {
		return *m.F_FloatDefaulted
	}
	return Default_GoTest_F_FloatDefaulted
}

func (m *GoTest) GetF_DoubleDefaulted() float64 {
	if m != nil && m.F_DoubleDefaulted != nil {
		return *m.F_DoubleDefaulted
	}
	return Default_GoTest_F_DoubleDefaulted
}

func (m *GoTest) GetF_StringDefaulted() string {
	if m != nil && m.F_StringDefaulted != nil {
		return *m.F_StringDefaulted
	}
	return Default_GoTest_F_StringDefaulted
}

func (m *GoTest) GetF_BytesDefaulted() []byte {
	if m != nil && m.F_BytesDefaulted != nil {
		return m.F_BytesDefaulted
	}
	return append([]byte(nil), Default_GoTest_F_BytesDefaulted...)
}

func (m *GoTest) GetF_Sint32Defaulted() int32 {
	if m != nil && m.F_Sint32Defaulted != nil {
		return *m.F_Sint32Defaulted
	}
	return Default_GoTest_F_Sint32Defaulted
}

func (m *GoTest) GetF_Sint64Defaulted() int64 {
	if m != nil && m.F_Sint64Defaulted != nil {
		return *m.F_Sint64Defaulted
	}
	return Default_GoTest_F_Sint64Defaulted
}

func (m *GoTest) GetF_Sfixed32Defaulted() int32 {
	if m != nil && m.F_Sfixed32Defaulted != nil {
		return *m.F_Sfixed32Defaulted
	}
	return Default_GoTest_F_Sfixed32Defaulted
}

func (m *GoTest) GetF_Sfixed64Defaulted() int64 {
	if m != nil && m.F_Sfixed64Defaulted != nil {
		return *m.F_Sfixed64Defaulted
	}
	return Default_GoTest_F_Sfixed64Defaulted
}

func (m *GoTest) GetF_BoolRepeatedPacked() []bool {
	if m != nil {
		return m.F_BoolRepeatedPacked
	}
	return nil
}

func (m *GoTest) GetF_Int32RepeatedPacked() []int32 {
	if m != nil {
		return m.F_Int32RepeatedPacked
	}
	return nil
}

func (m *GoTest) GetF_Int64RepeatedPacked() []int64 {
	if m != nil {
		return m.F_Int64RepeatedPacked
	}
	return nil
}

func (m *GoTest) GetF_Fixed32RepeatedPacked() []uint32 {
	if m != nil {
		return m.F_Fixed32RepeatedPacked
	}
	return nil
}

func (m *GoTest) GetF_Fixed64RepeatedPacked() []uint64 {
	if m != nil {
		return m.F_Fixed64RepeatedPacked
	}
	return nil
}

func (m *GoTest) GetF_Uint32RepeatedPacked() []uint32 {
	if m != nil {
		return m.F_Uint32RepeatedPacked
	}
	return nil
}

func (m *GoTest) GetF_Uint64RepeatedPacked() []uint64 {
	if m != nil {
		return m.F_Uint64RepeatedPacked
	}
	return nil
}

func (m *GoTest) GetF_FloatRepeatedPacked() []float32 {
	if m != nil {
		return m.F_FloatRepeatedPacked
	}
	return nil
}

func (m *GoTest) GetF_DoubleRepeatedPacked() []float64 {
	if m != nil {
		return m.F_DoubleRepeatedPacked
	}
	return nil
}

func (m *GoTest) GetF_Sint32RepeatedPacked() []int32 {
	if m != nil {
		return m.F_Sint32RepeatedPacked
	}
	return nil
}

func (m *GoTest) GetF_Sint64RepeatedPacked() []int64 {
	if m != nil {
		return m.F_Sint64RepeatedPacked
	}
	return nil
}

func (m *GoTest) GetF_Sfixed32RepeatedPacked() []int32 {
	if m != nil {
		return m.F_Sfixed32RepeatedPacked
	}
	return nil
}

func (m *GoTest) GetF_Sfixed64RepeatedPacked() []int64 {
	if m != nil {
		return m.F_Sfixed64RepeatedPacked
	}
	return nil
}

func (m *GoTest) GetRequiredgroup() *GoTest_RequiredGroup {
	if m != nil {
		return m.Requiredgroup
	}
	return nil
}

func (m *GoTest) GetRepeatedgroup() []*GoTest_RepeatedGroup {
	if m != nil {
		return m.Repeatedgroup
	}
	return nil
}

func (m *GoTest) GetOptionalgroup() *GoTest_OptionalGroup {
	if m != nil {
		return m.Optionalgroup
	}
	return nil
}

// Required, repeated, and optional groups.
type GoTest_RequiredGroup struct {
	RequiredField        *string  `protobuf:"bytes,71,req,name=RequiredField" json:"RequiredField,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *GoTest_RequiredGroup) Reset()                    { *m = GoTest_RequiredGroup{} }
func (m *GoTest_RequiredGroup) String() string            { return proto.CompactTextString(m) }
func (*GoTest_RequiredGroup) ProtoMessage()               {}
func (*GoTest_RequiredGroup) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} }
func (m *GoTest_RequiredGroup) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GoTest_RequiredGroup.Unmarshal(m, b)
}
func (m *GoTest_RequiredGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GoTest_RequiredGroup.Marshal(b, m, deterministic)
}
func (dst *GoTest_RequiredGroup) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GoTest_RequiredGroup.Merge(dst, src)
}
func (m *GoTest_RequiredGroup) XXX_Size() int {
	return xxx_messageInfo_GoTest_RequiredGroup.Size(m)
}
func (m *GoTest_RequiredGroup) XXX_DiscardUnknown() {
	xxx_messageInfo_GoTest_RequiredGroup.DiscardUnknown(m)
}

var xxx_messageInfo_GoTest_RequiredGroup proto.InternalMessageInfo

func (m *GoTest_RequiredGroup) GetRequiredField() string {
	if m != nil && m.RequiredField != nil {
		return *m.RequiredField
	}
	return ""
}

type GoTest_RepeatedGroup struct {
	RequiredField        *string  `protobuf:"bytes,81,req,name=RequiredField" json:"RequiredField,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *GoTest_RepeatedGroup) Reset()                    { *m = GoTest_RepeatedGroup{} }
func (m *GoTest_RepeatedGroup) String() string            { return proto.CompactTextString(m) }
func (*GoTest_RepeatedGroup) ProtoMessage()               {}
func (*GoTest_RepeatedGroup) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 1} }
func (m *GoTest_RepeatedGroup) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GoTest_RepeatedGroup.Unmarshal(m, b)
}
func (m *GoTest_RepeatedGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GoTest_RepeatedGroup.Marshal(b, m, deterministic)
}
func (dst *GoTest_RepeatedGroup) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GoTest_RepeatedGroup.Merge(dst, src)
}
func (m *GoTest_RepeatedGroup) XXX_Size() int {
	return xxx_messageInfo_GoTest_RepeatedGroup.Size(m)
}
func (m *GoTest_RepeatedGroup) XXX_DiscardUnknown() {
	xxx_messageInfo_GoTest_RepeatedGroup.DiscardUnknown(m)
}

var xxx_messageInfo_GoTest_RepeatedGroup proto.InternalMessageInfo

func (m *GoTest_RepeatedGroup) GetRequiredField() string {
	if m != nil && m.RequiredField != nil {
		return *m.RequiredField
	}
	return ""
}

type GoTest_OptionalGroup struct {
	RequiredField        *string  `protobuf:"bytes,91,req,name=RequiredField" json:"RequiredField,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *GoTest_OptionalGroup) Reset()                    { *m = GoTest_OptionalGroup{} }
func (m *GoTest_OptionalGroup) String() string            { return proto.CompactTextString(m) }
func (*GoTest_OptionalGroup) ProtoMessage()               {}
func (*GoTest_OptionalGroup) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 2} }
func (m *GoTest_OptionalGroup) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GoTest_OptionalGroup.Unmarshal(m, b)
}
func (m *GoTest_OptionalGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GoTest_OptionalGroup.Marshal(b, m, deterministic)
}
func (dst *GoTest_OptionalGroup) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GoTest_OptionalGroup.Merge(dst, src)
}
func (m *GoTest_OptionalGroup) XXX_Size() int {
	return xxx_messageInfo_GoTest_OptionalGroup.Size(m)
}
func (m *GoTest_OptionalGroup) XXX_DiscardUnknown() {
	xxx_messageInfo_GoTest_OptionalGroup.DiscardUnknown(m)
}

var xxx_messageInfo_GoTest_OptionalGroup proto.InternalMessageInfo

func (m *GoTest_OptionalGroup) GetRequiredField() string {
	if m != nil && m.RequiredField != nil {
		return *m.RequiredField
	}
	return ""
}

// For testing a group containing a required field.
type GoTestRequiredGroupField struct {
	Group                *GoTestRequiredGroupField_Group `protobuf:"group,1,req,name=Group,json=group" json:"group,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
	XXX_unrecognized     []byte                          `json:"-"`
	XXX_sizecache        int32                           `json:"-"`
}

func (m *GoTestRequiredGroupField) Reset()                    { *m = GoTestRequiredGroupField{} }
func (m *GoTestRequiredGroupField) String() string            { return proto.CompactTextString(m) }
func (*GoTestRequiredGroupField) ProtoMessage()               {}
func (*GoTestRequiredGroupField) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
func (m *GoTestRequiredGroupField) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GoTestRequiredGroupField.Unmarshal(m, b)
}
func (m *GoTestRequiredGroupField) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GoTestRequiredGroupField.Marshal(b, m, deterministic)
}
func (dst *GoTestRequiredGroupField) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GoTestRequiredGroupField.Merge(dst, src)
}
func (m *GoTestRequiredGroupField) XXX_Size() int {
	return xxx_messageInfo_GoTestRequiredGroupField.Size(m)
}
func (m *GoTestRequiredGroupField) XXX_DiscardUnknown() {
	xxx_messageInfo_GoTestRequiredGroupField.DiscardUnknown(m)
}

var xxx_messageInfo_GoTestRequiredGroupField proto.InternalMessageInfo

func (m *GoTestRequiredGroupField) GetGroup() *GoTestRequiredGroupField_Group {
	if m != nil {
		return m.Group
	}
	return nil
}

type GoTestRequiredGroupField_Group struct {
	Field                *int32   `protobuf:"varint,2,req,name=Field" json:"Field,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *GoTestRequiredGroupField_Group) Reset()         { *m = GoTestRequiredGroupField_Group{} }
func (m *GoTestRequiredGroupField_Group) String() string { return proto.CompactTextString(m) }
func (*GoTestRequiredGroupField_Group) ProtoMessage()    {}
func (*GoTestRequiredGroupField_Group) Descriptor() ([]byte, []int) {
	return fileDescriptor0, []int{3, 0}
}
func (m *GoTestRequiredGroupField_Group) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GoTestRequiredGroupField_Group.Unmarshal(m, b)
}
func (m *GoTestRequiredGroupField_Group) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GoTestRequiredGroupField_Group.Marshal(b, m, deterministic)
}
func (dst *GoTestRequiredGroupField_Group) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GoTestRequiredGroupField_Group.Merge(dst, src)
}
func (m *GoTestRequiredGroupField_Group) XXX_Size() int {
	return xxx_messageInfo_GoTestRequiredGroupField_Group.Size(m)
}
func (m *GoTestRequiredGroupField_Group) XXX_DiscardUnknown() {
	xxx_messageInfo_GoTestRequiredGroupField_Group.DiscardUnknown(m)
}

var xxx_messageInfo_GoTestRequiredGroupField_Group proto.InternalMessageInfo

func (m *GoTestRequiredGroupField_Group) GetField() int32 {
	if m != nil && m.Field != nil {
		return *m.Field
	}
	return 0
}

// For testing skipping of unrecognized fields.
// Numbers are all big, larger than tag numbers in GoTestField,
// the message used in the corresponding test.
type GoSkipTest struct {
	SkipInt32            *int32                `protobuf:"varint,11,req,name=skip_int32,json=skipInt32" json:"skip_int32,omitempty"`
	SkipFixed32          *uint32               `protobuf:"fixed32,12,req,name=skip_fixed32,json=skipFixed32" json:"skip_fixed32,omitempty"`
	SkipFixed64          *uint64               `protobuf:"fixed64,13,req,name=skip_fixed64,json=skipFixed64" json:"skip_fixed64,omitempty"`
	SkipString           *string               `protobuf:"bytes,14,req,name=skip_string,json=skipString" json:"skip_string,omitempty"`
	Skipgroup            *GoSkipTest_SkipGroup `protobuf:"group,15,req,name=SkipGroup,json=skipgroup" json:"skipgroup,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *GoSkipTest) Reset()                    { *m = GoSkipTest{} }
func (m *GoSkipTest) String() string            { return proto.CompactTextString(m) }
func (*GoSkipTest) ProtoMessage()               {}
func (*GoSkipTest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
func (m *GoSkipTest) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GoSkipTest.Unmarshal(m, b)
}
func (m *GoSkipTest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GoSkipTest.Marshal(b, m, deterministic)
}
func (dst *GoSkipTest) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GoSkipTest.Merge(dst, src)
}
func (m *GoSkipTest) XXX_Size() int {
	return xxx_messageInfo_GoSkipTest.Size(m)
}
func (m *GoSkipTest) XXX_DiscardUnknown() {
	xxx_messageInfo_GoSkipTest.DiscardUnknown(m)
}

var xxx_messageInfo_GoSkipTest proto.InternalMessageInfo

func (m *GoSkipTest) GetSkipInt32() int32 {
	if m != nil && m.SkipInt32 != nil {
		return *m.SkipInt32
	}
	return 0
}

func (m *GoSkipTest) GetSkipFixed32() uint32 {
	if m != nil && m.SkipFixed32 != nil {
		return *m.SkipFixed32
	}
	return 0
}

func (m *GoSkipTest) GetSkipFixed64() uint64 {
	if m != nil && m.SkipFixed64 != nil {
		return *m.SkipFixed64
	}
	return 0
}

func (m *GoSkipTest) GetSkipString() string {
	if m != nil && m.SkipString != nil {
		return *m.SkipString
	}
	return ""
}

func (m *GoSkipTest) GetSkipgroup() *GoSkipTest_SkipGroup {
	if m != nil {
		return m.Skipgroup
	}
	return nil
}

type GoSkipTest_SkipGroup struct {
	GroupInt32           *int32   `protobuf:"varint,16,req,name=group_int32,json=groupInt32" json:"group_int32,omitempty"`
	GroupString          *string  `protobuf:"bytes,17,req,name=group_string,json=groupString" json:"group_string,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *GoSkipTest_SkipGroup) Reset()                    { *m = GoSkipTest_SkipGroup{} }
func (m *GoSkipTest_SkipGroup) String() string            { return proto.CompactTextString(m) }
func (*GoSkipTest_SkipGroup) ProtoMessage()               {}
func (*GoSkipTest_SkipGroup) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4, 0} }
func (m *GoSkipTest_SkipGroup) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GoSkipTest_SkipGroup.Unmarshal(m, b)
}
func (m *GoSkipTest_SkipGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GoSkipTest_SkipGroup.Marshal(b, m, deterministic)
}
func (dst *GoSkipTest_SkipGroup) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GoSkipTest_SkipGroup.Merge(dst, src)
}
func (m *GoSkipTest_SkipGroup) XXX_Size() int {
	return xxx_messageInfo_GoSkipTest_SkipGroup.Size(m)
}
func (m *GoSkipTest_SkipGroup) XXX_DiscardUnknown() {
	xxx_messageInfo_GoSkipTest_SkipGroup.DiscardUnknown(m)
}

var xxx_messageInfo_GoSkipTest_SkipGroup proto.InternalMessageInfo

func (m *GoSkipTest_SkipGroup) GetGroupInt32() int32 {
	if m != nil && m.GroupInt32 != nil {
		return *m.GroupInt32
	}
	return 0
}

func (m *GoSkipTest_SkipGroup) GetGroupString() string {
	if m != nil && m.GroupString != nil {
		return *m.GroupString
	}
	return ""
}

// For testing packed/non-packed decoder switching.
// A serialized instance of one should be deserializable as the other.
type NonPackedTest struct {
	A                    []int32  `protobuf:"varint,1,rep,name=a" json:"a,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *NonPackedTest) Reset()                    { *m = NonPackedTest{} }
func (m *NonPackedTest) String() string            { return proto.CompactTextString(m) }
func (*NonPackedTest) ProtoMessage()               {}
func (*NonPackedTest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
func (m *NonPackedTest) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_NonPackedTest.Unmarshal(m, b)
}
func (m *NonPackedTest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_NonPackedTest.Marshal(b, m, deterministic)
}
func (dst *NonPackedTest) XXX_Merge(src proto.Message) {
	xxx_messageInfo_NonPackedTest.Merge(dst, src)
}
func (m *NonPackedTest) XXX_Size() int {
	return xxx_messageInfo_NonPackedTest.Size(m)
}
func (m *NonPackedTest) XXX_DiscardUnknown() {
	xxx_messageInfo_NonPackedTest.DiscardUnknown(m)
}

var xxx_messageInfo_NonPackedTest proto.InternalMessageInfo

func (m *NonPackedTest) GetA() []int32 {
	if m != nil {
		return m.A
	}
	return nil
}

type PackedTest struct {
	B                    []int32  `protobuf:"varint,1,rep,packed,name=b" json:"b,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *PackedTest) Reset()                    { *m = PackedTest{} }
func (m *PackedTest) String() string            { return proto.CompactTextString(m) }
func (*PackedTest) ProtoMessage()               {}
func (*PackedTest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
func (m *PackedTest) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_PackedTest.Unmarshal(m, b)
}
func (m *PackedTest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_PackedTest.Marshal(b, m, deterministic)
}
func (dst *PackedTest) XXX_Merge(src proto.Message) {
	xxx_messageInfo_PackedTest.Merge(dst, src)
}
func (m *PackedTest) XXX_Size() int {
	return xxx_messageInfo_PackedTest.Size(m)
}
func (m *PackedTest) XXX_DiscardUnknown() {
	xxx_messageInfo_PackedTest.DiscardUnknown(m)
}

var xxx_messageInfo_PackedTest proto.InternalMessageInfo

func (m *PackedTest) GetB() []int32 {
	if m != nil {
		return m.B
	}
	return nil
}

type MaxTag struct {
	// Maximum possible tag number.
	LastField            *string  `protobuf:"bytes,536870911,opt,name=last_field,json=lastField" json:"last_field,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *MaxTag) Reset()                    { *m = MaxTag{} }
func (m *MaxTag) String() string            { return proto.CompactTextString(m) }
func (*MaxTag) ProtoMessage()               {}
func (*MaxTag) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
func (m *MaxTag) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_MaxTag.Unmarshal(m, b)
}
func (m *MaxTag) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_MaxTag.Marshal(b, m, deterministic)
}
func (dst *MaxTag) XXX_Merge(src proto.Message) {
	xxx_messageInfo_MaxTag.Merge(dst, src)
}
func (m *MaxTag) XXX_Size() int {
	return xxx_messageInfo_MaxTag.Size(m)
}
func (m *MaxTag) XXX_DiscardUnknown() {
	xxx_messageInfo_MaxTag.DiscardUnknown(m)
}

var xxx_messageInfo_MaxTag proto.InternalMessageInfo

func (m *MaxTag) GetLastField() string {
	if m != nil && m.LastField != nil {
		return *m.LastField
	}
	return ""
}

type OldMessage struct {
	Nested               *OldMessage_Nested `protobuf:"bytes,1,opt,name=nested" json:"nested,omitempty"`
	Num                  *int32             `protobuf:"varint,2,opt,name=num" json:"num,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *OldMessage) Reset()                    { *m = OldMessage{} }
func (m *OldMessage) String() string            { return proto.CompactTextString(m) }
func (*OldMessage) ProtoMessage()               {}
func (*OldMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
func (m *OldMessage) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_OldMessage.Unmarshal(m, b)
}
func (m *OldMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_OldMessage.Marshal(b, m, deterministic)
}
func (dst *OldMessage) XXX_Merge(src proto.Message) {
	xxx_messageInfo_OldMessage.Merge(dst, src)
}
func (m *OldMessage) XXX_Size() int {
	return xxx_messageInfo_OldMessage.Size(m)
}
func (m *OldMessage) XXX_DiscardUnknown() {
	xxx_messageInfo_OldMessage.DiscardUnknown(m)
}

var xxx_messageInfo_OldMessage proto.InternalMessageInfo

func (m *OldMessage) GetNested() *OldMessage_Nested {
	if m != nil {
		return m.Nested
	}
	return nil
}

func (m *OldMessage) GetNum() int32 {
	if m != nil && m.Num != nil {
		return *m.Num
	}
	return 0
}

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

func (m *OldMessage_Nested) Reset()                    { *m = OldMessage_Nested{} }
func (m *OldMessage_Nested) String() string            { return proto.CompactTextString(m) }
func (*OldMessage_Nested) ProtoMessage()               {}
func (*OldMessage_Nested) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8, 0} }
func (m *OldMessage_Nested) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_OldMessage_Nested.Unmarshal(m, b)
}
func (m *OldMessage_Nested) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_OldMessage_Nested.Marshal(b, m, deterministic)
}
func (dst *OldMessage_Nested) XXX_Merge(src proto.Message) {
	xxx_messageInfo_OldMessage_Nested.Merge(dst, src)
}
func (m *OldMessage_Nested) XXX_Size() int {
	return xxx_messageInfo_OldMessage_Nested.Size(m)
}
func (m *OldMessage_Nested) XXX_DiscardUnknown() {
	xxx_messageInfo_OldMessage_Nested.DiscardUnknown(m)
}

var xxx_messageInfo_OldMessage_Nested proto.InternalMessageInfo

func (m *OldMessage_Nested) GetName() string {
	if m != nil && m.Name != nil {
		return *m.Name
	}
	return ""
}

// NewMessage is wire compatible with OldMessage;
// imagine it as a future version.
type NewMessage struct {
	Nested *NewMessage_Nested `protobuf:"bytes,1,opt,name=nested" json:"nested,omitempty"`
	// This is an int32 in OldMessage.
	Num                  *int64   `protobuf:"varint,2,opt,name=num" json:"num,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *NewMessage) Reset()                    { *m = NewMessage{} }
func (m *NewMessage) String() string            { return proto.CompactTextString(m) }
func (*NewMessage) ProtoMessage()               {}
func (*NewMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
func (m *NewMessage) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_NewMessage.Unmarshal(m, b)
}
func (m *NewMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_NewMessage.Marshal(b, m, deterministic)
}
func (dst *NewMessage) XXX_Merge(src proto.Message) {
	xxx_messageInfo_NewMessage.Merge(dst, src)
}
func (m *NewMessage) XXX_Size() int {
	return xxx_messageInfo_NewMessage.Size(m)
}
func (m *NewMessage) XXX_DiscardUnknown() {
	xxx_messageInfo_NewMessage.DiscardUnknown(m)
}

var xxx_messageInfo_NewMessage proto.InternalMessageInfo

func (m *NewMessage) GetNested() *NewMessage_Nested {
	if m != nil {
		return m.Nested
	}
	return nil
}

func (m *NewMessage) GetNum() int64 {
	if m != nil && m.Num != nil {
		return *m.Num
	}
	return 0
}

type NewMessage_Nested struct {
	Name                 *string  `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
	FoodGroup            *string  `protobuf:"bytes,2,opt,name=food_group,json=foodGroup" json:"food_group,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *NewMessage_Nested) Reset()                    { *m = NewMessage_Nested{} }
func (m *NewMessage_Nested) String() string            { return proto.CompactTextString(m) }
func (*NewMessage_Nested) ProtoMessage()               {}
func (*NewMessage_Nested) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9, 0} }
func (m *NewMessage_Nested) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_NewMessage_Nested.Unmarshal(m, b)
}
func (m *NewMessage_Nested) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_NewMessage_Nested.Marshal(b, m, deterministic)
}
func (dst *NewMessage_Nested) XXX_Merge(src proto.Message) {
	xxx_messageInfo_NewMessage_Nested.Merge(dst, src)
}
func (m *NewMessage_Nested) XXX_Size() int {
	return xxx_messageInfo_NewMessage_Nested.Size(m)
}
func (m *NewMessage_Nested) XXX_DiscardUnknown() {
	xxx_messageInfo_NewMessage_Nested.DiscardUnknown(m)
}

var xxx_messageInfo_NewMessage_Nested proto.InternalMessageInfo

func (m *NewMessage_Nested) GetName() string {
	if m != nil && m.Name != nil {
		return *m.Name
	}
	return ""
}

func (m *NewMessage_Nested) GetFoodGroup() string {
	if m != nil && m.FoodGroup != nil {
		return *m.FoodGroup
	}
	return ""
}

type InnerMessage struct {
	Host                 *string  `protobuf:"bytes,1,req,name=host" json:"host,omitempty"`
	Port                 *int32   `protobuf:"varint,2,opt,name=port,def=4000" json:"port,omitempty"`
	Connected            *bool    `protobuf:"varint,3,opt,name=connected" json:"connected,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *InnerMessage) Reset()                    { *m = InnerMessage{} }
func (m *InnerMessage) String() string            { return proto.CompactTextString(m) }
func (*InnerMessage) ProtoMessage()               {}
func (*InnerMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
func (m *InnerMessage) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_InnerMessage.Unmarshal(m, b)
}
func (m *InnerMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_InnerMessage.Marshal(b, m, deterministic)
}
func (dst *InnerMessage) XXX_Merge(src proto.Message) {
	xxx_messageInfo_InnerMessage.Merge(dst, src)
}
func (m *InnerMessage) XXX_Size() int {
	return xxx_messageInfo_InnerMessage.Size(m)
}
func (m *InnerMessage) XXX_DiscardUnknown() {
	xxx_messageInfo_InnerMessage.DiscardUnknown(m)
}

var xxx_messageInfo_InnerMessage proto.InternalMessageInfo

const Default_InnerMessage_Port int32 = 4000

func (m *InnerMessage) GetHost() string {
	if m != nil && m.Host != nil {
		return *m.Host
	}
	return ""
}

func (m *InnerMessage) GetPort() int32 {
	if m != nil && m.Port != nil {
		return *m.Port
	}
	return Default_InnerMessage_Port
}

func (m *InnerMessage) GetConnected() bool {
	if m != nil && m.Connected != nil {
		return *m.Connected
	}
	return false
}

type OtherMessage struct {
	Key                          *int64        `protobuf:"varint,1,opt,name=key" json:"key,omitempty"`
	Value                        []byte        `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"`
	Weight                       *float32      `protobuf:"fixed32,3,opt,name=weight" json:"weight,omitempty"`
	Inner                        *InnerMessage `protobuf:"bytes,4,opt,name=inner" json:"inner,omitempty"`
	XXX_NoUnkeyedLiteral         struct{}      `json:"-"`
	proto.XXX_InternalExtensions `json:"-"`
	XXX_unrecognized             []byte `json:"-"`
	XXX_sizecache                int32  `json:"-"`
}

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

var extRange_OtherMessage = []proto.ExtensionRange{
	{100, 536870911},
}

func (*OtherMessage) ExtensionRangeArray() []proto.ExtensionRange {
	return extRange_OtherMessage
}
func (m *OtherMessage) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_OtherMessage.Unmarshal(m, b)
}
func (m *OtherMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_OtherMessage.Marshal(b, m, deterministic)
}
func (dst *OtherMessage) XXX_Merge(src proto.Message) {
	xxx_messageInfo_OtherMessage.Merge(dst, src)
}
func (m *OtherMessage) XXX_Size() int {
	return xxx_messageInfo_OtherMessage.Size(m)
}
func (m *OtherMessage) XXX_DiscardUnknown() {
	xxx_messageInfo_OtherMessage.DiscardUnknown(m)
}

var xxx_messageInfo_OtherMessage proto.InternalMessageInfo

func (m *OtherMessage) GetKey() int64 {
	if m != nil && m.Key != nil {
		return *m.Key
	}
	return 0
}

func (m *OtherMessage) GetValue() []byte {
	if m != nil {
		return m.Value
	}
	return nil
}

func (m *OtherMessage) GetWeight() float32 {
	if m != nil && m.Weight != nil {
		return *m.Weight
	}
	return 0
}

func (m *OtherMessage) GetInner() *InnerMessage {
	if m != nil {
		return m.Inner
	}
	return nil
}

type RequiredInnerMessage struct {
	LeoFinallyWonAnOscar *InnerMessage `protobuf:"bytes,1,req,name=leo_finally_won_an_oscar,json=leoFinallyWonAnOscar" json:"leo_finally_won_an_oscar,omitempty"`
	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
	XXX_unrecognized     []byte        `json:"-"`
	XXX_sizecache        int32         `json:"-"`
}

func (m *RequiredInnerMessage) Reset()                    { *m = RequiredInnerMessage{} }
func (m *RequiredInnerMessage) String() string            { return proto.CompactTextString(m) }
func (*RequiredInnerMessage) ProtoMessage()               {}
func (*RequiredInnerMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
func (m *RequiredInnerMessage) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RequiredInnerMessage.Unmarshal(m, b)
}
func (m *RequiredInnerMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RequiredInnerMessage.Marshal(b, m, deterministic)
}
func (dst *RequiredInnerMessage) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RequiredInnerMessage.Merge(dst, src)
}
func (m *RequiredInnerMessage) XXX_Size() int {
	return xxx_messageInfo_RequiredInnerMessage.Size(m)
}
func (m *RequiredInnerMessage) XXX_DiscardUnknown() {
	xxx_messageInfo_RequiredInnerMessage.DiscardUnknown(m)
}

var xxx_messageInfo_RequiredInnerMessage proto.InternalMessageInfo

func (m *RequiredInnerMessage) GetLeoFinallyWonAnOscar() *InnerMessage {
	if m != nil {
		return m.LeoFinallyWonAnOscar
	}
	return nil
}

type MyMessage struct {
	Count          *int32                `protobuf:"varint,1,req,name=count" json:"count,omitempty"`
	Name           *string               `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"`
	Quote          *string               `protobuf:"bytes,3,opt,name=quote" json:"quote,omitempty"`
	Pet            []string              `protobuf:"bytes,4,rep,name=pet" json:"pet,omitempty"`
	Inner          *InnerMessage         `protobuf:"bytes,5,opt,name=inner" json:"inner,omitempty"`
	Others         []*OtherMessage       `protobuf:"bytes,6,rep,name=others" json:"others,omitempty"`
	WeMustGoDeeper *RequiredInnerMessage `protobuf:"bytes,13,opt,name=we_must_go_deeper,json=weMustGoDeeper" json:"we_must_go_deeper,omitempty"`
	RepInner       []*InnerMessage       `protobuf:"bytes,12,rep,name=rep_inner,json=repInner" json:"rep_inner,omitempty"`
	Bikeshed       *MyMessage_Color      `protobuf:"varint,7,opt,name=bikeshed,enum=test_proto.MyMessage_Color" json:"bikeshed,omitempty"`
	Somegroup      *MyMessage_SomeGroup  `protobuf:"group,8,opt,name=SomeGroup,json=somegroup" json:"somegroup,omitempty"`
	// This field becomes [][]byte in the generated code.
	RepBytes                     [][]byte `protobuf:"bytes,10,rep,name=rep_bytes,json=repBytes" json:"rep_bytes,omitempty"`
	Bigfloat                     *float64 `protobuf:"fixed64,11,opt,name=bigfloat" json:"bigfloat,omitempty"`
	XXX_NoUnkeyedLiteral         struct{} `json:"-"`
	proto.XXX_InternalExtensions `json:"-"`
	XXX_unrecognized             []byte `json:"-"`
	XXX_sizecache                int32  `json:"-"`
}

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

var extRange_MyMessage = []proto.ExtensionRange{
	{100, 536870911},
}

func (*MyMessage) ExtensionRangeArray() []proto.ExtensionRange {
	return extRange_MyMessage
}
func (m *MyMessage) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_MyMessage.Unmarshal(m, b)
}
func (m *MyMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_MyMessage.Marshal(b, m, deterministic)
}
func (dst *MyMessage) XXX_Merge(src proto.Message) {
	xxx_messageInfo_MyMessage.Merge(dst, src)
}
func (m *MyMessage) XXX_Size() int {
	return xxx_messageInfo_MyMessage.Size(m)
}
func (m *MyMessage) XXX_DiscardUnknown() {
	xxx_messageInfo_MyMessage.DiscardUnknown(m)
}

var xxx_messageInfo_MyMessage proto.InternalMessageInfo

func (m *MyMessage) GetCount() int32 {
	if m != nil && m.Count != nil {
		return *m.Count
	}
	return 0
}

func (m *MyMessage) GetName() string {
	if m != nil && m.Name != nil {
		return *m.Name
	}
	return ""
}

func (m *MyMessage) GetQuote() string {
	if m != nil && m.Quote != nil {
		return *m.Quote
	}
	return ""
}

func (m *MyMessage) GetPet() []string {
	if m != nil {
		return m.Pet
	}
	return nil
}

func (m *MyMessage) GetInner() *InnerMessage {
	if m != nil {
		return m.Inner
	}
	return nil
}

func (m *MyMessage) GetOthers() []*OtherMessage {
	if m != nil {
		return m.Others
	}
	return nil
}

func (m *MyMessage) GetWeMustGoDeeper() *RequiredInnerMessage {
	if m != nil {
		return m.WeMustGoDeeper
	}
	return nil
}

func (m *MyMessage) GetRepInner() []*InnerMessage {
	if m != nil {
		return m.RepInner
	}
	return nil
}

func (m *MyMessage) GetBikeshed() MyMessage_Color {
	if m != nil && m.Bikeshed != nil {
		return *m.Bikeshed
	}
	return MyMessage_RED
}

func (m *MyMessage) GetSomegroup() *MyMessage_SomeGroup {
	if m != nil {
		return m.Somegroup
	}
	return nil
}

func (m *MyMessage) GetRepBytes() [][]byte {
	if m != nil {
		return m.RepBytes
	}
	return nil
}

func (m *MyMessage) GetBigfloat() float64 {
	if m != nil && m.Bigfloat != nil {
		return *m.Bigfloat
	}
	return 0
}

type MyMessage_SomeGroup struct {
	GroupField           *int32   `protobuf:"varint,9,opt,name=group_field,json=groupField" json:"group_field,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *MyMessage_SomeGroup) Reset()                    { *m = MyMessage_SomeGroup{} }
func (m *MyMessage_SomeGroup) String() string            { return proto.CompactTextString(m) }
func (*MyMessage_SomeGroup) ProtoMessage()               {}
func (*MyMessage_SomeGroup) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13, 0} }
func (m *MyMessage_SomeGroup) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_MyMessage_SomeGroup.Unmarshal(m, b)
}
func (m *MyMessage_SomeGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_MyMessage_SomeGroup.Marshal(b, m, deterministic)
}
func (dst *MyMessage_SomeGroup) XXX_Merge(src proto.Message) {
	xxx_messageInfo_MyMessage_SomeGroup.Merge(dst, src)
}
func (m *MyMessage_SomeGroup) XXX_Size() int {
	return xxx_messageInfo_MyMessage_SomeGroup.Size(m)
}
func (m *MyMessage_SomeGroup) XXX_DiscardUnknown() {
	xxx_messageInfo_MyMessage_SomeGroup.DiscardUnknown(m)
}

var xxx_messageInfo_MyMessage_SomeGroup proto.InternalMessageInfo

func (m *MyMessage_SomeGroup) GetGroupField() int32 {
	if m != nil && m.GroupField != nil {
		return *m.GroupField
	}
	return 0
}

type Ext struct {
	Data                 *string         `protobuf:"bytes,1,opt,name=data" json:"data,omitempty"`
	MapField             map[int32]int32 `protobuf:"bytes,2,rep,name=map_field,json=mapField" json:"map_field,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
	XXX_unrecognized     []byte          `json:"-"`
	XXX_sizecache        int32           `json:"-"`
}

func (m *Ext) Reset()                    { *m = Ext{} }
func (m *Ext) String() string            { return proto.CompactTextString(m) }
func (*Ext) ProtoMessage()               {}
func (*Ext) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }
func (m *Ext) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Ext.Unmarshal(m, b)
}
func (m *Ext) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Ext.Marshal(b, m, deterministic)
}
func (dst *Ext) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Ext.Merge(dst, src)
}
func (m *Ext) XXX_Size() int {
	return xxx_messageInfo_Ext.Size(m)
}
func (m *Ext) XXX_DiscardUnknown() {
	xxx_messageInfo_Ext.DiscardUnknown(m)
}

var xxx_messageInfo_Ext proto.InternalMessageInfo

func (m *Ext) GetData() string {
	if m != nil && m.Data != nil {
		return *m.Data
	}
	return ""
}

func (m *Ext) GetMapField() map[int32]int32 {
	if m != nil {
		return m.MapField
	}
	return nil
}

var E_Ext_More = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessage)(nil),
	ExtensionType: (*Ext)(nil),
	Field:         103,
	Name:          "test_proto.Ext.more",
	Tag:           "bytes,103,opt,name=more",
	Filename:      "test.proto",
}

var E_Ext_Text = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessage)(nil),
	ExtensionType: (*string)(nil),
	Field:         104,
	Name:          "test_proto.Ext.text",
	Tag:           "bytes,104,opt,name=text",
	Filename:      "test.proto",
}

var E_Ext_Number = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessage)(nil),
	ExtensionType: (*int32)(nil),
	Field:         105,
	Name:          "test_proto.Ext.number",
	Tag:           "varint,105,opt,name=number",
	Filename:      "test.proto",
}

type ComplexExtension struct {
	First                *int32   `protobuf:"varint,1,opt,name=first" json:"first,omitempty"`
	Second               *int32   `protobuf:"varint,2,opt,name=second" json:"second,omitempty"`
	Third                []int32  `protobuf:"varint,3,rep,name=third" json:"third,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *ComplexExtension) Reset()                    { *m = ComplexExtension{} }
func (m *ComplexExtension) String() string            { return proto.CompactTextString(m) }
func (*ComplexExtension) ProtoMessage()               {}
func (*ComplexExtension) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} }
func (m *ComplexExtension) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ComplexExtension.Unmarshal(m, b)
}
func (m *ComplexExtension) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ComplexExtension.Marshal(b, m, deterministic)
}
func (dst *ComplexExtension) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ComplexExtension.Merge(dst, src)
}
func (m *ComplexExtension) XXX_Size() int {
	return xxx_messageInfo_ComplexExtension.Size(m)
}
func (m *ComplexExtension) XXX_DiscardUnknown() {
	xxx_messageInfo_ComplexExtension.DiscardUnknown(m)
}

var xxx_messageInfo_ComplexExtension proto.InternalMessageInfo

func (m *ComplexExtension) GetFirst() int32 {
	if m != nil && m.First != nil {
		return *m.First
	}
	return 0
}

func (m *ComplexExtension) GetSecond() int32 {
	if m != nil && m.Second != nil {
		return *m.Second
	}
	return 0
}

func (m *ComplexExtension) GetThird() []int32 {
	if m != nil {
		return m.Third
	}
	return nil
}

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

func (m *DefaultsMessage) Reset()                    { *m = DefaultsMessage{} }
func (m *DefaultsMessage) String() string            { return proto.CompactTextString(m) }
func (*DefaultsMessage) ProtoMessage()               {}
func (*DefaultsMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} }

var extRange_DefaultsMessage = []proto.ExtensionRange{
	{100, 536870911},
}

func (*DefaultsMessage) ExtensionRangeArray() []proto.ExtensionRange {
	return extRange_DefaultsMessage
}
func (m *DefaultsMessage) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_DefaultsMessage.Unmarshal(m, b)
}
func (m *DefaultsMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_DefaultsMessage.Marshal(b, m, deterministic)
}
func (dst *DefaultsMessage) XXX_Merge(src proto.Message) {
	xxx_messageInfo_DefaultsMessage.Merge(dst, src)
}
func (m *DefaultsMessage) XXX_Size() int {
	return xxx_messageInfo_DefaultsMessage.Size(m)
}
func (m *DefaultsMessage) XXX_DiscardUnknown() {
	xxx_messageInfo_DefaultsMessage.DiscardUnknown(m)
}

var xxx_messageInfo_DefaultsMessage proto.InternalMessageInfo

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

func (m *MyMessageSet) Reset()                    { *m = MyMessageSet{} }
func (m *MyMessageSet) String() string            { return proto.CompactTextString(m) }
func (*MyMessageSet) ProtoMessage()               {}
func (*MyMessageSet) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} }

func (m *MyMessageSet) MarshalJSON() ([]byte, error) {
	return proto.MarshalMessageSetJSON(&m.XXX_InternalExtensions)
}
func (m *MyMessageSet) UnmarshalJSON(buf []byte) error {
	return proto.UnmarshalMessageSetJSON(buf, &m.XXX_InternalExtensions)
}

var extRange_MyMessageSet = []proto.ExtensionRange{
	{100, 2147483646},
}

func (*MyMessageSet) ExtensionRangeArray() []proto.ExtensionRange {
	return extRange_MyMessageSet
}
func (m *MyMessageSet) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_MyMessageSet.Unmarshal(m, b)
}
func (m *MyMessageSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_MyMessageSet.Marshal(b, m, deterministic)
}
func (dst *MyMessageSet) XXX_Merge(src proto.Message) {
	xxx_messageInfo_MyMessageSet.Merge(dst, src)
}
func (m *MyMessageSet) XXX_Size() int {
	return xxx_messageInfo_MyMessageSet.Size(m)
}
func (m *MyMessageSet) XXX_DiscardUnknown() {
	xxx_messageInfo_MyMessageSet.DiscardUnknown(m)
}

var xxx_messageInfo_MyMessageSet proto.InternalMessageInfo

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

func (m *Empty) Reset()                    { *m = Empty{} }
func (m *Empty) String() string            { return proto.CompactTextString(m) }
func (*Empty) ProtoMessage()               {}
func (*Empty) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} }
func (m *Empty) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Empty.Unmarshal(m, b)
}
func (m *Empty) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Empty.Marshal(b, m, deterministic)
}
func (dst *Empty) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Empty.Merge(dst, src)
}
func (m *Empty) XXX_Size() int {
	return xxx_messageInfo_Empty.Size(m)
}
func (m *Empty) XXX_DiscardUnknown() {
	xxx_messageInfo_Empty.DiscardUnknown(m)
}

var xxx_messageInfo_Empty proto.InternalMessageInfo

type MessageList struct {
	Message              []*MessageList_Message `protobuf:"group,1,rep,name=Message,json=message" json:"message,omitempty"`
	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
	XXX_unrecognized     []byte                 `json:"-"`
	XXX_sizecache        int32                  `json:"-"`
}

func (m *MessageList) Reset()                    { *m = MessageList{} }
func (m *MessageList) String() string            { return proto.CompactTextString(m) }
func (*MessageList) ProtoMessage()               {}
func (*MessageList) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} }
func (m *MessageList) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_MessageList.Unmarshal(m, b)
}
func (m *MessageList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_MessageList.Marshal(b, m, deterministic)
}
func (dst *MessageList) XXX_Merge(src proto.Message) {
	xxx_messageInfo_MessageList.Merge(dst, src)
}
func (m *MessageList) XXX_Size() int {
	return xxx_messageInfo_MessageList.Size(m)
}
func (m *MessageList) XXX_DiscardUnknown() {
	xxx_messageInfo_MessageList.DiscardUnknown(m)
}

var xxx_messageInfo_MessageList proto.InternalMessageInfo

func (m *MessageList) GetMessage() []*MessageList_Message {
	if m != nil {
		return m.Message
	}
	return nil
}

type MessageList_Message struct {
	Name                 *string  `protobuf:"bytes,2,req,name=name" json:"name,omitempty"`
	Count                *int32   `protobuf:"varint,3,req,name=count" json:"count,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *MessageList_Message) Reset()                    { *m = MessageList_Message{} }
func (m *MessageList_Message) String() string            { return proto.CompactTextString(m) }
func (*MessageList_Message) ProtoMessage()               {}
func (*MessageList_Message) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19, 0} }
func (m *MessageList_Message) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_MessageList_Message.Unmarshal(m, b)
}
func (m *MessageList_Message) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_MessageList_Message.Marshal(b, m, deterministic)
}
func (dst *MessageList_Message) XXX_Merge(src proto.Message) {
	xxx_messageInfo_MessageList_Message.Merge(dst, src)
}
func (m *MessageList_Message) XXX_Size() int {
	return xxx_messageInfo_MessageList_Message.Size(m)
}
func (m *MessageList_Message) XXX_DiscardUnknown() {
	xxx_messageInfo_MessageList_Message.DiscardUnknown(m)
}

var xxx_messageInfo_MessageList_Message proto.InternalMessageInfo

func (m *MessageList_Message) GetName() string {
	if m != nil && m.Name != nil {
		return *m.Name
	}
	return ""
}

func (m *MessageList_Message) GetCount() int32 {
	if m != nil && m.Count != nil {
		return *m.Count
	}
	return 0
}

type Strings struct {
	StringField          *string  `protobuf:"bytes,1,opt,name=string_field,json=stringField" json:"string_field,omitempty"`
	BytesField           []byte   `protobuf:"bytes,2,opt,name=bytes_field,json=bytesField" json:"bytes_field,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Strings) Reset()                    { *m = Strings{} }
func (m *Strings) String() string            { return proto.CompactTextString(m) }
func (*Strings) ProtoMessage()               {}
func (*Strings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} }
func (m *Strings) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Strings.Unmarshal(m, b)
}
func (m *Strings) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Strings.Marshal(b, m, deterministic)
}
func (dst *Strings) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Strings.Merge(dst, src)
}
func (m *Strings) XXX_Size() int {
	return xxx_messageInfo_Strings.Size(m)
}
func (m *Strings) XXX_DiscardUnknown() {
	xxx_messageInfo_Strings.DiscardUnknown(m)
}

var xxx_messageInfo_Strings proto.InternalMessageInfo

func (m *Strings) GetStringField() string {
	if m != nil && m.StringField != nil {
		return *m.StringField
	}
	return ""
}

func (m *Strings) GetBytesField() []byte {
	if m != nil {
		return m.BytesField
	}
	return nil
}

type Defaults struct {
	// Default-valued fields of all basic types.
	// Same as GoTest, but copied here to make testing easier.
	F_Bool    *bool           `protobuf:"varint,1,opt,name=F_Bool,json=FBool,def=1" json:"F_Bool,omitempty"`
	F_Int32   *int32          `protobuf:"varint,2,opt,name=F_Int32,json=FInt32,def=32" json:"F_Int32,omitempty"`
	F_Int64   *int64          `protobuf:"varint,3,opt,name=F_Int64,json=FInt64,def=64" json:"F_Int64,omitempty"`
	F_Fixed32 *uint32         `protobuf:"fixed32,4,opt,name=F_Fixed32,json=FFixed32,def=320" json:"F_Fixed32,omitempty"`
	F_Fixed64 *uint64         `protobuf:"fixed64,5,opt,name=F_Fixed64,json=FFixed64,def=640" json:"F_Fixed64,omitempty"`
	F_Uint32  *uint32         `protobuf:"varint,6,opt,name=F_Uint32,json=FUint32,def=3200" json:"F_Uint32,omitempty"`
	F_Uint64  *uint64         `protobuf:"varint,7,opt,name=F_Uint64,json=FUint64,def=6400" json:"F_Uint64,omitempty"`
	F_Float   *float32        `protobuf:"fixed32,8,opt,name=F_Float,json=FFloat,def=314159" json:"F_Float,omitempty"`
	F_Double  *float64        `protobuf:"fixed64,9,opt,name=F_Double,json=FDouble,def=271828" json:"F_Double,omitempty"`
	F_String  *string         `protobuf:"bytes,10,opt,name=F_String,json=FString,def=hello, \"world!\"\n" json:"F_String,omitempty"`
	F_Bytes   []byte          `protobuf:"bytes,11,opt,name=F_Bytes,json=FBytes,def=Bignose" json:"F_Bytes,omitempty"`
	F_Sint32  *int32          `protobuf:"zigzag32,12,opt,name=F_Sint32,json=FSint32,def=-32" json:"F_Sint32,omitempty"`
	F_Sint64  *int64          `protobuf:"zigzag64,13,opt,name=F_Sint64,json=FSint64,def=-64" json:"F_Sint64,omitempty"`
	F_Enum    *Defaults_Color `protobuf:"varint,14,opt,name=F_Enum,json=FEnum,enum=test_proto.Defaults_Color,def=1" json:"F_Enum,omitempty"`
	// More fields with crazy defaults.
	F_Pinf *float32 `protobuf:"fixed32,15,opt,name=F_Pinf,json=FPinf,def=inf" json:"F_Pinf,omitempty"`
	F_Ninf *float32 `protobuf:"fixed32,16,opt,name=F_Ninf,json=FNinf,def=-inf" json:"F_Ninf,omitempty"`
	F_Nan  *float32 `protobuf:"fixed32,17,opt,name=F_Nan,json=FNan,def=nan" json:"F_Nan,omitempty"`
	// Sub-message.
	Sub *SubDefaults `protobuf:"bytes,18,opt,name=sub" json:"sub,omitempty"`
	// Redundant but explicit defaults.
	StrZero              *string  `protobuf:"bytes,19,opt,name=str_zero,json=strZero,def=" json:"str_zero,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Defaults) Reset()                    { *m = Defaults{} }
func (m *Defaults) String() string            { return proto.CompactTextString(m) }
func (*Defaults) ProtoMessage()               {}
func (*Defaults) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} }
func (m *Defaults) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Defaults.Unmarshal(m, b)
}
func (m *Defaults) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Defaults.Marshal(b, m, deterministic)
}
func (dst *Defaults) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Defaults.Merge(dst, src)
}
func (m *Defaults) XXX_Size() int {
	return xxx_messageInfo_Defaults.Size(m)
}
func (m *Defaults) XXX_DiscardUnknown() {
	xxx_messageInfo_Defaults.DiscardUnknown(m)
}

var xxx_messageInfo_Defaults proto.InternalMessageInfo

const Default_Defaults_F_Bool bool = true
const Default_Defaults_F_Int32 int32 = 32
const Default_Defaults_F_Int64 int64 = 64
const Default_Defaults_F_Fixed32 uint32 = 320
const Default_Defaults_F_Fixed64 uint64 = 640
const Default_Defaults_F_Uint32 uint32 = 3200
const Default_Defaults_F_Uint64 uint64 = 6400
const Default_Defaults_F_Float float32 = 314159
const Default_Defaults_F_Double float64 = 271828
const Default_Defaults_F_String string = "hello, \"world!\"\n"

var Default_Defaults_F_Bytes []byte = []byte("Bignose")

const Default_Defaults_F_Sint32 int32 = -32
const Default_Defaults_F_Sint64 int64 = -64
const Default_Defaults_F_Enum Defaults_Color = Defaults_GREEN

var Default_Defaults_F_Pinf float32 = float32(math.Inf(1))
var Default_Defaults_F_Ninf float32 = float32(math.Inf(-1))
var Default_Defaults_F_Nan float32 = float32(math.NaN())

func (m *Defaults) GetF_Bool() bool {
	if m != nil && m.F_Bool != nil {
		return *m.F_Bool
	}
	return Default_Defaults_F_Bool
}

func (m *Defaults) GetF_Int32() int32 {
	if m != nil && m.F_Int32 != nil {
		return *m.F_Int32
	}
	return Default_Defaults_F_Int32
}

func (m *Defaults) GetF_Int64() int64 {
	if m != nil && m.F_Int64 != nil {
		return *m.F_Int64
	}
	return Default_Defaults_F_Int64
}

func (m *Defaults) GetF_Fixed32() uint32 {
	if m != nil && m.F_Fixed32 != nil {
		return *m.F_Fixed32
	}
	return Default_Defaults_F_Fixed32
}

func (m *Defaults) GetF_Fixed64() uint64 {
	if m != nil && m.F_Fixed64 != nil {
		return *m.F_Fixed64
	}
	return Default_Defaults_F_Fixed64
}

func (m *Defaults) GetF_Uint32() uint32 {
	if m != nil && m.F_Uint32 != nil {
		return *m.F_Uint32
	}
	return Default_Defaults_F_Uint32
}

func (m *Defaults) GetF_Uint64() uint64 {
	if m != nil && m.F_Uint64 != nil {
		return *m.F_Uint64
	}
	return Default_Defaults_F_Uint64
}

func (m *Defaults) GetF_Float() float32 {
	if m != nil && m.F_Float != nil {
		return *m.F_Float
	}
	return Default_Defaults_F_Float
}

func (m *Defaults) GetF_Double() float64 {
	if m != nil && m.F_Double != nil {
		return *m.F_Double
	}
	return Default_Defaults_F_Double
}

func (m *Defaults) GetF_String() string {
	if m != nil && m.F_String != nil {
		return *m.F_String
	}
	return Default_Defaults_F_String
}

func (m *Defaults) GetF_Bytes() []byte {
	if m != nil && m.F_Bytes != nil {
		return m.F_Bytes
	}
	return append([]byte(nil), Default_Defaults_F_Bytes...)
}

func (m *Defaults) GetF_Sint32() int32 {
	if m != nil && m.F_Sint32 != nil {
		return *m.F_Sint32
	}
	return Default_Defaults_F_Sint32
}

func (m *Defaults) GetF_Sint64() int64 {
	if m != nil && m.F_Sint64 != nil {
		return *m.F_Sint64
	}
	return Default_Defaults_F_Sint64
}

func (m *Defaults) GetF_Enum() Defaults_Color {
	if m != nil && m.F_Enum != nil {
		return *m.F_Enum
	}
	return Default_Defaults_F_Enum
}

func (m *Defaults) GetF_Pinf() float32 {
	if m != nil && m.F_Pinf != nil {
		return *m.F_Pinf
	}
	return Default_Defaults_F_Pinf
}

func (m *Defaults) GetF_Ninf() float32 {
	if m != nil && m.F_Ninf != nil {
		return *m.F_Ninf
	}
	return Default_Defaults_F_Ninf
}

func (m *Defaults) GetF_Nan() float32 {
	if m != nil && m.F_Nan != nil {
		return *m.F_Nan
	}
	return Default_Defaults_F_Nan
}

func (m *Defaults) GetSub() *SubDefaults {
	if m != nil {
		return m.Sub
	}
	return nil
}

func (m *Defaults) GetStrZero() string {
	if m != nil && m.StrZero != nil {
		return *m.StrZero
	}
	return ""
}

type SubDefaults struct {
	N                    *int64   `protobuf:"varint,1,opt,name=n,def=7" json:"n,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *SubDefaults) Reset()                    { *m = SubDefaults{} }
func (m *SubDefaults) String() string            { return proto.CompactTextString(m) }
func (*SubDefaults) ProtoMessage()               {}
func (*SubDefaults) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} }
func (m *SubDefaults) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_SubDefaults.Unmarshal(m, b)
}
func (m *SubDefaults) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_SubDefaults.Marshal(b, m, deterministic)
}
func (dst *SubDefaults) XXX_Merge(src proto.Message) {
	xxx_messageInfo_SubDefaults.Merge(dst, src)
}
func (m *SubDefaults) XXX_Size() int {
	return xxx_messageInfo_SubDefaults.Size(m)
}
func (m *SubDefaults) XXX_DiscardUnknown() {
	xxx_messageInfo_SubDefaults.DiscardUnknown(m)
}

var xxx_messageInfo_SubDefaults proto.InternalMessageInfo

const Default_SubDefaults_N int64 = 7

func (m *SubDefaults) GetN() int64 {
	if m != nil && m.N != nil {
		return *m.N
	}
	return Default_SubDefaults_N
}

type RepeatedEnum struct {
	Color                []RepeatedEnum_Color `protobuf:"varint,1,rep,name=color,enum=test_proto.RepeatedEnum_Color" json:"color,omitempty"`
	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
	XXX_unrecognized     []byte               `json:"-"`
	XXX_sizecache        int32                `json:"-"`
}

func (m *RepeatedEnum) Reset()                    { *m = RepeatedEnum{} }
func (m *RepeatedEnum) String() string            { return proto.CompactTextString(m) }
func (*RepeatedEnum) ProtoMessage()               {}
func (*RepeatedEnum) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} }
func (m *RepeatedEnum) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RepeatedEnum.Unmarshal(m, b)
}
func (m *RepeatedEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RepeatedEnum.Marshal(b, m, deterministic)
}
func (dst *RepeatedEnum) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RepeatedEnum.Merge(dst, src)
}
func (m *RepeatedEnum) XXX_Size() int {
	return xxx_messageInfo_RepeatedEnum.Size(m)
}
func (m *RepeatedEnum) XXX_DiscardUnknown() {
	xxx_messageInfo_RepeatedEnum.DiscardUnknown(m)
}

var xxx_messageInfo_RepeatedEnum proto.InternalMessageInfo

func (m *RepeatedEnum) GetColor() []RepeatedEnum_Color {
	if m != nil {
		return m.Color
	}
	return nil
}

type MoreRepeated struct {
	Bools                []bool   `protobuf:"varint,1,rep,name=bools" json:"bools,omitempty"`
	BoolsPacked          []bool   `protobuf:"varint,2,rep,packed,name=bools_packed,json=boolsPacked" json:"bools_packed,omitempty"`
	Ints                 []int32  `protobuf:"varint,3,rep,name=ints" json:"ints,omitempty"`
	IntsPacked           []int32  `protobuf:"varint,4,rep,packed,name=ints_packed,json=intsPacked" json:"ints_packed,omitempty"`
	Int64SPacked         []int64  `protobuf:"varint,7,rep,packed,name=int64s_packed,json=int64sPacked" json:"int64s_packed,omitempty"`
	Strings              []string `protobuf:"bytes,5,rep,name=strings" json:"strings,omitempty"`
	Fixeds               []uint32 `protobuf:"fixed32,6,rep,name=fixeds" json:"fixeds,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *MoreRepeated) Reset()                    { *m = MoreRepeated{} }
func (m *MoreRepeated) String() string            { return proto.CompactTextString(m) }
func (*MoreRepeated) ProtoMessage()               {}
func (*MoreRepeated) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} }
func (m *MoreRepeated) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_MoreRepeated.Unmarshal(m, b)
}
func (m *MoreRepeated) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_MoreRepeated.Marshal(b, m, deterministic)
}
func (dst *MoreRepeated) XXX_Merge(src proto.Message) {
	xxx_messageInfo_MoreRepeated.Merge(dst, src)
}
func (m *MoreRepeated) XXX_Size() int {
	return xxx_messageInfo_MoreRepeated.Size(m)
}
func (m *MoreRepeated) XXX_DiscardUnknown() {
	xxx_messageInfo_MoreRepeated.DiscardUnknown(m)
}

var xxx_messageInfo_MoreRepeated proto.InternalMessageInfo

func (m *MoreRepeated) GetBools() []bool {
	if m != nil {
		return m.Bools
	}
	return nil
}

func (m *MoreRepeated) GetBoolsPacked() []bool {
	if m != nil {
		return m.BoolsPacked
	}
	return nil
}

func (m *MoreRepeated) GetInts() []int32 {
	if m != nil {
		return m.Ints
	}
	return nil
}

func (m *MoreRepeated) GetIntsPacked() []int32 {
	if m != nil {
		return m.IntsPacked
	}
	return nil
}

func (m *MoreRepeated) GetInt64SPacked() []int64 {
	if m != nil {
		return m.Int64SPacked
	}
	return nil
}

func (m *MoreRepeated) GetStrings() []string {
	if m != nil {
		return m.Strings
	}
	return nil
}

func (m *MoreRepeated) GetFixeds() []uint32 {
	if m != nil {
		return m.Fixeds
	}
	return nil
}

type GroupOld struct {
	G                    *GroupOld_G `protobuf:"group,101,opt,name=G,json=g" json:"g,omitempty"`
	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
	XXX_unrecognized     []byte      `json:"-"`
	XXX_sizecache        int32       `json:"-"`
}

func (m *GroupOld) Reset()                    { *m = GroupOld{} }
func (m *GroupOld) String() string            { return proto.CompactTextString(m) }
func (*GroupOld) ProtoMessage()               {}
func (*GroupOld) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} }
func (m *GroupOld) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GroupOld.Unmarshal(m, b)
}
func (m *GroupOld) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GroupOld.Marshal(b, m, deterministic)
}
func (dst *GroupOld) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GroupOld.Merge(dst, src)
}
func (m *GroupOld) XXX_Size() int {
	return xxx_messageInfo_GroupOld.Size(m)
}
func (m *GroupOld) XXX_DiscardUnknown() {
	xxx_messageInfo_GroupOld.DiscardUnknown(m)
}

var xxx_messageInfo_GroupOld proto.InternalMessageInfo

func (m *GroupOld) GetG() *GroupOld_G {
	if m != nil {
		return m.G
	}
	return nil
}

type GroupOld_G struct {
	X                    *int32   `protobuf:"varint,2,opt,name=x" json:"x,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *GroupOld_G) Reset()                    { *m = GroupOld_G{} }
func (m *GroupOld_G) String() string            { return proto.CompactTextString(m) }
func (*GroupOld_G) ProtoMessage()               {}
func (*GroupOld_G) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25, 0} }
func (m *GroupOld_G) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GroupOld_G.Unmarshal(m, b)
}
func (m *GroupOld_G) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GroupOld_G.Marshal(b, m, deterministic)
}
func (dst *GroupOld_G) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GroupOld_G.Merge(dst, src)
}
func (m *GroupOld_G) XXX_Size() int {
	return xxx_messageInfo_GroupOld_G.Size(m)
}
func (m *GroupOld_G) XXX_DiscardUnknown() {
	xxx_messageInfo_GroupOld_G.DiscardUnknown(m)
}

var xxx_messageInfo_GroupOld_G proto.InternalMessageInfo

func (m *GroupOld_G) GetX() int32 {
	if m != nil && m.X != nil {
		return *m.X
	}
	return 0
}

type GroupNew struct {
	G                    *GroupNew_G `protobuf:"group,101,opt,name=G,json=g" json:"g,omitempty"`
	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
	XXX_unrecognized     []byte      `json:"-"`
	XXX_sizecache        int32       `json:"-"`
}

func (m *GroupNew) Reset()                    { *m = GroupNew{} }
func (m *GroupNew) String() string            { return proto.CompactTextString(m) }
func (*GroupNew) ProtoMessage()               {}
func (*GroupNew) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} }
func (m *GroupNew) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GroupNew.Unmarshal(m, b)
}
func (m *GroupNew) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GroupNew.Marshal(b, m, deterministic)
}
func (dst *GroupNew) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GroupNew.Merge(dst, src)
}
func (m *GroupNew) XXX_Size() int {
	return xxx_messageInfo_GroupNew.Size(m)
}
func (m *GroupNew) XXX_DiscardUnknown() {
	xxx_messageInfo_GroupNew.DiscardUnknown(m)
}

var xxx_messageInfo_GroupNew proto.InternalMessageInfo

func (m *GroupNew) GetG() *GroupNew_G {
	if m != nil {
		return m.G
	}
	return nil
}

type GroupNew_G struct {
	X                    *int32   `protobuf:"varint,2,opt,name=x" json:"x,omitempty"`
	Y                    *int32   `protobuf:"varint,3,opt,name=y" json:"y,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *GroupNew_G) Reset()                    { *m = GroupNew_G{} }
func (m *GroupNew_G) String() string            { return proto.CompactTextString(m) }
func (*GroupNew_G) ProtoMessage()               {}
func (*GroupNew_G) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26, 0} }
func (m *GroupNew_G) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GroupNew_G.Unmarshal(m, b)
}
func (m *GroupNew_G) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GroupNew_G.Marshal(b, m, deterministic)
}
func (dst *GroupNew_G) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GroupNew_G.Merge(dst, src)
}
func (m *GroupNew_G) XXX_Size() int {
	return xxx_messageInfo_GroupNew_G.Size(m)
}
func (m *GroupNew_G) XXX_DiscardUnknown() {
	xxx_messageInfo_GroupNew_G.DiscardUnknown(m)
}

var xxx_messageInfo_GroupNew_G proto.InternalMessageInfo

func (m *GroupNew_G) GetX() int32 {
	if m != nil && m.X != nil {
		return *m.X
	}
	return 0
}

func (m *GroupNew_G) GetY() int32 {
	if m != nil && m.Y != nil {
		return *m.Y
	}
	return 0
}

type FloatingPoint struct {
	F                    *float64 `protobuf:"fixed64,1,req,name=f" json:"f,omitempty"`
	Exact                *bool    `protobuf:"varint,2,opt,name=exact" json:"exact,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *FloatingPoint) Reset()                    { *m = FloatingPoint{} }
func (m *FloatingPoint) String() string            { return proto.CompactTextString(m) }
func (*FloatingPoint) ProtoMessage()               {}
func (*FloatingPoint) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} }
func (m *FloatingPoint) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_FloatingPoint.Unmarshal(m, b)
}
func (m *FloatingPoint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_FloatingPoint.Marshal(b, m, deterministic)
}
func (dst *FloatingPoint) XXX_Merge(src proto.Message) {
	xxx_messageInfo_FloatingPoint.Merge(dst, src)
}
func (m *FloatingPoint) XXX_Size() int {
	return xxx_messageInfo_FloatingPoint.Size(m)
}
func (m *FloatingPoint) XXX_DiscardUnknown() {
	xxx_messageInfo_FloatingPoint.DiscardUnknown(m)
}

var xxx_messageInfo_FloatingPoint proto.InternalMessageInfo

func (m *FloatingPoint) GetF() float64 {
	if m != nil && m.F != nil {
		return *m.F
	}
	return 0
}

func (m *FloatingPoint) GetExact() bool {
	if m != nil && m.Exact != nil {
		return *m.Exact
	}
	return false
}

type MessageWithMap struct {
	NameMapping          map[int32]string         `protobuf:"bytes,1,rep,name=name_mapping,json=nameMapping" json:"name_mapping,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	MsgMapping           map[int64]*FloatingPoint `protobuf:"bytes,2,rep,name=msg_mapping,json=msgMapping" json:"msg_mapping,omitempty" protobuf_key:"zigzag64,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	ByteMapping          map[bool][]byte          `protobuf:"bytes,3,rep,name=byte_mapping,json=byteMapping" json:"byte_mapping,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	StrToStr             map[string]string        `protobuf:"bytes,4,rep,name=str_to_str,json=strToStr" json:"str_to_str,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
	XXX_unrecognized     []byte                   `json:"-"`
	XXX_sizecache        int32                    `json:"-"`
}

func (m *MessageWithMap) Reset()                    { *m = MessageWithMap{} }
func (m *MessageWithMap) String() string            { return proto.CompactTextString(m) }
func (*MessageWithMap) ProtoMessage()               {}
func (*MessageWithMap) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} }
func (m *MessageWithMap) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_MessageWithMap.Unmarshal(m, b)
}
func (m *MessageWithMap) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_MessageWithMap.Marshal(b, m, deterministic)
}
func (dst *MessageWithMap) XXX_Merge(src proto.Message) {
	xxx_messageInfo_MessageWithMap.Merge(dst, src)
}
func (m *MessageWithMap) XXX_Size() int {
	return xxx_messageInfo_MessageWithMap.Size(m)
}
func (m *MessageWithMap) XXX_DiscardUnknown() {
	xxx_messageInfo_MessageWithMap.DiscardUnknown(m)
}

var xxx_messageInfo_MessageWithMap proto.InternalMessageInfo

func (m *MessageWithMap) GetNameMapping() map[int32]string {
	if m != nil {
		return m.NameMapping
	}
	return nil
}

func (m *MessageWithMap) GetMsgMapping() map[int64]*FloatingPoint {
	if m != nil {
		return m.MsgMapping
	}
	return nil
}

func (m *MessageWithMap) GetByteMapping() map[bool][]byte {
	if m != nil {
		return m.ByteMapping
	}
	return nil
}

func (m *MessageWithMap) GetStrToStr() map[string]string {
	if m != nil {
		return m.StrToStr
	}
	return nil
}

type Oneof struct {
	// Types that are valid to be assigned to Union:
	//	*Oneof_F_Bool
	//	*Oneof_F_Int32
	//	*Oneof_F_Int64
	//	*Oneof_F_Fixed32
	//	*Oneof_F_Fixed64
	//	*Oneof_F_Uint32
	//	*Oneof_F_Uint64
	//	*Oneof_F_Float
	//	*Oneof_F_Double
	//	*Oneof_F_String
	//	*Oneof_F_Bytes
	//	*Oneof_F_Sint32
	//	*Oneof_F_Sint64
	//	*Oneof_F_Enum
	//	*Oneof_F_Message
	//	*Oneof_FGroup
	//	*Oneof_F_Largest_Tag
	Union isOneof_Union `protobuf_oneof:"union"`
	// Types that are valid to be assigned to Tormato:
	//	*Oneof_Value
	Tormato              isOneof_Tormato `protobuf_oneof:"tormato"`
	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
	XXX_unrecognized     []byte          `json:"-"`
	XXX_sizecache        int32           `json:"-"`
}

func (m *Oneof) Reset()                    { *m = Oneof{} }
func (m *Oneof) String() string            { return proto.CompactTextString(m) }
func (*Oneof) ProtoMessage()               {}
func (*Oneof) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} }
func (m *Oneof) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Oneof.Unmarshal(m, b)
}
func (m *Oneof) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Oneof.Marshal(b, m, deterministic)
}
func (dst *Oneof) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Oneof.Merge(dst, src)
}
func (m *Oneof) XXX_Size() int {
	return xxx_messageInfo_Oneof.Size(m)
}
func (m *Oneof) XXX_DiscardUnknown() {
	xxx_messageInfo_Oneof.DiscardUnknown(m)
}

var xxx_messageInfo_Oneof proto.InternalMessageInfo

type isOneof_Union interface {
	isOneof_Union()
}
type isOneof_Tormato interface {
	isOneof_Tormato()
}

type Oneof_F_Bool struct {
	F_Bool bool `protobuf:"varint,1,opt,name=F_Bool,json=FBool,oneof"`
}
type Oneof_F_Int32 struct {
	F_Int32 int32 `protobuf:"varint,2,opt,name=F_Int32,json=FInt32,oneof"`
}
type Oneof_F_Int64 struct {
	F_Int64 int64 `protobuf:"varint,3,opt,name=F_Int64,json=FInt64,oneof"`
}
type Oneof_F_Fixed32 struct {
	F_Fixed32 uint32 `protobuf:"fixed32,4,opt,name=F_Fixed32,json=FFixed32,oneof"`
}
type Oneof_F_Fixed64 struct {
	F_Fixed64 uint64 `protobuf:"fixed64,5,opt,name=F_Fixed64,json=FFixed64,oneof"`
}
type Oneof_F_Uint32 struct {
	F_Uint32 uint32 `protobuf:"varint,6,opt,name=F_Uint32,json=FUint32,oneof"`
}
type Oneof_F_Uint64 struct {
	F_Uint64 uint64 `protobuf:"varint,7,opt,name=F_Uint64,json=FUint64,oneof"`
}
type Oneof_F_Float struct {
	F_Float float32 `protobuf:"fixed32,8,opt,name=F_Float,json=FFloat,oneof"`
}
type Oneof_F_Double struct {
	F_Double float64 `protobuf:"fixed64,9,opt,name=F_Double,json=FDouble,oneof"`
}
type Oneof_F_String struct {
	F_String string `protobuf:"bytes,10,opt,name=F_String,json=FString,oneof"`
}
type Oneof_F_Bytes struct {
	F_Bytes []byte `protobuf:"bytes,11,opt,name=F_Bytes,json=FBytes,oneof"`
}
type Oneof_F_Sint32 struct {
	F_Sint32 int32 `protobuf:"zigzag32,12,opt,name=F_Sint32,json=FSint32,oneof"`
}
type Oneof_F_Sint64 struct {
	F_Sint64 int64 `protobuf:"zigzag64,13,opt,name=F_Sint64,json=FSint64,oneof"`
}
type Oneof_F_Enum struct {
	F_Enum MyMessage_Color `protobuf:"varint,14,opt,name=F_Enum,json=FEnum,enum=test_proto.MyMessage_Color,oneof"`
}
type Oneof_F_Message struct {
	F_Message *GoTestField `protobuf:"bytes,15,opt,name=F_Message,json=FMessage,oneof"`
}
type Oneof_FGroup struct {
	FGroup *Oneof_F_Group `protobuf:"group,16,opt,name=F_Group,json=fGroup,oneof"`
}
type Oneof_F_Largest_Tag struct {
	F_Largest_Tag int32 `protobuf:"varint,536870911,opt,name=F_Largest_Tag,json=FLargestTag,oneof"`
}
type Oneof_Value struct {
	Value int32 `protobuf:"varint,100,opt,name=value,oneof"`
}

func (*Oneof_F_Bool) isOneof_Union()        {}
func (*Oneof_F_Int32) isOneof_Union()       {}
func (*Oneof_F_Int64) isOneof_Union()       {}
func (*Oneof_F_Fixed32) isOneof_Union()     {}
func (*Oneof_F_Fixed64) isOneof_Union()     {}
func (*Oneof_F_Uint32) isOneof_Union()      {}
func (*Oneof_F_Uint64) isOneof_Union()      {}
func (*Oneof_F_Float) isOneof_Union()       {}
func (*Oneof_F_Double) isOneof_Union()      {}
func (*Oneof_F_String) isOneof_Union()      {}
func (*Oneof_F_Bytes) isOneof_Union()       {}
func (*Oneof_F_Sint32) isOneof_Union()      {}
func (*Oneof_F_Sint64) isOneof_Union()      {}
func (*Oneof_F_Enum) isOneof_Union()        {}
func (*Oneof_F_Message) isOneof_Union()     {}
func (*Oneof_FGroup) isOneof_Union()        {}
func (*Oneof_F_Largest_Tag) isOneof_Union() {}
func (*Oneof_Value) isOneof_Tormato()       {}

func (m *Oneof) GetUnion() isOneof_Union {
	if m != nil {
		return m.Union
	}
	return nil
}
func (m *Oneof) GetTormato() isOneof_Tormato {
	if m != nil {
		return m.Tormato
	}
	return nil
}

func (m *Oneof) GetF_Bool() bool {
	if x, ok := m.GetUnion().(*Oneof_F_Bool); ok {
		return x.F_Bool
	}
	return false
}

func (m *Oneof) GetF_Int32() int32 {
	if x, ok := m.GetUnion().(*Oneof_F_Int32); ok {
		return x.F_Int32
	}
	return 0
}

func (m *Oneof) GetF_Int64() int64 {
	if x, ok := m.GetUnion().(*Oneof_F_Int64); ok {
		return x.F_Int64
	}
	return 0
}

func (m *Oneof) GetF_Fixed32() uint32 {
	if x, ok := m.GetUnion().(*Oneof_F_Fixed32); ok {
		return x.F_Fixed32
	}
	return 0
}

func (m *Oneof) GetF_Fixed64() uint64 {
	if x, ok := m.GetUnion().(*Oneof_F_Fixed64); ok {
		return x.F_Fixed64
	}
	return 0
}

func (m *Oneof) GetF_Uint32() uint32 {
	if x, ok := m.GetUnion().(*Oneof_F_Uint32); ok {
		return x.F_Uint32
	}
	return 0
}

func (m *Oneof) GetF_Uint64() uint64 {
	if x, ok := m.GetUnion().(*Oneof_F_Uint64); ok {
		return x.F_Uint64
	}
	return 0
}

func (m *Oneof) GetF_Float() float32 {
	if x, ok := m.GetUnion().(*Oneof_F_Float); ok {
		return x.F_Float
	}
	return 0
}

func (m *Oneof) GetF_Double() float64 {
	if x, ok := m.GetUnion().(*Oneof_F_Double); ok {
		return x.F_Double
	}
	return 0
}

func (m *Oneof) GetF_String() string {
	if x, ok := m.GetUnion().(*Oneof_F_String); ok {
		return x.F_String
	}
	return ""
}

func (m *Oneof) GetF_Bytes() []byte {
	if x, ok := m.GetUnion().(*Oneof_F_Bytes); ok {
		return x.F_Bytes
	}
	return nil
}

func (m *Oneof) GetF_Sint32() int32 {
	if x, ok := m.GetUnion().(*Oneof_F_Sint32); ok {
		return x.F_Sint32
	}
	return 0
}

func (m *Oneof) GetF_Sint64() int64 {
	if x, ok := m.GetUnion().(*Oneof_F_Sint64); ok {
		return x.F_Sint64
	}
	return 0
}

func (m *Oneof) GetF_Enum() MyMessage_Color {
	if x, ok := m.GetUnion().(*Oneof_F_Enum); ok {
		return x.F_Enum
	}
	return MyMessage_RED
}

func (m *Oneof) GetF_Message() *GoTestField {
	if x, ok := m.GetUnion().(*Oneof_F_Message); ok {
		return x.F_Message
	}
	return nil
}

func (m *Oneof) GetFGroup() *Oneof_F_Group {
	if x, ok := m.GetUnion().(*Oneof_FGroup); ok {
		return x.FGroup
	}
	return nil
}

func (m *Oneof) GetF_Largest_Tag() int32 {
	if x, ok := m.GetUnion().(*Oneof_F_Largest_Tag); ok {
		return x.F_Largest_Tag
	}
	return 0
}

func (m *Oneof) GetValue() int32 {
	if x, ok := m.GetTormato().(*Oneof_Value); ok {
		return x.Value
	}
	return 0
}

// XXX_OneofFuncs is for the internal use of the proto package.
func (*Oneof) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
	return _Oneof_OneofMarshaler, _Oneof_OneofUnmarshaler, _Oneof_OneofSizer, []interface{}{
		(*Oneof_F_Bool)(nil),
		(*Oneof_F_Int32)(nil),
		(*Oneof_F_Int64)(nil),
		(*Oneof_F_Fixed32)(nil),
		(*Oneof_F_Fixed64)(nil),
		(*Oneof_F_Uint32)(nil),
		(*Oneof_F_Uint64)(nil),
		(*Oneof_F_Float)(nil),
		(*Oneof_F_Double)(nil),
		(*Oneof_F_String)(nil),
		(*Oneof_F_Bytes)(nil),
		(*Oneof_F_Sint32)(nil),
		(*Oneof_F_Sint64)(nil),
		(*Oneof_F_Enum)(nil),
		(*Oneof_F_Message)(nil),
		(*Oneof_FGroup)(nil),
		(*Oneof_F_Largest_Tag)(nil),
		(*Oneof_Value)(nil),
	}
}

func _Oneof_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
	m := msg.(*Oneof)
	// union
	switch x := m.Union.(type) {
	case *Oneof_F_Bool:
		t := uint64(0)
		if x.F_Bool {
			t = 1
		}
		b.EncodeVarint(1<<3 | proto.WireVarint)
		b.EncodeVarint(t)
	case *Oneof_F_Int32:
		b.EncodeVarint(2<<3 | proto.WireVarint)
		b.EncodeVarint(uint64(x.F_Int32))
	case *Oneof_F_Int64:
		b.EncodeVarint(3<<3 | proto.WireVarint)
		b.EncodeVarint(uint64(x.F_Int64))
	case *Oneof_F_Fixed32:
		b.EncodeVarint(4<<3 | proto.WireFixed32)
		b.EncodeFixed32(uint64(x.F_Fixed32))
	case *Oneof_F_Fixed64:
		b.EncodeVarint(5<<3 | proto.WireFixed64)
		b.EncodeFixed64(uint64(x.F_Fixed64))
	case *Oneof_F_Uint32:
		b.EncodeVarint(6<<3 | proto.WireVarint)
		b.EncodeVarint(uint64(x.F_Uint32))
	case *Oneof_F_Uint64:
		b.EncodeVarint(7<<3 | proto.WireVarint)
		b.EncodeVarint(uint64(x.F_Uint64))
	case *Oneof_F_Float:
		b.EncodeVarint(8<<3 | proto.WireFixed32)
		b.EncodeFixed32(uint64(math.Float32bits(x.F_Float)))
	case *Oneof_F_Double:
		b.EncodeVarint(9<<3 | proto.WireFixed64)
		b.EncodeFixed64(math.Float64bits(x.F_Double))
	case *Oneof_F_String:
		b.EncodeVarint(10<<3 | proto.WireBytes)
		b.EncodeStringBytes(x.F_String)
	case *Oneof_F_Bytes:
		b.EncodeVarint(11<<3 | proto.WireBytes)
		b.EncodeRawBytes(x.F_Bytes)
	case *Oneof_F_Sint32:
		b.EncodeVarint(12<<3 | proto.WireVarint)
		b.EncodeZigzag32(uint64(x.F_Sint32))
	case *Oneof_F_Sint64:
		b.EncodeVarint(13<<3 | proto.WireVarint)
		b.EncodeZigzag64(uint64(x.F_Sint64))
	case *Oneof_F_Enum:
		b.EncodeVarint(14<<3 | proto.WireVarint)
		b.EncodeVarint(uint64(x.F_Enum))
	case *Oneof_F_Message:
		b.EncodeVarint(15<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.F_Message); err != nil {
			return err
		}
	case *Oneof_FGroup:
		b.EncodeVarint(16<<3 | proto.WireStartGroup)
		if err := b.Marshal(x.FGroup); err != nil {
			return err
		}
		b.EncodeVarint(16<<3 | proto.WireEndGroup)
	case *Oneof_F_Largest_Tag:
		b.EncodeVarint(536870911<<3 | proto.WireVarint)
		b.EncodeVarint(uint64(x.F_Largest_Tag))
	case nil:
	default:
		return fmt.Errorf("Oneof.Union has unexpected type %T", x)
	}
	// tormato
	switch x := m.Tormato.(type) {
	case *Oneof_Value:
		b.EncodeVarint(100<<3 | proto.WireVarint)
		b.EncodeVarint(uint64(x.Value))
	case nil:
	default:
		return fmt.Errorf("Oneof.Tormato has unexpected type %T", x)
	}
	return nil
}

func _Oneof_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
	m := msg.(*Oneof)
	switch tag {
	case 1: // union.F_Bool
		if wire != proto.WireVarint {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeVarint()
		m.Union = &Oneof_F_Bool{x != 0}
		return true, err
	case 2: // union.F_Int32
		if wire != proto.WireVarint {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeVarint()
		m.Union = &Oneof_F_Int32{int32(x)}
		return true, err
	case 3: // union.F_Int64
		if wire != proto.WireVarint {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeVarint()
		m.Union = &Oneof_F_Int64{int64(x)}
		return true, err
	case 4: // union.F_Fixed32
		if wire != proto.WireFixed32 {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeFixed32()
		m.Union = &Oneof_F_Fixed32{uint32(x)}
		return true, err
	case 5: // union.F_Fixed64
		if wire != proto.WireFixed64 {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeFixed64()
		m.Union = &Oneof_F_Fixed64{x}
		return true, err
	case 6: // union.F_Uint32
		if wire != proto.WireVarint {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeVarint()
		m.Union = &Oneof_F_Uint32{uint32(x)}
		return true, err
	case 7: // union.F_Uint64
		if wire != proto.WireVarint {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeVarint()
		m.Union = &Oneof_F_Uint64{x}
		return true, err
	case 8: // union.F_Float
		if wire != proto.WireFixed32 {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeFixed32()
		m.Union = &Oneof_F_Float{math.Float32frombits(uint32(x))}
		return true, err
	case 9: // union.F_Double
		if wire != proto.WireFixed64 {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeFixed64()
		m.Union = &Oneof_F_Double{math.Float64frombits(x)}
		return true, err
	case 10: // union.F_String
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeStringBytes()
		m.Union = &Oneof_F_String{x}
		return true, err
	case 11: // union.F_Bytes
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeRawBytes(true)
		m.Union = &Oneof_F_Bytes{x}
		return true, err
	case 12: // union.F_Sint32
		if wire != proto.WireVarint {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeZigzag32()
		m.Union = &Oneof_F_Sint32{int32(x)}
		return true, err
	case 13: // union.F_Sint64
		if wire != proto.WireVarint {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeZigzag64()
		m.Union = &Oneof_F_Sint64{int64(x)}
		return true, err
	case 14: // union.F_Enum
		if wire != proto.WireVarint {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeVarint()
		m.Union = &Oneof_F_Enum{MyMessage_Color(x)}
		return true, err
	case 15: // union.F_Message
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(GoTestField)
		err := b.DecodeMessage(msg)
		m.Union = &Oneof_F_Message{msg}
		return true, err
	case 16: // union.f_group
		if wire != proto.WireStartGroup {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(Oneof_F_Group)
		err := b.DecodeGroup(msg)
		m.Union = &Oneof_FGroup{msg}
		return true, err
	case 536870911: // union.F_Largest_Tag
		if wire != proto.WireVarint {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeVarint()
		m.Union = &Oneof_F_Largest_Tag{int32(x)}
		return true, err
	case 100: // tormato.value
		if wire != proto.WireVarint {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeVarint()
		m.Tormato = &Oneof_Value{int32(x)}
		return true, err
	default:
		return false, nil
	}
}

func _Oneof_OneofSizer(msg proto.Message) (n int) {
	m := msg.(*Oneof)
	// union
	switch x := m.Union.(type) {
	case *Oneof_F_Bool:
		n += proto.SizeVarint(1<<3 | proto.WireVarint)
		n += 1
	case *Oneof_F_Int32:
		n += proto.SizeVarint(2<<3 | proto.WireVarint)
		n += proto.SizeVarint(uint64(x.F_Int32))
	case *Oneof_F_Int64:
		n += proto.SizeVarint(3<<3 | proto.WireVarint)
		n += proto.SizeVarint(uint64(x.F_Int64))
	case *Oneof_F_Fixed32:
		n += proto.SizeVarint(4<<3 | proto.WireFixed32)
		n += 4
	case *Oneof_F_Fixed64:
		n += proto.SizeVarint(5<<3 | proto.WireFixed64)
		n += 8
	case *Oneof_F_Uint32:
		n += proto.SizeVarint(6<<3 | proto.WireVarint)
		n += proto.SizeVarint(uint64(x.F_Uint32))
	case *Oneof_F_Uint64:
		n += proto.SizeVarint(7<<3 | proto.WireVarint)
		n += proto.SizeVarint(uint64(x.F_Uint64))
	case *Oneof_F_Float:
		n += proto.SizeVarint(8<<3 | proto.WireFixed32)
		n += 4
	case *Oneof_F_Double:
		n += proto.SizeVarint(9<<3 | proto.WireFixed64)
		n += 8
	case *Oneof_F_String:
		n += proto.SizeVarint(10<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(len(x.F_String)))
		n += len(x.F_String)
	case *Oneof_F_Bytes:
		n += proto.SizeVarint(11<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(len(x.F_Bytes)))
		n += len(x.F_Bytes)
	case *Oneof_F_Sint32:
		n += proto.SizeVarint(12<<3 | proto.WireVarint)
		n += proto.SizeVarint(uint64((uint32(x.F_Sint32) << 1) ^ uint32((int32(x.F_Sint32) >> 31))))
	case *Oneof_F_Sint64:
		n += proto.SizeVarint(13<<3 | proto.WireVarint)
		n += proto.SizeVarint(uint64(uint64(x.F_Sint64<<1) ^ uint64((int64(x.F_Sint64) >> 63))))
	case *Oneof_F_Enum:
		n += proto.SizeVarint(14<<3 | proto.WireVarint)
		n += proto.SizeVarint(uint64(x.F_Enum))
	case *Oneof_F_Message:
		s := proto.Size(x.F_Message)
		n += proto.SizeVarint(15<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case *Oneof_FGroup:
		n += proto.SizeVarint(16<<3 | proto.WireStartGroup)
		n += proto.Size(x.FGroup)
		n += proto.SizeVarint(16<<3 | proto.WireEndGroup)
	case *Oneof_F_Largest_Tag:
		n += proto.SizeVarint(536870911<<3 | proto.WireVarint)
		n += proto.SizeVarint(uint64(x.F_Largest_Tag))
	case nil:
	default:
		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
	}
	// tormato
	switch x := m.Tormato.(type) {
	case *Oneof_Value:
		n += proto.SizeVarint(100<<3 | proto.WireVarint)
		n += proto.SizeVarint(uint64(x.Value))
	case nil:
	default:
		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
	}
	return n
}

type Oneof_F_Group struct {
	X                    *int32   `protobuf:"varint,17,opt,name=x" json:"x,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Oneof_F_Group) Reset()                    { *m = Oneof_F_Group{} }
func (m *Oneof_F_Group) String() string            { return proto.CompactTextString(m) }
func (*Oneof_F_Group) ProtoMessage()               {}
func (*Oneof_F_Group) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29, 0} }
func (m *Oneof_F_Group) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Oneof_F_Group.Unmarshal(m, b)
}
func (m *Oneof_F_Group) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Oneof_F_Group.Marshal(b, m, deterministic)
}
func (dst *Oneof_F_Group) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Oneof_F_Group.Merge(dst, src)
}
func (m *Oneof_F_Group) XXX_Size() int {
	return xxx_messageInfo_Oneof_F_Group.Size(m)
}
func (m *Oneof_F_Group) XXX_DiscardUnknown() {
	xxx_messageInfo_Oneof_F_Group.DiscardUnknown(m)
}

var xxx_messageInfo_Oneof_F_Group proto.InternalMessageInfo

func (m *Oneof_F_Group) GetX() int32 {
	if m != nil && m.X != nil {
		return *m.X
	}
	return 0
}

type Communique struct {
	MakeMeCry *bool `protobuf:"varint,1,opt,name=make_me_cry,json=makeMeCry" json:"make_me_cry,omitempty"`
	// This is a oneof, called "union".
	//
	// Types that are valid to be assigned to Union:
	//	*Communique_Number
	//	*Communique_Name
	//	*Communique_Data
	//	*Communique_TempC
	//	*Communique_Col
	//	*Communique_Msg
	Union                isCommunique_Union `protobuf_oneof:"union"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *Communique) Reset()                    { *m = Communique{} }
func (m *Communique) String() string            { return proto.CompactTextString(m) }
func (*Communique) ProtoMessage()               {}
func (*Communique) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} }
func (m *Communique) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Communique.Unmarshal(m, b)
}
func (m *Communique) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Communique.Marshal(b, m, deterministic)
}
func (dst *Communique) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Communique.Merge(dst, src)
}
func (m *Communique) XXX_Size() int {
	return xxx_messageInfo_Communique.Size(m)
}
func (m *Communique) XXX_DiscardUnknown() {
	xxx_messageInfo_Communique.DiscardUnknown(m)
}

var xxx_messageInfo_Communique proto.InternalMessageInfo

type isCommunique_Union interface {
	isCommunique_Union()
}

type Communique_Number struct {
	Number int32 `protobuf:"varint,5,opt,name=number,oneof"`
}
type Communique_Name struct {
	Name string `protobuf:"bytes,6,opt,name=name,oneof"`
}
type Communique_Data struct {
	Data []byte `protobuf:"bytes,7,opt,name=data,oneof"`
}
type Communique_TempC struct {
	TempC float64 `protobuf:"fixed64,8,opt,name=temp_c,json=tempC,oneof"`
}
type Communique_Col struct {
	Col MyMessage_Color `protobuf:"varint,9,opt,name=col,enum=test_proto.MyMessage_Color,oneof"`
}
type Communique_Msg struct {
	Msg *Strings `protobuf:"bytes,10,opt,name=msg,oneof"`
}

func (*Communique_Number) isCommunique_Union() {}
func (*Communique_Name) isCommunique_Union()   {}
func (*Communique_Data) isCommunique_Union()   {}
func (*Communique_TempC) isCommunique_Union()  {}
func (*Communique_Col) isCommunique_Union()    {}
func (*Communique_Msg) isCommunique_Union()    {}

func (m *Communique) GetUnion() isCommunique_Union {
	if m != nil {
		return m.Union
	}
	return nil
}

func (m *Communique) GetMakeMeCry() bool {
	if m != nil && m.MakeMeCry != nil {
		return *m.MakeMeCry
	}
	return false
}

func (m *Communique) GetNumber() int32 {
	if x, ok := m.GetUnion().(*Communique_Number); ok {
		return x.Number
	}
	return 0
}

func (m *Communique) GetName() string {
	if x, ok := m.GetUnion().(*Communique_Name); ok {
		return x.Name
	}
	return ""
}

func (m *Communique) GetData() []byte {
	if x, ok := m.GetUnion().(*Communique_Data); ok {
		return x.Data
	}
	return nil
}

func (m *Communique) GetTempC() float64 {
	if x, ok := m.GetUnion().(*Communique_TempC); ok {
		return x.TempC
	}
	return 0
}

func (m *Communique) GetCol() MyMessage_Color {
	if x, ok := m.GetUnion().(*Communique_Col); ok {
		return x.Col
	}
	return MyMessage_RED
}

func (m *Communique) GetMsg() *Strings {
	if x, ok := m.GetUnion().(*Communique_Msg); ok {
		return x.Msg
	}
	return nil
}

// XXX_OneofFuncs is for the internal use of the proto package.
func (*Communique) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
	return _Communique_OneofMarshaler, _Communique_OneofUnmarshaler, _Communique_OneofSizer, []interface{}{
		(*Communique_Number)(nil),
		(*Communique_Name)(nil),
		(*Communique_Data)(nil),
		(*Communique_TempC)(nil),
		(*Communique_Col)(nil),
		(*Communique_Msg)(nil),
	}
}

func _Communique_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
	m := msg.(*Communique)
	// union
	switch x := m.Union.(type) {
	case *Communique_Number:
		b.EncodeVarint(5<<3 | proto.WireVarint)
		b.EncodeVarint(uint64(x.Number))
	case *Communique_Name:
		b.EncodeVarint(6<<3 | proto.WireBytes)
		b.EncodeStringBytes(x.Name)
	case *Communique_Data:
		b.EncodeVarint(7<<3 | proto.WireBytes)
		b.EncodeRawBytes(x.Data)
	case *Communique_TempC:
		b.EncodeVarint(8<<3 | proto.WireFixed64)
		b.EncodeFixed64(math.Float64bits(x.TempC))
	case *Communique_Col:
		b.EncodeVarint(9<<3 | proto.WireVarint)
		b.EncodeVarint(uint64(x.Col))
	case *Communique_Msg:
		b.EncodeVarint(10<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.Msg); err != nil {
			return err
		}
	case nil:
	default:
		return fmt.Errorf("Communique.Union has unexpected type %T", x)
	}
	return nil
}

func _Communique_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
	m := msg.(*Communique)
	switch tag {
	case 5: // union.number
		if wire != proto.WireVarint {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeVarint()
		m.Union = &Communique_Number{int32(x)}
		return true, err
	case 6: // union.name
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeStringBytes()
		m.Union = &Communique_Name{x}
		return true, err
	case 7: // union.data
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeRawBytes(true)
		m.Union = &Communique_Data{x}
		return true, err
	case 8: // union.temp_c
		if wire != proto.WireFixed64 {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeFixed64()
		m.Union = &Communique_TempC{math.Float64frombits(x)}
		return true, err
	case 9: // union.col
		if wire != proto.WireVarint {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeVarint()
		m.Union = &Communique_Col{MyMessage_Color(x)}
		return true, err
	case 10: // union.msg
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(Strings)
		err := b.DecodeMessage(msg)
		m.Union = &Communique_Msg{msg}
		return true, err
	default:
		return false, nil
	}
}

func _Communique_OneofSizer(msg proto.Message) (n int) {
	m := msg.(*Communique)
	// union
	switch x := m.Union.(type) {
	case *Communique_Number:
		n += proto.SizeVarint(5<<3 | proto.WireVarint)
		n += proto.SizeVarint(uint64(x.Number))
	case *Communique_Name:
		n += proto.SizeVarint(6<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(len(x.Name)))
		n += len(x.Name)
	case *Communique_Data:
		n += proto.SizeVarint(7<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(len(x.Data)))
		n += len(x.Data)
	case *Communique_TempC:
		n += proto.SizeVarint(8<<3 | proto.WireFixed64)
		n += 8
	case *Communique_Col:
		n += proto.SizeVarint(9<<3 | proto.WireVarint)
		n += proto.SizeVarint(uint64(x.Col))
	case *Communique_Msg:
		s := proto.Size(x.Msg)
		n += proto.SizeVarint(10<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case nil:
	default:
		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
	}
	return n
}

var E_Greeting = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessage)(nil),
	ExtensionType: ([]string)(nil),
	Field:         106,
	Name:          "test_proto.greeting",
	Tag:           "bytes,106,rep,name=greeting",
	Filename:      "test.proto",
}

var E_Complex = &proto.ExtensionDesc{
	ExtendedType:  (*OtherMessage)(nil),
	ExtensionType: (*ComplexExtension)(nil),
	Field:         200,
	Name:          "test_proto.complex",
	Tag:           "bytes,200,opt,name=complex",
	Filename:      "test.proto",
}

var E_RComplex = &proto.ExtensionDesc{
	ExtendedType:  (*OtherMessage)(nil),
	ExtensionType: ([]*ComplexExtension)(nil),
	Field:         201,
	Name:          "test_proto.r_complex",
	Tag:           "bytes,201,rep,name=r_complex,json=rComplex",
	Filename:      "test.proto",
}

var E_NoDefaultDouble = &proto.ExtensionDesc{
	ExtendedType:  (*DefaultsMessage)(nil),
	ExtensionType: (*float64)(nil),
	Field:         101,
	Name:          "test_proto.no_default_double",
	Tag:           "fixed64,101,opt,name=no_default_double,json=noDefaultDouble",
	Filename:      "test.proto",
}

var E_NoDefaultFloat = &proto.ExtensionDesc{
	ExtendedType:  (*DefaultsMessage)(nil),
	ExtensionType: (*float32)(nil),
	Field:         102,
	Name:          "test_proto.no_default_float",
	Tag:           "fixed32,102,opt,name=no_default_float,json=noDefaultFloat",
	Filename:      "test.proto",
}

var E_NoDefaultInt32 = &proto.ExtensionDesc{
	ExtendedType:  (*DefaultsMessage)(nil),
	ExtensionType: (*int32)(nil),
	Field:         103,
	Name:          "test_proto.no_default_int32",
	Tag:           "varint,103,opt,name=no_default_int32,json=noDefaultInt32",
	Filename:      "test.proto",
}

var E_NoDefaultInt64 = &proto.ExtensionDesc{
	ExtendedType:  (*DefaultsMessage)(nil),
	ExtensionType: (*int64)(nil),
	Field:         104,
	Name:          "test_proto.no_default_int64",
	Tag:           "varint,104,opt,name=no_default_int64,json=noDefaultInt64",
	Filename:      "test.proto",
}

var E_NoDefaultUint32 = &proto.ExtensionDesc{
	ExtendedType:  (*DefaultsMessage)(nil),
	ExtensionType: (*uint32)(nil),
	Field:         105,
	Name:          "test_proto.no_default_uint32",
	Tag:           "varint,105,opt,name=no_default_uint32,json=noDefaultUint32",
	Filename:      "test.proto",
}

var E_NoDefaultUint64 = &proto.ExtensionDesc{
	ExtendedType:  (*DefaultsMessage)(nil),
	ExtensionType: (*uint64)(nil),
	Field:         106,
	Name:          "test_proto.no_default_uint64",
	Tag:           "varint,106,opt,name=no_default_uint64,json=noDefaultUint64",
	Filename:      "test.proto",
}

var E_NoDefaultSint32 = &proto.ExtensionDesc{
	ExtendedType:  (*DefaultsMessage)(nil),
	ExtensionType: (*int32)(nil),
	Field:         107,
	Name:          "test_proto.no_default_sint32",
	Tag:           "zigzag32,107,opt,name=no_default_sint32,json=noDefaultSint32",
	Filename:      "test.proto",
}

var E_NoDefaultSint64 = &proto.ExtensionDesc{
	ExtendedType:  (*DefaultsMessage)(nil),
	ExtensionType: (*int64)(nil),
	Field:         108,
	Name:          "test_proto.no_default_sint64",
	Tag:           "zigzag64,108,opt,name=no_default_sint64,json=noDefaultSint64",
	Filename:      "test.proto",
}

var E_NoDefaultFixed32 = &proto.ExtensionDesc{
	ExtendedType:  (*DefaultsMessage)(nil),
	ExtensionType: (*uint32)(nil),
	Field:         109,
	Name:          "test_proto.no_default_fixed32",
	Tag:           "fixed32,109,opt,name=no_default_fixed32,json=noDefaultFixed32",
	Filename:      "test.proto",
}

var E_NoDefaultFixed64 = &proto.ExtensionDesc{
	ExtendedType:  (*DefaultsMessage)(nil),
	ExtensionType: (*uint64)(nil),
	Field:         110,
	Name:          "test_proto.no_default_fixed64",
	Tag:           "fixed64,110,opt,name=no_default_fixed64,json=noDefaultFixed64",
	Filename:      "test.proto",
}

var E_NoDefaultSfixed32 = &proto.ExtensionDesc{
	ExtendedType:  (*DefaultsMessage)(nil),
	ExtensionType: (*int32)(nil),
	Field:         111,
	Name:          "test_proto.no_default_sfixed32",
	Tag:           "fixed32,111,opt,name=no_default_sfixed32,json=noDefaultSfixed32",
	Filename:      "test.proto",
}

var E_NoDefaultSfixed64 = &proto.ExtensionDesc{
	ExtendedType:  (*DefaultsMessage)(nil),
	ExtensionType: (*int64)(nil),
	Field:         112,
	Name:          "test_proto.no_default_sfixed64",
	Tag:           "fixed64,112,opt,name=no_default_sfixed64,json=noDefaultSfixed64",
	Filename:      "test.proto",
}

var E_NoDefaultBool = &proto.ExtensionDesc{
	ExtendedType:  (*DefaultsMessage)(nil),
	ExtensionType: (*bool)(nil),
	Field:         113,
	Name:          "test_proto.no_default_bool",
	Tag:           "varint,113,opt,name=no_default_bool,json=noDefaultBool",
	Filename:      "test.proto",
}

var E_NoDefaultString = &proto.ExtensionDesc{
	ExtendedType:  (*DefaultsMessage)(nil),
	ExtensionType: (*string)(nil),
	Field:         114,
	Name:          "test_proto.no_default_string",
	Tag:           "bytes,114,opt,name=no_default_string,json=noDefaultString",
	Filename:      "test.proto",
}

var E_NoDefaultBytes = &proto.ExtensionDesc{
	ExtendedType:  (*DefaultsMessage)(nil),
	ExtensionType: ([]byte)(nil),
	Field:         115,
	Name:          "test_proto.no_default_bytes",
	Tag:           "bytes,115,opt,name=no_default_bytes,json=noDefaultBytes",
	Filename:      "test.proto",
}

var E_NoDefaultEnum = &proto.ExtensionDesc{
	ExtendedType:  (*DefaultsMessage)(nil),
	ExtensionType: (*DefaultsMessage_DefaultsEnum)(nil),
	Field:         116,
	Name:          "test_proto.no_default_enum",
	Tag:           "varint,116,opt,name=no_default_enum,json=noDefaultEnum,enum=test_proto.DefaultsMessage_DefaultsEnum",
	Filename:      "test.proto",
}

var E_DefaultDouble = &proto.ExtensionDesc{
	ExtendedType:  (*DefaultsMessage)(nil),
	ExtensionType: (*float64)(nil),
	Field:         201,
	Name:          "test_proto.default_double",
	Tag:           "fixed64,201,opt,name=default_double,json=defaultDouble,def=3.1415",
	Filename:      "test.proto",
}

var E_DefaultFloat = &proto.ExtensionDesc{
	ExtendedType:  (*DefaultsMessage)(nil),
	ExtensionType: (*float32)(nil),
	Field:         202,
	Name:          "test_proto.default_float",
	Tag:           "fixed32,202,opt,name=default_float,json=defaultFloat,def=3.14",
	Filename:      "test.proto",
}

var E_DefaultInt32 = &proto.ExtensionDesc{
	ExtendedType:  (*DefaultsMessage)(nil),
	ExtensionType: (*int32)(nil),
	Field:         203,
	Name:          "test_proto.default_int32",
	Tag:           "varint,203,opt,name=default_int32,json=defaultInt32,def=42",
	Filename:      "test.proto",
}

var E_DefaultInt64 = &proto.ExtensionDesc{
	ExtendedType:  (*DefaultsMessage)(nil),
	ExtensionType: (*int64)(nil),
	Field:         204,
	Name:          "test_proto.default_int64",
	Tag:           "varint,204,opt,name=default_int64,json=defaultInt64,def=43",
	Filename:      "test.proto",
}

var E_DefaultUint32 = &proto.ExtensionDesc{
	ExtendedType:  (*DefaultsMessage)(nil),
	ExtensionType: (*uint32)(nil),
	Field:         205,
	Name:          "test_proto.default_uint32",
	Tag:           "varint,205,opt,name=default_uint32,json=defaultUint32,def=44",
	Filename:      "test.proto",
}

var E_DefaultUint64 = &proto.ExtensionDesc{
	ExtendedType:  (*DefaultsMessage)(nil),
	ExtensionType: (*uint64)(nil),
	Field:         206,
	Name:          "test_proto.default_uint64",
	Tag:           "varint,206,opt,name=default_uint64,json=defaultUint64,def=45",
	Filename:      "test.proto",
}

var E_DefaultSint32 = &proto.ExtensionDesc{
	ExtendedType:  (*DefaultsMessage)(nil),
	ExtensionType: (*int32)(nil),
	Field:         207,
	Name:          "test_proto.default_sint32",
	Tag:           "zigzag32,207,opt,name=default_sint32,json=defaultSint32,def=46",
	Filename:      "test.proto",
}

var E_DefaultSint64 = &proto.ExtensionDesc{
	ExtendedType:  (*DefaultsMessage)(nil),
	ExtensionType: (*int64)(nil),
	Field:         208,
	Name:          "test_proto.default_sint64",
	Tag:           "zigzag64,208,opt,name=default_sint64,json=defaultSint64,def=47",
	Filename:      "test.proto",
}

var E_DefaultFixed32 = &proto.ExtensionDesc{
	ExtendedType:  (*DefaultsMessage)(nil),
	ExtensionType: (*uint32)(nil),
	Field:         209,
	Name:          "test_proto.default_fixed32",
	Tag:           "fixed32,209,opt,name=default_fixed32,json=defaultFixed32,def=48",
	Filename:      "test.proto",
}

var E_DefaultFixed64 = &proto.ExtensionDesc{
	ExtendedType:  (*DefaultsMessage)(nil),
	ExtensionType: (*uint64)(nil),
	Field:         210,
	Name:          "test_proto.default_fixed64",
	Tag:           "fixed64,210,opt,name=default_fixed64,json=defaultFixed64,def=49",
	Filename:      "test.proto",
}

var E_DefaultSfixed32 = &proto.ExtensionDesc{
	ExtendedType:  (*DefaultsMessage)(nil),
	ExtensionType: (*int32)(nil),
	Field:         211,
	Name:          "test_proto.default_sfixed32",
	Tag:           "fixed32,211,opt,name=default_sfixed32,json=defaultSfixed32,def=50",
	Filename:      "test.proto",
}

var E_DefaultSfixed64 = &proto.ExtensionDesc{
	ExtendedType:  (*DefaultsMessage)(nil),
	ExtensionType: (*int64)(nil),
	Field:         212,
	Name:          "test_proto.default_sfixed64",
	Tag:           "fixed64,212,opt,name=default_sfixed64,json=defaultSfixed64,def=51",
	Filename:      "test.proto",
}

var E_DefaultBool = &proto.ExtensionDesc{
	ExtendedType:  (*DefaultsMessage)(nil),
	ExtensionType: (*bool)(nil),
	Field:         213,
	Name:          "test_proto.default_bool",
	Tag:           "varint,213,opt,name=default_bool,json=defaultBool,def=1",
	Filename:      "test.proto",
}

var E_DefaultString = &proto.ExtensionDesc{
	ExtendedType:  (*DefaultsMessage)(nil),
	ExtensionType: (*string)(nil),
	Field:         214,
	Name:          "test_proto.default_string",
	Tag:           "bytes,214,opt,name=default_string,json=defaultString,def=Hello, string,def=foo",
	Filename:      "test.proto",
}

var E_DefaultBytes = &proto.ExtensionDesc{
	ExtendedType:  (*DefaultsMessage)(nil),
	ExtensionType: ([]byte)(nil),
	Field:         215,
	Name:          "test_proto.default_bytes",
	Tag:           "bytes,215,opt,name=default_bytes,json=defaultBytes,def=Hello, bytes",
	Filename:      "test.proto",
}

var E_DefaultEnum = &proto.ExtensionDesc{
	ExtendedType:  (*DefaultsMessage)(nil),
	ExtensionType: (*DefaultsMessage_DefaultsEnum)(nil),
	Field:         216,
	Name:          "test_proto.default_enum",
	Tag:           "varint,216,opt,name=default_enum,json=defaultEnum,enum=test_proto.DefaultsMessage_DefaultsEnum,def=1",
	Filename:      "test.proto",
}

var E_X201 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         201,
	Name:          "test_proto.x201",
	Tag:           "bytes,201,opt,name=x201",
	Filename:      "test.proto",
}

var E_X202 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         202,
	Name:          "test_proto.x202",
	Tag:           "bytes,202,opt,name=x202",
	Filename:      "test.proto",
}

var E_X203 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         203,
	Name:          "test_proto.x203",
	Tag:           "bytes,203,opt,name=x203",
	Filename:      "test.proto",
}

var E_X204 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         204,
	Name:          "test_proto.x204",
	Tag:           "bytes,204,opt,name=x204",
	Filename:      "test.proto",
}

var E_X205 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         205,
	Name:          "test_proto.x205",
	Tag:           "bytes,205,opt,name=x205",
	Filename:      "test.proto",
}

var E_X206 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         206,
	Name:          "test_proto.x206",
	Tag:           "bytes,206,opt,name=x206",
	Filename:      "test.proto",
}

var E_X207 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         207,
	Name:          "test_proto.x207",
	Tag:           "bytes,207,opt,name=x207",
	Filename:      "test.proto",
}

var E_X208 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         208,
	Name:          "test_proto.x208",
	Tag:           "bytes,208,opt,name=x208",
	Filename:      "test.proto",
}

var E_X209 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         209,
	Name:          "test_proto.x209",
	Tag:           "bytes,209,opt,name=x209",
	Filename:      "test.proto",
}

var E_X210 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         210,
	Name:          "test_proto.x210",
	Tag:           "bytes,210,opt,name=x210",
	Filename:      "test.proto",
}

var E_X211 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         211,
	Name:          "test_proto.x211",
	Tag:           "bytes,211,opt,name=x211",
	Filename:      "test.proto",
}

var E_X212 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         212,
	Name:          "test_proto.x212",
	Tag:           "bytes,212,opt,name=x212",
	Filename:      "test.proto",
}

var E_X213 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         213,
	Name:          "test_proto.x213",
	Tag:           "bytes,213,opt,name=x213",
	Filename:      "test.proto",
}

var E_X214 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         214,
	Name:          "test_proto.x214",
	Tag:           "bytes,214,opt,name=x214",
	Filename:      "test.proto",
}

var E_X215 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         215,
	Name:          "test_proto.x215",
	Tag:           "bytes,215,opt,name=x215",
	Filename:      "test.proto",
}

var E_X216 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         216,
	Name:          "test_proto.x216",
	Tag:           "bytes,216,opt,name=x216",
	Filename:      "test.proto",
}

var E_X217 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         217,
	Name:          "test_proto.x217",
	Tag:           "bytes,217,opt,name=x217",
	Filename:      "test.proto",
}

var E_X218 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         218,
	Name:          "test_proto.x218",
	Tag:           "bytes,218,opt,name=x218",
	Filename:      "test.proto",
}

var E_X219 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         219,
	Name:          "test_proto.x219",
	Tag:           "bytes,219,opt,name=x219",
	Filename:      "test.proto",
}

var E_X220 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         220,
	Name:          "test_proto.x220",
	Tag:           "bytes,220,opt,name=x220",
	Filename:      "test.proto",
}

var E_X221 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         221,
	Name:          "test_proto.x221",
	Tag:           "bytes,221,opt,name=x221",
	Filename:      "test.proto",
}

var E_X222 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         222,
	Name:          "test_proto.x222",
	Tag:           "bytes,222,opt,name=x222",
	Filename:      "test.proto",
}

var E_X223 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         223,
	Name:          "test_proto.x223",
	Tag:           "bytes,223,opt,name=x223",
	Filename:      "test.proto",
}

var E_X224 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         224,
	Name:          "test_proto.x224",
	Tag:           "bytes,224,opt,name=x224",
	Filename:      "test.proto",
}

var E_X225 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         225,
	Name:          "test_proto.x225",
	Tag:           "bytes,225,opt,name=x225",
	Filename:      "test.proto",
}

var E_X226 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         226,
	Name:          "test_proto.x226",
	Tag:           "bytes,226,opt,name=x226",
	Filename:      "test.proto",
}

var E_X227 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         227,
	Name:          "test_proto.x227",
	Tag:           "bytes,227,opt,name=x227",
	Filename:      "test.proto",
}

var E_X228 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         228,
	Name:          "test_proto.x228",
	Tag:           "bytes,228,opt,name=x228",
	Filename:      "test.proto",
}

var E_X229 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         229,
	Name:          "test_proto.x229",
	Tag:           "bytes,229,opt,name=x229",
	Filename:      "test.proto",
}

var E_X230 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         230,
	Name:          "test_proto.x230",
	Tag:           "bytes,230,opt,name=x230",
	Filename:      "test.proto",
}

var E_X231 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         231,
	Name:          "test_proto.x231",
	Tag:           "bytes,231,opt,name=x231",
	Filename:      "test.proto",
}

var E_X232 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         232,
	Name:          "test_proto.x232",
	Tag:           "bytes,232,opt,name=x232",
	Filename:      "test.proto",
}

var E_X233 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         233,
	Name:          "test_proto.x233",
	Tag:           "bytes,233,opt,name=x233",
	Filename:      "test.proto",
}

var E_X234 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         234,
	Name:          "test_proto.x234",
	Tag:           "bytes,234,opt,name=x234",
	Filename:      "test.proto",
}

var E_X235 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         235,
	Name:          "test_proto.x235",
	Tag:           "bytes,235,opt,name=x235",
	Filename:      "test.proto",
}

var E_X236 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         236,
	Name:          "test_proto.x236",
	Tag:           "bytes,236,opt,name=x236",
	Filename:      "test.proto",
}

var E_X237 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         237,
	Name:          "test_proto.x237",
	Tag:           "bytes,237,opt,name=x237",
	Filename:      "test.proto",
}

var E_X238 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         238,
	Name:          "test_proto.x238",
	Tag:           "bytes,238,opt,name=x238",
	Filename:      "test.proto",
}

var E_X239 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         239,
	Name:          "test_proto.x239",
	Tag:           "bytes,239,opt,name=x239",
	Filename:      "test.proto",
}

var E_X240 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         240,
	Name:          "test_proto.x240",
	Tag:           "bytes,240,opt,name=x240",
	Filename:      "test.proto",
}

var E_X241 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         241,
	Name:          "test_proto.x241",
	Tag:           "bytes,241,opt,name=x241",
	Filename:      "test.proto",
}

var E_X242 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         242,
	Name:          "test_proto.x242",
	Tag:           "bytes,242,opt,name=x242",
	Filename:      "test.proto",
}

var E_X243 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         243,
	Name:          "test_proto.x243",
	Tag:           "bytes,243,opt,name=x243",
	Filename:      "test.proto",
}

var E_X244 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         244,
	Name:          "test_proto.x244",
	Tag:           "bytes,244,opt,name=x244",
	Filename:      "test.proto",
}

var E_X245 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         245,
	Name:          "test_proto.x245",
	Tag:           "bytes,245,opt,name=x245",
	Filename:      "test.proto",
}

var E_X246 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         246,
	Name:          "test_proto.x246",
	Tag:           "bytes,246,opt,name=x246",
	Filename:      "test.proto",
}

var E_X247 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         247,
	Name:          "test_proto.x247",
	Tag:           "bytes,247,opt,name=x247",
	Filename:      "test.proto",
}

var E_X248 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         248,
	Name:          "test_proto.x248",
	Tag:           "bytes,248,opt,name=x248",
	Filename:      "test.proto",
}

var E_X249 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         249,
	Name:          "test_proto.x249",
	Tag:           "bytes,249,opt,name=x249",
	Filename:      "test.proto",
}

var E_X250 = &proto.ExtensionDesc{
	ExtendedType:  (*MyMessageSet)(nil),
	ExtensionType: (*Empty)(nil),
	Field:         250,
	Name:          "test_proto.x250",
	Tag:           "bytes,250,opt,name=x250",
	Filename:      "test.proto",
}

func init() {
	proto.RegisterType((*GoEnum)(nil), "test_proto.GoEnum")
	proto.RegisterType((*GoTestField)(nil), "test_proto.GoTestField")
	proto.RegisterType((*GoTest)(nil), "test_proto.GoTest")
	proto.RegisterType((*GoTest_RequiredGroup)(nil), "test_proto.GoTest.RequiredGroup")
	proto.RegisterType((*GoTest_RepeatedGroup)(nil), "test_proto.GoTest.RepeatedGroup")
	proto.RegisterType((*GoTest_OptionalGroup)(nil), "test_proto.GoTest.OptionalGroup")
	proto.RegisterType((*GoTestRequiredGroupField)(nil), "test_proto.GoTestRequiredGroupField")
	proto.RegisterType((*GoTestRequiredGroupField_Group)(nil), "test_proto.GoTestRequiredGroupField.Group")
	proto.RegisterType((*GoSkipTest)(nil), "test_proto.GoSkipTest")
	proto.RegisterType((*GoSkipTest_SkipGroup)(nil), "test_proto.GoSkipTest.SkipGroup")
	proto.RegisterType((*NonPackedTest)(nil), "test_proto.NonPackedTest")
	proto.RegisterType((*PackedTest)(nil), "test_proto.PackedTest")
	proto.RegisterType((*MaxTag)(nil), "test_proto.MaxTag")
	proto.RegisterType((*OldMessage)(nil), "test_proto.OldMessage")
	proto.RegisterType((*OldMessage_Nested)(nil), "test_proto.OldMessage.Nested")
	proto.RegisterType((*NewMessage)(nil), "test_proto.NewMessage")
	proto.RegisterType((*NewMessage_Nested)(nil), "test_proto.NewMessage.Nested")
	proto.RegisterType((*InnerMessage)(nil), "test_proto.InnerMessage")
	proto.RegisterType((*OtherMessage)(nil), "test_proto.OtherMessage")
	proto.RegisterType((*RequiredInnerMessage)(nil), "test_proto.RequiredInnerMessage")
	proto.RegisterType((*MyMessage)(nil), "test_proto.MyMessage")
	proto.RegisterType((*MyMessage_SomeGroup)(nil), "test_proto.MyMessage.SomeGroup")
	proto.RegisterType((*Ext)(nil), "test_proto.Ext")
	proto.RegisterMapType((map[int32]int32)(nil), "test_proto.Ext.MapFieldEntry")
	proto.RegisterType((*ComplexExtension)(nil), "test_proto.ComplexExtension")
	proto.RegisterType((*DefaultsMessage)(nil), "test_proto.DefaultsMessage")
	proto.RegisterType((*MyMessageSet)(nil), "test_proto.MyMessageSet")
	proto.RegisterType((*Empty)(nil), "test_proto.Empty")
	proto.RegisterType((*MessageList)(nil), "test_proto.MessageList")
	proto.RegisterType((*MessageList_Message)(nil), "test_proto.MessageList.Message")
	proto.RegisterType((*Strings)(nil), "test_proto.Strings")
	proto.RegisterType((*Defaults)(nil), "test_proto.Defaults")
	proto.RegisterType((*SubDefaults)(nil), "test_proto.SubDefaults")
	proto.RegisterType((*RepeatedEnum)(nil), "test_proto.RepeatedEnum")
	proto.RegisterType((*MoreRepeated)(nil), "test_proto.MoreRepeated")
	proto.RegisterType((*GroupOld)(nil), "test_proto.GroupOld")
	proto.RegisterType((*GroupOld_G)(nil), "test_proto.GroupOld.G")
	proto.RegisterType((*GroupNew)(nil), "test_proto.GroupNew")
	proto.RegisterType((*GroupNew_G)(nil), "test_proto.GroupNew.G")
	proto.RegisterType((*FloatingPoint)(nil), "test_proto.FloatingPoint")
	proto.RegisterType((*MessageWithMap)(nil), "test_proto.MessageWithMap")
	proto.RegisterMapType((map[bool][]byte)(nil), "test_proto.MessageWithMap.ByteMappingEntry")
	proto.RegisterMapType((map[int64]*FloatingPoint)(nil), "test_proto.MessageWithMap.MsgMappingEntry")
	proto.RegisterMapType((map[int32]string)(nil), "test_proto.MessageWithMap.NameMappingEntry")
	proto.RegisterMapType((map[string]string)(nil), "test_proto.MessageWithMap.StrToStrEntry")
	proto.RegisterType((*Oneof)(nil), "test_proto.Oneof")
	proto.RegisterType((*Oneof_F_Group)(nil), "test_proto.Oneof.F_Group")
	proto.RegisterType((*Communique)(nil), "test_proto.Communique")
	proto.RegisterEnum("test_proto.FOO", FOO_name, FOO_value)
	proto.RegisterEnum("test_proto.GoTest_KIND", GoTest_KIND_name, GoTest_KIND_value)
	proto.RegisterEnum("test_proto.MyMessage_Color", MyMessage_Color_name, MyMessage_Color_value)
	proto.RegisterEnum("test_proto.DefaultsMessage_DefaultsEnum", DefaultsMessage_DefaultsEnum_name, DefaultsMessage_DefaultsEnum_value)
	proto.RegisterEnum("test_proto.Defaults_Color", Defaults_Color_name, Defaults_Color_value)
	proto.RegisterEnum("test_proto.RepeatedEnum_Color", RepeatedEnum_Color_name, RepeatedEnum_Color_value)
	proto.RegisterExtension(E_Ext_More)
	proto.RegisterExtension(E_Ext_Text)
	proto.RegisterExtension(E_Ext_Number)
	proto.RegisterExtension(E_Greeting)
	proto.RegisterExtension(E_Complex)
	proto.RegisterExtension(E_RComplex)
	proto.RegisterExtension(E_NoDefaultDouble)
	proto.RegisterExtension(E_NoDefaultFloat)
	proto.RegisterExtension(E_NoDefaultInt32)
	proto.RegisterExtension(E_NoDefaultInt64)
	proto.RegisterExtension(E_NoDefaultUint32)
	proto.RegisterExtension(E_NoDefaultUint64)
	proto.RegisterExtension(E_NoDefaultSint32)
	proto.RegisterExtension(E_NoDefaultSint64)
	proto.RegisterExtension(E_NoDefaultFixed32)
	proto.RegisterExtension(E_NoDefaultFixed64)
	proto.RegisterExtension(E_NoDefaultSfixed32)
	proto.RegisterExtension(E_NoDefaultSfixed64)
	proto.RegisterExtension(E_NoDefaultBool)
	proto.RegisterExtension(E_NoDefaultString)
	proto.RegisterExtension(E_NoDefaultBytes)
	proto.RegisterExtension(E_NoDefaultEnum)
	proto.RegisterExtension(E_DefaultDouble)
	proto.RegisterExtension(E_DefaultFloat)
	proto.RegisterExtension(E_DefaultInt32)
	proto.RegisterExtension(E_DefaultInt64)
	proto.RegisterExtension(E_DefaultUint32)
	proto.RegisterExtension(E_DefaultUint64)
	proto.RegisterExtension(E_DefaultSint32)
	proto.RegisterExtension(E_DefaultSint64)
	proto.RegisterExtension(E_DefaultFixed32)
	proto.RegisterExtension(E_DefaultFixed64)
	proto.RegisterExtension(E_DefaultSfixed32)
	proto.RegisterExtension(E_DefaultSfixed64)
	proto.RegisterExtension(E_DefaultBool)
	proto.RegisterExtension(E_DefaultString)
	proto.RegisterExtension(E_DefaultBytes)
	proto.RegisterExtension(E_DefaultEnum)
	proto.RegisterExtension(E_X201)
	proto.RegisterExtension(E_X202)
	proto.RegisterExtension(E_X203)
	proto.RegisterExtension(E_X204)
	proto.RegisterExtension(E_X205)
	proto.RegisterExtension(E_X206)
	proto.RegisterExtension(E_X207)
	proto.RegisterExtension(E_X208)
	proto.RegisterExtension(E_X209)
	proto.RegisterExtension(E_X210)
	proto.RegisterExtension(E_X211)
	proto.RegisterExtension(E_X212)
	proto.RegisterExtension(E_X213)
	proto.RegisterExtension(E_X214)
	proto.RegisterExtension(E_X215)
	proto.RegisterExtension(E_X216)
	proto.RegisterExtension(E_X217)
	proto.RegisterExtension(E_X218)
	proto.RegisterExtension(E_X219)
	proto.RegisterExtension(E_X220)
	proto.RegisterExtension(E_X221)
	proto.RegisterExtension(E_X222)
	proto.RegisterExtension(E_X223)
	proto.RegisterExtension(E_X224)
	proto.RegisterExtension(E_X225)
	proto.RegisterExtension(E_X226)
	proto.RegisterExtension(E_X227)
	proto.RegisterExtension(E_X228)
	proto.RegisterExtension(E_X229)
	proto.RegisterExtension(E_X230)
	proto.RegisterExtension(E_X231)
	proto.RegisterExtension(E_X232)
	proto.RegisterExtension(E_X233)
	proto.RegisterExtension(E_X234)
	proto.RegisterExtension(E_X235)
	proto.RegisterExtension(E_X236)
	proto.RegisterExtension(E_X237)
	proto.RegisterExtension(E_X238)
	proto.RegisterExtension(E_X239)
	proto.RegisterExtension(E_X240)
	proto.RegisterExtension(E_X241)
	proto.RegisterExtension(E_X242)
	proto.RegisterExtension(E_X243)
	proto.RegisterExtension(E_X244)
	proto.RegisterExtension(E_X245)
	proto.RegisterExtension(E_X246)
	proto.RegisterExtension(E_X247)
	proto.RegisterExtension(E_X248)
	proto.RegisterExtension(E_X249)
	proto.RegisterExtension(E_X250)
}

func init() { proto.RegisterFile("test.proto", fileDescriptor0) }

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