// Code generated by goyacc -o proto.y.go -p proto proto.y. DO NOT EDIT.

//line proto.y:2
package protoparse

import __yyfmt__ "fmt"

//line proto.y:2

//lint:file-ignore SA4006 generated parser has unused values

import (
	"math"

	"github.com/jhump/protoreflect/desc/protoparse/ast"
)

//line proto.y:16
type protoSymType struct {
	yys       int
	file      *ast.FileNode
	syn       *ast.SyntaxNode
	fileDecl  ast.FileElement
	fileDecls []ast.FileElement
	pkg       *ast.PackageNode
	imprt     *ast.ImportNode
	msg       *ast.MessageNode
	msgDecl   ast.MessageElement
	msgDecls  []ast.MessageElement
	fld       *ast.FieldNode
	mapFld    *ast.MapFieldNode
	mapType   *ast.MapTypeNode
	grp       *ast.GroupNode
	oo        *ast.OneOfNode
	ooDecl    ast.OneOfElement
	ooDecls   []ast.OneOfElement
	ext       *ast.ExtensionRangeNode
	resvd     *ast.ReservedNode
	en        *ast.EnumNode
	enDecl    ast.EnumElement
	enDecls   []ast.EnumElement
	env       *ast.EnumValueNode
	extend    *ast.ExtendNode
	extDecl   ast.ExtendElement
	extDecls  []ast.ExtendElement
	svc       *ast.ServiceNode
	svcDecl   ast.ServiceElement
	svcDecls  []ast.ServiceElement
	mtd       *ast.RPCNode
	rpcType   *ast.RPCTypeNode
	rpcDecl   ast.RPCElement
	rpcDecls  []ast.RPCElement
	opt       *ast.OptionNode
	opts      *compactOptionList
	ref       *ast.FieldReferenceNode
	optNms    *fieldRefList
	cmpctOpts *ast.CompactOptionsNode
	rng       *ast.RangeNode
	rngs      *rangeList
	names     *nameList
	cid       *identList
	tid       ast.IdentValueNode
	sl        *valueList
	msgField  *ast.MessageFieldNode
	msgEntry  *messageFieldEntry
	msgLit    *messageFieldList
	v         ast.ValueNode
	il        ast.IntValueNode
	str       *stringList
	s         *ast.StringLiteralNode
	i         *ast.UintLiteralNode
	f         *ast.FloatLiteralNode
	id        *ast.IdentNode
	b         *ast.RuneNode
	err       error
}

const _STRING_LIT = 57346
const _INT_LIT = 57347
const _FLOAT_LIT = 57348
const _NAME = 57349
const _SYNTAX = 57350
const _IMPORT = 57351
const _WEAK = 57352
const _PUBLIC = 57353
const _PACKAGE = 57354
const _OPTION = 57355
const _TRUE = 57356
const _FALSE = 57357
const _INF = 57358
const _NAN = 57359
const _REPEATED = 57360
const _OPTIONAL = 57361
const _REQUIRED = 57362
const _DOUBLE = 57363
const _FLOAT = 57364
const _INT32 = 57365
const _INT64 = 57366
const _UINT32 = 57367
const _UINT64 = 57368
const _SINT32 = 57369
const _SINT64 = 57370
const _FIXED32 = 57371
const _FIXED64 = 57372
const _SFIXED32 = 57373
const _SFIXED64 = 57374
const _BOOL = 57375
const _STRING = 57376
const _BYTES = 57377
const _GROUP = 57378
const _ONEOF = 57379
const _MAP = 57380
const _EXTENSIONS = 57381
const _TO = 57382
const _MAX = 57383
const _RESERVED = 57384
const _ENUM = 57385
const _MESSAGE = 57386
const _EXTEND = 57387
const _SERVICE = 57388
const _RPC = 57389
const _STREAM = 57390
const _RETURNS = 57391
const _ERROR = 57392

var protoToknames = [...]string{
	"$end",
	"error",
	"$unk",
	"_STRING_LIT",
	"_INT_LIT",
	"_FLOAT_LIT",
	"_NAME",
	"_SYNTAX",
	"_IMPORT",
	"_WEAK",
	"_PUBLIC",
	"_PACKAGE",
	"_OPTION",
	"_TRUE",
	"_FALSE",
	"_INF",
	"_NAN",
	"_REPEATED",
	"_OPTIONAL",
	"_REQUIRED",
	"_DOUBLE",
	"_FLOAT",
	"_INT32",
	"_INT64",
	"_UINT32",
	"_UINT64",
	"_SINT32",
	"_SINT64",
	"_FIXED32",
	"_FIXED64",
	"_SFIXED32",
	"_SFIXED64",
	"_BOOL",
	"_STRING",
	"_BYTES",
	"_GROUP",
	"_ONEOF",
	"_MAP",
	"_EXTENSIONS",
	"_TO",
	"_MAX",
	"_RESERVED",
	"_ENUM",
	"_MESSAGE",
	"_EXTEND",
	"_SERVICE",
	"_RPC",
	"_STREAM",
	"_RETURNS",
	"_ERROR",
	"'='",
	"';'",
	"':'",
	"'{'",
	"'}'",
	"'\\\\'",
	"'/'",
	"'?'",
	"'.'",
	"','",
	"'>'",
	"'<'",
	"'+'",
	"'-'",
	"'('",
	"')'",
	"'['",
	"']'",
	"'*'",
	"'&'",
	"'^'",
	"'%'",
	"'$'",
	"'#'",
	"'@'",
	"'!'",
	"'~'",
	"'`'",
}

var protoStatenames = [...]string{}

const protoEofCode = 1
const protoErrCode = 2
const protoInitialStackSize = 16

//line proto.y:1191

//line yacctab:1
var protoExca = [...]int{
	-1, 0,
	1, 4,
	-2, 0,
	-1, 1,
	1, -1,
	-2, 0,
	-1, 2,
	1, 1,
	-2, 0,
	-1, 3,
	1, 2,
	-2, 0,
	-1, 22,
	1, 3,
	-2, 0,
	-1, 95,
	55, 178,
	-2, 0,
	-1, 96,
	55, 166,
	-2, 0,
	-1, 97,
	55, 195,
	-2, 0,
	-1, 99,
	55, 204,
	-2, 0,
	-1, 110,
	55, 53,
	-2, 0,
	-1, 289,
	55, 51,
	61, 51,
	-2, 0,
	-1, 352,
	61, 53,
	-2, 0,
	-1, 367,
	55, 116,
	-2, 0,
	-1, 401,
	61, 53,
	-2, 0,
	-1, 489,
	61, 53,
	-2, 0,
	-1, 533,
	55, 178,
	-2, 0,
	-1, 537,
	55, 178,
	-2, 0,
	-1, 541,
	55, 178,
	-2, 0,
	-1, 559,
	55, 216,
	-2, 0,
	-1, 566,
	55, 178,
	-2, 0,
	-1, 569,
	55, 178,
	-2, 0,
	-1, 572,
	55, 178,
	-2, 0,
	-1, 593,
	55, 178,
	-2, 0,
	-1, 605,
	55, 178,
	-2, 0,
}

const protoPrivate = 57344

const protoLast = 2321

