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

package conformance

import proto "github.com/golang/protobuf/proto"
import fmt "fmt"
import math "math"
import any "github.com/golang/protobuf/ptypes/any"
import duration "github.com/golang/protobuf/ptypes/duration"
import _struct "github.com/golang/protobuf/ptypes/struct"
import timestamp "github.com/golang/protobuf/ptypes/timestamp"
import wrappers "github.com/golang/protobuf/ptypes/wrappers"
import protobuf "google.golang.org/genproto/protobuf"

// 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 WireFormat int32

const (
	WireFormat_UNSPECIFIED WireFormat = 0
	WireFormat_PROTOBUF    WireFormat = 1
	WireFormat_JSON        WireFormat = 2
)

var WireFormat_name = map[int32]string{
	0: "UNSPECIFIED",
	1: "PROTOBUF",
	2: "JSON",
}
var WireFormat_value = map[string]int32{
	"UNSPECIFIED": 0,
	"PROTOBUF":    1,
	"JSON":        2,
}

func (x WireFormat) String() string {
	return proto.EnumName(WireFormat_name, int32(x))
}
func (WireFormat) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_conformance_3cdb5b28737909f3, []int{0}
}

type ForeignEnum int32

const (
	ForeignEnum_FOREIGN_FOO ForeignEnum = 0
	ForeignEnum_FOREIGN_BAR ForeignEnum = 1
	ForeignEnum_FOREIGN_BAZ ForeignEnum = 2
)

var ForeignEnum_name = map[int32]string{
	0: "FOREIGN_FOO",
	1: "FOREIGN_BAR",
	2: "FOREIGN_BAZ",
}
var ForeignEnum_value = map[string]int32{
	"FOREIGN_FOO": 0,
	"FOREIGN_BAR": 1,
	"FOREIGN_BAZ": 2,
}

func (x ForeignEnum) String() string {
	return proto.EnumName(ForeignEnum_name, int32(x))
}
func (ForeignEnum) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_conformance_3cdb5b28737909f3, []int{1}
}

type TestAllTypes_NestedEnum int32

const (
	TestAllTypes_FOO TestAllTypes_NestedEnum = 0
	TestAllTypes_BAR TestAllTypes_NestedEnum = 1
	TestAllTypes_BAZ TestAllTypes_NestedEnum = 2
	TestAllTypes_NEG TestAllTypes_NestedEnum = -1
)

var TestAllTypes_NestedEnum_name = map[int32]string{
	0:  "FOO",
	1:  "BAR",
	2:  "BAZ",
	-1: "NEG",
}
var TestAllTypes_NestedEnum_value = map[string]int32{
	"FOO": 0,
	"BAR": 1,
	"BAZ": 2,
	"NEG": -1,
}

func (x TestAllTypes_NestedEnum) String() string {
	return proto.EnumName(TestAllTypes_NestedEnum_name, int32(x))
}
func (TestAllTypes_NestedEnum) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_conformance_3cdb5b28737909f3, []int{2, 0}
}

// Represents a single test case's input.  The testee should:
//
//   1. parse this proto (which should always succeed)
//   2. parse the protobuf or JSON payload in "payload" (which may fail)
//   3. if the parse succeeded, serialize the message in the requested format.
type ConformanceRequest struct {
	// The payload (whether protobuf of JSON) is always for a TestAllTypes proto
	// (see below).
	//
	// Types that are valid to be assigned to Payload:
	//	*ConformanceRequest_ProtobufPayload
	//	*ConformanceRequest_JsonPayload
	Payload isConformanceRequest_Payload `protobuf_oneof:"payload"`
	// Which format should the testee serialize its message to?
	RequestedOutputFormat WireFormat `protobuf:"varint,3,opt,name=requested_output_format,json=requestedOutputFormat,enum=conformance.WireFormat" json:"requested_output_format,omitempty"`
	XXX_NoUnkeyedLiteral  struct{}   `json:"-"`
	XXX_unrecognized      []byte     `json:"-"`
	XXX_sizecache         int32      `json:"-"`
}

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

var xxx_messageInfo_ConformanceRequest proto.InternalMessageInfo

type isConformanceRequest_Payload interface {
	isConformanceRequest_Payload()
}

type ConformanceRequest_ProtobufPayload struct {
	ProtobufPayload []byte `protobuf:"bytes,1,opt,name=protobuf_payload,json=protobufPayload,proto3,oneof"`
}
type ConformanceRequest_JsonPayload struct {
	JsonPayload string `protobuf:"bytes,2,opt,name=json_payload,json=jsonPayload,oneof"`
}

func (*ConformanceRequest_ProtobufPayload) isConformanceRequest_Payload() {}
func (*ConformanceRequest_JsonPayload) isConformanceRequest_Payload()     {}

func (m *ConformanceRequest) GetPayload() isConformanceRequest_Payload {
	if m != nil {
		return m.Payload
	}
	return nil
}

func (m *ConformanceRequest) GetProtobufPayload() []byte {
	if x, ok := m.GetPayload().(*ConformanceRequest_ProtobufPayload); ok {
		return x.ProtobufPayload
	}
	return nil
}

func (m *ConformanceRequest) GetJsonPayload() string {
	if x, ok := m.GetPayload().(*ConformanceRequest_JsonPayload); ok {
		return x.JsonPayload
	}
	return ""
}

func (m *ConformanceRequest) GetRequestedOutputFormat() WireFormat {
	if m != nil {
		return m.RequestedOutputFormat
	}
	return WireFormat_UNSPECIFIED
}

// XXX_OneofFuncs is for the internal use of the proto package.
func (*ConformanceRequest) 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 _ConformanceRequest_OneofMarshaler, _ConformanceRequest_OneofUnmarshaler, _ConformanceRequest_OneofSizer, []interface{}{
		(*ConformanceRequest_ProtobufPayload)(nil),
		(*ConformanceRequest_JsonPayload)(nil),
	}
}

func _ConformanceRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
	m := msg.(*ConformanceRequest)
	// payload
	switch x := m.Payload.(type) {
	case *ConformanceRequest_ProtobufPayload:
		b.EncodeVarint(1<<3 | proto.WireBytes)
		b.EncodeRawBytes(x.ProtobufPayload)
	case *ConformanceRequest_JsonPayload:
		b.EncodeVarint(2<<3 | proto.WireBytes)
		b.EncodeStringBytes(x.JsonPayload)
	case nil:
	default:
		return fmt.Errorf("ConformanceRequest.Payload has unexpected type %T", x)
	}
	return nil
}

func _ConformanceRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
	m := msg.(*ConformanceRequest)
	switch tag {
	case 1: // payload.protobuf_payload
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeRawBytes(true)
		m.Payload = &ConformanceRequest_ProtobufPayload{x}
		return true, err
	case 2: // payload.json_payload
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeStringBytes()
		m.Payload = &ConformanceRequest_JsonPayload{x}
		return true, err
	default:
		return false, nil
	}
}

func _ConformanceRequest_OneofSizer(msg proto.Message) (n int) {
	m := msg.(*ConformanceRequest)
	// payload
	switch x := m.Payload.(type) {
	case *ConformanceRequest_ProtobufPayload:
		n += proto.SizeVarint(1<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(len(x.ProtobufPayload)))
		n += len(x.ProtobufPayload)
	case *ConformanceRequest_JsonPayload:
		n += proto.SizeVarint(2<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(len(x.JsonPayload)))
		n += len(x.JsonPayload)
	case nil:
	default:
		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
	}
	return n
}

// Represents a single test case's output.
type ConformanceResponse struct {
	// Types that are valid to be assigned to Result:
	//	*ConformanceResponse_ParseError
	//	*ConformanceResponse_SerializeError
	//	*ConformanceResponse_RuntimeError
	//	*ConformanceResponse_ProtobufPayload
	//	*ConformanceResponse_JsonPayload
	//	*ConformanceResponse_Skipped
	Result               isConformanceResponse_Result `protobuf_oneof:"result"`
	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
	XXX_unrecognized     []byte                       `json:"-"`
	XXX_sizecache        int32                        `json:"-"`
}

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

var xxx_messageInfo_ConformanceResponse proto.InternalMessageInfo

type isConformanceResponse_Result interface {
	isConformanceResponse_Result()
}