var protoAct = [...]int{
	31, 118, 117, 125, 8, 396, 8, 8, 488, 81,
	486, 414, 363, 288, 579, 421, 328, 107, 77, 79,
	80, 82, 84, 326, 317, 311, 8, 106, 105, 124,
	281, 228, 139, 26, 177, 593, 416, 591, 30, 525,
	555, 553, 85, 551, 541, 87, 88, 89, 364, 539,
	537, 535, 364, 531, 75, 364, 364, 364, 364, 533,
	524, 519, 512, 364, 364, 500, 364, 473, 364, 362,
	502, 405, 364, 560, 404, 329, 364, 364, 523, 397,
	364, 329, 364, 349, 364, 29, 329, 116, 94, 350,
	110, 348, 563, 109, 77, 320, 562, 584, 352, 349,
	178, 104, 550, 282, 529, 98, 349, 348, 530, 492,
	349, 293, 347, 103, 348, 493, 583, 477, 348, 302,
	346, 526, 503, 472, 388, 371, 365, 230, 511, 185,
	115, 339, 321, 93, 330, 310, 91, 314, 315, 344,
	330, 304, 306, 308, 14, 330, 285, 582, 605, 572,
	4, 15, 569, 566, 16, 17, 318, 17, 17, 558,
	367, 559, 14, 319, 316, 285, 582, 99, 97, 15,
	96, 95, 16, 17, 603, 597, 17, 17, 577, 576,
	178, 575, 570, 567, 564, 19, 18, 20, 21, 557,
	549, 286, 543, 515, 13, 507, 284, 581, 413, 340,
	595, 387, 318, 19, 18, 20, 21, 370, 369, 185,
	286, 323, 13, 342, 333, 284, 581, 324, 303, 287,
	102, 101, 100, 90, 86, 25, 547, 546, 504, 480,
	479, 478, 411, 410, 409, 408, 407, 337, 406, 394,
	368, 361, 325, 334, 335, 336, 92, 24, 482, 418,
	389, 366, 122, 11, 574, 11, 11, 230, 573, 332,
	338, 373, 374, 375, 376, 377, 378, 379, 380, 381,
	382, 383, 384, 120, 10, 11, 10, 10, 121, 9,
	518, 9, 9, 517, 282, 419, 516, 343, 29, 5,
	293, 300, 298, 23, 27, 28, 10, 29, 313, 499,
	498, 9, 299, 345, 353, 355, 356, 357, 358, 359,
	360, 341, 23, 297, 295, 497, 496, 495, 494, 481,
	351, 470, 313, 412, 296, 390, 29, 3, 283, 280,
	22, 12, 227, 179, 176, 391, 392, 393, 123, 327,
	312, 180, 386, 385, 128, 420, 137, 127, 424, 126,
	229, 109, 119, 293, 423, 289, 290, 427, 236, 134,
	429, 395, 237, 140, 183, 77, 402, 431, 239, 143,
	372, 422, 108, 292, 76, 578, 415, 7, 400, 398,
	6, 2, 1, 0, 0, 0, 0, 0, 0, 318,
	0, 417, 0, 0, 0, 0, 471, 0, 0, 474,
	109, 0, 293, 0, 0, 0, 476, 484, 0, 0,
	0, 0, 475, 0, 0, 490, 0, 0, 0, 0,
	0, 0, 0, 0, 422, 501, 0, 0, 508, 509,
	0, 0, 0, 0, 426, 0, 506, 0, 0, 432,
	433, 434, 435, 436, 437, 17, 438, 439, 440, 441,
	0, 0, 510, 442, 443, 444, 445, 446, 447, 448,
	449, 450, 451, 452, 453, 454, 455, 456, 428, 457,
	458, 459, 460, 461, 462, 463, 464, 465, 466, 467,
	468, 469, 514, 513, 425, 0, 0, 505, 521, 0,
	293, 430, 0, 522, 520, 0, 0, 0, 0, 0,
	0, 0, 0, 527, 77, 109, 0, 532, 534, 536,
	538, 540, 542, 545, 0, 544, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 109, 0, 552,
	554, 556, 0, 548, 0, 0, 565, 561, 0, 0,
	568, 0, 0, 0, 571, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 580, 0, 0, 0, 302, 0, 586,
	302, 0, 588, 302, 0, 590, 0, 0, 0, 0,
	0, 0, 580, 0, 109, 109, 592, 594, 302, 0,
	302, 0, 302, 596, 598, 599, 604, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 302, 0, 607, 302,
	487, 0, 29, 114, 111, 32, 33, 34, 35, 36,
	37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
	47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
	57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
	67, 68, 69, 70, 71, 72, 73, 74, 0, 0,
	0, 0, 110, 0, 0, 0, 0, 0, 0, 0,
	489, 113, 112, 0, 0, 0, 485, 29, 114, 111,
	32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
	42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
	52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
	62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
	72, 73, 74, 0, 0, 0, 0, 110, 0, 0,
	0, 0, 0, 0, 0, 401, 113, 112, 0, 0,
	399, 29, 114, 111, 32, 33, 34, 35, 36, 37,
	38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
	48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
	58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
	68, 69, 70, 71, 72, 73, 74, 0, 0, 0,
	0, 110, 0, 0, 0, 0, 0, 0, 0, 489,
	113, 112, 29, 114, 111, 32, 33, 34, 35, 36,
	37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
	47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
	57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
	67, 68, 69, 70, 71, 72, 73, 74, 0, 0,
	0, 0, 110, 0, 0, 0, 0, 0, 528, 0,
	0, 113, 112, 32, 33, 34, 35, 36, 37, 38,
	39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
	49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
	59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
	69, 70, 71, 72, 73, 74, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 491,
	0, 0, 0, 294, 32, 33, 34, 35, 36, 37,
	38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
	48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
	58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
	68, 69, 70, 71, 72, 73, 74, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	403, 0, 0, 0, 294, 32, 33, 34, 35, 36,
	37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
	47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
	57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
	67, 68, 69, 70, 71, 72, 73, 74, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 291, 0, 0, 0, 294, 32, 33, 34, 35,
	36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
	46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
	56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
	66, 67, 68, 69, 70, 71, 72, 73, 74, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 294, 32, 33, 34,
	35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
	45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
	55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
	65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 130, 0, 0, 0, 78, 144, 145, 146, 147,
	148, 149, 17, 150, 151, 152, 153, 133, 132, 131,
	154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
	164, 165, 166, 167, 168, 169, 136, 142, 135, 170,
	171, 138, 19, 18, 20, 172, 173, 174, 175, 0,
	0, 129, 0, 0, 608, 130, 0, 0, 141, 0,
	144, 145, 146, 147, 148, 149, 17, 150, 151, 152,
	153, 133, 132, 131, 154, 155, 156, 157, 158, 159,
	160, 161, 162, 163, 164, 165, 166, 167, 168, 169,
	136, 142, 135, 170, 171, 138, 19, 18, 20, 172,
	173, 174, 175, 0, 0, 129, 0, 0, 606, 130,
	0, 0, 141, 0, 144, 145, 146, 147, 148, 149,
	17, 150, 151, 152, 153, 133, 132, 131, 154, 155,
	156, 157, 158, 159, 160, 161, 162, 163, 164, 165,
	166, 167, 168, 169, 136, 142, 135, 170, 171, 138,
	19, 18, 20, 172, 173, 174, 175, 0, 0, 129,
	0, 0, 602, 130, 0, 0, 141, 0, 144, 145,
	146, 147, 148, 149, 17, 150, 151, 152, 153, 133,
	132, 131, 154, 155, 156, 157, 158, 159, 160, 161,
	162, 163, 164, 165, 166, 167, 168, 169, 136, 142,
	135, 170, 171, 138, 19, 18, 20, 172, 173, 174,
	175, 0, 0, 129, 0, 0, 601, 130, 0, 0,
	141, 0, 144, 145, 146, 147, 148, 149, 17, 150,
	151, 152, 153, 133, 132, 131, 154, 155, 156, 157,
	158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
	168, 169, 136, 142, 135, 170, 171, 138, 19, 18,
	20, 172, 173, 174, 175, 0, 0, 129, 0, 0,
	600, 130, 0, 0, 141, 0, 144, 145, 146, 147,
	148, 149, 17, 150, 151, 152, 153, 133, 132, 131,
	154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
	164, 165, 166, 167, 168, 169, 136, 142, 135, 170,
	171, 138, 19, 18, 20, 172, 173, 174, 175, 0,
	0, 129, 0, 0, 589, 130, 0, 0, 141, 0,
	144, 145, 146, 147, 148, 149, 17, 150, 151, 152,
	153, 133, 132, 131, 154, 155, 156, 157, 158, 159,
	160, 161, 162, 163, 164, 165, 166, 167, 168, 169,
	136, 142, 135, 170, 171, 138, 19, 18, 20, 172,
	173, 174, 175, 0, 0, 129, 0, 0, 587, 130,
	0, 0, 141, 0, 144, 145, 146, 147, 148, 149,
	17, 150, 151, 152, 153, 133, 132, 131, 154, 155,
	156, 157, 158, 159, 160, 161, 162, 163, 164, 165,
	166, 167, 168, 169, 136, 142, 135, 170, 171, 138,
	19, 18, 20, 172, 173, 174, 175, 0, 0, 129,
	0, 0, 585, 232, 0, 0, 141, 0, 240, 241,
	242, 243, 244, 245, 246, 247, 248, 249, 250, 235,
	234, 233, 251, 252, 253, 254, 255, 256, 257, 258,
	259, 260, 261, 262, 263, 264, 265, 266, 267, 268,
	269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
	279, 0, 0, 231, 0, 0, 331, 130, 0, 0,
	238, 0, 144, 145, 146, 147, 148, 149, 17, 150,
	151, 152, 153, 133, 132, 131, 154, 155, 156, 157,
	158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
	168, 169, 136, 142, 135, 170, 171, 138, 19, 18,
	20, 172, 173, 174, 175, 0, 0, 129, 0, 0,
	301, 130, 0, 0, 141, 0, 144, 145, 146, 147,
	148, 149, 17, 150, 151, 152, 153, 133, 132, 131,
	154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
	164, 165, 166, 167, 168, 169, 136, 142, 135, 170,
	171, 138, 19, 18, 20, 172, 173, 174, 175, 0,
	0, 129, 0, 0, 232, 0, 0, 0, 141, 240,
	241, 242, 243, 244, 245, 246, 247, 248, 249, 250,
	235, 234, 233, 251, 252, 253, 254, 255, 256, 257,
	258, 259, 260, 261, 262, 263, 264, 265, 266, 267,
	268, 269, 270, 271, 272, 273, 274, 275, 276, 277,
	278, 279, 0, 0, 231, 0, 0, 354, 0, 0,
	0, 238, 32, 33, 34, 35, 36, 37, 38, 39,
	40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
	50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
	60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
	70, 71, 72, 73, 74, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 83, 32, 33, 34, 35, 36,
	37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
	47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
	57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
	67, 68, 69, 70, 71, 72, 73, 74, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 83, 32, 33,
	34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
	44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
	54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
	64, 65, 66, 67, 68, 69, 70, 71, 72, 483,
	74, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	83, 32, 33, 34, 35, 36, 37, 38, 39, 40,
	41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
	51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
	309, 62, 63, 64, 65, 66, 67, 68, 69, 70,
	71, 72, 73, 74, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 83, 32, 33, 34, 35, 36, 37,
	38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
	48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
	58, 59, 60, 307, 62, 63, 64, 65, 66, 67,
	68, 69, 70, 71, 72, 73, 74, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 83, 32, 33, 34,
	35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
	45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
	55, 56, 57, 58, 59, 60, 305, 62, 63, 64,
	65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
	0, 0, 0, 0, 0, 426, 0, 0, 0, 83,
	432, 433, 434, 435, 436, 437, 17, 438, 439, 440,
	441, 0, 0, 0, 442, 443, 444, 445, 446, 447,
	448, 449, 450, 451, 452, 453, 454, 455, 456, 428,
	457, 458, 459, 460, 461, 462, 463, 464, 465, 466,
	467, 468, 469, 0, 0, 425, 0, 0, 182, 0,
	0, 0, 430, 186, 187, 188, 189, 190, 191, 17,
	192, 193, 194, 195, 196, 197, 198, 199, 200, 201,
	202, 203, 204, 205, 206, 207, 208, 209, 210, 211,
	212, 213, 214, 215, 216, 217, 218, 219, 184, 220,
	221, 222, 223, 224, 225, 226, 0, 182, 181, 0,
	0, 322, 186, 187, 188, 189, 190, 191, 17, 192,
	193, 194, 195, 196, 197, 198, 199, 200, 201, 202,
	203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
	213, 214, 215, 216, 217, 218, 219, 184, 220, 221,
	222, 223, 224, 225, 226, 0, 0, 181, 32, 33,
	34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
	44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
	54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
	64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
	74,
}

var protoPact = [...]int{
	142, -1000, 160, 160, 196, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, 173, 284, 2271, 1100, 2271, 2271,
	1858, 2271, 160, -1000, 322, -1000, 172, 322, 322, 322,
	171, 77, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, 195, 74, -1000, 1858, 117,
	116, 114, -1000, 2271, 113, 170, -1000, 169, 168, -1000,
	-1000, 2271, 798, 1100, 21, 1699, 2225, 1752, -1000, 163,
	-1000, -1000, -1000, -1000, 167, -1000, -1000, -1000, -1000, -1000,
	1039, -1000, 308, 286, -1000, -1000, -1000, 1645, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	166, 2070, 2017, 1964, 2271, 317, 2271, 2271, 293, -1000,
	-1000, 2271, 33, 73, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, -1000, 2176, -1000, -1000, -1000,
	-1000, -1000, 165, 191, 81, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, -1000, -1000, 1591, -1000, -1000,
	-1000, -1000, 162, 2070, 2017, 1964, 2271, -1000, 2271, 72,
	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	144, -1000, -1000, -1000, -1000, 161, 2271, -1000, 84, 1039,
	60, 58, 36, -1000, 1805, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, 2271, 2271, 2271, 2271, 2271, 2271,
	190, 17, 66, 211, 106, 189, 156, 155, 65, -1000,
	238, 2271, -1000, -1000, -1000, 70, 149, 64, 210, -1000,
	320, -1000, -1000, -1000, 2271, 2271, 2271, 188, -1000, 2271,
	-1000, -1000, -1000, 14, -1000, -1000, -1000, -1000, -1000, -1000,
	673, -1000, 978, 6, 3, 187, 185, 184, 183, 182,
	181, 318, -1000, 146, 1100, 317, 244, 2123, 316, -1000,
	-1000, 322, 63, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, -1000, 15, -1000, 70, 76,
	-1000, 180, 179, 178, 314, -1000, 199, 1911, -1000, 608,
	-1000, 917, 48, 54, -1000, -1000, 313, 312, 311, 310,
	295, 294, 13, -1000, 2, 62, 177, -1000, -1000, -1000,
	432, -1000, -1000, -1000, -1000, -1000, 143, 2271, 2271, -1000,
	2271, 69, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	10, -1000, 1858, -1000, 141, -1000, -1000, -1000, 281, 278,
	275, 9, 14, 1858, 12, -1000, -8, -29, 61, 856,
	43, 47, -1000, -1000, 1, 5, -1, -4, -3, -10,
	-1000, 140, -1000, 1100, 798, -1000, -1000, -1000, 176, 175,
	-1000, 2271, -1000, 138, 41, -1000, -9, -11, -12, -1000,
	137, 107, 7, -1000, -1000, -1000, 737, 35, 31, -1000,
	-1000, -1000, 132, 1699, 99, -1000, 131, 1699, 98, -1000,
	130, 1699, 95, -1000, -1000, -1000, 253, 249, -1000, -1000,
	-1000, -1000, 129, -1000, 127, -1000, 126, -1000, -1000, 164,
	-1000, -1000, 56, 37, -1000, 1537, 1699, -1000, 1483, 1699,
	-1000, 1429, 1699, -15, -19, -1000, -1000, -1000, 145, -1000,
	-1000, -1000, 123, 737, 737, -1000, 1375, -1000, 1321, -1000,
	1267, -1000, 122, 1699, 94, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, 1213, 1699, -1000, 1159, -1000,
}

var protoPgo = [...]int{
	0, 382, 381, 289, 327, 380, 377, 3, 376, 11,
	14, 375, 374, 373, 36, 12, 8, 28, 27, 372,
	16, 0, 370, 369, 368, 367, 364, 21, 363, 362,
	360, 9, 359, 358, 357, 10, 356, 355, 13, 354,
	352, 350, 349, 29, 348, 347, 346, 278, 1, 2,
	15, 345, 24, 344, 341, 32, 340, 339, 25, 23,
	338, 273, 34, 334, 333, 252, 31, 332, 17, 331,
	30, 329, 328, 5,
}

var protoR1 = [...]int{
	0, 1, 1, 1, 1, 4, 4, 3, 3, 3,
	3, 3, 3, 3, 3, 3, 3, 2, 5, 5,
	5, 6, 27, 27, 28, 28, 29, 29, 30, 30,
	7, 14, 14, 12, 12, 16, 16, 17, 17, 17,
	19, 19, 19, 19, 19, 19, 19, 19, 68, 68,
	18, 38, 38, 38, 37, 37, 37, 37, 37, 37,
	36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
	13, 13, 13, 35, 35, 35, 35, 35, 35, 31,
	31, 32, 32, 33, 33, 34, 34, 40, 40, 40,
	40, 40, 40, 40, 40, 41, 41, 41, 41, 41,
	41, 41, 41, 15, 9, 9, 8, 43, 43, 43,
	43, 43, 43, 42, 51, 51, 51, 50, 50, 50,
	50, 50, 50, 39, 39, 44, 44, 45, 45, 46,
	22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
	22, 22, 60, 60, 58, 58, 56, 56, 56, 59,
	59, 57, 57, 57, 20, 20, 53, 53, 54, 54,
	55, 52, 52, 61, 63, 63, 63, 62, 62, 62,
	62, 62, 62, 64, 64, 47, 49, 49, 49, 48,
	48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
	48, 48, 65, 67, 67, 67, 66, 66, 66, 66,
	66, 69, 71, 71, 71, 70, 70, 70, 70, 70,
	72, 72, 73, 73, 11, 11, 11, 10, 10, 10,
	10, 23, 23, 23, 23, 23, 23, 23, 23, 23,
	23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
	23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
	23, 23, 23, 23, 24, 24, 24, 24, 24, 24,
	24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
	24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
	24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
	24, 24, 24, 24, 26, 26, 26, 26, 26, 26,
	26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
	26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
	26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
	26, 26, 26, 26, 26, 25, 25, 25, 25, 25,
	25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
	25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
	25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
	25, 25, 25, 25, 21, 21, 21, 21, 21, 21,
	21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
	21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
	21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
	21, 21, 21, 21, 21, 21, 21,
}

var protoR2 = [...]int{
	0, 1, 1, 2, 0, 2, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 2, 1, 4, 3, 4,
	4, 3, 1, 3, 1, 3, 1, 3, 1, 3,
	5, 1, 3, 1, 3, 1, 1, 1, 1, 1,
	1, 2, 2, 2, 2, 1, 2, 2, 1, 2,
	3, 1, 2, 0, 1, 2, 2, 2, 2, 1,
	3, 4, 5, 5, 3, 2, 5, 4, 5, 4,
	1, 3, 3, 1, 3, 3, 5, 3, 5, 1,
	2, 1, 2, 1, 2, 1, 2, 6, 6, 6,
	7, 7, 7, 5, 6, 6, 6, 6, 7, 7,
	7, 5, 6, 3, 1, 3, 3, 8, 8, 8,
	9, 9, 9, 5, 2, 1, 0, 1, 1, 1,
	1, 2, 1, 5, 6, 7, 8, 5, 6, 6,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 3, 4, 1, 3, 1, 3, 3, 1,
	3, 1, 3, 3, 1, 2, 3, 1, 3, 1,
	3, 1, 3, 5, 2, 1, 0, 1, 1, 1,
	1, 2, 1, 4, 5, 5, 2, 1, 0, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	2, 1, 5, 2, 1, 0, 1, 1, 1, 2,
	1, 5, 2, 1, 0, 1, 1, 1, 2, 1,
	6, 8, 4, 3, 2, 1, 0, 1, 1, 2,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1,
}

var protoChk = [...]int{
	-1000, -1, -2, -4, 8, -3, -5, -6, -7, -47,
	-61, -65, -69, 52, 2, 9, 12, 13, 44, 43,
	45, 46, -4, -3, 51, 52, -68, 10, 11, 4,
	-27, -21, 7, 8, 9, 10, 11, 12, 13, 14,
	15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
	25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
	35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
	45, 46, 47, 48, 49, -14, -12, -21, 65, -21,
	-21, -31, -27, 59, -21, -68, 52, -68, -68, -68,
	52, 59, 51, 59, -31, 54, 54, 54, -27, 54,
	52, 52, 52, -27, -16, -17, -18, -68, -19, -21,
	54, 6, 64, 63, 5, -14, 66, -49, -48, -40,
	-61, -47, -65, -60, -43, -7, -42, -45, -53, 52,
	2, 20, 19, 18, -32, 39, 37, -46, 42, -55,
	-28, 59, 38, -23, 7, 8, 9, 10, 11, 12,
	14, 15, 16, 17, 21, 22, 23, 24, 25, 26,
	27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
	40, 41, 46, 47, 48, 49, -63, -62, -7, -64,
	-54, 52, 2, -26, 42, -55, 7, 8, 9, 10,
	11, 12, 14, 15, 16, 17, 18, 19, 20, 21,
	22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
	32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
	43, 44, 45, 46, 47, 48, 49, -67, -66, -41,
	-43, 52, 2, 20, 19, 18, -33, -29, 59, -24,
	7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
	17, 21, 22, 23, 24, 25, 26, 27, 28, 29,
	30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
	40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
	-71, -70, -7, -72, 52, 2, 47, 52, -38, -37,
	-36, 2, -13, -21, 67, 6, 16, 5, 6, 16,
	5, 55, -48, 52, -31, 36, -31, 36, -31, 36,
	-21, -58, -56, 5, -21, -21, -58, -52, -68, -27,
	62, 59, 55, -62, 52, 51, -59, -57, -20, 5,
	64, 55, -66, 52, -31, -31, -31, -21, -27, 59,
	55, -70, 52, -21, 55, -38, 60, 52, 60, 52,
	53, -18, 62, -31, 2, -21, -21, -21, -21, -21,
	-21, 51, 52, -15, 67, 60, 40, 54, 51, 52,
	52, 60, -22, 23, 24, 25, 26, 27, 28, 29,
	30, 31, 32, 33, 34, -27, -20, 52, 60, 40,
	5, -21, -21, -21, 51, -27, -73, 65, -17, 67,
	-18, 62, -38, 2, 68, 68, 51, 51, 51, 51,
	51, 51, 5, 52, -9, -8, -14, -58, 5, 41,
	-51, -50, -7, -39, -44, 52, 2, -34, 36, -30,
	59, -25, 7, 8, 9, 10, 11, 12, 14, 15,
	16, 17, 21, 22, 23, 24, 25, 26, 27, 28,
	29, 30, 31, 32, 33, 34, 35, 37, 38, 39,
	40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
	5, -52, 60, 52, -15, -59, -20, 41, 51, 51,
	51, 5, 49, 48, -31, 68, -35, 2, -16, 62,
	-38, 2, 61, 61, 5, 5, 5, 5, 5, 5,
	52, -15, 68, 60, 51, 55, -50, 52, -21, -21,
	-27, 59, 52, -15, -31, 52, 5, 5, 5, 52,
	-15, -73, -31, 66, 68, 68, 60, -38, 2, 61,
	61, 52, -15, 54, -15, 52, -15, 54, -15, 52,
	-15, 54, -15, 52, -9, -16, 51, 51, -27, 52,
	61, 52, -15, 52, -15, 52, -15, 52, 52, 54,
	66, -35, 61, 61, 52, -49, 54, 52, -49, 54,
	52, -49, 54, 5, 5, 52, 52, 52, -11, -10,
	-7, 52, 2, 60, 60, 55, -49, 55, -49, 55,
	-49, 52, -15, 54, -15, 55, -10, 52, -35, -35,
	55, 55, 55, 52, -49, 54, 55, -49, 55,
}