type ConformanceResponse_ParseError struct {
	ParseError string `protobuf:"bytes,1,opt,name=parse_error,json=parseError,oneof"`
}
type ConformanceResponse_SerializeError struct {
	SerializeError string `protobuf:"bytes,6,opt,name=serialize_error,json=serializeError,oneof"`
}
type ConformanceResponse_RuntimeError struct {
	RuntimeError string `protobuf:"bytes,2,opt,name=runtime_error,json=runtimeError,oneof"`
}
type ConformanceResponse_ProtobufPayload struct {
	ProtobufPayload []byte `protobuf:"bytes,3,opt,name=protobuf_payload,json=protobufPayload,proto3,oneof"`
}
type ConformanceResponse_JsonPayload struct {
	JsonPayload string `protobuf:"bytes,4,opt,name=json_payload,json=jsonPayload,oneof"`
}
type ConformanceResponse_Skipped struct {
	Skipped string `protobuf:"bytes,5,opt,name=skipped,oneof"`
}

func (*ConformanceResponse_ParseError) isConformanceResponse_Result()      {}
func (*ConformanceResponse_SerializeError) isConformanceResponse_Result()  {}
func (*ConformanceResponse_RuntimeError) isConformanceResponse_Result()    {}
func (*ConformanceResponse_ProtobufPayload) isConformanceResponse_Result() {}
func (*ConformanceResponse_JsonPayload) isConformanceResponse_Result()     {}
func (*ConformanceResponse_Skipped) isConformanceResponse_Result()         {}

func (m *ConformanceResponse) GetResult() isConformanceResponse_Result {
	if m != nil {
		return m.Result
	}
	return nil
}

func (m *ConformanceResponse) GetParseError() string {
	if x, ok := m.GetResult().(*ConformanceResponse_ParseError); ok {
		return x.ParseError
	}
	return ""
}

func (m *ConformanceResponse) GetSerializeError() string {
	if x, ok := m.GetResult().(*ConformanceResponse_SerializeError); ok {
		return x.SerializeError
	}
	return ""
}

func (m *ConformanceResponse) GetRuntimeError() string {
	if x, ok := m.GetResult().(*ConformanceResponse_RuntimeError); ok {
		return x.RuntimeError
	}
	return ""
}

func (m *ConformanceResponse) GetProtobufPayload() []byte {
	if x, ok := m.GetResult().(*ConformanceResponse_ProtobufPayload); ok {
		return x.ProtobufPayload
	}
	return nil
}

func (m *ConformanceResponse) GetJsonPayload() string {
	if x, ok := m.GetResult().(*ConformanceResponse_JsonPayload); ok {
		return x.JsonPayload
	}
	return ""
}

func (m *ConformanceResponse) GetSkipped() string {
	if x, ok := m.GetResult().(*ConformanceResponse_Skipped); ok {
		return x.Skipped
	}
	return ""
}

// XXX_OneofFuncs is for the internal use of the proto package.
func (*ConformanceResponse) 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 _ConformanceResponse_OneofMarshaler, _ConformanceResponse_OneofUnmarshaler, _ConformanceResponse_OneofSizer, []interface{}{
		(*ConformanceResponse_ParseError)(nil),
		(*ConformanceResponse_SerializeError)(nil),
		(*ConformanceResponse_RuntimeError)(nil),
		(*ConformanceResponse_ProtobufPayload)(nil),
		(*ConformanceResponse_JsonPayload)(nil),
		(*ConformanceResponse_Skipped)(nil),
	}
}

func _ConformanceResponse_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
	m := msg.(*ConformanceResponse)
	// result
	switch x := m.Result.(type) {
	case *ConformanceResponse_ParseError:
		b.EncodeVarint(1<<3 | proto.WireBytes)
		b.EncodeStringBytes(x.ParseError)
	case *ConformanceResponse_SerializeError:
		b.EncodeVarint(6<<3 | proto.WireBytes)
		b.EncodeStringBytes(x.SerializeError)
	case *ConformanceResponse_RuntimeError:
		b.EncodeVarint(2<<3 | proto.WireBytes)
		b.EncodeStringBytes(x.RuntimeError)
	case *ConformanceResponse_ProtobufPayload:
		b.EncodeVarint(3<<3 | proto.WireBytes)
		b.EncodeRawBytes(x.ProtobufPayload)
	case *ConformanceResponse_JsonPayload:
		b.EncodeVarint(4<<3 | proto.WireBytes)
		b.EncodeStringBytes(x.JsonPayload)
	case *ConformanceResponse_Skipped:
		b.EncodeVarint(5<<3 | proto.WireBytes)
		b.EncodeStringBytes(x.Skipped)
	case nil:
	default:
		return fmt.Errorf("ConformanceResponse.Result has unexpected type %T", x)
	}
	return nil
}

func _ConformanceResponse_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
	m := msg.(*ConformanceResponse)
	switch tag {
	case 1: // result.parse_error
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeStringBytes()
		m.Result = &ConformanceResponse_ParseError{x}
		return true, err
	case 6: // result.serialize_error
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeStringBytes()
		m.Result = &ConformanceResponse_SerializeError{x}
		return true, err
	case 2: // result.runtime_error
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeStringBytes()
		m.Result = &ConformanceResponse_RuntimeError{x}
		return true, err
	case 3: // result.protobuf_payload
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeRawBytes(true)
		m.Result = &ConformanceResponse_ProtobufPayload{x}
		return true, err
	case 4: // result.json_payload
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeStringBytes()
		m.Result = &ConformanceResponse_JsonPayload{x}
		return true, err
	case 5: // result.skipped
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeStringBytes()
		m.Result = &ConformanceResponse_Skipped{x}
		return true, err
	default:
		return false, nil
	}
}

func _ConformanceResponse_OneofSizer(msg proto.Message) (n int) {
	m := msg.(*ConformanceResponse)
	// result
	switch x := m.Result.(type) {
	case *ConformanceResponse_ParseError:
		n += proto.SizeVarint(1<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(len(x.ParseError)))
		n += len(x.ParseError)
	case *ConformanceResponse_SerializeError:
		n += proto.SizeVarint(6<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(len(x.SerializeError)))
		n += len(x.SerializeError)
	case *ConformanceResponse_RuntimeError:
		n += proto.SizeVarint(2<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(len(x.RuntimeError)))
		n += len(x.RuntimeError)
	case *ConformanceResponse_ProtobufPayload:
		n += proto.SizeVarint(3<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(len(x.ProtobufPayload)))
		n += len(x.ProtobufPayload)
	case *ConformanceResponse_JsonPayload:
		n += proto.SizeVarint(4<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(len(x.JsonPayload)))
		n += len(x.JsonPayload)
	case *ConformanceResponse_Skipped:
		n += proto.SizeVarint(5<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(len(x.Skipped)))
		n += len(x.Skipped)
	case nil:
	default:
		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
	}
	return n
}