var protoDef = [...]int{
	-2, -2, -2, -2, 0, 6, 7, 8, 9, 10,
	11, 12, 13, 14, 16, 0, 0, 0, 0, 0,
	0, 0, -2, 5, 0, 15, 0, 0, 0, 48,
	0, 22, 374, 375, 376, 377, 378, 379, 380, 381,
	382, 383, 384, 385, 386, 387, 388, 389, 390, 391,
	392, 393, 394, 395, 396, 397, 398, 399, 400, 401,
	402, 403, 404, 405, 406, 407, 408, 409, 410, 411,
	412, 413, 414, 415, 416, 0, 31, 33, 0, 0,
	0, 0, 79, 0, 0, 0, 18, 0, 0, 49,
	21, 0, 0, 0, 0, -2, -2, -2, 80, -2,
	17, 19, 20, 23, 0, 35, 36, 37, 38, 39,
	-2, 40, 0, 0, 45, 32, 34, 0, 177, 179,
	180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
	191, 0, 0, 0, 0, 0, 0, 0, 0, 157,
	81, 0, 247, 24, 221, 222, 223, 224, 225, 226,
	227, 228, 229, 230, 231, 232, 233, 234, 235, 236,
	237, 238, 239, 240, 241, 242, 243, 244, 245, 246,
	248, 249, 250, 251, 252, 253, 0, 165, 167, 168,
	169, 170, 172, 0, 0, 159, 294, 295, 296, 297,
	298, 299, 300, 301, 302, 303, 304, 305, 306, 307,
	308, 309, 310, 311, 312, 313, 314, 315, 316, 317,
	318, 319, 320, 321, 322, 323, 324, 325, 326, 327,
	328, 329, 330, 331, 332, 333, 334, 0, 194, 196,
	197, 198, 200, 0, 0, 0, 0, 83, 0, 26,
	254, 255, 256, 257, 258, 259, 260, 261, 262, 263,
	264, 265, 266, 267, 268, 269, 270, 271, 272, 273,
	274, 275, 276, 277, 278, 279, 280, 281, 282, 283,
	284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
	0, 203, 205, 206, 207, 209, 0, 30, 0, -2,
	54, 59, 0, 70, 0, 41, 44, 47, 42, 43,
	46, 175, 176, 190, 0, 403, 0, 403, 0, 403,
	0, 0, 144, 146, 0, 0, 0, 0, 161, 82,
	0, 0, 163, 164, 171, 0, 0, 149, 151, 154,
	0, 192, 193, 199, 0, 0, 0, 0, 84, 0,
	201, 202, 208, 0, 50, 52, 55, 56, 57, 58,
	0, 65, -2, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 142, 0, 0, 0, 0, -2, 0, 156,
	160, 0, 0, 130, 131, 132, 133, 134, 135, 136,
	137, 138, 139, 140, 141, 25, 0, 158, 0, 0,
	155, 0, 0, 0, 0, 27, 0, 0, 60, 0,
	64, -2, 0, 59, 71, 72, 0, 0, 0, 0,
	0, 0, 0, 143, 0, 104, 0, 145, 147, 148,
	0, 115, 117, 118, 119, 120, 122, 0, 360, 85,
	0, 28, 335, 336, 337, 338, 339, 340, 341, 342,
	343, 344, 345, 346, 347, 348, 349, 350, 351, 352,
	353, 354, 355, 356, 357, 358, 359, 361, 362, 363,
	364, 365, 366, 367, 368, 369, 370, 371, 372, 373,
	0, 162, 0, 173, 0, 150, 152, 153, 0, 0,
	0, 0, 0, 415, 0, 61, 0, 0, 73, -2,
	0, 59, 67, 69, 0, 0, 0, 0, 0, 0,
	93, 0, 103, 0, 0, 113, 114, 121, 0, 0,
	86, 0, 127, 0, 0, 174, 0, 0, 0, 101,
	0, 0, 0, 213, 62, 63, 0, 0, 59, 66,
	68, 87, 0, -2, 0, 88, 0, -2, 0, 89,
	0, -2, 0, 94, 105, 106, 0, 0, 29, 128,
	129, 95, 0, 96, 0, 97, 0, 102, 210, -2,
	212, 74, 75, 77, 90, 0, -2, 91, 0, -2,
	92, 0, -2, 0, 0, 98, 99, 100, 0, 215,
	217, 218, 220, 0, 0, 107, 0, 108, 0, 109,
	0, 123, 0, -2, 0, 211, 214, 219, 76, 78,
	110, 111, 112, 124, 0, -2, 125, 0, 126,
}

var protoTok1 = [...]int{
	1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
	3, 3, 3, 76, 3, 74, 73, 72, 70, 3,
	65, 66, 69, 63, 60, 64, 59, 57, 3, 3,
	3, 3, 3, 3, 3, 3, 3, 3, 53, 52,
	62, 51, 61, 58, 75, 3, 3, 3, 3, 3,
	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
	3, 67, 56, 68, 71, 3, 78, 3, 3, 3,
	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
	3, 3, 3, 54, 3, 55, 77,
}

var protoTok2 = [...]int{
	2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
	12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
	22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
	32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
	42, 43, 44, 45, 46, 47, 48, 49, 50,
}

var protoTok3 = [...]int{
	0,
}

var protoErrorMessages = [...]struct {
	state int
	token int
	msg   string
}{}

//line yaccpar:1

/*	parser for yacc output	*/

var (
	protoDebug        = 0
	protoErrorVerbose = false
)

type protoLexer interface {
	Lex(lval *protoSymType) int
	Error(s string)
}

type protoParser interface {
	Parse(protoLexer) int
	Lookahead() int
}

type protoParserImpl struct {
	lval  protoSymType
	stack [protoInitialStackSize]protoSymType
	char  int
}

func (p *protoParserImpl) Lookahead() int {
	return p.char
}

func protoNewParser() protoParser {
	return &protoParserImpl{}
}

const protoFlag = -1000

func protoTokname(c int) string {
	if c >= 1 && c-1 < len(protoToknames) {
		if protoToknames[c-1] != "" {
			return protoToknames[c-1]
		}
	}
	return __yyfmt__.Sprintf("tok-%v", c)
}

func protoStatname(s int) string {
	if s >= 0 && s < len(protoStatenames) {
		if protoStatenames[s] != "" {
			return protoStatenames[s]
		}
	}
	return __yyfmt__.Sprintf("state-%v", s)
}

func protoErrorMessage(state, lookAhead int) string {
	const TOKSTART = 4

	if !protoErrorVerbose {
		return "syntax error"
	}

	for _, e := range protoErrorMessages {
		if e.state == state && e.token == lookAhead {
			return "syntax error: " + e.msg
		}
	}

	res := "syntax error: unexpected " + protoTokname(lookAhead)

	// To match Bison, suggest at most four expected tokens.
	expected := make([]int, 0, 4)

	// Look for shiftable tokens.
	base := protoPact[state]
	for tok := TOKSTART; tok-1 < len(protoToknames); tok++ {
		if n := base + tok; n >= 0 && n < protoLast && protoChk[protoAct[n]] == tok {
			if len(expected) == cap(expected) {
				return res
			}
			expected = append(expected, tok)
		}
	}

	if protoDef[state] == -2 {
		i := 0
		for protoExca[i] != -1 || protoExca[i+1] != state {
			i += 2
		}

		// Look for tokens that we accept or reduce.
		for i += 2; protoExca[i] >= 0; i += 2 {
			tok := protoExca[i]
			if tok < TOKSTART || protoExca[i+1] == 0 {
				continue
			}
			if len(expected) == cap(expected) {
				return res
			}
			expected = append(expected, tok)
		}

		// If the default action is to accept or reduce, give up.
		if protoExca[i+1] != 0 {
			return res
		}
	}

	for i, tok := range expected {
		if i == 0 {
			res += ", expecting "
		} else {
			res += " or "
		}
		res += protoTokname(tok)
	}
	return res
}

func protolex1(lex protoLexer, lval *protoSymType) (char, token int) {
	token = 0
	char = lex.Lex(lval)
	if char <= 0 {
		token = protoTok1[0]
		goto out
	}
	if char < len(protoTok1) {
		token = protoTok1[char]
		goto out
	}
	if char >= protoPrivate {
		if char < protoPrivate+len(protoTok2) {
			token = protoTok2[char-protoPrivate]
			goto out
		}
	}
	for i := 0; i < len(protoTok3); i += 2 {
		token = protoTok3[i+0]
		if token == char {
			token = protoTok3[i+1]
			goto out
		}
	}

out:
	if token == 0 {
		token = protoTok2[1] /* unknown char */
	}
	if protoDebug >= 3 {
		__yyfmt__.Printf("lex %s(%d)\n", protoTokname(token), uint(char))
	}
	return char, token
}

func protoParse(protolex protoLexer) int {
	return protoNewParser().Parse(protolex)
}

func (protorcvr *protoParserImpl) Parse(protolex protoLexer) int {
	var proton int
	var protoVAL protoSymType
	var protoDollar []protoSymType
	_ = protoDollar // silence set and not used
	protoS := protorcvr.stack[:]

	Nerrs := 0   /* number of errors */
	Errflag := 0 /* error recovery flag */
	protostate := 0
	protorcvr.char = -1
	prototoken := -1 // protorcvr.char translated into internal numbering
	defer func() {
		// Make sure we report no lookahead when not parsing.
		protostate = -1
		protorcvr.char = -1
		prototoken = -1
	}()
	protop := -1
	goto protostack

ret0:
	return 0

ret1:
	return 1

protostack:
	/* put a state and value onto the stack */
	if protoDebug >= 4 {
		__yyfmt__.Printf("char %v in %v\n", protoTokname(prototoken), protoStatname(protostate))
	}

	protop++
	if protop >= len(protoS) {
		nyys := make([]protoSymType, len(protoS)*2)
		copy(nyys, protoS)
		protoS = nyys
	}
	protoS[protop] = protoVAL
	protoS[protop].yys = protostate

protonewstate:
	proton = protoPact[protostate]
	if proton <= protoFlag {
		goto protodefault /* simple state */
	}
	if protorcvr.char < 0 {
		protorcvr.char, prototoken = protolex1(protolex, &protorcvr.lval)
	}
	proton += prototoken
	if proton < 0 || proton >= protoLast {
		goto protodefault
	}
	proton = protoAct[proton]
	if protoChk[proton] == prototoken { /* valid shift */
		protorcvr.char = -1
		prototoken = -1
		protoVAL = protorcvr.lval
		protostate = proton
		if Errflag > 0 {
			Errflag--
		}
		goto protostack
	}

protodefault:
	/* default state action */
	proton = protoDef[protostate]
	if proton == -2 {
		if protorcvr.char < 0 {
			protorcvr.char, prototoken = protolex1(protolex, &protorcvr.lval)
		}

		/* look through exception table */
		xi := 0
		for {
			if protoExca[xi+0] == -1 && protoExca[xi+1] == protostate {
				break
			}
			xi += 2
		}
		for xi += 2; ; xi += 2 {
			proton = protoExca[xi+0]
			if proton < 0 || proton == prototoken {
				break
			}
		}
		proton = protoExca[xi+1]
		if proton < 0 {
			goto ret0
		}
	}
	if proton == 0 {
		/* error ... attempt to resume parsing */
		switch Errflag {
		case 0: /* brand new error */
			protolex.Error(protoErrorMessage(protostate, prototoken))
			Nerrs++
			if protoDebug >= 1 {
				__yyfmt__.Printf("%s", protoStatname(protostate))
				__yyfmt__.Printf(" saw %s\n", protoTokname(prototoken))
			}
			fallthrough

		case 1, 2: /* incompletely recovered error ... try again */
			Errflag = 3

			/* find a state where "error" is a legal shift action */
			for protop >= 0 {
				proton = protoPact[protoS[protop].yys] + protoErrCode
				if proton >= 0 && proton < protoLast {
					protostate = protoAct[proton] /* simulate a shift of "error" */
					if protoChk[protostate] == protoErrCode {
						goto protostack
					}
				}

				/* the current p has no shift on "error", pop stack */
				if protoDebug >= 2 {
					__yyfmt__.Printf("error recovery pops state %d\n", protoS[protop].yys)
				}
				protop--
			}
			/* there is no state on the stack with an error shift ... abort */
			goto ret1

		case 3: /* no shift yet; clobber input char */
			if protoDebug >= 2 {
				__yyfmt__.Printf("error recovery discards %s\n", protoTokname(prototoken))
			}
			if prototoken == protoEofCode {
				goto ret1
			}
			protorcvr.char = -1
			prototoken = -1
			goto protonewstate /* try again in the same state */
		}
	}

	/* reduction by production proton */
	if protoDebug >= 2 {
		__yyfmt__.Printf("reduce %v in:\n\t%v\n", proton, protoStatname(protostate))
	}

	protont := proton
	protopt := protop
	_ = protopt // guard against "declared and not used"

	protop -= protoR2[proton]
	// protop is now the index of $0. Perform the default action. Iff the
	// reduced production is ε, $1 is possibly out of range.
	if protop+1 >= len(protoS) {
		nyys := make([]protoSymType, len(protoS)*2)
		copy(nyys, protoS)
		protoS = nyys
	}
	protoVAL = protoS[protop+1]

	/* consult goto table to find next state */
	proton = protoR1[proton]
	protog := protoPgo[proton]
	protoj := protog + protoS[protop].yys + 1

	if protoj >= protoLast {
		protostate = protoAct[protog]
	} else {
		protostate = protoAct[protoj]
		if protoChk[protostate] != -proton {
			protostate = protoAct[protog]
		}
	}
	// dummy call; replaced with literal code
	switch protont {

	case 1:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:143
		{
			protoVAL.file = ast.NewFileNode(protoDollar[1].syn, nil)
			protolex.(*protoLex).res = protoVAL.file
		}
	case 2:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:147
		{
			protoVAL.file = ast.NewFileNode(nil, protoDollar[1].fileDecls)
			protolex.(*protoLex).res = protoVAL.file
		}
	case 3:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:151
		{
			protoVAL.file = ast.NewFileNode(protoDollar[1].syn, protoDollar[2].fileDecls)
			protolex.(*protoLex).res = protoVAL.file
		}
	case 4:
		protoDollar = protoS[protopt-0 : protopt+1]
//line proto.y:155
		{
		}
	case 5:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:158
		{
			if protoDollar[2].fileDecl != nil {
				protoVAL.fileDecls = append(protoDollar[1].fileDecls, protoDollar[2].fileDecl)
			} else {
				protoVAL.fileDecls = protoDollar[1].fileDecls
			}
		}
	case 6:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:165
		{
			if protoDollar[1].fileDecl != nil {
				protoVAL.fileDecls = []ast.FileElement{protoDollar[1].fileDecl}
			} else {
				protoVAL.fileDecls = nil
			}
		}
	case 7:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:173
		{
			protoVAL.fileDecl = protoDollar[1].imprt
		}
	case 8:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:176
		{
			protoVAL.fileDecl = protoDollar[1].pkg
		}
	case 9:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:179
		{
			protoVAL.fileDecl = protoDollar[1].opt
		}
	case 10:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:182
		{
			protoVAL.fileDecl = protoDollar[1].msg
		}
	case 11:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:185
		{
			protoVAL.fileDecl = protoDollar[1].en
		}
	case 12:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:188
		{
			protoVAL.fileDecl = protoDollar[1].extend
		}
	case 13:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:191
		{
			protoVAL.fileDecl = protoDollar[1].svc
		}
	case 14:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:194
		{
			protoVAL.fileDecl = ast.NewEmptyDeclNode(protoDollar[1].b)
		}
	case 15:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:197
		{
			protoVAL.fileDecl = nil
		}
	case 16:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:200
		{
			protoVAL.fileDecl = nil
		}
	case 17:
		protoDollar = protoS[protopt-4 : protopt+1]
//line proto.y:204
		{
			protoVAL.syn = ast.NewSyntaxNode(protoDollar[1].id.ToKeyword(), protoDollar[2].b, protoDollar[3].str.toStringValueNode(), protoDollar[4].b)
		}
	case 18:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:208
		{
			protoVAL.imprt = ast.NewImportNode(protoDollar[1].id.ToKeyword(), nil, nil, protoDollar[2].str.toStringValueNode(), protoDollar[3].b)
		}
	case 19:
		protoDollar = protoS[protopt-4 : protopt+1]
//line proto.y:211
		{
			protoVAL.imprt = ast.NewImportNode(protoDollar[1].id.ToKeyword(), nil, protoDollar[2].id.ToKeyword(), protoDollar[3].str.toStringValueNode(), protoDollar[4].b)
		}
	case 20:
		protoDollar = protoS[protopt-4 : protopt+1]
//line proto.y:214
		{
			protoVAL.imprt = ast.NewImportNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id.ToKeyword(), nil, protoDollar[3].str.toStringValueNode(), protoDollar[4].b)
		}
	case 21:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:218
		{
			protoVAL.pkg = ast.NewPackageNode(protoDollar[1].id.ToKeyword(), protoDollar[2].cid.toIdentValueNode(nil), protoDollar[3].b)
		}
	case 22:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:222
		{
			protoVAL.cid = &identList{protoDollar[1].id, nil, nil}
		}
	case 23:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:225
		{
			protoVAL.cid = &identList{protoDollar[1].id, protoDollar[2].b, protoDollar[3].cid}
		}
	case 24:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:233
		{
			protoVAL.cid = &identList{protoDollar[1].id, nil, nil}
		}
	case 25:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:236
		{
			protoVAL.cid = &identList{protoDollar[1].id, protoDollar[2].b, protoDollar[3].cid}
		}
	case 26:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:240
		{
			protoVAL.cid = &identList{protoDollar[1].id, nil, nil}
		}
	case 27:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:243
		{
			protoVAL.cid = &identList{protoDollar[1].id, protoDollar[2].b, protoDollar[3].cid}
		}
	case 28:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:247
		{
			protoVAL.cid = &identList{protoDollar[1].id, nil, nil}
		}
	case 29:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:250
		{
			protoVAL.cid = &identList{protoDollar[1].id, protoDollar[2].b, protoDollar[3].cid}
		}
	case 30:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:254
		{
			refs, dots := protoDollar[2].optNms.toNodes()
			optName := ast.NewOptionNameNode(refs, dots)
			protoVAL.opt = ast.NewOptionNode(protoDollar[1].id.ToKeyword(), optName, protoDollar[3].b, protoDollar[4].v, protoDollar[5].b)
		}
	case 31:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:260
		{
			protoVAL.optNms = &fieldRefList{protoDollar[1].ref, nil, nil}
		}
	case 32:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:263
		{
			protoVAL.optNms = &fieldRefList{protoDollar[1].ref, protoDollar[2].b, protoDollar[3].optNms}
		}
	case 33:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:267
		{
			protoVAL.ref = ast.NewFieldReferenceNode(protoDollar[1].id)
		}
	case 34:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:270
		{
			protoVAL.ref = ast.NewExtensionFieldReferenceNode(protoDollar[1].b, protoDollar[2].tid, protoDollar[3].b)
		}
	case 37:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:277
		{
			protoVAL.v = protoDollar[1].str.toStringValueNode()
		}
	case 39:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:281
		{
			if protoDollar[1].id.Val == "true" || protoDollar[1].id.Val == "false" {
				protoVAL.v = ast.NewBoolLiteralNode(protoDollar[1].id.ToKeyword())
			} else if protoDollar[1].id.Val == "inf" || protoDollar[1].id.Val == "nan" {
				protoVAL.v = ast.NewSpecialFloatLiteralNode(protoDollar[1].id.ToKeyword())
			} else {
				protoVAL.v = protoDollar[1].id
			}
		}
	case 40:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:291
		{
			protoVAL.v = protoDollar[1].f
		}
	case 41:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:294
		{
			protoVAL.v = ast.NewSignedFloatLiteralNode(protoDollar[1].b, protoDollar[2].f)
		}
	case 42:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:297
		{
			protoVAL.v = ast.NewSignedFloatLiteralNode(protoDollar[1].b, protoDollar[2].f)
		}
	case 43:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:300
		{
			f := ast.NewSpecialFloatLiteralNode(protoDollar[2].id.ToKeyword())
			protoVAL.v = ast.NewSignedFloatLiteralNode(protoDollar[1].b, f)
		}
	case 44:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:304
		{
			f := ast.NewSpecialFloatLiteralNode(protoDollar[2].id.ToKeyword())
			protoVAL.v = ast.NewSignedFloatLiteralNode(protoDollar[1].b, f)
		}
	case 45:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:308
		{
			protoVAL.v = protoDollar[1].i
		}
	case 46:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:311
		{
			protoVAL.v = ast.NewPositiveUintLiteralNode(protoDollar[1].b, protoDollar[2].i)
		}
	case 47:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:314
		{
			if protoDollar[2].i.Val > math.MaxInt64+1 {
				// can't represent as int so treat as float literal
				protoVAL.v = ast.NewSignedFloatLiteralNode(protoDollar[1].b, protoDollar[2].i)
			} else {
				protoVAL.v = ast.NewNegativeIntLiteralNode(protoDollar[1].b, protoDollar[2].i)
			}
		}
	case 48:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:323
		{
			protoVAL.str = &stringList{protoDollar[1].s, nil}
		}
	case 49:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:326
		{
			protoVAL.str = &stringList{protoDollar[1].s, protoDollar[2].str}
		}
	case 50:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:330
		{
			fields, delims := protoDollar[2].msgLit.toNodes()
			protoVAL.v = ast.NewMessageLiteralNode(protoDollar[1].b, fields, delims, protoDollar[3].b)
		}
	case 51:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:335
		{
			if protoDollar[1].msgEntry != nil {
				protoVAL.msgLit = &messageFieldList{protoDollar[1].msgEntry, nil}
			} else {
				protoVAL.msgLit = nil
			}
		}
	case 52:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:342
		{
			if protoDollar[1].msgEntry != nil {
				protoVAL.msgLit = &messageFieldList{protoDollar[1].msgEntry, protoDollar[2].msgLit}
			} else {
				protoVAL.msgLit = protoDollar[2].msgLit
			}
		}
	case 53:
		protoDollar = protoS[protopt-0 : protopt+1]
//line proto.y:349
		{
			protoVAL.msgLit = nil
		}
	case 54:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:353
		{
			if protoDollar[1].msgField != nil {
				protoVAL.msgEntry = &messageFieldEntry{protoDollar[1].msgField, nil}
			} else {
				protoVAL.msgEntry = nil
			}
		}
	case 55:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:360
		{
			if protoDollar[1].msgField != nil {
				protoVAL.msgEntry = &messageFieldEntry{protoDollar[1].msgField, protoDollar[2].b}
			} else {
				protoVAL.msgEntry = nil
			}
		}
	case 56:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:367
		{
			if protoDollar[1].msgField != nil {
				protoVAL.msgEntry = &messageFieldEntry{protoDollar[1].msgField, protoDollar[2].b}
			} else {
				protoVAL.msgEntry = nil
			}
		}
	case 57:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:374
		{
			protoVAL.msgEntry = nil
		}
	case 58:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:377
		{
			protoVAL.msgEntry = nil
		}
	case 59:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:380
		{
			protoVAL.msgEntry = nil
		}
	case 60:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:384
		{
			if protoDollar[1].ref != nil {
				protoVAL.msgField = ast.NewMessageFieldNode(protoDollar[1].ref, protoDollar[2].b, protoDollar[3].v)
			} else {
				protoVAL.msgField = nil
			}
		}
	case 61:
		protoDollar = protoS[protopt-4 : protopt+1]
//line proto.y:391
		{
			if protoDollar[1].ref != nil {
				val := ast.NewArrayLiteralNode(protoDollar[3].b, nil, nil, protoDollar[4].b)
				protoVAL.msgField = ast.NewMessageFieldNode(protoDollar[1].ref, protoDollar[2].b, val)
			} else {
				protoVAL.msgField = nil
			}
		}
	case 62:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:399
		{
			if protoDollar[1].ref != nil {
				vals, commas := protoDollar[4].sl.toNodes()
				val := ast.NewArrayLiteralNode(protoDollar[3].b, vals, commas, protoDollar[5].b)
				protoVAL.msgField = ast.NewMessageFieldNode(protoDollar[1].ref, protoDollar[2].b, val)
			} else {
				protoVAL.msgField = nil
			}
		}
	case 63:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:408
		{
			protoVAL.msgField = nil
		}
	case 64:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:411
		{
			if protoDollar[1].ref != nil {
				protoVAL.msgField = ast.NewMessageFieldNode(protoDollar[1].ref, protoDollar[2].b, protoDollar[3].v)
			} else {
				protoVAL.msgField = nil
			}
		}
	case 65:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:418
		{
			if protoDollar[1].ref != nil {
				protoVAL.msgField = ast.NewMessageFieldNode(protoDollar[1].ref, nil, protoDollar[2].v)
			} else {
				protoVAL.msgField = nil
			}
		}
	case 66:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:425
		{
			if protoDollar[1].ref != nil {
				fields, delims := protoDollar[4].msgLit.toNodes()
				msg := ast.NewMessageLiteralNode(protoDollar[3].b, fields, delims, protoDollar[5].b)
				protoVAL.msgField = ast.NewMessageFieldNode(protoDollar[1].ref, protoDollar[2].b, msg)
			} else {
				protoVAL.msgField = nil
			}
		}
	case 67:
		protoDollar = protoS[protopt-4 : protopt+1]
//line proto.y:434
		{
			if protoDollar[1].ref != nil {
				fields, delims := protoDollar[3].msgLit.toNodes()
				msg := ast.NewMessageLiteralNode(protoDollar[2].b, fields, delims, protoDollar[4].b)
				protoVAL.msgField = ast.NewMessageFieldNode(protoDollar[1].ref, nil, msg)
			} else {
				protoVAL.msgField = nil
			}
		}
	case 68:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:443
		{
			protoVAL.msgField = nil
		}
	case 69:
		protoDollar = protoS[protopt-4 : protopt+1]
//line proto.y:446
		{
			protoVAL.msgField = nil
		}
	case 70:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:450
		{
			protoVAL.ref = ast.NewFieldReferenceNode(protoDollar[1].id)
		}
	case 71:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:453
		{
			protoVAL.ref = ast.NewExtensionFieldReferenceNode(protoDollar[1].b, protoDollar[2].tid, protoDollar[3].b)
		}
	case 72:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:456
		{
			protoVAL.ref = nil
		}
	case 73:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:460
		{
			protoVAL.sl = &valueList{protoDollar[1].v, nil, nil}
		}
	case 74:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:463
		{
			protoVAL.sl = &valueList{protoDollar[1].v, protoDollar[2].b, protoDollar[3].sl}
		}
	case 75:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:466
		{
			fields, delims := protoDollar[2].msgLit.toNodes()
			msg := ast.NewMessageLiteralNode(protoDollar[1].b, fields, delims, protoDollar[3].b)
			protoVAL.sl = &valueList{msg, nil, nil}
		}
	case 76:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:471
		{
			fields, delims := protoDollar[2].msgLit.toNodes()
			msg := ast.NewMessageLiteralNode(protoDollar[1].b, fields, delims, protoDollar[3].b)
			protoVAL.sl = &valueList{msg, protoDollar[4].b, protoDollar[5].sl}
		}
	case 77:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:476
		{
			protoVAL.sl = nil
		}
	case 78:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:479
		{
			protoVAL.sl = protoDollar[5].sl
		}
	case 79:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:483
		{
			protoVAL.tid = protoDollar[1].cid.toIdentValueNode(nil)
		}
	case 80:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:486
		{
			protoVAL.tid = protoDollar[2].cid.toIdentValueNode(protoDollar[1].b)
		}
	case 81:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:490
		{
			protoVAL.tid = protoDollar[1].cid.toIdentValueNode(nil)
		}
	case 82:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:493
		{
			protoVAL.tid = protoDollar[2].cid.toIdentValueNode(protoDollar[1].b)
		}
	case 83:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:497
		{
			protoVAL.tid = protoDollar[1].cid.toIdentValueNode(nil)
		}
	case 84:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:500
		{
			protoVAL.tid = protoDollar[2].cid.toIdentValueNode(protoDollar[1].b)
		}
	case 85:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:504
		{
			protoVAL.tid = protoDollar[1].cid.toIdentValueNode(nil)
		}
	case 86:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:507
		{
			protoVAL.tid = protoDollar[2].cid.toIdentValueNode(protoDollar[1].b)
		}
	case 87:
		protoDollar = protoS[protopt-6 : protopt+1]
//line proto.y:511
		{
			protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, nil, protoDollar[6].b)
		}
	case 88:
		protoDollar = protoS[protopt-6 : protopt+1]