// This proto includes every type of field in both singular and repeated
// forms.
type TestAllTypes struct {
	// Singular
	OptionalInt32          int32                       `protobuf:"varint,1,opt,name=optional_int32,json=optionalInt32" json:"optional_int32,omitempty"`
	OptionalInt64          int64                       `protobuf:"varint,2,opt,name=optional_int64,json=optionalInt64" json:"optional_int64,omitempty"`
	OptionalUint32         uint32                      `protobuf:"varint,3,opt,name=optional_uint32,json=optionalUint32" json:"optional_uint32,omitempty"`
	OptionalUint64         uint64                      `protobuf:"varint,4,opt,name=optional_uint64,json=optionalUint64" json:"optional_uint64,omitempty"`
	OptionalSint32         int32                       `protobuf:"zigzag32,5,opt,name=optional_sint32,json=optionalSint32" json:"optional_sint32,omitempty"`
	OptionalSint64         int64                       `protobuf:"zigzag64,6,opt,name=optional_sint64,json=optionalSint64" json:"optional_sint64,omitempty"`
	OptionalFixed32        uint32                      `protobuf:"fixed32,7,opt,name=optional_fixed32,json=optionalFixed32" json:"optional_fixed32,omitempty"`
	OptionalFixed64        uint64                      `protobuf:"fixed64,8,opt,name=optional_fixed64,json=optionalFixed64" json:"optional_fixed64,omitempty"`
	OptionalSfixed32       int32                       `protobuf:"fixed32,9,opt,name=optional_sfixed32,json=optionalSfixed32" json:"optional_sfixed32,omitempty"`
	OptionalSfixed64       int64                       `protobuf:"fixed64,10,opt,name=optional_sfixed64,json=optionalSfixed64" json:"optional_sfixed64,omitempty"`
	OptionalFloat          float32                     `protobuf:"fixed32,11,opt,name=optional_float,json=optionalFloat" json:"optional_float,omitempty"`
	OptionalDouble         float64                     `protobuf:"fixed64,12,opt,name=optional_double,json=optionalDouble" json:"optional_double,omitempty"`
	OptionalBool           bool                        `protobuf:"varint,13,opt,name=optional_bool,json=optionalBool" json:"optional_bool,omitempty"`
	OptionalString         string                      `protobuf:"bytes,14,opt,name=optional_string,json=optionalString" json:"optional_string,omitempty"`
	OptionalBytes          []byte                      `protobuf:"bytes,15,opt,name=optional_bytes,json=optionalBytes,proto3" json:"optional_bytes,omitempty"`
	OptionalNestedMessage  *TestAllTypes_NestedMessage `protobuf:"bytes,18,opt,name=optional_nested_message,json=optionalNestedMessage" json:"optional_nested_message,omitempty"`
	OptionalForeignMessage *ForeignMessage             `protobuf:"bytes,19,opt,name=optional_foreign_message,json=optionalForeignMessage" json:"optional_foreign_message,omitempty"`
	OptionalNestedEnum     TestAllTypes_NestedEnum     `protobuf:"varint,21,opt,name=optional_nested_enum,json=optionalNestedEnum,enum=conformance.TestAllTypes_NestedEnum" json:"optional_nested_enum,omitempty"`
	OptionalForeignEnum    ForeignEnum                 `protobuf:"varint,22,opt,name=optional_foreign_enum,json=optionalForeignEnum,enum=conformance.ForeignEnum" json:"optional_foreign_enum,omitempty"`
	OptionalStringPiece    string                      `protobuf:"bytes,24,opt,name=optional_string_piece,json=optionalStringPiece" json:"optional_string_piece,omitempty"`
	OptionalCord           string                      `protobuf:"bytes,25,opt,name=optional_cord,json=optionalCord" json:"optional_cord,omitempty"`
	RecursiveMessage       *TestAllTypes               `protobuf:"bytes,27,opt,name=recursive_message,json=recursiveMessage" json:"recursive_message,omitempty"`
	// Repeated
	RepeatedInt32          []int32                       `protobuf:"varint,31,rep,packed,name=repeated_int32,json=repeatedInt32" json:"repeated_int32,omitempty"`
	RepeatedInt64          []int64                       `protobuf:"varint,32,rep,packed,name=repeated_int64,json=repeatedInt64" json:"repeated_int64,omitempty"`
	RepeatedUint32         []uint32                      `protobuf:"varint,33,rep,packed,name=repeated_uint32,json=repeatedUint32" json:"repeated_uint32,omitempty"`
	RepeatedUint64         []uint64                      `protobuf:"varint,34,rep,packed,name=repeated_uint64,json=repeatedUint64" json:"repeated_uint64,omitempty"`
	RepeatedSint32         []int32                       `protobuf:"zigzag32,35,rep,packed,name=repeated_sint32,json=repeatedSint32" json:"repeated_sint32,omitempty"`
	RepeatedSint64         []int64                       `protobuf:"zigzag64,36,rep,packed,name=repeated_sint64,json=repeatedSint64" json:"repeated_sint64,omitempty"`
	RepeatedFixed32        []uint32                      `protobuf:"fixed32,37,rep,packed,name=repeated_fixed32,json=repeatedFixed32" json:"repeated_fixed32,omitempty"`
	RepeatedFixed64        []uint64                      `protobuf:"fixed64,38,rep,packed,name=repeated_fixed64,json=repeatedFixed64" json:"repeated_fixed64,omitempty"`
	RepeatedSfixed32       []int32                       `protobuf:"fixed32,39,rep,packed,name=repeated_sfixed32,json=repeatedSfixed32" json:"repeated_sfixed32,omitempty"`
	RepeatedSfixed64       []int64                       `protobuf:"fixed64,40,rep,packed,name=repeated_sfixed64,json=repeatedSfixed64" json:"repeated_sfixed64,omitempty"`
	RepeatedFloat          []float32                     `protobuf:"fixed32,41,rep,packed,name=repeated_float,json=repeatedFloat" json:"repeated_float,omitempty"`
	RepeatedDouble         []float64                     `protobuf:"fixed64,42,rep,packed,name=repeated_double,json=repeatedDouble" json:"repeated_double,omitempty"`
	RepeatedBool           []bool                        `protobuf:"varint,43,rep,packed,name=repeated_bool,json=repeatedBool" json:"repeated_bool,omitempty"`
	RepeatedString         []string                      `protobuf:"bytes,44,rep,name=repeated_string,json=repeatedString" json:"repeated_string,omitempty"`
	RepeatedBytes          [][]byte                      `protobuf:"bytes,45,rep,name=repeated_bytes,json=repeatedBytes,proto3" json:"repeated_bytes,omitempty"`
	RepeatedNestedMessage  []*TestAllTypes_NestedMessage `protobuf:"bytes,48,rep,name=repeated_nested_message,json=repeatedNestedMessage" json:"repeated_nested_message,omitempty"`
	RepeatedForeignMessage []*ForeignMessage             `protobuf:"bytes,49,rep,name=repeated_foreign_message,json=repeatedForeignMessage" json:"repeated_foreign_message,omitempty"`
	RepeatedNestedEnum     []TestAllTypes_NestedEnum     `protobuf:"varint,51,rep,packed,name=repeated_nested_enum,json=repeatedNestedEnum,enum=conformance.TestAllTypes_NestedEnum" json:"repeated_nested_enum,omitempty"`
	RepeatedForeignEnum    []ForeignEnum                 `protobuf:"varint,52,rep,packed,name=repeated_foreign_enum,json=repeatedForeignEnum,enum=conformance.ForeignEnum" json:"repeated_foreign_enum,omitempty"`
	RepeatedStringPiece    []string                      `protobuf:"bytes,54,rep,name=repeated_string_piece,json=repeatedStringPiece" json:"repeated_string_piece,omitempty"`
	RepeatedCord           []string                      `protobuf:"bytes,55,rep,name=repeated_cord,json=repeatedCord" json:"repeated_cord,omitempty"`
	// Map
	MapInt32Int32           map[int32]int32                        `protobuf:"bytes,56,rep,name=map_int32_int32,json=mapInt32Int32" json:"map_int32_int32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	MapInt64Int64           map[int64]int64                        `protobuf:"bytes,57,rep,name=map_int64_int64,json=mapInt64Int64" json:"map_int64_int64,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	MapUint32Uint32         map[uint32]uint32                      `protobuf:"bytes,58,rep,name=map_uint32_uint32,json=mapUint32Uint32" json:"map_uint32_uint32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	MapUint64Uint64         map[uint64]uint64                      `protobuf:"bytes,59,rep,name=map_uint64_uint64,json=mapUint64Uint64" json:"map_uint64_uint64,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	MapSint32Sint32         map[int32]int32                        `protobuf:"bytes,60,rep,name=map_sint32_sint32,json=mapSint32Sint32" json:"map_sint32_sint32,omitempty" protobuf_key:"zigzag32,1,opt,name=key" protobuf_val:"zigzag32,2,opt,name=value"`
	MapSint64Sint64         map[int64]int64                        `protobuf:"bytes,61,rep,name=map_sint64_sint64,json=mapSint64Sint64" json:"map_sint64_sint64,omitempty" protobuf_key:"zigzag64,1,opt,name=key" protobuf_val:"zigzag64,2,opt,name=value"`
	MapFixed32Fixed32       map[uint32]uint32                      `protobuf:"bytes,62,rep,name=map_fixed32_fixed32,json=mapFixed32Fixed32" json:"map_fixed32_fixed32,omitempty" protobuf_key:"fixed32,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"`
	MapFixed64Fixed64       map[uint64]uint64                      `protobuf:"bytes,63,rep,name=map_fixed64_fixed64,json=mapFixed64Fixed64" json:"map_fixed64_fixed64,omitempty" protobuf_key:"fixed64,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"`
	MapSfixed32Sfixed32     map[int32]int32                        `protobuf:"bytes,64,rep,name=map_sfixed32_sfixed32,json=mapSfixed32Sfixed32" json:"map_sfixed32_sfixed32,omitempty" protobuf_key:"fixed32,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"`
	MapSfixed64Sfixed64     map[int64]int64                        `protobuf:"bytes,65,rep,name=map_sfixed64_sfixed64,json=mapSfixed64Sfixed64" json:"map_sfixed64_sfixed64,omitempty" protobuf_key:"fixed64,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"`
	MapInt32Float           map[int32]float32                      `protobuf:"bytes,66,rep,name=map_int32_float,json=mapInt32Float" json:"map_int32_float,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"`
	MapInt32Double          map[int32]float64                      `protobuf:"bytes,67,rep,name=map_int32_double,json=mapInt32Double" json:"map_int32_double,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"`
	MapBoolBool             map[bool]bool                          `protobuf:"bytes,68,rep,name=map_bool_bool,json=mapBoolBool" json:"map_bool_bool,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	MapStringString         map[string]string                      `protobuf:"bytes,69,rep,name=map_string_string,json=mapStringString" json:"map_string_string,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	MapStringBytes          map[string][]byte                      `protobuf:"bytes,70,rep,name=map_string_bytes,json=mapStringBytes" json:"map_string_bytes,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value,proto3"`
	MapStringNestedMessage  map[string]*TestAllTypes_NestedMessage `protobuf:"bytes,71,rep,name=map_string_nested_message,json=mapStringNestedMessage" json:"map_string_nested_message,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	MapStringForeignMessage map[string]*ForeignMessage             `protobuf:"bytes,72,rep,name=map_string_foreign_message,json=mapStringForeignMessage" json:"map_string_foreign_message,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	MapStringNestedEnum     map[string]TestAllTypes_NestedEnum     `protobuf:"bytes,73,rep,name=map_string_nested_enum,json=mapStringNestedEnum" json:"map_string_nested_enum,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=conformance.TestAllTypes_NestedEnum"`
	MapStringForeignEnum    map[string]ForeignEnum                 `protobuf:"bytes,74,rep,name=map_string_foreign_enum,json=mapStringForeignEnum" json:"map_string_foreign_enum,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=conformance.ForeignEnum"`
	// Types that are valid to be assigned to OneofField:
	//	*TestAllTypes_OneofUint32
	//	*TestAllTypes_OneofNestedMessage
	//	*TestAllTypes_OneofString
	//	*TestAllTypes_OneofBytes
	//	*TestAllTypes_OneofBool
	//	*TestAllTypes_OneofUint64
	//	*TestAllTypes_OneofFloat
	//	*TestAllTypes_OneofDouble
	//	*TestAllTypes_OneofEnum
	OneofField isTestAllTypes_OneofField `protobuf_oneof:"oneof_field"`
	// Well-known types
	OptionalBoolWrapper   *wrappers.BoolValue     `protobuf:"bytes,201,opt,name=optional_bool_wrapper,json=optionalBoolWrapper" json:"optional_bool_wrapper,omitempty"`
	OptionalInt32Wrapper  *wrappers.Int32Value    `protobuf:"bytes,202,opt,name=optional_int32_wrapper,json=optionalInt32Wrapper" json:"optional_int32_wrapper,omitempty"`
	OptionalInt64Wrapper  *wrappers.Int64Value    `protobuf:"bytes,203,opt,name=optional_int64_wrapper,json=optionalInt64Wrapper" json:"optional_int64_wrapper,omitempty"`
	OptionalUint32Wrapper *wrappers.UInt32Value   `protobuf:"bytes,204,opt,name=optional_uint32_wrapper,json=optionalUint32Wrapper" json:"optional_uint32_wrapper,omitempty"`
	OptionalUint64Wrapper *wrappers.UInt64Value   `protobuf:"bytes,205,opt,name=optional_uint64_wrapper,json=optionalUint64Wrapper" json:"optional_uint64_wrapper,omitempty"`
	OptionalFloatWrapper  *wrappers.FloatValue    `protobuf:"bytes,206,opt,name=optional_float_wrapper,json=optionalFloatWrapper" json:"optional_float_wrapper,omitempty"`
	OptionalDoubleWrapper *wrappers.DoubleValue   `protobuf:"bytes,207,opt,name=optional_double_wrapper,json=optionalDoubleWrapper" json:"optional_double_wrapper,omitempty"`
	OptionalStringWrapper *wrappers.StringValue   `protobuf:"bytes,208,opt,name=optional_string_wrapper,json=optionalStringWrapper" json:"optional_string_wrapper,omitempty"`
	OptionalBytesWrapper  *wrappers.BytesValue    `protobuf:"bytes,209,opt,name=optional_bytes_wrapper,json=optionalBytesWrapper" json:"optional_bytes_wrapper,omitempty"`
	RepeatedBoolWrapper   []*wrappers.BoolValue   `protobuf:"bytes,211,rep,name=repeated_bool_wrapper,json=repeatedBoolWrapper" json:"repeated_bool_wrapper,omitempty"`
	RepeatedInt32Wrapper  []*wrappers.Int32Value  `protobuf:"bytes,212,rep,name=repeated_int32_wrapper,json=repeatedInt32Wrapper" json:"repeated_int32_wrapper,omitempty"`
	RepeatedInt64Wrapper  []*wrappers.Int64Value  `protobuf:"bytes,213,rep,name=repeated_int64_wrapper,json=repeatedInt64Wrapper" json:"repeated_int64_wrapper,omitempty"`
	RepeatedUint32Wrapper []*wrappers.UInt32Value `protobuf:"bytes,214,rep,name=repeated_uint32_wrapper,json=repeatedUint32Wrapper" json:"repeated_uint32_wrapper,omitempty"`
	RepeatedUint64Wrapper []*wrappers.UInt64Value `protobuf:"bytes,215,rep,name=repeated_uint64_wrapper,json=repeatedUint64Wrapper" json:"repeated_uint64_wrapper,omitempty"`
	RepeatedFloatWrapper  []*wrappers.FloatValue  `protobuf:"bytes,216,rep,name=repeated_float_wrapper,json=repeatedFloatWrapper" json:"repeated_float_wrapper,omitempty"`
	RepeatedDoubleWrapper []*wrappers.DoubleValue `protobuf:"bytes,217,rep,name=repeated_double_wrapper,json=repeatedDoubleWrapper" json:"repeated_double_wrapper,omitempty"`
	RepeatedStringWrapper []*wrappers.StringValue `protobuf:"bytes,218,rep,name=repeated_string_wrapper,json=repeatedStringWrapper" json:"repeated_string_wrapper,omitempty"`
	RepeatedBytesWrapper  []*wrappers.BytesValue  `protobuf:"bytes,219,rep,name=repeated_bytes_wrapper,json=repeatedBytesWrapper" json:"repeated_bytes_wrapper,omitempty"`
	OptionalDuration      *duration.Duration      `protobuf:"bytes,301,opt,name=optional_duration,json=optionalDuration" json:"optional_duration,omitempty"`
	OptionalTimestamp     *timestamp.Timestamp    `protobuf:"bytes,302,opt,name=optional_timestamp,json=optionalTimestamp" json:"optional_timestamp,omitempty"`
	OptionalFieldMask     *protobuf.FieldMask     `protobuf:"bytes,303,opt,name=optional_field_mask,json=optionalFieldMask" json:"optional_field_mask,omitempty"`
	OptionalStruct        *_struct.Struct         `protobuf:"bytes,304,opt,name=optional_struct,json=optionalStruct" json:"optional_struct,omitempty"`
	OptionalAny           *any.Any                `protobuf:"bytes,305,opt,name=optional_any,json=optionalAny" json:"optional_any,omitempty"`
	OptionalValue         *_struct.Value          `protobuf:"bytes,306,opt,name=optional_value,json=optionalValue" json:"optional_value,omitempty"`
	RepeatedDuration      []*duration.Duration    `protobuf:"bytes,311,rep,name=repeated_duration,json=repeatedDuration" json:"repeated_duration,omitempty"`
	RepeatedTimestamp     []*timestamp.Timestamp  `protobuf:"bytes,312,rep,name=repeated_timestamp,json=repeatedTimestamp" json:"repeated_timestamp,omitempty"`
	RepeatedFieldmask     []*protobuf.FieldMask   `protobuf:"bytes,313,rep,name=repeated_fieldmask,json=repeatedFieldmask" json:"repeated_fieldmask,omitempty"`
	RepeatedStruct        []*_struct.Struct       `protobuf:"bytes,324,rep,name=repeated_struct,json=repeatedStruct" json:"repeated_struct,omitempty"`
	RepeatedAny           []*any.Any              `protobuf:"bytes,315,rep,name=repeated_any,json=repeatedAny" json:"repeated_any,omitempty"`
	RepeatedValue         []*_struct.Value        `protobuf:"bytes,316,rep,name=repeated_value,json=repeatedValue" json:"repeated_value,omitempty"`
	// Test field-name-to-JSON-name convention.
	// (protobuf says names can be any valid C/C++ identifier.)
	Fieldname1           int32    `protobuf:"varint,401,opt,name=fieldname1" json:"fieldname1,omitempty"`
	FieldName2           int32    `protobuf:"varint,402,opt,name=field_name2,json=fieldName2" json:"field_name2,omitempty"`
	XFieldName3          int32    `protobuf:"varint,403,opt,name=_field_name3,json=FieldName3" json:"_field_name3,omitempty"`
	Field_Name4_         int32    `protobuf:"varint,404,opt,name=field__name4_,json=fieldName4" json:"field__name4_,omitempty"`
	Field0Name5          int32    `protobuf:"varint,405,opt,name=field0name5" json:"field0name5,omitempty"`
	Field_0Name6         int32    `protobuf:"varint,406,opt,name=field_0_name6,json=field0Name6" json:"field_0_name6,omitempty"`
	FieldName7           int32    `protobuf:"varint,407,opt,name=fieldName7" json:"fieldName7,omitempty"`
	FieldName8           int32    `protobuf:"varint,408,opt,name=FieldName8" json:"FieldName8,omitempty"`
	Field_Name9          int32    `protobuf:"varint,409,opt,name=field_Name9,json=fieldName9" json:"field_Name9,omitempty"`
	Field_Name10         int32    `protobuf:"varint,410,opt,name=Field_Name10,json=FieldName10" json:"Field_Name10,omitempty"`
	FIELD_NAME11         int32    `protobuf:"varint,411,opt,name=FIELD_NAME11,json=FIELDNAME11" json:"FIELD_NAME11,omitempty"`
	FIELDName12          int32    `protobuf:"varint,412,opt,name=FIELD_name12,json=FIELDName12" json:"FIELD_name12,omitempty"`
	XFieldName13         int32    `protobuf:"varint,413,opt,name=__field_name13,json=FieldName13" json:"__field_name13,omitempty"`
	X_FieldName14        int32    `protobuf:"varint,414,opt,name=__Field_name14,json=FieldName14" json:"__Field_name14,omitempty"`
	Field_Name15         int32    `protobuf:"varint,415,opt,name=field__name15,json=fieldName15" json:"field__name15,omitempty"`
	Field__Name16        int32    `protobuf:"varint,416,opt,name=field__Name16,json=fieldName16" json:"field__Name16,omitempty"`
	FieldName17__        int32    `protobuf:"varint,417,opt,name=field_name17__,json=fieldName17" json:"field_name17__,omitempty"`
	FieldName18__        int32    `protobuf:"varint,418,opt,name=Field_name18__,json=FieldName18" json:"Field_name18__,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

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

var xxx_messageInfo_TestAllTypes proto.InternalMessageInfo

type isTestAllTypes_OneofField interface {
	isTestAllTypes_OneofField()
}

type TestAllTypes_OneofUint32 struct {
	OneofUint32 uint32 `protobuf:"varint,111,opt,name=oneof_uint32,json=oneofUint32,oneof"`
}
type TestAllTypes_OneofNestedMessage struct {
	OneofNestedMessage *TestAllTypes_NestedMessage `protobuf:"bytes,112,opt,name=oneof_nested_message,json=oneofNestedMessage,oneof"`
}
type TestAllTypes_OneofString struct {
	OneofString string `protobuf:"bytes,113,opt,name=oneof_string,json=oneofString,oneof"`
}
type TestAllTypes_OneofBytes struct {
	OneofBytes []byte `protobuf:"bytes,114,opt,name=oneof_bytes,json=oneofBytes,proto3,oneof"`
}
type TestAllTypes_OneofBool struct {
	OneofBool bool `protobuf:"varint,115,opt,name=oneof_bool,json=oneofBool,oneof"`
}
type TestAllTypes_OneofUint64 struct {
	OneofUint64 uint64 `protobuf:"varint,116,opt,name=oneof_uint64,json=oneofUint64,oneof"`
}
type TestAllTypes_OneofFloat struct {
	OneofFloat float32 `protobuf:"fixed32,117,opt,name=oneof_float,json=oneofFloat,oneof"`
}
type TestAllTypes_OneofDouble struct {
	OneofDouble float64 `protobuf:"fixed64,118,opt,name=oneof_double,json=oneofDouble,oneof"`
}
type TestAllTypes_OneofEnum struct {
	OneofEnum TestAllTypes_NestedEnum `protobuf:"varint,119,opt,name=oneof_enum,json=oneofEnum,enum=conformance.TestAllTypes_NestedEnum,oneof"`
}

func (*TestAllTypes_OneofUint32) isTestAllTypes_OneofField()        {}
func (*TestAllTypes_OneofNestedMessage) isTestAllTypes_OneofField() {}
func (*TestAllTypes_OneofString) isTestAllTypes_OneofField()        {}
func (*TestAllTypes_OneofBytes) isTestAllTypes_OneofField()         {}
func (*TestAllTypes_OneofBool) isTestAllTypes_OneofField()          {}
func (*TestAllTypes_OneofUint64) isTestAllTypes_OneofField()        {}
func (*TestAllTypes_OneofFloat) isTestAllTypes_OneofField()         {}
func (*TestAllTypes_OneofDouble) isTestAllTypes_OneofField()        {}
func (*TestAllTypes_OneofEnum) isTestAllTypes_OneofField()          {}

func (m *TestAllTypes) GetOneofField() isTestAllTypes_OneofField {
	if m != nil {
		return m.OneofField
	}
	return nil
}

func (m *TestAllTypes) GetOptionalInt32() int32 {
	if m != nil {
		return m.OptionalInt32
	}
	return 0
}

func (m *TestAllTypes) GetOptionalInt64() int64 {
	if m != nil {
		return m.OptionalInt64
	}
	return 0
}

func (m *TestAllTypes) GetOptionalUint32() uint32 {
	if m != nil {
		return m.OptionalUint32
	}
	return 0
}

func (m *TestAllTypes) GetOptionalUint64() uint64 {
	if m != nil {
		return m.OptionalUint64
	}
	return 0
}

func (m *TestAllTypes) GetOptionalSint32() int32 {
	if m != nil {
		return m.OptionalSint32
	}
	return 0
}

func (m *TestAllTypes) GetOptionalSint64() int64 {
	if m != nil {
		return m.OptionalSint64
	}
	return 0
}

func (m *TestAllTypes) GetOptionalFixed32() uint32 {
	if m != nil {
		return m.OptionalFixed32
	}
	return 0
}

func (m *TestAllTypes) GetOptionalFixed64() uint64 {
	if m != nil {
		return m.OptionalFixed64
	}
	return 0
}

func (m *TestAllTypes) GetOptionalSfixed32() int32 {
	if m != nil {
		return m.OptionalSfixed32
	}
	return 0
}

func (m *TestAllTypes) GetOptionalSfixed64() int64 {
	if m != nil {
		return m.OptionalSfixed64
	}
	return 0
}

func (m *TestAllTypes) GetOptionalFloat() float32 {
	if m != nil {
		return m.OptionalFloat
	}
	return 0
}

func (m *TestAllTypes) GetOptionalDouble() float64 {
	if m != nil {
		return m.OptionalDouble
	}
	return 0
}

func (m *TestAllTypes) GetOptionalBool() bool {
	if m != nil {
		return m.OptionalBool
	}
	return false
}

func (m *TestAllTypes) GetOptionalString() string {
	if m != nil {
		return m.OptionalString
	}
	return ""
}

func (m *TestAllTypes) GetOptionalBytes() []byte {
	if m != nil {
		return m.OptionalBytes
	}
	return nil
}

func (m *TestAllTypes) GetOptionalNestedMessage() *TestAllTypes_NestedMessage {
	if m != nil {
		return m.OptionalNestedMessage
	}
	return nil
}

func (m *TestAllTypes) GetOptionalForeignMessage() *ForeignMessage {
	if m != nil {
		return m.OptionalForeignMessage
	}
	return nil
}

func (m *TestAllTypes) GetOptionalNestedEnum() TestAllTypes_NestedEnum {
	if m != nil {
		return m.OptionalNestedEnum
	}
	return TestAllTypes_FOO
}

func (m *TestAllTypes) GetOptionalForeignEnum() ForeignEnum {
	if m != nil {
		return m.OptionalForeignEnum
	}
	return ForeignEnum_FOREIGN_FOO
}

func (m *TestAllTypes) GetOptionalStringPiece() string {
	if m != nil {
		return m.OptionalStringPiece
	}
	return ""
}

func (m *TestAllTypes) GetOptionalCord() string {
	if m != nil {
		return m.OptionalCord
	}
	return ""
}

func (m *TestAllTypes) GetRecursiveMessage() *TestAllTypes {
	if m != nil {
		return m.RecursiveMessage
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedInt32() []int32 {
	if m != nil {
		return m.RepeatedInt32
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedInt64() []int64 {
	if m != nil {
		return m.RepeatedInt64
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedUint32() []uint32 {
	if m != nil {
		return m.RepeatedUint32
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedUint64() []uint64 {
	if m != nil {
		return m.RepeatedUint64
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedSint32() []int32 {
	if m != nil {
		return m.RepeatedSint32
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedSint64() []int64 {
	if m != nil {
		return m.RepeatedSint64
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedFixed32() []uint32 {
	if m != nil {
		return m.RepeatedFixed32
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedFixed64() []uint64 {
	if m != nil {
		return m.RepeatedFixed64
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedSfixed32() []int32 {
	if m != nil {
		return m.RepeatedSfixed32
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedSfixed64() []int64 {
	if m != nil {
		return m.RepeatedSfixed64
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedFloat() []float32 {
	if m != nil {
		return m.RepeatedFloat
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedDouble() []float64 {
	if m != nil {
		return m.RepeatedDouble
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedBool() []bool {
	if m != nil {
		return m.RepeatedBool
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedString() []string {
	if m != nil {
		return m.RepeatedString
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedBytes() [][]byte {
	if m != nil {
		return m.RepeatedBytes
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedNestedMessage() []*TestAllTypes_NestedMessage {
	if m != nil {
		return m.RepeatedNestedMessage
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedForeignMessage() []*ForeignMessage {
	if m != nil {
		return m.RepeatedForeignMessage
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedNestedEnum() []TestAllTypes_NestedEnum {
	if m != nil {
		return m.RepeatedNestedEnum
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedForeignEnum() []ForeignEnum {
	if m != nil {
		return m.RepeatedForeignEnum
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedStringPiece() []string {
	if m != nil {
		return m.RepeatedStringPiece
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedCord() []string {
	if m != nil {
		return m.RepeatedCord
	}
	return nil
}

func (m *TestAllTypes) GetMapInt32Int32() map[int32]int32 {
	if m != nil {
		return m.MapInt32Int32
	}
	return nil
}

func (m *TestAllTypes) GetMapInt64Int64() map[int64]int64 {
	if m != nil {
		return m.MapInt64Int64
	}
	return nil
}

func (m *TestAllTypes) GetMapUint32Uint32() map[uint32]uint32 {
	if m != nil {
		return m.MapUint32Uint32
	}
	return nil
}

func (m *TestAllTypes) GetMapUint64Uint64() map[uint64]uint64 {
	if m != nil {
		return m.MapUint64Uint64
	}
	return nil
}

func (m *TestAllTypes) GetMapSint32Sint32() map[int32]int32 {
	if m != nil {
		return m.MapSint32Sint32
	}
	return nil
}

func (m *TestAllTypes) GetMapSint64Sint64() map[int64]int64 {
	if m != nil {
		return m.MapSint64Sint64
	}
	return nil
}

func (m *TestAllTypes) GetMapFixed32Fixed32() map[uint32]uint32 {
	if m != nil {
		return m.MapFixed32Fixed32
	}
	return nil
}

func (m *TestAllTypes) GetMapFixed64Fixed64() map[uint64]uint64 {
	if m != nil {
		return m.MapFixed64Fixed64
	}
	return nil
}

func (m *TestAllTypes) GetMapSfixed32Sfixed32() map[int32]int32 {
	if m != nil {
		return m.MapSfixed32Sfixed32
	}
	return nil
}

func (m *TestAllTypes) GetMapSfixed64Sfixed64() map[int64]int64 {
	if m != nil {
		return m.MapSfixed64Sfixed64
	}
	return nil
}

func (m *TestAllTypes) GetMapInt32Float() map[int32]float32 {
	if m != nil {
		return m.MapInt32Float
	}
	return nil
}

func (m *TestAllTypes) GetMapInt32Double() map[int32]float64 {
	if m != nil {
		return m.MapInt32Double
	}
	return nil
}

func (m *TestAllTypes) GetMapBoolBool() map[bool]bool {
	if m != nil {
		return m.MapBoolBool
	}
	return nil
}

func (m *TestAllTypes) GetMapStringString() map[string]string {
	if m != nil {
		return m.MapStringString
	}
	return nil
}

func (m *TestAllTypes) GetMapStringBytes() map[string][]byte {
	if m != nil {
		return m.MapStringBytes
	}
	return nil
}

func (m *TestAllTypes) GetMapStringNestedMessage() map[string]*TestAllTypes_NestedMessage {
	if m != nil {
		return m.MapStringNestedMessage
	}
	return nil
}

func (m *TestAllTypes) GetMapStringForeignMessage() map[string]*ForeignMessage {
	if m != nil {
		return m.MapStringForeignMessage
	}
	return nil
}

func (m *TestAllTypes) GetMapStringNestedEnum() map[string]TestAllTypes_NestedEnum {
	if m != nil {
		return m.MapStringNestedEnum
	}
	return nil
}

func (m *TestAllTypes) GetMapStringForeignEnum() map[string]ForeignEnum {
	if m != nil {
		return m.MapStringForeignEnum
	}
	return nil
}

func (m *TestAllTypes) GetOneofUint32() uint32 {
	if x, ok := m.GetOneofField().(*TestAllTypes_OneofUint32); ok {
		return x.OneofUint32
	}
	return 0
}

func (m *TestAllTypes) GetOneofNestedMessage() *TestAllTypes_NestedMessage {
	if x, ok := m.GetOneofField().(*TestAllTypes_OneofNestedMessage); ok {
		return x.OneofNestedMessage
	}
	return nil
}

func (m *TestAllTypes) GetOneofString() string {
	if x, ok := m.GetOneofField().(*TestAllTypes_OneofString); ok {
		return x.OneofString
	}
	return ""
}

func (m *TestAllTypes) GetOneofBytes() []byte {
	if x, ok := m.GetOneofField().(*TestAllTypes_OneofBytes); ok {
		return x.OneofBytes
	}
	return nil
}

func (m *TestAllTypes) GetOneofBool() bool {
	if x, ok := m.GetOneofField().(*TestAllTypes_OneofBool); ok {
		return x.OneofBool
	}
	return false
}

func (m *TestAllTypes) GetOneofUint64() uint64 {
	if x, ok := m.GetOneofField().(*TestAllTypes_OneofUint64); ok {
		return x.OneofUint64
	}
	return 0
}

func (m *TestAllTypes) GetOneofFloat() float32 {
	if x, ok := m.GetOneofField().(*TestAllTypes_OneofFloat); ok {
		return x.OneofFloat
	}
	return 0
}

func (m *TestAllTypes) GetOneofDouble() float64 {
	if x, ok := m.GetOneofField().(*TestAllTypes_OneofDouble); ok {
		return x.OneofDouble
	}
	return 0
}

func (m *TestAllTypes) GetOneofEnum() TestAllTypes_NestedEnum {
	if x, ok := m.GetOneofField().(*TestAllTypes_OneofEnum); ok {
		return x.OneofEnum
	}
	return TestAllTypes_FOO
}

func (m *TestAllTypes) GetOptionalBoolWrapper() *wrappers.BoolValue {
	if m != nil {
		return m.OptionalBoolWrapper
	}
	return nil
}

func (m *TestAllTypes) GetOptionalInt32Wrapper() *wrappers.Int32Value {
	if m != nil {
		return m.OptionalInt32Wrapper
	}
	return nil
}

func (m *TestAllTypes) GetOptionalInt64Wrapper() *wrappers.Int64Value {
	if m != nil {
		return m.OptionalInt64Wrapper
	}
	return nil
}

func (m *TestAllTypes) GetOptionalUint32Wrapper() *wrappers.UInt32Value {
	if m != nil {
		return m.OptionalUint32Wrapper
	}
	return nil
}

func (m *TestAllTypes) GetOptionalUint64Wrapper() *wrappers.UInt64Value {
	if m != nil {
		return m.OptionalUint64Wrapper
	}
	return nil
}

func (m *TestAllTypes) GetOptionalFloatWrapper() *wrappers.FloatValue {
	if m != nil {
		return m.OptionalFloatWrapper
	}
	return nil
}

func (m *TestAllTypes) GetOptionalDoubleWrapper() *wrappers.DoubleValue {
	if m != nil {
		return m.OptionalDoubleWrapper
	}
	return nil
}

func (m *TestAllTypes) GetOptionalStringWrapper() *wrappers.StringValue {
	if m != nil {
		return m.OptionalStringWrapper
	}
	return nil
}

func (m *TestAllTypes) GetOptionalBytesWrapper() *wrappers.BytesValue {
	if m != nil {
		return m.OptionalBytesWrapper
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedBoolWrapper() []*wrappers.BoolValue {
	if m != nil {
		return m.RepeatedBoolWrapper
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedInt32Wrapper() []*wrappers.Int32Value {
	if m != nil {
		return m.RepeatedInt32Wrapper
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedInt64Wrapper() []*wrappers.Int64Value {
	if m != nil {
		return m.RepeatedInt64Wrapper
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedUint32Wrapper() []*wrappers.UInt32Value {
	if m != nil {
		return m.RepeatedUint32Wrapper
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedUint64Wrapper() []*wrappers.UInt64Value {
	if m != nil {
		return m.RepeatedUint64Wrapper
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedFloatWrapper() []*wrappers.FloatValue {
	if m != nil {
		return m.RepeatedFloatWrapper
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedDoubleWrapper() []*wrappers.DoubleValue {
	if m != nil {
		return m.RepeatedDoubleWrapper
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedStringWrapper() []*wrappers.StringValue {
	if m != nil {
		return m.RepeatedStringWrapper
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedBytesWrapper() []*wrappers.BytesValue {
	if m != nil {
		return m.RepeatedBytesWrapper
	}
	return nil
}

func (m *TestAllTypes) GetOptionalDuration() *duration.Duration {
	if m != nil {
		return m.OptionalDuration
	}
	return nil
}

func (m *TestAllTypes) GetOptionalTimestamp() *timestamp.Timestamp {
	if m != nil {
		return m.OptionalTimestamp
	}
	return nil
}

func (m *TestAllTypes) GetOptionalFieldMask() *protobuf.FieldMask {
	if m != nil {
		return m.OptionalFieldMask
	}
	return nil
}

func (m *TestAllTypes) GetOptionalStruct() *_struct.Struct {
	if m != nil {
		return m.OptionalStruct
	}
	return nil
}

func (m *TestAllTypes) GetOptionalAny() *any.Any {
	if m != nil {
		return m.OptionalAny
	}
	return nil
}

func (m *TestAllTypes) GetOptionalValue() *_struct.Value {
	if m != nil {
		return m.OptionalValue
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedDuration() []*duration.Duration {
	if m != nil {
		return m.RepeatedDuration
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedTimestamp() []*timestamp.Timestamp {
	if m != nil {
		return m.RepeatedTimestamp
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedFieldmask() []*protobuf.FieldMask {
	if m != nil {
		return m.RepeatedFieldmask
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedStruct() []*_struct.Struct {
	if m != nil {
		return m.RepeatedStruct
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedAny() []*any.Any {
	if m != nil {
		return m.RepeatedAny
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedValue() []*_struct.Value {
	if m != nil {
		return m.RepeatedValue
	}
	return nil
}

func (m *TestAllTypes) GetFieldname1() int32 {
	if m != nil {
		return m.Fieldname1
	}
	return 0
}

func (m *TestAllTypes) GetFieldName2() int32 {
	if m != nil {
		return m.FieldName2
	}
	return 0
}

func (m *TestAllTypes) GetXFieldName3() int32 {
	if m != nil {
		return m.XFieldName3
	}
	return 0
}

func (m *TestAllTypes) GetField_Name4_() int32 {
	if m != nil {
		return m.Field_Name4_
	}
	return 0
}

func (m *TestAllTypes) GetField0Name5() int32 {
	if m != nil {
		return m.Field0Name5
	}
	return 0
}

func (m *TestAllTypes) GetField_0Name6() int32 {
	if m != nil {
		return m.Field_0Name6
	}
	return 0
}

func (m *TestAllTypes) GetFieldName7() int32 {
	if m != nil {
		return m.FieldName7
	}
	return 0
}

func (m *TestAllTypes) GetFieldName8() int32 {
	if m != nil {
		return m.FieldName8
	}
	return 0
}

func (m *TestAllTypes) GetField_Name9() int32 {
	if m != nil {
		return m.Field_Name9
	}
	return 0
}

func (m *TestAllTypes) GetField_Name10() int32 {
	if m != nil {
		return m.Field_Name10
	}
	return 0
}

func (m *TestAllTypes) GetFIELD_NAME11() int32 {
	if m != nil {
		return m.FIELD_NAME11
	}
	return 0
}

func (m *TestAllTypes) GetFIELDName12() int32 {
	if m != nil {
		return m.FIELDName12
	}
	return 0
}

func (m *TestAllTypes) GetXFieldName13() int32 {
	if m != nil {
		return m.XFieldName13
	}
	return 0
}

func (m *TestAllTypes) GetX_FieldName14() int32 {
	if m != nil {
		return m.X_FieldName14
	}
	return 0
}

func (m *TestAllTypes) GetField_Name15() int32 {
	if m != nil {
		return m.Field_Name15
	}
	return 0
}

func (m *TestAllTypes) GetField__Name16() int32 {
	if m != nil {
		return m.Field__Name16
	}
	return 0
}

func (m *TestAllTypes) GetFieldName17__() int32 {
	if m != nil {
		return m.FieldName17__
	}
	return 0
}

func (m *TestAllTypes) GetFieldName18__() int32 {
	if m != nil {
		return m.FieldName18__
	}
	return 0
}

// XXX_OneofFuncs is for the internal use of the proto package.
func (*TestAllTypes) 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 _TestAllTypes_OneofMarshaler, _TestAllTypes_OneofUnmarshaler, _TestAllTypes_OneofSizer, []interface{}{
		(*TestAllTypes_OneofUint32)(nil),
		(*TestAllTypes_OneofNestedMessage)(nil),
		(*TestAllTypes_OneofString)(nil),
		(*TestAllTypes_OneofBytes)(nil),
		(*TestAllTypes_OneofBool)(nil),
		(*TestAllTypes_OneofUint64)(nil),
		(*TestAllTypes_OneofFloat)(nil),
		(*TestAllTypes_OneofDouble)(nil),
		(*TestAllTypes_OneofEnum)(nil),
	}
}

func _TestAllTypes_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
	m := msg.(*TestAllTypes)
	// oneof_field
	switch x := m.OneofField.(type) {
	case *TestAllTypes_OneofUint32:
		b.EncodeVarint(111<<3 | proto.WireVarint)
		b.EncodeVarint(uint64(x.OneofUint32))
	case *TestAllTypes_OneofNestedMessage:
		b.EncodeVarint(112<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.OneofNestedMessage); err != nil {
			return err
		}
	case *TestAllTypes_OneofString:
		b.EncodeVarint(113<<3 | proto.WireBytes)
		b.EncodeStringBytes(x.OneofString)
	case *TestAllTypes_OneofBytes:
		b.EncodeVarint(114<<3 | proto.WireBytes)
		b.EncodeRawBytes(x.OneofBytes)
	case *TestAllTypes_OneofBool:
		t := uint64(0)
		if x.OneofBool {
			t = 1
		}
		b.EncodeVarint(115<<3 | proto.WireVarint)
		b.EncodeVarint(t)
	case *TestAllTypes_OneofUint64:
		b.EncodeVarint(116<<3 | proto.WireVarint)
		b.EncodeVarint(uint64(x.OneofUint64))
	case *TestAllTypes_OneofFloat:
		b.EncodeVarint(117<<3 | proto.WireFixed32)
		b.EncodeFixed32(uint64(math.Float32bits(x.OneofFloat)))
	case *TestAllTypes_OneofDouble:
		b.EncodeVarint(118<<3 | proto.WireFixed64)
		b.EncodeFixed64(math.Float64bits(x.OneofDouble))
	case *TestAllTypes_OneofEnum:
		b.EncodeVarint(119<<3 | proto.WireVarint)
		b.EncodeVarint(uint64(x.OneofEnum))
	case nil:
	default:
		return fmt.Errorf("TestAllTypes.OneofField has unexpected type %T", x)
	}
	return nil
}

func _TestAllTypes_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
	m := msg.(*TestAllTypes)
	switch tag {
	case 111: // oneof_field.oneof_uint32
		if wire != proto.WireVarint {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeVarint()
		m.OneofField = &TestAllTypes_OneofUint32{uint32(x)}
		return true, err
	case 112: // oneof_field.oneof_nested_message
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(TestAllTypes_NestedMessage)
		err := b.DecodeMessage(msg)
		m.OneofField = &TestAllTypes_OneofNestedMessage{msg}
		return true, err
	case 113: // oneof_field.oneof_string
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeStringBytes()
		m.OneofField = &TestAllTypes_OneofString{x}
		return true, err
	case 114: // oneof_field.oneof_bytes
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeRawBytes(true)
		m.OneofField = &TestAllTypes_OneofBytes{x}
		return true, err
	case 115: // oneof_field.oneof_bool
		if wire != proto.WireVarint {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeVarint()
		m.OneofField = &TestAllTypes_OneofBool{x != 0}
		return true, err
	case 116: // oneof_field.oneof_uint64
		if wire != proto.WireVarint {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeVarint()
		m.OneofField = &TestAllTypes_OneofUint64{x}
		return true, err
	case 117: // oneof_field.oneof_float
		if wire != proto.WireFixed32 {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeFixed32()
		m.OneofField = &TestAllTypes_OneofFloat{math.Float32frombits(uint32(x))}
		return true, err
	case 118: // oneof_field.oneof_double
		if wire != proto.WireFixed64 {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeFixed64()
		m.OneofField = &TestAllTypes_OneofDouble{math.Float64frombits(x)}
		return true, err
	case 119: // oneof_field.oneof_enum
		if wire != proto.WireVarint {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeVarint()
		m.OneofField = &TestAllTypes_OneofEnum{TestAllTypes_NestedEnum(x)}
		return true, err
	default:
		return false, nil
	}
}

func _TestAllTypes_OneofSizer(msg proto.Message) (n int) {
	m := msg.(*TestAllTypes)
	// oneof_field
	switch x := m.OneofField.(type) {
	case *TestAllTypes_OneofUint32:
		n += proto.SizeVarint(111<<3 | proto.WireVarint)
		n += proto.SizeVarint(uint64(x.OneofUint32))
	case *TestAllTypes_OneofNestedMessage:
		s := proto.Size(x.OneofNestedMessage)
		n += proto.SizeVarint(112<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case *TestAllTypes_OneofString:
		n += proto.SizeVarint(113<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(len(x.OneofString)))
		n += len(x.OneofString)
	case *TestAllTypes_OneofBytes:
		n += proto.SizeVarint(114<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(len(x.OneofBytes)))
		n += len(x.OneofBytes)
	case *TestAllTypes_OneofBool:
		n += proto.SizeVarint(115<<3 | proto.WireVarint)
		n += 1
	case *TestAllTypes_OneofUint64:
		n += proto.SizeVarint(116<<3 | proto.WireVarint)
		n += proto.SizeVarint(uint64(x.OneofUint64))
	case *TestAllTypes_OneofFloat:
		n += proto.SizeVarint(117<<3 | proto.WireFixed32)
		n += 4
	case *TestAllTypes_OneofDouble:
		n += proto.SizeVarint(118<<3 | proto.WireFixed64)
		n += 8
	case *TestAllTypes_OneofEnum:
		n += proto.SizeVarint(119<<3 | proto.WireVarint)
		n += proto.SizeVarint(uint64(x.OneofEnum))
	case nil:
	default:
		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
	}
	return n
}

type TestAllTypes_NestedMessage struct {
	A                    int32         `protobuf:"varint,1,opt,name=a" json:"a,omitempty"`
	Corecursive          *TestAllTypes `protobuf:"bytes,2,opt,name=corecursive" json:"corecursive,omitempty"`
	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
	XXX_unrecognized     []byte        `json:"-"`
	XXX_sizecache        int32         `json:"-"`
}

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

var xxx_messageInfo_TestAllTypes_NestedMessage proto.InternalMessageInfo

func (m *TestAllTypes_NestedMessage) GetA() int32 {
	if m != nil {
		return m.A
	}
	return 0
}

func (m *TestAllTypes_NestedMessage) GetCorecursive() *TestAllTypes {
	if m != nil {
		return m.Corecursive
	}
	return nil
}

type ForeignMessage struct {
	C                    int32    `protobuf:"varint,1,opt,name=c" json:"c,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

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

var xxx_messageInfo_ForeignMessage proto.InternalMessageInfo

func (m *ForeignMessage) GetC() int32 {
	if m != nil {
		return m.C
	}
	return 0
}

func init() {
	proto.RegisterType((*ConformanceRequest)(nil), "conformance.ConformanceRequest")
	proto.RegisterType((*ConformanceResponse)(nil), "conformance.ConformanceResponse")
	proto.RegisterType((*TestAllTypes)(nil), "conformance.TestAllTypes")
	proto.RegisterMapType((map[bool]bool)(nil), "conformance.TestAllTypes.MapBoolBoolEntry")
	proto.RegisterMapType((map[uint32]uint32)(nil), "conformance.TestAllTypes.MapFixed32Fixed32Entry")
	proto.RegisterMapType((map[uint64]uint64)(nil), "conformance.TestAllTypes.MapFixed64Fixed64Entry")
	proto.RegisterMapType((map[int32]float64)(nil), "conformance.TestAllTypes.MapInt32DoubleEntry")
	proto.RegisterMapType((map[int32]float32)(nil), "conformance.TestAllTypes.MapInt32FloatEntry")
	proto.RegisterMapType((map[int32]int32)(nil), "conformance.TestAllTypes.MapInt32Int32Entry")
	proto.RegisterMapType((map[int64]int64)(nil), "conformance.TestAllTypes.MapInt64Int64Entry")
	proto.RegisterMapType((map[int32]int32)(nil), "conformance.TestAllTypes.MapSfixed32Sfixed32Entry")
	proto.RegisterMapType((map[int64]int64)(nil), "conformance.TestAllTypes.MapSfixed64Sfixed64Entry")
	proto.RegisterMapType((map[int32]int32)(nil), "conformance.TestAllTypes.MapSint32Sint32Entry")
	proto.RegisterMapType((map[int64]int64)(nil), "conformance.TestAllTypes.MapSint64Sint64Entry")
	proto.RegisterMapType((map[string][]byte)(nil), "conformance.TestAllTypes.MapStringBytesEntry")
	proto.RegisterMapType((map[string]ForeignEnum)(nil), "conformance.TestAllTypes.MapStringForeignEnumEntry")
	proto.RegisterMapType((map[string]*ForeignMessage)(nil), "conformance.TestAllTypes.MapStringForeignMessageEntry")
	proto.RegisterMapType((map[string]TestAllTypes_NestedEnum)(nil), "conformance.TestAllTypes.MapStringNestedEnumEntry")
	proto.RegisterMapType((map[string]*TestAllTypes_NestedMessage)(nil), "conformance.TestAllTypes.MapStringNestedMessageEntry")
	proto.RegisterMapType((map[string]string)(nil), "conformance.TestAllTypes.MapStringStringEntry")
	proto.RegisterMapType((map[uint32]uint32)(nil), "conformance.TestAllTypes.MapUint32Uint32Entry")
	proto.RegisterMapType((map[uint64]uint64)(nil), "conformance.TestAllTypes.MapUint64Uint64Entry")
	proto.RegisterType((*TestAllTypes_NestedMessage)(nil), "conformance.TestAllTypes.NestedMessage")
	proto.RegisterType((*ForeignMessage)(nil), "conformance.ForeignMessage")
	proto.RegisterEnum("conformance.WireFormat", WireFormat_name, WireFormat_value)
	proto.RegisterEnum("conformance.ForeignEnum", ForeignEnum_name, ForeignEnum_value)
	proto.RegisterEnum("conformance.TestAllTypes_NestedEnum", TestAllTypes_NestedEnum_name, TestAllTypes_NestedEnum_value)
}

func init() { proto.RegisterFile("conformance.proto", fileDescriptor_conformance_3cdb5b28737909f3) }

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