//line proto.y:514
		{
			protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, nil, protoDollar[6].b)
		}
	case 89:
		protoDollar = protoS[protopt-6 : protopt+1]
//line proto.y:517
		{
			protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, nil, protoDollar[6].b)
		}
	case 90:
		protoDollar = protoS[protopt-7 : protopt+1]
//line proto.y:520
		{
			protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, protoDollar[6].cmpctOpts, protoDollar[7].b)
		}
	case 91:
		protoDollar = protoS[protopt-7 : protopt+1]
//line proto.y:523
		{
			protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, protoDollar[6].cmpctOpts, protoDollar[7].b)
		}
	case 92:
		protoDollar = protoS[protopt-7 : protopt+1]
//line proto.y:526
		{
			protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, protoDollar[6].cmpctOpts, protoDollar[7].b)
		}
	case 93:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:529
		{
			protoVAL.fld = ast.NewFieldNode(nil, protoDollar[1].tid, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, nil, protoDollar[5].b)
		}
	case 94:
		protoDollar = protoS[protopt-6 : protopt+1]
//line proto.y:532
		{
			protoVAL.fld = ast.NewFieldNode(nil, protoDollar[1].tid, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, protoDollar[5].cmpctOpts, protoDollar[6].b)
		}
	case 95:
		protoDollar = protoS[protopt-6 : protopt+1]
//line proto.y:536
		{
			protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, nil, protoDollar[6].b)
		}
	case 96:
		protoDollar = protoS[protopt-6 : protopt+1]
//line proto.y:539
		{
			protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, nil, protoDollar[6].b)
		}
	case 97:
		protoDollar = protoS[protopt-6 : protopt+1]
//line proto.y:542
		{
			protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, nil, protoDollar[6].b)
		}
	case 98:
		protoDollar = protoS[protopt-7 : protopt+1]
//line proto.y:545
		{
			protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, protoDollar[6].cmpctOpts, protoDollar[7].b)
		}
	case 99:
		protoDollar = protoS[protopt-7 : protopt+1]
//line proto.y:548
		{
			protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, protoDollar[6].cmpctOpts, protoDollar[7].b)
		}
	case 100:
		protoDollar = protoS[protopt-7 : protopt+1]
//line proto.y:551
		{
			protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, protoDollar[6].cmpctOpts, protoDollar[7].b)
		}
	case 101:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:554
		{
			protoVAL.fld = ast.NewFieldNode(nil, protoDollar[1].tid, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, nil, protoDollar[5].b)
		}
	case 102:
		protoDollar = protoS[protopt-6 : protopt+1]
//line proto.y:557
		{
			protoVAL.fld = ast.NewFieldNode(nil, protoDollar[1].tid, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, protoDollar[5].cmpctOpts, protoDollar[6].b)
		}
	case 103:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:561
		{
			opts, commas := protoDollar[2].opts.toNodes()
			protoVAL.cmpctOpts = ast.NewCompactOptionsNode(protoDollar[1].b, opts, commas, protoDollar[3].b)
		}
	case 104:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:566
		{
			protoVAL.opts = &compactOptionList{protoDollar[1].opt, nil, nil}
		}
	case 105:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:569
		{
			protoVAL.opts = &compactOptionList{protoDollar[1].opt, protoDollar[2].b, protoDollar[3].opts}
		}
	case 106:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:573
		{
			refs, dots := protoDollar[1].optNms.toNodes()
			optName := ast.NewOptionNameNode(refs, dots)
			protoVAL.opt = ast.NewCompactOptionNode(optName, protoDollar[2].b, protoDollar[3].v)
		}
	case 107:
		protoDollar = protoS[protopt-8 : protopt+1]
//line proto.y:579
		{
			protoVAL.grp = ast.NewGroupNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id.ToKeyword(), protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, nil, protoDollar[6].b, protoDollar[7].msgDecls, protoDollar[8].b)
		}
	case 108:
		protoDollar = protoS[protopt-8 : protopt+1]
//line proto.y:582
		{
			protoVAL.grp = ast.NewGroupNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id.ToKeyword(), protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, nil, protoDollar[6].b, protoDollar[7].msgDecls, protoDollar[8].b)
		}
	case 109:
		protoDollar = protoS[protopt-8 : protopt+1]
//line proto.y:585
		{
			protoVAL.grp = ast.NewGroupNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id.ToKeyword(), protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, nil, protoDollar[6].b, protoDollar[7].msgDecls, protoDollar[8].b)
		}
	case 110:
		protoDollar = protoS[protopt-9 : protopt+1]
//line proto.y:588
		{
			protoVAL.grp = ast.NewGroupNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id.ToKeyword(), protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, protoDollar[6].cmpctOpts, protoDollar[7].b, protoDollar[8].msgDecls, protoDollar[9].b)
		}
	case 111:
		protoDollar = protoS[protopt-9 : protopt+1]
//line proto.y:591
		{
			protoVAL.grp = ast.NewGroupNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id.ToKeyword(), protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, protoDollar[6].cmpctOpts, protoDollar[7].b, protoDollar[8].msgDecls, protoDollar[9].b)
		}
	case 112:
		protoDollar = protoS[protopt-9 : protopt+1]
//line proto.y:594
		{
			protoVAL.grp = ast.NewGroupNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id.ToKeyword(), protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, protoDollar[6].cmpctOpts, protoDollar[7].b, protoDollar[8].msgDecls, protoDollar[9].b)
		}
	case 113:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:598
		{
			protoVAL.oo = ast.NewOneOfNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].b, protoDollar[4].ooDecls, protoDollar[5].b)
		}
	case 114:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:602
		{
			if protoDollar[2].ooDecl != nil {
				protoVAL.ooDecls = append(protoDollar[1].ooDecls, protoDollar[2].ooDecl)
			} else {
				protoVAL.ooDecls = protoDollar[1].ooDecls
			}
		}
	case 115:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:609
		{
			if protoDollar[1].ooDecl != nil {
				protoVAL.ooDecls = []ast.OneOfElement{protoDollar[1].ooDecl}
			} else {
				protoVAL.ooDecls = nil
			}
		}
	case 116:
		protoDollar = protoS[protopt-0 : protopt+1]
//line proto.y:616
		{
			protoVAL.ooDecls = nil
		}
	case 117:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:620
		{
			protoVAL.ooDecl = protoDollar[1].opt
		}
	case 118:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:623
		{
			protoVAL.ooDecl = protoDollar[1].fld
		}
	case 119:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:626
		{
			protoVAL.ooDecl = protoDollar[1].grp
		}
	case 120:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:629
		{
			protoVAL.ooDecl = ast.NewEmptyDeclNode(protoDollar[1].b)
		}
	case 121:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:632
		{
			protoVAL.ooDecl = nil
		}
	case 122:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:635
		{
			protoVAL.ooDecl = nil
		}
	case 123:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:639
		{
			protoVAL.fld = ast.NewFieldNode(nil, protoDollar[1].tid, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, nil, protoDollar[5].b)
		}
	case 124:
		protoDollar = protoS[protopt-6 : protopt+1]
//line proto.y:642
		{
			protoVAL.fld = ast.NewFieldNode(nil, protoDollar[1].tid, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, protoDollar[5].cmpctOpts, protoDollar[6].b)
		}
	case 125:
		protoDollar = protoS[protopt-7 : protopt+1]
//line proto.y:646
		{
			protoVAL.grp = ast.NewGroupNode(nil, protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, nil, protoDollar[5].b, protoDollar[6].msgDecls, protoDollar[7].b)
		}
	case 126:
		protoDollar = protoS[protopt-8 : protopt+1]
//line proto.y:649
		{
			protoVAL.grp = ast.NewGroupNode(nil, protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, protoDollar[5].cmpctOpts, protoDollar[6].b, protoDollar[7].msgDecls, protoDollar[8].b)
		}
	case 127:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:653
		{
			protoVAL.mapFld = ast.NewMapFieldNode(protoDollar[1].mapType, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, nil, protoDollar[5].b)
		}
	case 128:
		protoDollar = protoS[protopt-6 : protopt+1]
//line proto.y:656
		{
			protoVAL.mapFld = ast.NewMapFieldNode(protoDollar[1].mapType, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, protoDollar[5].cmpctOpts, protoDollar[6].b)
		}
	case 129:
		protoDollar = protoS[protopt-6 : protopt+1]
//line proto.y:660
		{
			protoVAL.mapType = ast.NewMapTypeNode(protoDollar[1].id.ToKeyword(), protoDollar[2].b, protoDollar[3].id, protoDollar[4].b, protoDollar[5].tid, protoDollar[6].b)
		}
	case 142:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:677
		{
			ranges, commas := protoDollar[2].rngs.toNodes()
			protoVAL.ext = ast.NewExtensionRangeNode(protoDollar[1].id.ToKeyword(), ranges, commas, nil, protoDollar[3].b)
		}
	case 143:
		protoDollar = protoS[protopt-4 : protopt+1]
//line proto.y:681
		{
			ranges, commas := protoDollar[2].rngs.toNodes()
			protoVAL.ext = ast.NewExtensionRangeNode(protoDollar[1].id.ToKeyword(), ranges, commas, protoDollar[3].cmpctOpts, protoDollar[4].b)
		}
	case 144:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:686
		{
			protoVAL.rngs = &rangeList{protoDollar[1].rng, nil, nil}
		}
	case 145:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:689
		{
			protoVAL.rngs = &rangeList{protoDollar[1].rng, protoDollar[2].b, protoDollar[3].rngs}
		}
	case 146:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:693
		{
			protoVAL.rng = ast.NewRangeNode(protoDollar[1].i, nil, nil, nil)
		}
	case 147:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:696
		{
			protoVAL.rng = ast.NewRangeNode(protoDollar[1].i, protoDollar[2].id.ToKeyword(), protoDollar[3].i, nil)
		}
	case 148:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:699
		{
			protoVAL.rng = ast.NewRangeNode(protoDollar[1].i, protoDollar[2].id.ToKeyword(), nil, protoDollar[3].id.ToKeyword())
		}
	case 149:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:703
		{
			protoVAL.rngs = &rangeList{protoDollar[1].rng, nil, nil}
		}
	case 150:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:706
		{
			protoVAL.rngs = &rangeList{protoDollar[1].rng, protoDollar[2].b, protoDollar[3].rngs}
		}
	case 151:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:710
		{
			protoVAL.rng = ast.NewRangeNode(protoDollar[1].il, nil, nil, nil)
		}
	case 152:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:713
		{
			protoVAL.rng = ast.NewRangeNode(protoDollar[1].il, protoDollar[2].id.ToKeyword(), protoDollar[3].il, nil)
		}
	case 153:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:716
		{
			protoVAL.rng = ast.NewRangeNode(protoDollar[1].il, protoDollar[2].id.ToKeyword(), nil, protoDollar[3].id.ToKeyword())
		}
	case 154:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:720
		{
			protoVAL.il = protoDollar[1].i
		}
	case 155:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:723
		{
			protoVAL.il = ast.NewNegativeIntLiteralNode(protoDollar[1].b, protoDollar[2].i)
		}
	case 156:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:727
		{
			ranges, commas := protoDollar[2].rngs.toNodes()
			protoVAL.resvd = ast.NewReservedRangesNode(protoDollar[1].id.ToKeyword(), ranges, commas, protoDollar[3].b)
		}
	case 158:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:733
		{
			ranges, commas := protoDollar[2].rngs.toNodes()
			protoVAL.resvd = ast.NewReservedRangesNode(protoDollar[1].id.ToKeyword(), ranges, commas, protoDollar[3].b)
		}
	case 160:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:739
		{
			names, commas := protoDollar[2].names.toNodes()
			protoVAL.resvd = ast.NewReservedNamesNode(protoDollar[1].id.ToKeyword(), names, commas, protoDollar[3].b)
		}
	case 161:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:744
		{
			protoVAL.names = &nameList{protoDollar[1].str.toStringValueNode(), nil, nil}
		}
	case 162:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:747
		{
			protoVAL.names = &nameList{protoDollar[1].str.toStringValueNode(), protoDollar[2].b, protoDollar[3].names}
		}
	case 163:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:751
		{
			protoVAL.en = ast.NewEnumNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].b, protoDollar[4].enDecls, protoDollar[5].b)
		}
	case 164:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:755
		{
			if protoDollar[2].enDecl != nil {
				protoVAL.enDecls = append(protoDollar[1].enDecls, protoDollar[2].enDecl)
			} else {
				protoVAL.enDecls = protoDollar[1].enDecls
			}
		}
	case 165:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:762
		{
			if protoDollar[1].enDecl != nil {
				protoVAL.enDecls = []ast.EnumElement{protoDollar[1].enDecl}
			} else {
				protoVAL.enDecls = nil
			}
		}
	case 166:
		protoDollar = protoS[protopt-0 : protopt+1]
//line proto.y:769
		{
			protoVAL.enDecls = nil
		}
	case 167:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:773
		{
			protoVAL.enDecl = protoDollar[1].opt
		}
	case 168:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:776
		{
			protoVAL.enDecl = protoDollar[1].env
		}
	case 169:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:779
		{
			protoVAL.enDecl = protoDollar[1].resvd
		}
	case 170:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:782
		{
			protoVAL.enDecl = ast.NewEmptyDeclNode(protoDollar[1].b)
		}
	case 171:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:785
		{
			protoVAL.enDecl = nil
		}
	case 172:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:788
		{
			protoVAL.enDecl = nil
		}
	case 173:
		protoDollar = protoS[protopt-4 : protopt+1]
//line proto.y:792
		{
			protoVAL.env = ast.NewEnumValueNode(protoDollar[1].id, protoDollar[2].b, protoDollar[3].il, nil, protoDollar[4].b)
		}
	case 174:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:795
		{
			protoVAL.env = ast.NewEnumValueNode(protoDollar[1].id, protoDollar[2].b, protoDollar[3].il, protoDollar[4].cmpctOpts, protoDollar[5].b)
		}
	case 175:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:799
		{
			protoVAL.msg = ast.NewMessageNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].b, protoDollar[4].msgDecls, protoDollar[5].b)
		}
	case 176:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:803
		{
			if protoDollar[2].msgDecl != nil {
				protoVAL.msgDecls = append(protoDollar[1].msgDecls, protoDollar[2].msgDecl)
			} else {
				protoVAL.msgDecls = protoDollar[1].msgDecls
			}
		}
	case 177:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:810
		{
			if protoDollar[1].msgDecl != nil {
				protoVAL.msgDecls = []ast.MessageElement{protoDollar[1].msgDecl}
			} else {
				protoVAL.msgDecls = nil
			}
		}
	case 178:
		protoDollar = protoS[protopt-0 : protopt+1]
//line proto.y:817
		{
			protoVAL.msgDecls = nil
		}
	case 179:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:821
		{
			protoVAL.msgDecl = protoDollar[1].fld
		}
	case 180:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:824
		{
			protoVAL.msgDecl = protoDollar[1].en
		}
	case 181:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:827
		{
			protoVAL.msgDecl = protoDollar[1].msg
		}
	case 182:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:830
		{
			protoVAL.msgDecl = protoDollar[1].extend
		}
	case 183:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:833
		{
			protoVAL.msgDecl = protoDollar[1].ext
		}
	case 184:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:836
		{
			protoVAL.msgDecl = protoDollar[1].grp
		}
	case 185:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:839
		{
			protoVAL.msgDecl = protoDollar[1].opt
		}
	case 186:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:842
		{
			protoVAL.msgDecl = protoDollar[1].oo
		}
	case 187:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:845
		{
			protoVAL.msgDecl = protoDollar[1].mapFld
		}
	case 188:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:848
		{
			protoVAL.msgDecl = protoDollar[1].resvd
		}
	case 189:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:851
		{
			protoVAL.msgDecl = ast.NewEmptyDeclNode(protoDollar[1].b)
		}
	case 190:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:854
		{
			protoVAL.msgDecl = nil
		}
	case 191:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:857
		{
			protoVAL.msgDecl = nil
		}
	case 192:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:861
		{
			protoVAL.extend = ast.NewExtendNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].b, protoDollar[4].extDecls, protoDollar[5].b)
		}
	case 193:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:865
		{
			if protoDollar[2].extDecl != nil {
				protoVAL.extDecls = append(protoDollar[1].extDecls, protoDollar[2].extDecl)
			} else {
				protoVAL.extDecls = protoDollar[1].extDecls
			}
		}
	case 194:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:872
		{
			if protoDollar[1].extDecl != nil {
				protoVAL.extDecls = []ast.ExtendElement{protoDollar[1].extDecl}
			} else {
				protoVAL.extDecls = nil
			}
		}
	case 195:
		protoDollar = protoS[protopt-0 : protopt+1]
//line proto.y:879
		{
			protoVAL.extDecls = nil
		}
	case 196:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:883
		{
			protoVAL.extDecl = protoDollar[1].fld
		}
	case 197:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:886
		{
			protoVAL.extDecl = protoDollar[1].grp
		}
	case 198:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:889
		{
			protoVAL.extDecl = ast.NewEmptyDeclNode(protoDollar[1].b)
		}
	case 199:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:892
		{
			protoVAL.extDecl = nil
		}
	case 200:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:895
		{
			protoVAL.extDecl = nil
		}
	case 201:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:899
		{
			protoVAL.svc = ast.NewServiceNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].b, protoDollar[4].svcDecls, protoDollar[5].b)
		}
	case 202:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:903
		{
			if protoDollar[2].svcDecl != nil {
				protoVAL.svcDecls = append(protoDollar[1].svcDecls, protoDollar[2].svcDecl)
			} else {
				protoVAL.svcDecls = protoDollar[1].svcDecls
			}
		}
	case 203:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:910
		{
			if protoDollar[1].svcDecl != nil {
				protoVAL.svcDecls = []ast.ServiceElement{protoDollar[1].svcDecl}
			} else {
				protoVAL.svcDecls = nil
			}
		}
	case 204:
		protoDollar = protoS[protopt-0 : protopt+1]
//line proto.y:917
		{
			protoVAL.svcDecls = nil
		}
	case 205:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:924
		{
			protoVAL.svcDecl = protoDollar[1].opt
		}
	case 206:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:927
		{
			protoVAL.svcDecl = protoDollar[1].mtd
		}
	case 207:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:930
		{
			protoVAL.svcDecl = ast.NewEmptyDeclNode(protoDollar[1].b)
		}
	case 208:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:933
		{
			protoVAL.svcDecl = nil
		}
	case 209:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:936
		{
			protoVAL.svcDecl = nil
		}
	case 210:
		protoDollar = protoS[protopt-6 : protopt+1]
//line proto.y:940
		{
			protoVAL.mtd = ast.NewRPCNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].rpcType, protoDollar[4].id.ToKeyword(), protoDollar[5].rpcType, protoDollar[6].b)
		}
	case 211:
		protoDollar = protoS[protopt-8 : protopt+1]
//line proto.y:943
		{
			protoVAL.mtd = ast.NewRPCNodeWithBody(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].rpcType, protoDollar[4].id.ToKeyword(), protoDollar[5].rpcType, protoDollar[6].b, protoDollar[7].rpcDecls, protoDollar[8].b)
		}
	case 212:
		protoDollar = protoS[protopt-4 : protopt+1]
//line proto.y:947
		{
			protoVAL.rpcType = ast.NewRPCTypeNode(protoDollar[1].b, protoDollar[2].id.ToKeyword(), protoDollar[3].tid, protoDollar[4].b)
		}
	case 213:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:950
		{
			protoVAL.rpcType = ast.NewRPCTypeNode(protoDollar[1].b, nil, protoDollar[2].tid, protoDollar[3].b)
		}
	case 214:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:954
		{
			if protoDollar[2].rpcDecl != nil {
				protoVAL.rpcDecls = append(protoDollar[1].rpcDecls, protoDollar[2].rpcDecl)
			} else {
				protoVAL.rpcDecls = protoDollar[1].rpcDecls
			}
		}
	case 215:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:961
		{
			if protoDollar[1].rpcDecl != nil {
				protoVAL.rpcDecls = []ast.RPCElement{protoDollar[1].rpcDecl}
			} else {
				protoVAL.rpcDecls = nil
			}
		}
	case 216:
		protoDollar = protoS[protopt-0 : protopt+1]
//line proto.y:968
		{
			protoVAL.rpcDecls = nil
		}
	case 217:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:972
		{
			protoVAL.rpcDecl = protoDollar[1].opt
		}
	case 218:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:975
		{
			protoVAL.rpcDecl = ast.NewEmptyDeclNode(protoDollar[1].b)
		}
	case 219:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:978
		{
			protoVAL.rpcDecl = nil
		}
	case 220:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:981
		{
			protoVAL.rpcDecl = nil
		}
	}
	goto protostack /* stack new state and value */
}
