Commit 1062ffb9 authored by Daniel Clifford's avatar Daniel Clifford Committed by Commit Bot

[torque]: Implement structs

Struct are bundles of value types. They are essentially just shorthand
for passing around a group of individually defined values.

Struct types are declared like this:

  struct A {
    x: Smi;
    y: int32;
  }

and can be constructed explicitly like this:

  A{0, 0}

Structs can be used wherever other types are used (e.g. variables,
parameters, return values) except for parameter/return types of
builtins and runtime functions.

Struct use field access notation to set/get their values like this:

  let a: A = A{0, 0};
  let b: Smi = a.x;
  a.y = 0;

Change-Id: I9fd36a6514c37882831256a49a50809c5db75b56
Reviewed-on: https://chromium-review.googlesource.com/1122133
Commit-Queue: Daniel Clifford <danno@chromium.org>
Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#54501}
parent 16af1baa
......@@ -190,9 +190,11 @@ unaryExpression
| op=(PLUS | MINUS | BIT_NOT | NOT) unaryExpression;
locationExpression
: IDENTIFIER genericSpecializationTypeList?
: IDENTIFIER
| locationExpression '.' IDENTIFIER
| locationExpression '[' expression ']';
| primaryExpression '.' IDENTIFIER
| locationExpression '[' expression ']'
| primaryExpression '[' expression ']';
incrementDecrement
: INCREMENT locationExpression
......@@ -206,14 +208,24 @@ assignment
| locationExpression ((ASSIGNMENT | ASSIGNMENT_OPERATOR) expression)?;
assignmentExpression
: primaryExpression
: functionPointerExpression
| assignment;
structExpression
: IDENTIFIER '{' (expression (',' expression)*)? '}';
functionPointerExpression
: primaryExpression
| IDENTIFIER genericSpecializationTypeList?
;
primaryExpression
: helperCall
| structExpression
| DECIMAL_LITERAL
| STRING_LITERAL
| ('(' expression ')');
| ('(' expression ')')
;
forInitialization : variableDeclarationWithInitialization?;
forLoop: FOR '(' forInitialization ';' expression ';' assignment ')' statementBlock;
......@@ -266,6 +278,9 @@ statementBlock
helperBody : statementScope;
fieldDeclaration: IDENTIFIER ':' type ';';
fieldListDeclaration: fieldDeclaration*;
extendsDeclaration: 'extends' IDENTIFIER;
generatesDeclaration: 'generates' STRING_LITERAL;
constexprDeclaration: 'constexpr' STRING_LITERAL;
......@@ -280,9 +295,11 @@ genericSpecialization: IDENTIFIER genericSpecializationTypeList parameterList op
macroDeclaration : ('operator' STRING_LITERAL)? MACRO IDENTIFIER optionalGenericTypeList parameterList optionalType optionalLabelList (helperBody | ';');
externConstDeclaration : CONST IDENTIFIER ':' type generatesDeclaration ';';
constDeclaration: CONST IDENTIFIER ':' type ASSIGNMENT expression ';';
structDeclaration : 'struct' IDENTIFIER '{' fieldListDeclaration '}';
declaration
: typeDeclaration
: structDeclaration
| typeDeclaration
| typeAliasDeclaration
| builtinDeclaration
| genericSpecialization
......
token literal names:
null
'('
')'
'=>'
','
':'
'type'
'?'
'||'
'&&'
'.'
'['
']'
'{'
'}'
';'
'of'
'else'
'extends'
'generates'
'operator'
'struct'
'macro'
'builtin'
'runtime'
'module'
'javascript'
'deferred'
'if'
'for'
'while'
'return'
'constexpr'
'continue'
'break'
'goto'
'otherwise'
'try'
'label'
'labels'
'tail'
'isnt'
'is'
'let'
'const'
'extern'
'assert'
'check'
'unreachable'
'debug'
'='
null
'=='
'+'
'-'
'*'
'/'
'%'
'|'
'&'
'~'
'max'
'min'
'!='
'<'
'<='
'>'
'>='
'<<'
'>>'
'>>>'
'...'
null
'++'
'--'
'!'
null
null
null
null
null
null
token symbolic names:
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
MACRO
BUILTIN
RUNTIME
MODULE
JAVASCRIPT
DEFERRED
IF
FOR
WHILE
RETURN
CONSTEXPR
CONTINUE
BREAK
GOTO
OTHERWISE
TRY
LABEL
LABELS
TAIL
ISNT
IS
LET
CONST
EXTERN
ASSERT_TOKEN
CHECK_TOKEN
UNREACHABLE_TOKEN
DEBUG_TOKEN
ASSIGNMENT
ASSIGNMENT_OPERATOR
EQUAL
PLUS
MINUS
MULTIPLY
DIVIDE
MODULO
BIT_OR
BIT_AND
BIT_NOT
MAX
MIN
NOT_EQUAL
LESS_THAN
LESS_THAN_EQUAL
GREATER_THAN
GREATER_THAN_EQUAL
SHIFT_LEFT
SHIFT_RIGHT
SHIFT_RIGHT_ARITHMETIC
VARARGS
EQUALITY_OPERATOR
INCREMENT
DECREMENT
NOT
STRING_LITERAL
IDENTIFIER
WS
BLOCK_COMMENT
LINE_COMMENT
DECIMAL_LITERAL
rule names:
type
typeList
genericSpecializationTypeList
optionalGenericTypeList
typeListMaybeVarArgs
labelParameter
optionalType
optionalLabelList
optionalOtherwise
parameter
parameterList
labelDeclaration
expression
conditionalExpression
logicalORExpression
logicalANDExpression
bitwiseExpression
equalityExpression
relationalExpression
shiftExpression
additiveExpression
multiplicativeExpression
unaryExpression
locationExpression
incrementDecrement
assignment
assignmentExpression
structExpression
functionPointerExpression
primaryExpression
forInitialization
forLoop
rangeSpecifier
forOfRange
forOfLoop
argument
argumentList
helperCall
labelReference
variableDeclaration
variableDeclarationWithInitialization
helperCallStatement
expressionStatement
ifStatement
whileLoop
returnStatement
breakStatement
continueStatement
gotoStatement
handlerWithStatement
tryLabelStatement
diagnosticStatement
statement
statementList
statementScope
statementBlock
helperBody
fieldDeclaration
fieldListDeclaration
extendsDeclaration
generatesDeclaration
constexprDeclaration
typeDeclaration
typeAliasDeclaration
externalBuiltin
externalMacro
externalRuntime
builtinDeclaration
genericSpecialization
macroDeclaration
externConstDeclaration
constDeclaration
structDeclaration
declaration
moduleDeclaration
file
atn:
[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 83, 821, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 3, 2, 3, 2, 5, 2, 157, 10, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 5, 2, 171, 10, 2, 3, 2, 3, 2, 3, 2, 7, 2, 176, 10, 2, 12, 2, 14, 2, 179, 11, 2, 3, 3, 3, 3, 3, 3, 7, 3, 184, 10, 3, 12, 3, 14, 3, 187, 11, 3, 5, 3, 189, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 7, 5, 203, 10, 5, 12, 5, 14, 5, 206, 11, 5, 3, 5, 5, 5, 209, 10, 5, 3, 6, 3, 6, 5, 6, 213, 10, 6, 3, 6, 3, 6, 7, 6, 217, 10, 6, 12, 6, 14, 6, 220, 11, 6, 3, 6, 3, 6, 5, 6, 224, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 230, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 237, 10, 7, 3, 8, 3, 8, 5, 8, 241, 10, 8, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 247, 10, 9, 12, 9, 14, 9, 250, 11, 9, 5, 9, 252, 10, 9, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 258, 10, 10, 12, 10, 14, 10, 261, 11, 10, 5, 10, 263, 10, 10, 3, 11, 3, 11, 3, 11, 5, 11, 268, 10, 11, 3, 12, 3, 12, 5, 12, 272, 10, 12, 3, 12, 3, 12, 7, 12, 276, 10, 12, 12, 12, 14, 12, 279, 11, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 291, 10, 12, 3, 13, 3, 13, 5, 13, 295, 10, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 7, 15, 308, 10, 15, 12, 15, 14, 15, 311, 11, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 7, 16, 319, 10, 16, 12, 16, 14, 16, 322, 11, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 7, 17, 330, 10, 17, 12, 17, 14, 17, 333, 11, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 7, 18, 341, 10, 18, 12, 18, 14, 18, 344, 11, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 7, 19, 352, 10, 19, 12, 19, 14, 19, 355, 11, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 7, 20, 363, 10, 20, 12, 20, 14, 20, 366, 11, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 7, 21, 374, 10, 21, 12, 21, 14, 21, 377, 11, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 7, 22, 385, 10, 22, 12, 22, 14, 22, 388, 11, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 7, 23, 396, 10, 23, 12, 23, 14, 23, 399, 11, 23, 3, 24, 3, 24, 3, 24, 5, 24, 404, 10, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 417, 10, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 7, 25, 427, 10, 25, 12, 25, 14, 25, 430, 11, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 442, 10, 26, 3, 27, 3, 27, 3, 27, 3, 27, 5, 27, 448, 10, 27, 5, 27, 450, 10, 27, 3, 28, 3, 28, 5, 28, 454, 10, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 7, 29, 461, 10, 29, 12, 29, 14, 29, 464, 11, 29, 5, 29, 466, 10, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 5, 30, 473, 10, 30, 5, 30, 475, 10, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 5, 31, 485, 10, 31, 3, 32, 5, 32, 488, 10, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 5, 34, 502, 10, 34, 3, 34, 3, 34, 5, 34, 506, 10, 34, 3, 34, 3, 34, 3, 35, 5, 35, 511, 10, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 5, 38, 526, 10, 38, 3, 38, 3, 38, 7, 38, 530, 10, 38, 12, 38, 14, 38, 533, 11, 38, 3, 38, 3, 38, 3, 39, 3, 39, 5, 39, 539, 10, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 5, 42, 554, 10, 42, 3, 43, 5, 43, 557, 10, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 5, 45, 565, 10, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 5, 45, 573, 10, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 5, 47, 583, 10, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 5, 50, 592, 10, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 6, 52, 601, 10, 52, 13, 52, 14, 52, 602, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 5, 53, 612, 10, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 5, 54, 643, 10, 54, 3, 55, 7, 55, 646, 10, 55, 12, 55, 14, 55, 649, 11, 55, 3, 56, 5, 56, 652, 10, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 5, 57, 660, 10, 57, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 7, 60, 670, 10, 60, 12, 60, 14, 60, 673, 11, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 5, 64, 687, 10, 64, 3, 64, 5, 64, 690, 10, 64, 3, 64, 5, 64, 693, 10, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 5, 66, 705, 10, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 5, 67, 719, 10, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 5, 69, 737, 10, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 5, 69, 746, 10, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 71, 3, 71, 5, 71, 757, 10, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 5, 71, 767, 10, 71, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 5, 75, 801, 10, 75, 3, 76, 3, 76, 3, 76, 3, 76, 7, 76, 807, 10, 76, 12, 76, 14, 76, 810, 11, 76, 3, 76, 3, 76, 3, 77, 3, 77, 7, 77, 816, 10, 77, 12, 77, 14, 77, 819, 11, 77, 3, 77, 2, 13, 2, 28, 30, 32, 34, 36, 38, 40, 42, 44, 48, 78, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 2, 13, 3, 2, 60, 61, 4, 2, 54, 54, 65, 65, 3, 2, 66, 69, 3, 2, 70, 72, 3, 2, 55, 56, 3, 2, 57, 59, 5, 2, 55, 56, 62, 62, 77, 77, 3, 2, 52, 53, 4, 2, 63, 64, 79, 79, 3, 2, 45, 46, 3, 2, 48, 49, 2, 849, 2, 170, 3, 2, 2, 2, 4, 188, 3, 2, 2, 2, 6, 190, 3, 2, 2, 2, 8, 208, 3, 2, 2, 2, 10, 229, 3, 2, 2, 2, 12, 231, 3, 2, 2, 2, 14, 240, 3, 2, 2, 2, 16, 251, 3, 2, 2, 2, 18, 262, 3, 2, 2, 2, 20, 264, 3, 2, 2, 2, 22, 290, 3, 2, 2, 2, 24, 292, 3, 2, 2, 2, 26, 296, 3, 2, 2, 2, 28, 298, 3, 2, 2, 2, 30, 312, 3, 2, 2, 2, 32, 323, 3, 2, 2, 2, 34, 334, 3, 2, 2, 2, 36, 345, 3, 2, 2, 2, 38, 356, 3, 2, 2, 2, 40, 367, 3, 2, 2, 2, 42, 378, 3, 2, 2, 2, 44, 389, 3, 2, 2, 2, 46, 403, 3, 2, 2, 2, 48, 416, 3, 2, 2, 2, 50, 441, 3, 2, 2, 2, 52, 449, 3, 2, 2, 2, 54, 453, 3, 2, 2, 2, 56, 455, 3, 2, 2, 2, 58, 474, 3, 2, 2, 2, 60, 484, 3, 2, 2, 2, 62, 487, 3, 2, 2, 2, 64, 489, 3, 2, 2, 2, 66, 499, 3, 2, 2, 2, 68, 510, 3, 2, 2, 2, 70, 512, 3, 2, 2, 2, 72, 521, 3, 2, 2, 2, 74, 523, 3, 2, 2, 2, 76, 536, 3, 2, 2, 2, 78, 543, 3, 2, 2, 2, 80, 545, 3, 2, 2, 2, 82, 550, 3, 2, 2, 2, 84, 556, 3, 2, 2, 2, 86, 560, 3, 2, 2, 2, 88, 562, 3, 2, 2, 2, 90, 574, 3, 2, 2, 2, 92, 580, 3, 2, 2, 2, 94, 584, 3, 2, 2, 2, 96, 586, 3, 2, 2, 2, 98, 588, 3, 2, 2, 2, 100, 593, 3, 2, 2, 2, 102, 597, 3, 2, 2, 2, 104, 611, 3, 2, 2, 2, 106, 642, 3, 2, 2, 2, 108, 647, 3, 2, 2, 2, 110, 651, 3, 2, 2, 2, 112, 659, 3, 2, 2, 2, 114, 661, 3, 2, 2, 2, 116, 663, 3, 2, 2, 2, 118, 671, 3, 2, 2, 2, 120, 674, 3, 2, 2, 2, 122, 677, 3, 2, 2, 2, 124, 680, 3, 2, 2, 2, 126, 683, 3, 2, 2, 2, 128, 696, 3, 2, 2, 2, 130, 702, 3, 2, 2, 2, 132, 715, 3, 2, 2, 2, 134, 728, 3, 2, 2, 2, 136, 736, 3, 2, 2, 2, 138, 747, 3, 2, 2, 2, 140, 756, 3, 2, 2, 2, 142, 768, 3, 2, 2, 2, 144, 775, 3, 2, 2, 2, 146, 783, 3, 2, 2, 2, 148, 800, 3, 2, 2, 2, 150, 802, 3, 2, 2, 2, 152, 817, 3, 2, 2, 2, 154, 156, 8, 2, 1, 2, 155, 157, 7, 34, 2, 2, 156, 155, 3, 2, 2, 2, 156, 157, 3, 2, 2, 2, 157, 158, 3, 2, 2, 2, 158, 171, 7, 79, 2, 2, 159, 160, 7, 25, 2, 2, 160, 161, 7, 3, 2, 2, 161, 162, 5, 4, 3, 2, 162, 163, 7, 4, 2, 2, 163, 164, 7, 5, 2, 2, 164, 165, 5, 2, 2, 5, 165, 171, 3, 2, 2, 2, 166, 167, 7, 3, 2, 2, 167, 168, 5, 2, 2, 2, 168, 169, 7, 4, 2, 2, 169, 171, 3, 2, 2, 2, 170, 154, 3, 2, 2, 2, 170, 159, 3, 2, 2, 2, 170, 166, 3, 2, 2, 2, 171, 177, 3, 2, 2, 2, 172, 173, 12, 4, 2, 2, 173, 174, 7, 60, 2, 2, 174, 176, 5, 2, 2, 5, 175, 172, 3, 2, 2, 2, 176, 179, 3, 2, 2, 2, 177, 175, 3, 2, 2, 2, 177, 178, 3, 2, 2, 2, 178, 3, 3, 2, 2, 2, 179, 177, 3, 2, 2, 2, 180, 185, 5, 2, 2, 2, 181, 182, 7, 6, 2, 2, 182, 184, 5, 2, 2, 2, 183, 181, 3, 2, 2, 2, 184, 187, 3, 2, 2, 2, 185, 183, 3, 2, 2, 2, 185, 186, 3, 2, 2, 2, 186, 189, 3, 2, 2, 2, 187, 185, 3, 2, 2, 2, 188, 180, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 5, 3, 2, 2, 2, 190, 191, 7, 66, 2, 2, 191, 192, 5, 4, 3, 2, 192, 193, 7, 68, 2, 2, 193, 7, 3, 2, 2, 2, 194, 195, 7, 66, 2, 2, 195, 196, 7, 79, 2, 2, 196, 197, 7, 7, 2, 2, 197, 204, 7, 8, 2, 2, 198, 199, 7, 6, 2, 2, 199, 200, 7, 79, 2, 2, 200, 201, 7, 7, 2, 2, 201, 203, 7, 8, 2, 2, 202, 198, 3, 2, 2, 2, 203, 206, 3, 2, 2, 2, 204, 202, 3, 2, 2, 2, 204, 205, 3, 2, 2, 2, 205, 207, 3, 2, 2, 2, 206, 204, 3, 2, 2, 2, 207, 209, 7, 68, 2, 2, 208, 194, 3, 2, 2, 2, 208, 209, 3, 2, 2, 2, 209, 9, 3, 2, 2, 2, 210, 212, 7, 3, 2, 2, 211, 213, 5, 2, 2, 2, 212, 211, 3, 2, 2, 2, 212, 213, 3, 2, 2, 2, 213, 218, 3, 2, 2, 2, 214, 215, 7, 6, 2, 2, 215, 217, 5, 2, 2, 2, 216, 214, 3, 2, 2, 2, 217, 220, 3, 2, 2, 2, 218, 216, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 223, 3, 2, 2, 2, 220, 218, 3, 2, 2, 2, 221, 222, 7, 6, 2, 2, 222, 224, 7, 73, 2, 2, 223, 221, 3, 2, 2, 2, 223, 224, 3, 2, 2, 2, 224, 225, 3, 2, 2, 2, 225, 230, 7, 4, 2, 2, 226, 227, 7, 3, 2, 2, 227, 228, 7, 73, 2, 2, 228, 230, 7, 4, 2, 2, 229, 210, 3, 2, 2, 2, 229, 226, 3, 2, 2, 2, 230, 11, 3, 2, 2, 2, 231, 236, 7, 79, 2, 2, 232, 233, 7, 3, 2, 2, 233, 234, 5, 4, 3, 2, 234, 235, 7, 4, 2, 2, 235, 237, 3, 2, 2, 2, 236, 232, 3, 2, 2, 2, 236, 237, 3, 2, 2, 2, 237, 13, 3, 2, 2, 2, 238, 239, 7, 7, 2, 2, 239, 241, 5, 2, 2, 2, 240, 238, 3, 2, 2, 2, 240, 241, 3, 2, 2, 2, 241, 15, 3, 2, 2, 2, 242, 243, 7, 41, 2, 2, 243, 248, 5, 12, 7, 2, 244, 245, 7, 6, 2, 2, 245, 247, 5, 12, 7, 2, 246, 244, 3, 2, 2, 2, 247, 250, 3, 2, 2, 2, 248, 246, 3, 2, 2, 2, 248, 249, 3, 2, 2, 2, 249, 252, 3, 2, 2, 2, 250, 248, 3, 2, 2, 2, 251, 242, 3, 2, 2, 2, 251, 252, 3, 2, 2, 2, 252, 17, 3, 2, 2, 2, 253, 254, 7, 38, 2, 2, 254, 259, 7, 79, 2, 2, 255, 256, 7, 6, 2, 2, 256, 258, 7, 79, 2, 2, 257, 255, 3, 2, 2, 2, 258, 261, 3, 2, 2, 2, 259, 257, 3, 2, 2, 2, 259, 260, 3, 2, 2, 2, 260, 263, 3, 2, 2, 2, 261, 259, 3, 2, 2, 2, 262, 253, 3, 2, 2, 2, 262, 263, 3, 2, 2, 2, 263, 19, 3, 2, 2, 2, 264, 265, 7, 79, 2, 2, 265, 267, 7, 7, 2, 2, 266, 268, 5, 2, 2, 2, 267, 266, 3, 2, 2, 2, 267, 268, 3, 2, 2, 2, 268, 21, 3, 2, 2, 2, 269, 271, 7, 3, 2, 2, 270, 272, 5, 20, 11, 2, 271, 270, 3, 2, 2, 2, 271, 272, 3, 2, 2, 2, 272, 277, 3, 2, 2, 2, 273, 274, 7, 6, 2, 2, 274, 276, 5, 20, 11, 2, 275, 273, 3, 2, 2, 2, 276, 279, 3, 2, 2, 2, 277, 275, 3, 2, 2, 2, 277, 278, 3, 2, 2, 2, 278, 280, 3, 2, 2, 2, 279, 277, 3, 2, 2, 2, 280, 291, 7, 4, 2, 2, 281, 282, 7, 3, 2, 2, 282, 283, 5, 20, 11, 2, 283, 284, 7, 6, 2, 2, 284, 285, 5, 20, 11, 2, 285, 286, 7, 6, 2, 2, 286, 287, 7, 73, 2, 2, 287, 288, 7, 79, 2, 2, 288, 289, 7, 4, 2, 2, 289, 291, 3, 2, 2, 2, 290, 269, 3, 2, 2, 2, 290, 281, 3, 2, 2, 2, 291, 23, 3, 2, 2, 2, 292, 294, 7, 79, 2, 2, 293, 295, 5, 22, 12, 2, 294, 293, 3, 2, 2, 2, 294, 295, 3, 2, 2, 2, 295, 25, 3, 2, 2, 2, 296, 297, 5, 28, 15, 2, 297, 27, 3, 2, 2, 2, 298, 299, 8, 15, 1, 2, 299, 300, 5, 30, 16, 2, 300, 309, 3, 2, 2, 2, 301, 302, 12, 3, 2, 2, 302, 303, 7, 9, 2, 2, 303, 304, 5, 30, 16, 2, 304, 305, 7, 7, 2, 2, 305, 306, 5, 30, 16, 2, 306, 308, 3, 2, 2, 2, 307, 301, 3, 2, 2, 2, 308, 311, 3, 2, 2, 2, 309, 307, 3, 2, 2, 2, 309, 310, 3, 2, 2, 2, 310, 29, 3, 2, 2, 2, 311, 309, 3, 2, 2, 2, 312, 313, 8, 16, 1, 2, 313, 314, 5, 32, 17, 2, 314, 320, 3, 2, 2, 2, 315, 316, 12, 3, 2, 2, 316, 317, 7, 10, 2, 2, 317, 319, 5, 32, 17, 2, 318, 315, 3, 2, 2, 2, 319, 322, 3, 2, 2, 2, 320, 318, 3, 2, 2, 2, 320, 321, 3, 2, 2, 2, 321, 31, 3, 2, 2, 2, 322, 320, 3, 2, 2, 2, 323, 324, 8, 17, 1, 2, 324, 325, 5, 34, 18, 2, 325, 331, 3, 2, 2, 2, 326, 327, 12, 3, 2, 2, 327, 328, 7, 11, 2, 2, 328, 330, 5, 34, 18, 2, 329, 326, 3, 2, 2, 2, 330, 333, 3, 2, 2, 2, 331, 329, 3, 2, 2, 2, 331, 332, 3, 2, 2, 2, 332, 33, 3, 2, 2, 2, 333, 331, 3, 2, 2, 2, 334, 335, 8, 18, 1, 2, 335, 336, 5, 36, 19, 2, 336, 342, 3, 2, 2, 2, 337, 338, 12, 3, 2, 2, 338, 339, 9, 2, 2, 2, 339, 341, 5, 36, 19, 2, 340, 337, 3, 2, 2, 2, 341, 344, 3, 2, 2, 2, 342, 340, 3, 2, 2, 2, 342, 343, 3, 2, 2, 2, 343, 35, 3, 2, 2, 2, 344, 342, 3, 2, 2, 2, 345, 346, 8, 19, 1, 2, 346, 347, 5, 38, 20, 2, 347, 353, 3, 2, 2, 2, 348, 349, 12, 3, 2, 2, 349, 350, 9, 3, 2, 2, 350, 352, 5, 38, 20, 2, 351, 348, 3, 2, 2, 2, 352, 355, 3, 2, 2, 2, 353, 351, 3, 2, 2, 2, 353, 354, 3, 2, 2, 2, 354, 37, 3, 2, 2, 2, 355, 353, 3, 2, 2, 2, 356, 357, 8, 20, 1, 2, 357, 358, 5, 40, 21, 2, 358, 364, 3, 2, 2, 2, 359, 360, 12, 3, 2, 2, 360, 361, 9, 4, 2, 2, 361, 363, 5, 40, 21, 2, 362, 359, 3, 2, 2, 2, 363, 366, 3, 2, 2, 2, 364, 362, 3, 2, 2, 2, 364, 365, 3, 2, 2, 2, 365, 39, 3, 2, 2, 2, 366, 364, 3, 2, 2, 2, 367, 368, 8, 21, 1, 2, 368, 369, 5, 42, 22, 2, 369, 375, 3, 2, 2, 2, 370, 371, 12, 3, 2, 2, 371, 372, 9, 5, 2, 2, 372, 374, 5, 42, 22, 2, 373, 370, 3, 2, 2, 2, 374, 377, 3, 2, 2, 2, 375, 373, 3, 2, 2, 2, 375, 376, 3, 2, 2, 2, 376, 41, 3, 2, 2, 2, 377, 375, 3, 2, 2, 2, 378, 379, 8, 22, 1, 2, 379, 380, 5, 44, 23, 2, 380, 386, 3, 2, 2, 2, 381, 382, 12, 3, 2, 2, 382, 383, 9, 6, 2, 2, 383, 385, 5, 44, 23, 2, 384, 381, 3, 2, 2, 2, 385, 388, 3, 2, 2, 2, 386, 384, 3, 2, 2, 2, 386, 387, 3, 2, 2, 2, 387, 43, 3, 2, 2, 2, 388, 386, 3, 2, 2, 2, 389, 390, 8, 23, 1, 2, 390, 391, 5, 46, 24, 2, 391, 397, 3, 2, 2, 2, 392, 393, 12, 3, 2, 2, 393, 394, 9, 7, 2, 2, 394, 396, 5, 46, 24, 2, 395, 392, 3, 2, 2, 2, 396, 399, 3, 2, 2, 2, 397, 395, 3, 2, 2, 2, 397, 398, 3, 2, 2, 2, 398, 45, 3, 2, 2, 2, 399, 397, 3, 2, 2, 2, 400, 404, 5, 54, 28, 2, 401, 402, 9, 8, 2, 2, 402, 404, 5, 46, 24, 2, 403, 400, 3, 2, 2, 2, 403, 401, 3, 2, 2, 2, 404, 47, 3, 2, 2, 2, 405, 406, 8, 25, 1, 2, 406, 417, 7, 79, 2, 2, 407, 408, 5, 60, 31, 2, 408, 409, 7, 12, 2, 2, 409, 410, 7, 79, 2, 2, 410, 417, 3, 2, 2, 2, 411, 412, 5, 60, 31, 2, 412, 413, 7, 13, 2, 2, 413, 414, 5, 26, 14, 2, 414, 415, 7, 14, 2, 2, 415, 417, 3, 2, 2, 2, 416, 405, 3, 2, 2, 2, 416, 407, 3, 2, 2, 2, 416, 411, 3, 2, 2, 2, 417, 428, 3, 2, 2, 2, 418, 419, 12, 6, 2, 2, 419, 420, 7, 12, 2, 2, 420, 427, 7, 79, 2, 2, 421, 422, 12, 4, 2, 2, 422, 423, 7, 13, 2, 2, 423, 424, 5, 26, 14, 2, 424, 425, 7, 14, 2, 2, 425, 427, 3, 2, 2, 2, 426, 418, 3, 2, 2, 2, 426, 421, 3, 2, 2, 2, 427, 430, 3, 2, 2, 2, 428, 426, 3, 2, 2, 2, 428, 429, 3, 2, 2, 2, 429, 49, 3, 2, 2, 2, 430, 428, 3, 2, 2, 2, 431, 432, 7, 75, 2, 2, 432, 442, 5, 48, 25, 2, 433, 434, 7, 76, 2, 2, 434, 442, 5, 48, 25, 2, 435, 436, 5, 48, 25, 2, 436, 437, 7, 75, 2, 2, 437, 442, 3, 2, 2, 2, 438, 439, 5, 48, 25, 2, 439, 440, 7, 76, 2, 2, 440, 442, 3, 2, 2, 2, 441, 431, 3, 2, 2, 2, 441, 433, 3, 2, 2, 2, 441, 435, 3, 2, 2, 2, 441, 438, 3, 2, 2, 2, 442, 51, 3, 2, 2, 2, 443, 450, 5, 50, 26, 2, 444, 447, 5, 48, 25, 2, 445, 446, 9, 9, 2, 2, 446, 448, 5, 26, 14, 2, 447, 445, 3, 2, 2, 2, 447, 448, 3, 2, 2, 2, 448, 450, 3, 2, 2, 2, 449, 443, 3, 2, 2, 2, 449, 444, 3, 2, 2, 2, 450, 53, 3, 2, 2, 2, 451, 454, 5, 58, 30, 2, 452, 454, 5, 52, 27, 2, 453, 451, 3, 2, 2, 2, 453, 452, 3, 2, 2, 2, 454, 55, 3, 2, 2, 2, 455, 456, 7, 79, 2, 2, 456, 465, 7, 15, 2, 2, 457, 462, 5, 26, 14, 2, 458, 459, 7, 6, 2, 2, 459, 461, 5, 26, 14, 2, 460, 458, 3, 2, 2, 2, 461, 464, 3, 2, 2, 2, 462, 460, 3, 2, 2, 2, 462, 463, 3, 2, 2, 2, 463, 466, 3, 2, 2, 2, 464, 462, 3, 2, 2, 2, 465, 457, 3, 2, 2, 2, 465, 466, 3, 2, 2, 2, 466, 467, 3, 2, 2, 2, 467, 468, 7, 16, 2, 2, 468, 57, 3, 2, 2, 2, 469, 475, 5, 60, 31, 2, 470, 472, 7, 79, 2, 2, 471, 473, 5, 6, 4, 2, 472, 471, 3, 2, 2, 2, 472, 473, 3, 2, 2, 2, 473, 475, 3, 2, 2, 2, 474, 469, 3, 2, 2, 2, 474, 470, 3, 2, 2, 2, 475, 59, 3, 2, 2, 2, 476, 485, 5, 76, 39, 2, 477, 485, 5, 56, 29, 2, 478, 485, 7, 83, 2, 2, 479, 485, 7, 78, 2, 2, 480, 481, 7, 3, 2, 2, 481, 482, 5, 26, 14, 2, 482, 483, 7, 4, 2, 2, 483, 485, 3, 2, 2, 2, 484, 476, 3, 2, 2, 2, 484, 477, 3, 2, 2, 2, 484, 478, 3, 2, 2, 2, 484, 479, 3, 2, 2, 2, 484, 480, 3, 2, 2, 2, 485, 61, 3, 2, 2, 2, 486, 488, 5, 82, 42, 2, 487, 486, 3, 2, 2, 2, 487, 488, 3, 2, 2, 2, 488, 63, 3, 2, 2, 2, 489, 490, 7, 31, 2, 2, 490, 491, 7, 3, 2, 2, 491, 492, 5, 62, 32, 2, 492, 493, 7, 17, 2, 2, 493, 494, 5, 26, 14, 2, 494, 495, 7, 17, 2, 2, 495, 496, 5, 52, 27, 2, 496, 497, 7, 4, 2, 2, 497, 498, 5, 112, 57, 2, 498, 65, 3, 2, 2, 2, 499, 501, 7, 13, 2, 2, 500, 502, 5, 26, 14, 2, 501, 500, 3, 2, 2, 2, 501, 502, 3, 2, 2, 2, 502, 503, 3, 2, 2, 2, 503, 505, 7, 7, 2, 2, 504, 506, 5, 26, 14, 2, 505, 504, 3, 2, 2, 2, 505, 506, 3, 2, 2, 2, 506, 507, 3, 2, 2, 2, 507, 508, 7, 14, 2, 2, 508, 67, 3, 2, 2, 2, 509, 511, 5, 66, 34, 2, 510, 509, 3, 2, 2, 2, 510, 511, 3, 2, 2, 2, 511, 69, 3, 2, 2, 2, 512, 513, 7, 31, 2, 2, 513, 514, 7, 3, 2, 2, 514, 515, 5, 80, 41, 2, 515, 516, 7, 18, 2, 2, 516, 517, 5, 26, 14, 2, 517, 518, 5, 68, 35, 2, 518, 519, 7, 4, 2, 2, 519, 520, 5, 112, 57, 2, 520, 71, 3, 2, 2, 2, 521, 522, 5, 26, 14, 2, 522, 73, 3, 2, 2, 2, 523, 525, 7, 3, 2, 2, 524, 526, 5, 72, 37, 2, 525, 524, 3, 2, 2, 2, 525, 526, 3, 2, 2, 2, 526, 531, 3, 2, 2, 2, 527, 528, 7, 6, 2, 2, 528, 530, 5, 72, 37, 2, 529, 527, 3, 2, 2, 2, 530, 533, 3, 2, 2, 2, 531, 529, 3, 2, 2, 2, 531, 532, 3, 2, 2, 2, 532, 534, 3, 2, 2, 2, 533, 531, 3, 2, 2, 2, 534, 535, 7, 4, 2, 2, 535, 75, 3, 2, 2, 2, 536, 538, 9, 10, 2, 2, 537, 539, 5, 6, 4, 2, 538, 537, 3, 2, 2, 2, 538, 539, 3, 2, 2, 2, 539, 540, 3, 2, 2, 2, 540, 541, 5, 74, 38, 2, 541, 542, 5, 18, 10, 2, 542, 77, 3, 2, 2, 2, 543, 544, 7, 79, 2, 2, 544, 79, 3, 2, 2, 2, 545, 546, 9, 11, 2, 2, 546, 547, 7, 79, 2, 2, 547, 548, 7, 7, 2, 2, 548, 549, 5, 2, 2, 2, 549, 81, 3, 2, 2, 2, 550, 553, 5, 80, 41, 2, 551, 552, 7, 52, 2, 2, 552, 554, 5, 26, 14, 2, 553, 551, 3, 2, 2, 2, 553, 554, 3, 2, 2, 2, 554, 83, 3, 2, 2, 2, 555, 557, 7, 42, 2, 2, 556, 555, 3, 2, 2, 2, 556, 557, 3, 2, 2, 2, 557, 558, 3, 2, 2, 2, 558, 559, 5, 76, 39, 2, 559, 85, 3, 2, 2, 2, 560, 561, 5, 52, 27, 2, 561, 87, 3, 2, 2, 2, 562, 564, 7, 30, 2, 2, 563, 565, 7, 34, 2, 2, 564, 563, 3, 2, 2, 2, 564, 565, 3, 2, 2, 2, 565, 566, 3, 2, 2, 2, 566, 567, 7, 3, 2, 2, 567, 568, 5, 26, 14, 2, 568, 569, 7, 4, 2, 2, 569, 572, 5, 112, 57, 2, 570, 571, 7, 19, 2, 2, 571, 573, 5, 112, 57, 2, 572, 570, 3, 2, 2, 2, 572, 573, 3, 2, 2, 2, 573, 89, 3, 2, 2, 2, 574, 575, 7, 32, 2, 2, 575, 576, 7, 3, 2, 2, 576, 577, 5, 26, 14, 2, 577, 578, 7, 4, 2, 2, 578, 579, 5, 112, 57, 2, 579, 91, 3, 2, 2, 2, 580, 582, 7, 33, 2, 2, 581, 583, 5, 26, 14, 2, 582, 581, 3, 2, 2, 2, 582, 583, 3, 2, 2, 2, 583, 93, 3, 2, 2, 2, 584, 585, 7, 36, 2, 2, 585, 95, 3, 2, 2, 2, 586, 587, 7, 35, 2, 2, 587, 97, 3, 2, 2, 2, 588, 589, 7, 37, 2, 2, 589, 591, 5, 78, 40, 2, 590, 592, 5, 74, 38, 2, 591, 590, 3, 2, 2, 2, 591, 592, 3, 2, 2, 2, 592, 99, 3, 2, 2, 2, 593, 594, 7, 40, 2, 2, 594, 595, 5, 24, 13, 2, 595, 596, 5, 112, 57, 2, 596, 101, 3, 2, 2, 2, 597, 598, 7, 39, 2, 2, 598, 600, 5, 112, 57, 2, 599, 601, 5, 100, 51, 2, 600, 599, 3, 2, 2, 2, 601, 602, 3, 2, 2, 2, 602, 600, 3, 2, 2, 2, 602, 603, 3, 2, 2, 2, 603, 103, 3, 2, 2, 2, 604, 605, 9, 12, 2, 2, 605, 606, 7, 3, 2, 2, 606, 607, 5, 26, 14, 2, 607, 608, 7, 4, 2, 2, 608, 612, 3, 2, 2, 2, 609, 612, 7, 50, 2, 2, 610, 612, 7, 51, 2, 2, 611, 604, 3, 2, 2, 2, 611, 609, 3, 2, 2, 2, 611, 610, 3, 2, 2, 2, 612, 105, 3, 2, 2, 2, 613, 614, 5, 82, 42, 2, 614, 615, 7, 17, 2, 2, 615, 643, 3, 2, 2, 2, 616, 617, 5, 84, 43, 2, 617, 618, 7, 17, 2, 2, 618, 643, 3, 2, 2, 2, 619, 620, 5, 86, 44, 2, 620, 621, 7, 17, 2, 2, 621, 643, 3, 2, 2, 2, 622, 623, 5, 92, 47, 2, 623, 624, 7, 17, 2, 2, 624, 643, 3, 2, 2, 2, 625, 626, 5, 94, 48, 2, 626, 627, 7, 17, 2, 2, 627, 643, 3, 2, 2, 2, 628, 629, 5, 96, 49, 2, 629, 630, 7, 17, 2, 2, 630, 643, 3, 2, 2, 2, 631, 632, 5, 98, 50, 2, 632, 633, 7, 17, 2, 2, 633, 643, 3, 2, 2, 2, 634, 643, 5, 88, 45, 2, 635, 636, 5, 104, 53, 2, 636, 637, 7, 17, 2, 2, 637, 643, 3, 2, 2, 2, 638, 643, 5, 90, 46, 2, 639, 643, 5, 70, 36, 2, 640, 643, 5, 64, 33, 2, 641, 643, 5, 102, 52, 2, 642, 613, 3, 2, 2, 2, 642, 616, 3, 2, 2, 2, 642, 619, 3, 2, 2, 2, 642, 622, 3, 2, 2, 2, 642, 625, 3, 2, 2, 2, 642, 628, 3, 2, 2, 2, 642, 631, 3, 2, 2, 2, 642, 634, 3, 2, 2, 2, 642, 635, 3, 2, 2, 2, 642, 638, 3, 2, 2, 2, 642, 639, 3, 2, 2, 2, 642, 640, 3, 2, 2, 2, 642, 641, 3, 2, 2, 2, 643, 107, 3, 2, 2, 2, 644, 646, 5, 106, 54, 2, 645, 644, 3, 2, 2, 2, 646, 649, 3, 2, 2, 2, 647, 645, 3, 2, 2, 2, 647, 648, 3, 2, 2, 2, 648, 109, 3, 2, 2, 2, 649, 647, 3, 2, 2, 2, 650, 652, 7, 29, 2, 2, 651, 650, 3, 2, 2, 2, 651, 652, 3, 2, 2, 2, 652, 653, 3, 2, 2, 2, 653, 654, 7, 15, 2, 2, 654, 655, 5, 108, 55, 2, 655, 656, 7, 16, 2, 2, 656, 111, 3, 2, 2, 2, 657, 660, 5, 106, 54, 2, 658, 660, 5, 110, 56, 2, 659, 657, 3, 2, 2, 2, 659, 658, 3, 2, 2, 2, 660, 113, 3, 2, 2, 2, 661, 662, 5, 110, 56, 2, 662, 115, 3, 2, 2, 2, 663, 664, 7, 79, 2, 2, 664, 665, 7, 7, 2, 2, 665, 666, 5, 2, 2, 2, 666, 667, 7, 17, 2, 2, 667, 117, 3, 2, 2, 2, 668, 670, 5, 116, 59, 2, 669, 668, 3, 2, 2, 2, 670, 673, 3, 2, 2, 2, 671, 669, 3, 2, 2, 2, 671, 672, 3, 2, 2, 2, 672, 119, 3, 2, 2, 2, 673, 671, 3, 2, 2, 2, 674, 675, 7, 20, 2, 2, 675, 676, 7, 79, 2, 2, 676, 121, 3, 2, 2, 2, 677, 678, 7, 21, 2, 2, 678, 679, 7, 78, 2, 2, 679, 123, 3, 2, 2, 2, 680, 681, 7, 34, 2, 2, 681, 682, 7, 78, 2, 2, 682, 125, 3, 2, 2, 2, 683, 684, 7, 8, 2, 2, 684, 686, 7, 79, 2, 2, 685, 687, 5, 120, 61, 2, 686, 685, 3, 2, 2, 2, 686, 687, 3, 2, 2, 2, 687, 689, 3, 2, 2, 2, 688, 690, 5, 122, 62, 2, 689, 688, 3, 2, 2, 2, 689, 690, 3, 2, 2, 2, 690, 692, 3, 2, 2, 2, 691, 693, 5, 124, 63, 2, 692, 691, 3, 2, 2, 2, 692, 693, 3, 2, 2, 2, 693, 694, 3, 2, 2, 2, 694, 695, 7, 17, 2, 2, 695, 127, 3, 2, 2, 2, 696, 697, 7, 8, 2, 2, 697, 698, 7, 79, 2, 2, 698, 699, 7, 52, 2, 2, 699, 700, 5, 2, 2, 2, 700, 701, 7, 17, 2, 2, 701, 129, 3, 2, 2, 2, 702, 704, 7, 47, 2, 2, 703, 705, 7, 28, 2, 2, 704, 703, 3, 2, 2, 2, 704, 705, 3, 2, 2, 2, 705, 706, 3, 2, 2, 2, 706, 707, 7, 25, 2, 2, 707, 708, 7, 79, 2, 2, 708, 709, 5, 8, 5, 2, 709, 710, 7, 3, 2, 2, 710, 711, 5, 4, 3, 2, 711, 712, 7, 4, 2, 2, 712, 713, 5, 14, 8, 2, 713, 714, 7, 17, 2, 2, 714, 131, 3, 2, 2, 2, 715, 718, 7, 47, 2, 2, 716, 717, 7, 22, 2, 2, 717, 719, 7, 78, 2, 2, 718, 716, 3, 2, 2, 2, 718, 719, 3, 2, 2, 2, 719, 720, 3, 2, 2, 2, 720, 721, 7, 24, 2, 2, 721, 722, 7, 79, 2, 2, 722, 723, 5, 8, 5, 2, 723, 724, 5, 10, 6, 2, 724, 725, 5, 14, 8, 2, 725, 726, 5, 16, 9, 2, 726, 727, 7, 17, 2, 2, 727, 133, 3, 2, 2, 2, 728, 729, 7, 47, 2, 2, 729, 730, 7, 26, 2, 2, 730, 731, 7, 79, 2, 2, 731, 732, 5, 10, 6, 2, 732, 733, 5, 14, 8, 2, 733, 734, 7, 17, 2, 2, 734, 135, 3, 2, 2, 2, 735, 737, 7, 28, 2, 2, 736, 735, 3, 2, 2, 2, 736, 737, 3, 2, 2, 2, 737, 738, 3, 2, 2, 2, 738, 739, 7, 25, 2, 2, 739, 740, 7, 79, 2, 2, 740, 741, 5, 8, 5, 2, 741, 742, 5, 22, 12, 2, 742, 745, 5, 14, 8, 2, 743, 746, 5, 114, 58, 2, 744, 746, 7, 17, 2, 2, 745, 743, 3, 2, 2, 2, 745, 744, 3, 2, 2, 2, 746, 137, 3, 2, 2, 2, 747, 748, 7, 79, 2, 2, 748, 749, 5, 6, 4, 2, 749, 750, 5, 22, 12, 2, 750, 751, 5, 14, 8, 2, 751, 752, 5, 16, 9, 2, 752, 753, 5, 114, 58, 2, 753, 139, 3, 2, 2, 2, 754, 755, 7, 22, 2, 2, 755, 757, 7, 78, 2, 2, 756, 754, 3, 2, 2, 2, 756, 757, 3, 2, 2, 2, 757, 758, 3, 2, 2, 2, 758, 759, 7, 24, 2, 2, 759, 760, 7, 79, 2, 2, 760, 761, 5, 8, 5, 2, 761, 762, 5, 22, 12, 2, 762, 763, 5, 14, 8, 2, 763, 766, 5, 16, 9, 2, 764, 767, 5, 114, 58, 2, 765, 767, 7, 17, 2, 2, 766, 764, 3, 2, 2, 2, 766, 765, 3, 2, 2, 2, 767, 141, 3, 2, 2, 2, 768, 769, 7, 46, 2, 2, 769, 770, 7, 79, 2, 2, 770, 771, 7, 7, 2, 2, 771, 772, 5, 2, 2, 2, 772, 773, 5, 122, 62, 2, 773, 774, 7, 17, 2, 2, 774, 143, 3, 2, 2, 2, 775, 776, 7, 46, 2, 2, 776, 777, 7, 79, 2, 2, 777, 778, 7, 7, 2, 2, 778, 779, 5, 2, 2, 2, 779, 780, 7, 52, 2, 2, 780, 781, 5, 26, 14, 2, 781, 782, 7, 17, 2, 2, 782, 145, 3, 2, 2, 2, 783, 784, 7, 23, 2, 2, 784, 785, 7, 79, 2, 2, 785, 786, 7, 15, 2, 2, 786, 787, 5, 118, 60, 2, 787, 788, 7, 16, 2, 2, 788, 147, 3, 2, 2, 2, 789, 801, 5, 146, 74, 2, 790, 801, 5, 126, 64, 2, 791, 801, 5, 128, 65, 2, 792, 801, 5, 136, 69, 2, 793, 801, 5, 138, 70, 2, 794, 801, 5, 140, 71, 2, 795, 801, 5, 132, 67, 2, 796, 801, 5, 130, 66, 2, 797, 801, 5, 134, 68, 2, 798, 801, 5, 142, 72, 2, 799, 801, 5, 144, 73, 2, 800, 789, 3, 2, 2, 2, 800, 790, 3, 2, 2, 2, 800, 791, 3, 2, 2, 2, 800, 792, 3, 2, 2, 2, 800, 793, 3, 2, 2, 2, 800, 794, 3, 2, 2, 2, 800, 795, 3, 2, 2, 2, 800, 796, 3, 2, 2, 2, 800, 797, 3, 2, 2, 2, 800, 798, 3, 2, 2, 2, 800, 799, 3, 2, 2, 2, 801, 149, 3, 2, 2, 2, 802, 803, 7, 27, 2, 2, 803, 804, 7, 79, 2, 2, 804, 808, 7, 15, 2, 2, 805, 807, 5, 148, 75, 2, 806, 805, 3, 2, 2, 2, 807, 810, 3, 2, 2, 2, 808, 806, 3, 2, 2, 2, 808, 809, 3, 2, 2, 2, 809, 811, 3, 2, 2, 2, 810, 808, 3, 2, 2, 2, 811, 812, 7, 16, 2, 2, 812, 151, 3, 2, 2, 2, 813, 816, 5, 150, 76, 2, 814, 816, 5, 148, 75, 2, 815, 813, 3, 2, 2, 2, 815, 814, 3, 2, 2, 2, 816, 819, 3, 2, 2, 2, 817, 815, 3, 2, 2, 2, 817, 818, 3, 2, 2, 2, 818, 153, 3, 2, 2, 2, 819, 817, 3, 2, 2, 2, 79, 156, 170, 177, 185, 188, 204, 208, 212, 218, 223, 229, 236, 240, 248, 251, 259, 262, 267, 271, 277, 290, 294, 309, 320, 331, 342, 353, 364, 375, 386, 397, 403, 416, 426, 428, 441, 447, 449, 453, 462, 465, 472, 474, 484, 487, 501, 505, 510, 525, 531, 538, 553, 556, 564, 572, 582, 591, 602, 611, 642, 647, 651, 659, 671, 686, 689, 692, 704, 718, 736, 745, 756, 766, 800, 808, 815, 817]
\ No newline at end of file
T__0=1
T__1=2
T__2=3
T__3=4
T__4=5
T__5=6
T__6=7
T__7=8
T__8=9
T__9=10
T__10=11
T__11=12
T__12=13
T__13=14
T__14=15
T__15=16
T__16=17
T__17=18
T__18=19
T__19=20
T__20=21
MACRO=22
BUILTIN=23
RUNTIME=24
MODULE=25
JAVASCRIPT=26
DEFERRED=27
IF=28
FOR=29
WHILE=30
RETURN=31
CONSTEXPR=32
CONTINUE=33
BREAK=34
GOTO=35
OTHERWISE=36
TRY=37
LABEL=38
LABELS=39
TAIL=40
ISNT=41
IS=42
LET=43
CONST=44
EXTERN=45
ASSERT_TOKEN=46
CHECK_TOKEN=47
UNREACHABLE_TOKEN=48
DEBUG_TOKEN=49
ASSIGNMENT=50
ASSIGNMENT_OPERATOR=51
EQUAL=52
PLUS=53
MINUS=54
MULTIPLY=55
DIVIDE=56
MODULO=57
BIT_OR=58
BIT_AND=59
BIT_NOT=60
MAX=61
MIN=62
NOT_EQUAL=63
LESS_THAN=64
LESS_THAN_EQUAL=65
GREATER_THAN=66
GREATER_THAN_EQUAL=67
SHIFT_LEFT=68
SHIFT_RIGHT=69
SHIFT_RIGHT_ARITHMETIC=70
VARARGS=71
EQUALITY_OPERATOR=72
INCREMENT=73
DECREMENT=74
NOT=75
STRING_LITERAL=76
IDENTIFIER=77
WS=78
BLOCK_COMMENT=79
LINE_COMMENT=80
DECIMAL_LITERAL=81
'('=1
')'=2
'=>'=3
','=4
':'=5
'type'=6
'?'=7
'||'=8
'&&'=9
'.'=10
'['=11
']'=12
'{'=13
'}'=14
';'=15
'of'=16
'else'=17
'extends'=18
'generates'=19
'operator'=20
'struct'=21
'macro'=22
'builtin'=23
'runtime'=24
'module'=25
'javascript'=26
'deferred'=27
'if'=28
'for'=29
'while'=30
'return'=31
'constexpr'=32
'continue'=33
'break'=34
'goto'=35
'otherwise'=36
'try'=37
'label'=38
'labels'=39
'tail'=40
'isnt'=41
'is'=42
'let'=43
'const'=44
'extern'=45
'assert'=46
'check'=47
'unreachable'=48
'debug'=49
'='=50
'=='=52
'+'=53
'-'=54
'*'=55
'/'=56
'%'=57
'|'=58
'&'=59
'~'=60
'max'=61
'min'=62
'!='=63
'<'=64
'<='=65
'>'=66
'>='=67
'<<'=68
'>>'=69
'>>>'=70
'...'=71
'++'=73
'--'=74
'!'=75
......@@ -141,6 +141,16 @@ class TorqueBaseListener : public TorqueListener {
void exitAssignmentExpression(
TorqueParser::AssignmentExpressionContext* /*ctx*/) override {}
void enterStructExpression(
TorqueParser::StructExpressionContext* /*ctx*/) override {}
void exitStructExpression(
TorqueParser::StructExpressionContext* /*ctx*/) override {}
void enterFunctionPointerExpression(
TorqueParser::FunctionPointerExpressionContext* /*ctx*/) override {}
void exitFunctionPointerExpression(
TorqueParser::FunctionPointerExpressionContext* /*ctx*/) override {}
void enterPrimaryExpression(
TorqueParser::PrimaryExpressionContext* /*ctx*/) override {}
void exitPrimaryExpression(
......@@ -263,6 +273,16 @@ class TorqueBaseListener : public TorqueListener {
void enterHelperBody(TorqueParser::HelperBodyContext* /*ctx*/) override {}
void exitHelperBody(TorqueParser::HelperBodyContext* /*ctx*/) override {}
void enterFieldDeclaration(
TorqueParser::FieldDeclarationContext* /*ctx*/) override {}
void exitFieldDeclaration(
TorqueParser::FieldDeclarationContext* /*ctx*/) override {}
void enterFieldListDeclaration(
TorqueParser::FieldListDeclarationContext* /*ctx*/) override {}
void exitFieldListDeclaration(
TorqueParser::FieldListDeclarationContext* /*ctx*/) override {}
void enterExtendsDeclaration(
TorqueParser::ExtendsDeclarationContext* /*ctx*/) override {}
void exitExtendsDeclaration(
......@@ -328,6 +348,11 @@ class TorqueBaseListener : public TorqueListener {
void exitConstDeclaration(
TorqueParser::ConstDeclarationContext* /*ctx*/) override {}
void enterStructDeclaration(
TorqueParser::StructDeclarationContext* /*ctx*/) override {}
void exitStructDeclaration(
TorqueParser::StructDeclarationContext* /*ctx*/) override {}
void enterDeclaration(TorqueParser::DeclarationContext* /*ctx*/) override {}
void exitDeclaration(TorqueParser::DeclarationContext* /*ctx*/) override {}
......
......@@ -148,6 +148,16 @@ class TorqueBaseVisitor : public TorqueVisitor {
return visitChildren(ctx);
}
antlrcpp::Any visitStructExpression(
TorqueParser::StructExpressionContext* ctx) override {
return visitChildren(ctx);
}
antlrcpp::Any visitFunctionPointerExpression(
TorqueParser::FunctionPointerExpressionContext* ctx) override {
return visitChildren(ctx);
}
antlrcpp::Any visitPrimaryExpression(
TorqueParser::PrimaryExpressionContext* ctx) override {
return visitChildren(ctx);
......@@ -281,6 +291,16 @@ class TorqueBaseVisitor : public TorqueVisitor {
return visitChildren(ctx);
}
antlrcpp::Any visitFieldDeclaration(
TorqueParser::FieldDeclarationContext* ctx) override {
return visitChildren(ctx);
}
antlrcpp::Any visitFieldListDeclaration(
TorqueParser::FieldListDeclarationContext* ctx) override {
return visitChildren(ctx);
}
antlrcpp::Any visitExtendsDeclaration(
TorqueParser::ExtendsDeclarationContext* ctx) override {
return visitChildren(ctx);
......@@ -346,6 +366,11 @@ class TorqueBaseVisitor : public TorqueVisitor {
return visitChildren(ctx);
}
antlrcpp::Any visitStructDeclaration(
TorqueParser::StructDeclarationContext* ctx) override {
return visitChildren(ctx);
}
antlrcpp::Any visitDeclaration(
TorqueParser::DeclarationContext* ctx) override {
return visitChildren(ctx);
......
......@@ -69,6 +69,7 @@ std::vector<std::string> TorqueLexer::_ruleNames = {u8"T__0",
u8"T__17",
u8"T__18",
u8"T__19",
u8"T__20",
u8"MACRO",
u8"BUILTIN",
u8"RUNTIME",
......@@ -152,14 +153,15 @@ std::vector<std::string> TorqueLexer::_literalNames = {"",
u8"'.'",
u8"'['",
u8"']'",
u8"'{'",
u8"'}'",
u8"';'",
u8"'of'",
u8"'else'",
u8"'{'",
u8"'}'",
u8"'extends'",
u8"'generates'",
u8"'operator'",
u8"'struct'",
u8"'macro'",
u8"'builtin'",
u8"'runtime'",
......@@ -216,6 +218,7 @@ std::vector<std::string> TorqueLexer::_literalNames = {"",
u8"'!'"};
std::vector<std::string> TorqueLexer::_symbolicNames = {
"",
"",
"",
"",
......@@ -320,7 +323,7 @@ TorqueLexer::Initializer::Initializer() {
_serializedATN = {
0x3, 0x608b, 0xa72a, 0x8133, 0xb9ed, 0x417c, 0x3be7, 0x7786, 0x5964,
0x2, 0x52, 0x290, 0x8, 0x1, 0x4, 0x2, 0x9, 0x2,
0x2, 0x53, 0x299, 0x8, 0x1, 0x4, 0x2, 0x9, 0x2,
0x4, 0x3, 0x9, 0x3, 0x4, 0x4, 0x9, 0x4, 0x4,
0x5, 0x9, 0x5, 0x4, 0x6, 0x9, 0x6, 0x4, 0x7,
0x9, 0x7, 0x4, 0x8, 0x9, 0x8, 0x4, 0x9, 0x9,
......@@ -357,120 +360,122 @@ TorqueLexer::Initializer::Initializer() {
0x4d, 0x9, 0x4d, 0x4, 0x4e, 0x9, 0x4e, 0x4, 0x4f,
0x9, 0x4f, 0x4, 0x50, 0x9, 0x50, 0x4, 0x51, 0x9,
0x51, 0x4, 0x52, 0x9, 0x52, 0x4, 0x53, 0x9, 0x53,
0x4, 0x54, 0x9, 0x54, 0x4, 0x55, 0x9, 0x55, 0x3,
0x2, 0x3, 0x2, 0x3, 0x3, 0x3, 0x3, 0x3, 0x4,
0x3, 0x4, 0x3, 0x4, 0x3, 0x5, 0x3, 0x5, 0x3,
0x6, 0x3, 0x6, 0x3, 0x7, 0x3, 0x7, 0x3, 0x7,
0x3, 0x7, 0x3, 0x7, 0x3, 0x8, 0x3, 0x8, 0x3,
0x9, 0x3, 0x9, 0x3, 0x9, 0x3, 0xa, 0x3, 0xa,
0x3, 0xa, 0x3, 0xb, 0x3, 0xb, 0x3, 0xc, 0x3,
0xc, 0x3, 0xd, 0x3, 0xd, 0x3, 0xe, 0x3, 0xe,
0x3, 0xf, 0x3, 0xf, 0x3, 0xf, 0x3, 0x10, 0x3,
0x10, 0x3, 0x10, 0x3, 0x10, 0x3, 0x10, 0x3, 0x11,
0x3, 0x11, 0x3, 0x12, 0x3, 0x12, 0x3, 0x13, 0x3,
0x13, 0x3, 0x13, 0x3, 0x13, 0x3, 0x13, 0x3, 0x13,
0x3, 0x13, 0x3, 0x13, 0x3, 0x14, 0x3, 0x14, 0x3,
0x4, 0x54, 0x9, 0x54, 0x4, 0x55, 0x9, 0x55, 0x4,
0x56, 0x9, 0x56, 0x3, 0x2, 0x3, 0x2, 0x3, 0x3,
0x3, 0x3, 0x3, 0x4, 0x3, 0x4, 0x3, 0x4, 0x3,
0x5, 0x3, 0x5, 0x3, 0x6, 0x3, 0x6, 0x3, 0x7,
0x3, 0x7, 0x3, 0x7, 0x3, 0x7, 0x3, 0x7, 0x3,
0x8, 0x3, 0x8, 0x3, 0x9, 0x3, 0x9, 0x3, 0x9,
0x3, 0xa, 0x3, 0xa, 0x3, 0xa, 0x3, 0xb, 0x3,
0xb, 0x3, 0xc, 0x3, 0xc, 0x3, 0xd, 0x3, 0xd,
0x3, 0xe, 0x3, 0xe, 0x3, 0xf, 0x3, 0xf, 0x3,
0x10, 0x3, 0x10, 0x3, 0x11, 0x3, 0x11, 0x3, 0x11,
0x3, 0x12, 0x3, 0x12, 0x3, 0x12, 0x3, 0x12, 0x3,
0x12, 0x3, 0x13, 0x3, 0x13, 0x3, 0x13, 0x3, 0x13,
0x3, 0x13, 0x3, 0x13, 0x3, 0x13, 0x3, 0x13, 0x3,
0x14, 0x3, 0x14, 0x3, 0x14, 0x3, 0x14, 0x3, 0x14,
0x3, 0x14, 0x3, 0x14, 0x3, 0x14, 0x3, 0x15, 0x3,
0x15, 0x3, 0x15, 0x3, 0x15, 0x3, 0x15, 0x3, 0x15,
0x3, 0x15, 0x3, 0x15, 0x3, 0x15, 0x3, 0x16, 0x3,
0x16, 0x3, 0x16, 0x3, 0x16, 0x3, 0x16, 0x3, 0x16,
0x3, 0x17, 0x3, 0x17, 0x3, 0x17, 0x3, 0x17, 0x3,
0x17, 0x3, 0x17, 0x3, 0x17, 0x3, 0x17, 0x3, 0x18,
0x3, 0x14, 0x3, 0x14, 0x3, 0x14, 0x3, 0x14, 0x3,
0x14, 0x3, 0x15, 0x3, 0x15, 0x3, 0x15, 0x3, 0x15,
0x3, 0x15, 0x3, 0x15, 0x3, 0x15, 0x3, 0x15, 0x3,
0x15, 0x3, 0x16, 0x3, 0x16, 0x3, 0x16, 0x3, 0x16,
0x3, 0x16, 0x3, 0x16, 0x3, 0x16, 0x3, 0x17, 0x3,
0x17, 0x3, 0x17, 0x3, 0x17, 0x3, 0x17, 0x3, 0x17,
0x3, 0x18, 0x3, 0x18, 0x3, 0x18, 0x3, 0x18, 0x3,
0x18, 0x3, 0x18, 0x3, 0x18, 0x3, 0x19, 0x3, 0x19,
0x18, 0x3, 0x18, 0x3, 0x18, 0x3, 0x18, 0x3, 0x19,
0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3,
0x19, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a,
0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x1a, 0x3, 0x1a,
0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3,
0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1b, 0x3, 0x1b,
0x1a, 0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1b,
0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3,
0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1c, 0x3, 0x1c,
0x3, 0x1c, 0x3, 0x1d, 0x3, 0x1d, 0x3, 0x1d, 0x3,
0x1d, 0x3, 0x1e, 0x3, 0x1e, 0x3, 0x1e, 0x3, 0x1e,
0x3, 0x1e, 0x3, 0x1e, 0x3, 0x1f, 0x3, 0x1f, 0x3,
0x1f, 0x3, 0x1f, 0x3, 0x1f, 0x3, 0x1f, 0x3, 0x1f,
0x3, 0x20, 0x3, 0x20, 0x3, 0x20, 0x3, 0x20, 0x3,
0x3, 0x1c, 0x3, 0x1c, 0x3, 0x1c, 0x3, 0x1c, 0x3,
0x1c, 0x3, 0x1c, 0x3, 0x1c, 0x3, 0x1d, 0x3, 0x1d,
0x3, 0x1d, 0x3, 0x1e, 0x3, 0x1e, 0x3, 0x1e, 0x3,
0x1e, 0x3, 0x1f, 0x3, 0x1f, 0x3, 0x1f, 0x3, 0x1f,
0x3, 0x1f, 0x3, 0x1f, 0x3, 0x20, 0x3, 0x20, 0x3,
0x20, 0x3, 0x20, 0x3, 0x20, 0x3, 0x20, 0x3, 0x20,
0x3, 0x20, 0x3, 0x21, 0x3, 0x21, 0x3, 0x21, 0x3,
0x3, 0x21, 0x3, 0x21, 0x3, 0x21, 0x3, 0x21, 0x3,
0x21, 0x3, 0x21, 0x3, 0x21, 0x3, 0x21, 0x3, 0x21,
0x3, 0x21, 0x3, 0x22, 0x3, 0x22, 0x3, 0x22, 0x3,
0x22, 0x3, 0x22, 0x3, 0x22, 0x3, 0x23, 0x3, 0x23,
0x3, 0x23, 0x3, 0x23, 0x3, 0x23, 0x3, 0x24, 0x3,
0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 0x24,
0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 0x3,
0x25, 0x3, 0x25, 0x3, 0x25, 0x3, 0x25, 0x3, 0x26,
0x3, 0x26, 0x3, 0x26, 0x3, 0x26, 0x3, 0x26, 0x3,
0x26, 0x3, 0x27, 0x3, 0x27, 0x3, 0x27, 0x3, 0x27,
0x3, 0x27, 0x3, 0x27, 0x3, 0x27, 0x3, 0x28, 0x3,
0x28, 0x3, 0x28, 0x3, 0x28, 0x3, 0x28, 0x3, 0x29,
0x3, 0x29, 0x3, 0x29, 0x3, 0x29, 0x3, 0x29, 0x3,
0x2a, 0x3, 0x2a, 0x3, 0x2a, 0x3, 0x2b, 0x3, 0x2b,
0x3, 0x2b, 0x3, 0x2b, 0x3, 0x2c, 0x3, 0x2c, 0x3,
0x2c, 0x3, 0x2c, 0x3, 0x2c, 0x3, 0x2c, 0x3, 0x2d,
0x3, 0x2d, 0x3, 0x2d, 0x3, 0x2d, 0x3, 0x2d, 0x3,
0x2d, 0x3, 0x2d, 0x3, 0x2e, 0x3, 0x2e, 0x3, 0x2e,
0x22, 0x3, 0x22, 0x3, 0x22, 0x3, 0x22, 0x3, 0x22,
0x3, 0x22, 0x3, 0x23, 0x3, 0x23, 0x3, 0x23, 0x3,
0x23, 0x3, 0x23, 0x3, 0x23, 0x3, 0x24, 0x3, 0x24,
0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 0x25, 0x3,
0x25, 0x3, 0x25, 0x3, 0x25, 0x3, 0x25, 0x3, 0x25,
0x3, 0x25, 0x3, 0x25, 0x3, 0x25, 0x3, 0x25, 0x3,
0x26, 0x3, 0x26, 0x3, 0x26, 0x3, 0x26, 0x3, 0x27,
0x3, 0x27, 0x3, 0x27, 0x3, 0x27, 0x3, 0x27, 0x3,
0x27, 0x3, 0x28, 0x3, 0x28, 0x3, 0x28, 0x3, 0x28,
0x3, 0x28, 0x3, 0x28, 0x3, 0x28, 0x3, 0x29, 0x3,
0x29, 0x3, 0x29, 0x3, 0x29, 0x3, 0x29, 0x3, 0x2a,
0x3, 0x2a, 0x3, 0x2a, 0x3, 0x2a, 0x3, 0x2a, 0x3,
0x2b, 0x3, 0x2b, 0x3, 0x2b, 0x3, 0x2c, 0x3, 0x2c,
0x3, 0x2c, 0x3, 0x2c, 0x3, 0x2d, 0x3, 0x2d, 0x3,
0x2d, 0x3, 0x2d, 0x3, 0x2d, 0x3, 0x2d, 0x3, 0x2e,
0x3, 0x2e, 0x3, 0x2e, 0x3, 0x2e, 0x3, 0x2e, 0x3,
0x2f, 0x3, 0x2f, 0x3, 0x2f, 0x3, 0x2f, 0x3, 0x2f,
0x3, 0x2f, 0x3, 0x30, 0x3, 0x30, 0x3, 0x30, 0x3,
0x2e, 0x3, 0x2e, 0x3, 0x2f, 0x3, 0x2f, 0x3, 0x2f,
0x3, 0x2f, 0x3, 0x2f, 0x3, 0x2f, 0x3, 0x2f, 0x3,
0x30, 0x3, 0x30, 0x3, 0x30, 0x3, 0x30, 0x3, 0x30,
0x3, 0x30, 0x3, 0x30, 0x3, 0x30, 0x3, 0x30, 0x3,
0x3, 0x30, 0x3, 0x31, 0x3, 0x31, 0x3, 0x31, 0x3,
0x31, 0x3, 0x31, 0x3, 0x31, 0x3, 0x31, 0x3, 0x31,
0x3, 0x31, 0x3, 0x32, 0x3, 0x32, 0x3, 0x33, 0x3,
0x33, 0x3, 0x33, 0x3, 0x33, 0x3, 0x33, 0x3, 0x33,
0x3, 0x33, 0x3, 0x33, 0x3, 0x33, 0x3, 0x33, 0x3,
0x33, 0x3, 0x33, 0x3, 0x33, 0x3, 0x33, 0x3, 0x33,
0x3, 0x33, 0x3, 0x33, 0x3, 0x33, 0x3, 0x33, 0x3,
0x33, 0x3, 0x33, 0x3, 0x33, 0x3, 0x33, 0x3, 0x33,
0x3, 0x33, 0x3, 0x33, 0x5, 0x33, 0x1ca, 0xa, 0x33,
0x3, 0x34, 0x3, 0x34, 0x3, 0x34, 0x3, 0x35, 0x3,
0x35, 0x3, 0x36, 0x3, 0x36, 0x3, 0x37, 0x3, 0x37,
0x3, 0x38, 0x3, 0x38, 0x3, 0x39, 0x3, 0x39, 0x3,
0x3a, 0x3, 0x3a, 0x3, 0x3b, 0x3, 0x3b, 0x3, 0x3c,
0x3, 0x3c, 0x3, 0x3d, 0x3, 0x3d, 0x3, 0x3d, 0x3,
0x3d, 0x3, 0x3e, 0x3, 0x3e, 0x3, 0x3e, 0x3, 0x3e,
0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x40, 0x3,
0x40, 0x3, 0x41, 0x3, 0x41, 0x3, 0x41, 0x3, 0x42,
0x3, 0x42, 0x3, 0x43, 0x3, 0x43, 0x3, 0x43, 0x3,
0x44, 0x3, 0x44, 0x3, 0x44, 0x3, 0x45, 0x3, 0x45,
0x3, 0x45, 0x3, 0x46, 0x3, 0x46, 0x3, 0x46, 0x3,
0x46, 0x3, 0x47, 0x3, 0x47, 0x3, 0x47, 0x3, 0x47,
0x3, 0x48, 0x3, 0x48, 0x5, 0x48, 0x204, 0xa, 0x48,
0x3, 0x49, 0x3, 0x49, 0x3, 0x49, 0x3, 0x4a, 0x3,
0x4a, 0x3, 0x4a, 0x3, 0x4b, 0x3, 0x4b, 0x3, 0x4c,
0x3, 0x4c, 0x3, 0x4c, 0x7, 0x4c, 0x211, 0xa, 0x4c,
0xc, 0x4c, 0xe, 0x4c, 0x214, 0xb, 0x4c, 0x3, 0x4c,
0x3, 0x4c, 0x3, 0x4c, 0x3, 0x4c, 0x7, 0x4c, 0x21a,
0xa, 0x4c, 0xc, 0x4c, 0xe, 0x4c, 0x21d, 0xb, 0x4c,
0x3, 0x4c, 0x5, 0x4c, 0x220, 0xa, 0x4c, 0x3, 0x4d,
0x3, 0x4d, 0x3, 0x4d, 0x3, 0x4e, 0x3, 0x4e, 0x7,
0x4e, 0x227, 0xa, 0x4e, 0xc, 0x4e, 0xe, 0x4e, 0x22a,
0xb, 0x4e, 0x3, 0x4f, 0x6, 0x4f, 0x22d, 0xa, 0x4f,
0xd, 0x4f, 0xe, 0x4f, 0x22e, 0x3, 0x4f, 0x3, 0x4f,
0x3, 0x50, 0x3, 0x50, 0x3, 0x50, 0x3, 0x50, 0x7,
0x50, 0x237, 0xa, 0x50, 0xc, 0x50, 0xe, 0x50, 0x23a,
0xb, 0x50, 0x3, 0x50, 0x3, 0x50, 0x3, 0x50, 0x5,
0x50, 0x23f, 0xa, 0x50, 0x3, 0x50, 0x3, 0x50, 0x3,
0x51, 0x3, 0x51, 0x3, 0x51, 0x3, 0x51, 0x7, 0x51,
0x247, 0xa, 0x51, 0xc, 0x51, 0xe, 0x51, 0x24a, 0xb,
0x51, 0x3, 0x51, 0x3, 0x51, 0x3, 0x52, 0x3, 0x52,
0x3, 0x53, 0x3, 0x53, 0x3, 0x53, 0x7, 0x53, 0x253,
0xa, 0x53, 0xc, 0x53, 0xe, 0x53, 0x256, 0xb, 0x53,
0x5, 0x53, 0x258, 0xa, 0x53, 0x3, 0x54, 0x3, 0x54,
0x5, 0x54, 0x25c, 0xa, 0x54, 0x3, 0x54, 0x6, 0x54,
0x25f, 0xa, 0x54, 0xd, 0x54, 0xe, 0x54, 0x260, 0x3,
0x55, 0x5, 0x55, 0x264, 0xa, 0x55, 0x3, 0x55, 0x3,
0x55, 0x3, 0x55, 0x7, 0x55, 0x269, 0xa, 0x55, 0xc,
0x55, 0xe, 0x55, 0x26c, 0xb, 0x55, 0x3, 0x55, 0x5,
0x55, 0x26f, 0xa, 0x55, 0x3, 0x55, 0x5, 0x55, 0x272,
0xa, 0x55, 0x3, 0x55, 0x3, 0x55, 0x6, 0x55, 0x276,
0xa, 0x55, 0xd, 0x55, 0xe, 0x55, 0x277, 0x3, 0x55,
0x5, 0x55, 0x27b, 0xa, 0x55, 0x3, 0x55, 0x5, 0x55,
0x27e, 0xa, 0x55, 0x3, 0x55, 0x3, 0x55, 0x5, 0x55,
0x282, 0xa, 0x55, 0x3, 0x55, 0x5, 0x55, 0x285, 0xa,
0x55, 0x3, 0x55, 0x3, 0x55, 0x3, 0x55, 0x3, 0x55,
0x6, 0x55, 0x28b, 0xa, 0x55, 0xd, 0x55, 0xe, 0x55,
0x28c, 0x5, 0x55, 0x28f, 0xa, 0x55, 0x3, 0x238, 0x2,
0x56, 0x3, 0x3, 0x5, 0x4, 0x7, 0x5, 0x9, 0x6,
0x3, 0x31, 0x3, 0x31, 0x3, 0x31, 0x3, 0x31, 0x3,
0x32, 0x3, 0x32, 0x3, 0x32, 0x3, 0x32, 0x3, 0x32,
0x3, 0x32, 0x3, 0x33, 0x3, 0x33, 0x3, 0x34, 0x3,
0x34, 0x3, 0x34, 0x3, 0x34, 0x3, 0x34, 0x3, 0x34,
0x3, 0x34, 0x3, 0x34, 0x3, 0x34, 0x3, 0x34, 0x3,
0x34, 0x3, 0x34, 0x3, 0x34, 0x3, 0x34, 0x3, 0x34,
0x3, 0x34, 0x3, 0x34, 0x3, 0x34, 0x3, 0x34, 0x3,
0x34, 0x3, 0x34, 0x3, 0x34, 0x3, 0x34, 0x3, 0x34,
0x3, 0x34, 0x3, 0x34, 0x5, 0x34, 0x1d3, 0xa, 0x34,
0x3, 0x35, 0x3, 0x35, 0x3, 0x35, 0x3, 0x36, 0x3,
0x36, 0x3, 0x37, 0x3, 0x37, 0x3, 0x38, 0x3, 0x38,
0x3, 0x39, 0x3, 0x39, 0x3, 0x3a, 0x3, 0x3a, 0x3,
0x3b, 0x3, 0x3b, 0x3, 0x3c, 0x3, 0x3c, 0x3, 0x3d,
0x3, 0x3d, 0x3, 0x3e, 0x3, 0x3e, 0x3, 0x3e, 0x3,
0x3e, 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f,
0x3, 0x40, 0x3, 0x40, 0x3, 0x40, 0x3, 0x41, 0x3,
0x41, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x43,
0x3, 0x43, 0x3, 0x44, 0x3, 0x44, 0x3, 0x44, 0x3,
0x45, 0x3, 0x45, 0x3, 0x45, 0x3, 0x46, 0x3, 0x46,
0x3, 0x46, 0x3, 0x47, 0x3, 0x47, 0x3, 0x47, 0x3,
0x47, 0x3, 0x48, 0x3, 0x48, 0x3, 0x48, 0x3, 0x48,
0x3, 0x49, 0x3, 0x49, 0x5, 0x49, 0x20d, 0xa, 0x49,
0x3, 0x4a, 0x3, 0x4a, 0x3, 0x4a, 0x3, 0x4b, 0x3,
0x4b, 0x3, 0x4b, 0x3, 0x4c, 0x3, 0x4c, 0x3, 0x4d,
0x3, 0x4d, 0x3, 0x4d, 0x7, 0x4d, 0x21a, 0xa, 0x4d,
0xc, 0x4d, 0xe, 0x4d, 0x21d, 0xb, 0x4d, 0x3, 0x4d,
0x3, 0x4d, 0x3, 0x4d, 0x3, 0x4d, 0x7, 0x4d, 0x223,
0xa, 0x4d, 0xc, 0x4d, 0xe, 0x4d, 0x226, 0xb, 0x4d,
0x3, 0x4d, 0x5, 0x4d, 0x229, 0xa, 0x4d, 0x3, 0x4e,
0x3, 0x4e, 0x3, 0x4e, 0x3, 0x4f, 0x3, 0x4f, 0x7,
0x4f, 0x230, 0xa, 0x4f, 0xc, 0x4f, 0xe, 0x4f, 0x233,
0xb, 0x4f, 0x3, 0x50, 0x6, 0x50, 0x236, 0xa, 0x50,
0xd, 0x50, 0xe, 0x50, 0x237, 0x3, 0x50, 0x3, 0x50,
0x3, 0x51, 0x3, 0x51, 0x3, 0x51, 0x3, 0x51, 0x7,
0x51, 0x240, 0xa, 0x51, 0xc, 0x51, 0xe, 0x51, 0x243,
0xb, 0x51, 0x3, 0x51, 0x3, 0x51, 0x3, 0x51, 0x5,
0x51, 0x248, 0xa, 0x51, 0x3, 0x51, 0x3, 0x51, 0x3,
0x52, 0x3, 0x52, 0x3, 0x52, 0x3, 0x52, 0x7, 0x52,
0x250, 0xa, 0x52, 0xc, 0x52, 0xe, 0x52, 0x253, 0xb,
0x52, 0x3, 0x52, 0x3, 0x52, 0x3, 0x53, 0x3, 0x53,
0x3, 0x54, 0x3, 0x54, 0x3, 0x54, 0x7, 0x54, 0x25c,
0xa, 0x54, 0xc, 0x54, 0xe, 0x54, 0x25f, 0xb, 0x54,
0x5, 0x54, 0x261, 0xa, 0x54, 0x3, 0x55, 0x3, 0x55,
0x5, 0x55, 0x265, 0xa, 0x55, 0x3, 0x55, 0x6, 0x55,
0x268, 0xa, 0x55, 0xd, 0x55, 0xe, 0x55, 0x269, 0x3,
0x56, 0x5, 0x56, 0x26d, 0xa, 0x56, 0x3, 0x56, 0x3,
0x56, 0x3, 0x56, 0x7, 0x56, 0x272, 0xa, 0x56, 0xc,
0x56, 0xe, 0x56, 0x275, 0xb, 0x56, 0x3, 0x56, 0x5,
0x56, 0x278, 0xa, 0x56, 0x3, 0x56, 0x5, 0x56, 0x27b,
0xa, 0x56, 0x3, 0x56, 0x3, 0x56, 0x6, 0x56, 0x27f,
0xa, 0x56, 0xd, 0x56, 0xe, 0x56, 0x280, 0x3, 0x56,
0x5, 0x56, 0x284, 0xa, 0x56, 0x3, 0x56, 0x5, 0x56,
0x287, 0xa, 0x56, 0x3, 0x56, 0x3, 0x56, 0x5, 0x56,
0x28b, 0xa, 0x56, 0x3, 0x56, 0x5, 0x56, 0x28e, 0xa,
0x56, 0x3, 0x56, 0x3, 0x56, 0x3, 0x56, 0x3, 0x56,
0x6, 0x56, 0x294, 0xa, 0x56, 0xd, 0x56, 0xe, 0x56,
0x295, 0x5, 0x56, 0x298, 0xa, 0x56, 0x3, 0x241, 0x2,
0x57, 0x3, 0x3, 0x5, 0x4, 0x7, 0x5, 0x9, 0x6,
0xb, 0x7, 0xd, 0x8, 0xf, 0x9, 0x11, 0xa, 0x13,
0xb, 0x15, 0xc, 0x17, 0xd, 0x19, 0xe, 0x1b, 0xf,
0x1d, 0x10, 0x1f, 0x11, 0x21, 0x12, 0x23, 0x13, 0x25,
......@@ -486,481 +491,488 @@ TorqueLexer::Initializer::Initializer() {
0x77, 0x3d, 0x79, 0x3e, 0x7b, 0x3f, 0x7d, 0x40, 0x7f,
0x41, 0x81, 0x42, 0x83, 0x43, 0x85, 0x44, 0x87, 0x45,
0x89, 0x46, 0x8b, 0x47, 0x8d, 0x48, 0x8f, 0x49, 0x91,
0x4a, 0x93, 0x4b, 0x95, 0x4c, 0x97, 0x4d, 0x99, 0x2,
0x9b, 0x4e, 0x9d, 0x4f, 0x9f, 0x50, 0xa1, 0x51, 0xa3,
0x2, 0xa5, 0x2, 0xa7, 0x2, 0xa9, 0x52, 0x3, 0x2,
0xe, 0x6, 0x2, 0xc, 0xc, 0xf, 0xf, 0x24, 0x24,
0x5e, 0x5e, 0x6, 0x2, 0xc, 0xc, 0xf, 0xf, 0x29,
0x29, 0x5e, 0x5e, 0x7, 0x2, 0x24, 0x24, 0x29, 0x29,
0x5e, 0x5e, 0x70, 0x70, 0x74, 0x74, 0x4, 0x2, 0x43,
0x5c, 0x63, 0x7c, 0x6, 0x2, 0x32, 0x3b, 0x43, 0x5c,
0x61, 0x61, 0x63, 0x7c, 0x5, 0x2, 0xb, 0xc, 0xe,
0xf, 0x22, 0x22, 0x4, 0x2, 0xc, 0xc, 0xf, 0xf,
0x3, 0x2, 0x32, 0x3b, 0x3, 0x2, 0x33, 0x3b, 0x4,
0x2, 0x47, 0x47, 0x67, 0x67, 0x4, 0x2, 0x2d, 0x2d,
0x2f, 0x2f, 0x5, 0x2, 0x32, 0x3b, 0x43, 0x48, 0x63,
0x68, 0x2, 0x2b1, 0x2, 0x3, 0x3, 0x2, 0x2, 0x2,
0x2, 0x5, 0x3, 0x2, 0x2, 0x2, 0x2, 0x7, 0x3,
0x2, 0x2, 0x2, 0x2, 0x9, 0x3, 0x2, 0x2, 0x2,
0x2, 0xb, 0x3, 0x2, 0x2, 0x2, 0x2, 0xd, 0x3,
0x2, 0x2, 0x2, 0x2, 0xf, 0x3, 0x2, 0x2, 0x2,
0x2, 0x11, 0x3, 0x2, 0x2, 0x2, 0x2, 0x13, 0x3,
0x2, 0x2, 0x2, 0x2, 0x15, 0x3, 0x2, 0x2, 0x2,
0x2, 0x17, 0x3, 0x2, 0x2, 0x2, 0x2, 0x19, 0x3,
0x2, 0x2, 0x2, 0x2, 0x1b, 0x3, 0x2, 0x2, 0x2,
0x2, 0x1d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1f, 0x3,
0x2, 0x2, 0x2, 0x2, 0x21, 0x3, 0x2, 0x2, 0x2,
0x2, 0x23, 0x3, 0x2, 0x2, 0x2, 0x2, 0x25, 0x3,
0x2, 0x2, 0x2, 0x2, 0x27, 0x3, 0x2, 0x2, 0x2,
0x2, 0x29, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2b, 0x3,
0x2, 0x2, 0x2, 0x2, 0x2d, 0x3, 0x2, 0x2, 0x2,
0x2, 0x2f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x31, 0x3,
0x2, 0x2, 0x2, 0x2, 0x33, 0x3, 0x2, 0x2, 0x2,
0x2, 0x35, 0x3, 0x2, 0x2, 0x2, 0x2, 0x37, 0x3,
0x2, 0x2, 0x2, 0x2, 0x39, 0x3, 0x2, 0x2, 0x2,
0x2, 0x3b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x3d, 0x3,
0x2, 0x2, 0x2, 0x2, 0x3f, 0x3, 0x2, 0x2, 0x2,
0x2, 0x41, 0x3, 0x2, 0x2, 0x2, 0x2, 0x43, 0x3,
0x2, 0x2, 0x2, 0x2, 0x45, 0x3, 0x2, 0x2, 0x2,
0x2, 0x47, 0x3, 0x2, 0x2, 0x2, 0x2, 0x49, 0x3,
0x2, 0x2, 0x2, 0x2, 0x4b, 0x3, 0x2, 0x2, 0x2,
0x2, 0x4d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x4f, 0x3,
0x2, 0x2, 0x2, 0x2, 0x51, 0x3, 0x2, 0x2, 0x2,
0x2, 0x53, 0x3, 0x2, 0x2, 0x2, 0x2, 0x55, 0x3,
0x2, 0x2, 0x2, 0x2, 0x57, 0x3, 0x2, 0x2, 0x2,
0x2, 0x59, 0x3, 0x2, 0x2, 0x2, 0x2, 0x5b, 0x3,
0x2, 0x2, 0x2, 0x2, 0x5d, 0x3, 0x2, 0x2, 0x2,
0x2, 0x5f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x61, 0x3,
0x2, 0x2, 0x2, 0x2, 0x63, 0x3, 0x2, 0x2, 0x2,
0x2, 0x65, 0x3, 0x2, 0x2, 0x2, 0x2, 0x67, 0x3,
0x2, 0x2, 0x2, 0x2, 0x69, 0x3, 0x2, 0x2, 0x2,
0x2, 0x6b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x6d, 0x3,
0x2, 0x2, 0x2, 0x2, 0x6f, 0x3, 0x2, 0x2, 0x2,
0x2, 0x71, 0x3, 0x2, 0x2, 0x2, 0x2, 0x73, 0x3,
0x2, 0x2, 0x2, 0x2, 0x75, 0x3, 0x2, 0x2, 0x2,
0x2, 0x77, 0x3, 0x2, 0x2, 0x2, 0x2, 0x79, 0x3,
0x2, 0x2, 0x2, 0x2, 0x7b, 0x3, 0x2, 0x2, 0x2,
0x2, 0x7d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x7f, 0x3,
0x2, 0x2, 0x2, 0x2, 0x81, 0x3, 0x2, 0x2, 0x2,
0x2, 0x83, 0x3, 0x2, 0x2, 0x2, 0x2, 0x85, 0x3,
0x2, 0x2, 0x2, 0x2, 0x87, 0x3, 0x2, 0x2, 0x2,
0x2, 0x89, 0x3, 0x2, 0x2, 0x2, 0x2, 0x8b, 0x3,
0x2, 0x2, 0x2, 0x2, 0x8d, 0x3, 0x2, 0x2, 0x2,
0x2, 0x8f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x91, 0x3,
0x2, 0x2, 0x2, 0x2, 0x93, 0x3, 0x2, 0x2, 0x2,
0x2, 0x95, 0x3, 0x2, 0x2, 0x2, 0x2, 0x97, 0x3,
0x2, 0x2, 0x2, 0x2, 0x9b, 0x3, 0x2, 0x2, 0x2,
0x2, 0x9d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x9f, 0x3,
0x2, 0x2, 0x2, 0x2, 0xa1, 0x3, 0x2, 0x2, 0x2,
0x2, 0xa9, 0x3, 0x2, 0x2, 0x2, 0x3, 0xab, 0x3,
0x2, 0x2, 0x2, 0x5, 0xad, 0x3, 0x2, 0x2, 0x2,
0x7, 0xaf, 0x3, 0x2, 0x2, 0x2, 0x9, 0xb2, 0x3,
0x2, 0x2, 0x2, 0xb, 0xb4, 0x3, 0x2, 0x2, 0x2,
0xd, 0xb6, 0x3, 0x2, 0x2, 0x2, 0xf, 0xbb, 0x3,
0x2, 0x2, 0x2, 0x11, 0xbd, 0x3, 0x2, 0x2, 0x2,
0x13, 0xc0, 0x3, 0x2, 0x2, 0x2, 0x15, 0xc3, 0x3,
0x2, 0x2, 0x2, 0x17, 0xc5, 0x3, 0x2, 0x2, 0x2,
0x19, 0xc7, 0x3, 0x2, 0x2, 0x2, 0x1b, 0xc9, 0x3,
0x2, 0x2, 0x2, 0x1d, 0xcb, 0x3, 0x2, 0x2, 0x2,
0x1f, 0xce, 0x3, 0x2, 0x2, 0x2, 0x21, 0xd3, 0x3,
0x2, 0x2, 0x2, 0x23, 0xd5, 0x3, 0x2, 0x2, 0x2,
0x25, 0xd7, 0x3, 0x2, 0x2, 0x2, 0x27, 0xdf, 0x3,
0x2, 0x2, 0x2, 0x29, 0xe9, 0x3, 0x2, 0x2, 0x2,
0x2b, 0xf2, 0x3, 0x2, 0x2, 0x2, 0x2d, 0xf8, 0x3,
0x2, 0x2, 0x2, 0x2f, 0x100, 0x3, 0x2, 0x2, 0x2,
0x31, 0x108, 0x3, 0x2, 0x2, 0x2, 0x33, 0x10f, 0x3,
0x2, 0x2, 0x2, 0x35, 0x11a, 0x3, 0x2, 0x2, 0x2,
0x37, 0x123, 0x3, 0x2, 0x2, 0x2, 0x39, 0x126, 0x3,
0x2, 0x2, 0x2, 0x3b, 0x12a, 0x3, 0x2, 0x2, 0x2,
0x3d, 0x130, 0x3, 0x2, 0x2, 0x2, 0x3f, 0x137, 0x3,
0x2, 0x2, 0x2, 0x41, 0x141, 0x3, 0x2, 0x2, 0x2,
0x43, 0x14a, 0x3, 0x2, 0x2, 0x2, 0x45, 0x150, 0x3,
0x2, 0x2, 0x2, 0x47, 0x155, 0x3, 0x2, 0x2, 0x2,
0x49, 0x15f, 0x3, 0x2, 0x2, 0x2, 0x4b, 0x163, 0x3,
0x2, 0x2, 0x2, 0x4d, 0x169, 0x3, 0x2, 0x2, 0x2,
0x4f, 0x170, 0x3, 0x2, 0x2, 0x2, 0x51, 0x175, 0x3,
0x2, 0x2, 0x2, 0x53, 0x17a, 0x3, 0x2, 0x2, 0x2,
0x55, 0x17d, 0x3, 0x2, 0x2, 0x2, 0x57, 0x181, 0x3,
0x2, 0x2, 0x2, 0x59, 0x187, 0x3, 0x2, 0x2, 0x2,
0x5b, 0x18e, 0x3, 0x2, 0x2, 0x2, 0x5d, 0x195, 0x3,
0x2, 0x2, 0x2, 0x5f, 0x19b, 0x3, 0x2, 0x2, 0x2,
0x61, 0x1a7, 0x3, 0x2, 0x2, 0x2, 0x63, 0x1ad, 0x3,
0x2, 0x2, 0x2, 0x65, 0x1c9, 0x3, 0x2, 0x2, 0x2,
0x67, 0x1cb, 0x3, 0x2, 0x2, 0x2, 0x69, 0x1ce, 0x3,
0x2, 0x2, 0x2, 0x6b, 0x1d0, 0x3, 0x2, 0x2, 0x2,
0x6d, 0x1d2, 0x3, 0x2, 0x2, 0x2, 0x6f, 0x1d4, 0x3,
0x2, 0x2, 0x2, 0x71, 0x1d6, 0x3, 0x2, 0x2, 0x2,
0x73, 0x1d8, 0x3, 0x2, 0x2, 0x2, 0x75, 0x1da, 0x3,
0x2, 0x2, 0x2, 0x77, 0x1dc, 0x3, 0x2, 0x2, 0x2,
0x79, 0x1de, 0x3, 0x2, 0x2, 0x2, 0x7b, 0x1e2, 0x3,
0x2, 0x2, 0x2, 0x7d, 0x1e6, 0x3, 0x2, 0x2, 0x2,
0x7f, 0x1e9, 0x3, 0x2, 0x2, 0x2, 0x81, 0x1eb, 0x3,
0x2, 0x2, 0x2, 0x83, 0x1ee, 0x3, 0x2, 0x2, 0x2,
0x85, 0x1f0, 0x3, 0x2, 0x2, 0x2, 0x87, 0x1f3, 0x3,
0x2, 0x2, 0x2, 0x89, 0x1f6, 0x3, 0x2, 0x2, 0x2,
0x8b, 0x1f9, 0x3, 0x2, 0x2, 0x2, 0x8d, 0x1fd, 0x3,
0x2, 0x2, 0x2, 0x8f, 0x203, 0x3, 0x2, 0x2, 0x2,
0x91, 0x205, 0x3, 0x2, 0x2, 0x2, 0x93, 0x208, 0x3,
0x2, 0x2, 0x2, 0x95, 0x20b, 0x3, 0x2, 0x2, 0x2,
0x97, 0x21f, 0x3, 0x2, 0x2, 0x2, 0x99, 0x221, 0x3,
0x2, 0x2, 0x2, 0x9b, 0x224, 0x3, 0x2, 0x2, 0x2,
0x9d, 0x22c, 0x3, 0x2, 0x2, 0x2, 0x9f, 0x232, 0x3,
0x2, 0x2, 0x2, 0xa1, 0x242, 0x3, 0x2, 0x2, 0x2,
0xa3, 0x24d, 0x3, 0x2, 0x2, 0x2, 0xa5, 0x257, 0x3,
0x2, 0x2, 0x2, 0xa7, 0x259, 0x3, 0x2, 0x2, 0x2,
0xa9, 0x28e, 0x3, 0x2, 0x2, 0x2, 0xab, 0xac, 0x7,
0x2a, 0x2, 0x2, 0xac, 0x4, 0x3, 0x2, 0x2, 0x2,
0xad, 0xae, 0x7, 0x2b, 0x2, 0x2, 0xae, 0x6, 0x3,
0x2, 0x2, 0x2, 0xaf, 0xb0, 0x7, 0x3f, 0x2, 0x2,
0xb0, 0xb1, 0x7, 0x40, 0x2, 0x2, 0xb1, 0x8, 0x3,
0x2, 0x2, 0x2, 0xb2, 0xb3, 0x7, 0x2e, 0x2, 0x2,
0xb3, 0xa, 0x3, 0x2, 0x2, 0x2, 0xb4, 0xb5, 0x7,
0x3c, 0x2, 0x2, 0xb5, 0xc, 0x3, 0x2, 0x2, 0x2,
0xb6, 0xb7, 0x7, 0x76, 0x2, 0x2, 0xb7, 0xb8, 0x7,
0x7b, 0x2, 0x2, 0xb8, 0xb9, 0x7, 0x72, 0x2, 0x2,
0xb9, 0xba, 0x7, 0x67, 0x2, 0x2, 0xba, 0xe, 0x3,
0x2, 0x2, 0x2, 0xbb, 0xbc, 0x7, 0x41, 0x2, 0x2,
0xbc, 0x10, 0x3, 0x2, 0x2, 0x2, 0xbd, 0xbe, 0x7,
0x7e, 0x2, 0x2, 0xbe, 0xbf, 0x7, 0x7e, 0x2, 0x2,
0xbf, 0x12, 0x3, 0x2, 0x2, 0x2, 0xc0, 0xc1, 0x7,
0x28, 0x2, 0x2, 0xc1, 0xc2, 0x7, 0x28, 0x2, 0x2,
0xc2, 0x14, 0x3, 0x2, 0x2, 0x2, 0xc3, 0xc4, 0x7,
0x30, 0x2, 0x2, 0xc4, 0x16, 0x3, 0x2, 0x2, 0x2,
0xc5, 0xc6, 0x7, 0x5d, 0x2, 0x2, 0xc6, 0x18, 0x3,
0x2, 0x2, 0x2, 0xc7, 0xc8, 0x7, 0x5f, 0x2, 0x2,
0xc8, 0x1a, 0x3, 0x2, 0x2, 0x2, 0xc9, 0xca, 0x7,
0x3d, 0x2, 0x2, 0xca, 0x1c, 0x3, 0x2, 0x2, 0x2,
0xcb, 0xcc, 0x7, 0x71, 0x2, 0x2, 0xcc, 0xcd, 0x7,
0x68, 0x2, 0x2, 0xcd, 0x1e, 0x3, 0x2, 0x2, 0x2,
0xce, 0xcf, 0x7, 0x67, 0x2, 0x2, 0xcf, 0xd0, 0x7,
0x6e, 0x2, 0x2, 0xd0, 0xd1, 0x7, 0x75, 0x2, 0x2,
0xd1, 0xd2, 0x7, 0x67, 0x2, 0x2, 0xd2, 0x20, 0x3,
0x2, 0x2, 0x2, 0xd3, 0xd4, 0x7, 0x7d, 0x2, 0x2,
0xd4, 0x22, 0x3, 0x2, 0x2, 0x2, 0xd5, 0xd6, 0x7,
0x7f, 0x2, 0x2, 0xd6, 0x24, 0x3, 0x2, 0x2, 0x2,
0xd7, 0xd8, 0x7, 0x67, 0x2, 0x2, 0xd8, 0xd9, 0x7,
0x7a, 0x2, 0x2, 0xd9, 0xda, 0x7, 0x76, 0x2, 0x2,
0xda, 0xdb, 0x7, 0x67, 0x2, 0x2, 0xdb, 0xdc, 0x7,
0x70, 0x2, 0x2, 0xdc, 0xdd, 0x7, 0x66, 0x2, 0x2,
0xdd, 0xde, 0x7, 0x75, 0x2, 0x2, 0xde, 0x26, 0x3,
0x2, 0x2, 0x2, 0xdf, 0xe0, 0x7, 0x69, 0x2, 0x2,
0xe0, 0xe1, 0x7, 0x67, 0x2, 0x2, 0xe1, 0xe2, 0x7,
0x70, 0x2, 0x2, 0xe2, 0xe3, 0x7, 0x67, 0x2, 0x2,
0xe3, 0xe4, 0x7, 0x74, 0x2, 0x2, 0xe4, 0xe5, 0x7,
0x63, 0x2, 0x2, 0xe5, 0xe6, 0x7, 0x76, 0x2, 0x2,
0xe6, 0xe7, 0x7, 0x67, 0x2, 0x2, 0xe7, 0xe8, 0x7,
0x75, 0x2, 0x2, 0xe8, 0x28, 0x3, 0x2, 0x2, 0x2,
0xe9, 0xea, 0x7, 0x71, 0x2, 0x2, 0xea, 0xeb, 0x7,
0x72, 0x2, 0x2, 0xeb, 0xec, 0x7, 0x67, 0x2, 0x2,
0xec, 0xed, 0x7, 0x74, 0x2, 0x2, 0xed, 0xee, 0x7,
0x63, 0x2, 0x2, 0xee, 0xef, 0x7, 0x76, 0x2, 0x2,
0xef, 0xf0, 0x7, 0x71, 0x2, 0x2, 0xf0, 0xf1, 0x7,
0x74, 0x2, 0x2, 0xf1, 0x2a, 0x3, 0x2, 0x2, 0x2,
0xf2, 0xf3, 0x7, 0x6f, 0x2, 0x2, 0xf3, 0xf4, 0x7,
0x63, 0x2, 0x2, 0xf4, 0xf5, 0x7, 0x65, 0x2, 0x2,
0xf5, 0xf6, 0x7, 0x74, 0x2, 0x2, 0xf6, 0xf7, 0x7,
0x71, 0x2, 0x2, 0xf7, 0x2c, 0x3, 0x2, 0x2, 0x2,
0xf8, 0xf9, 0x7, 0x64, 0x2, 0x2, 0xf9, 0xfa, 0x7,
0x77, 0x2, 0x2, 0xfa, 0xfb, 0x7, 0x6b, 0x2, 0x2,
0xfb, 0xfc, 0x7, 0x6e, 0x2, 0x2, 0xfc, 0xfd, 0x7,
0x76, 0x2, 0x2, 0xfd, 0xfe, 0x7, 0x6b, 0x2, 0x2,
0xfe, 0xff, 0x7, 0x70, 0x2, 0x2, 0xff, 0x2e, 0x3,
0x2, 0x2, 0x2, 0x100, 0x101, 0x7, 0x74, 0x2, 0x2,
0x101, 0x102, 0x7, 0x77, 0x2, 0x2, 0x102, 0x103, 0x7,
0x70, 0x2, 0x2, 0x103, 0x104, 0x7, 0x76, 0x2, 0x2,
0x104, 0x105, 0x7, 0x6b, 0x2, 0x2, 0x105, 0x106, 0x7,
0x6f, 0x2, 0x2, 0x106, 0x107, 0x7, 0x67, 0x2, 0x2,
0x107, 0x30, 0x3, 0x2, 0x2, 0x2, 0x108, 0x109, 0x7,
0x6f, 0x2, 0x2, 0x109, 0x10a, 0x7, 0x71, 0x2, 0x2,
0x10a, 0x10b, 0x7, 0x66, 0x2, 0x2, 0x10b, 0x10c, 0x7,
0x77, 0x2, 0x2, 0x10c, 0x10d, 0x7, 0x6e, 0x2, 0x2,
0x10d, 0x10e, 0x7, 0x67, 0x2, 0x2, 0x10e, 0x32, 0x3,
0x2, 0x2, 0x2, 0x10f, 0x110, 0x7, 0x6c, 0x2, 0x2,
0x110, 0x111, 0x7, 0x63, 0x2, 0x2, 0x111, 0x112, 0x7,
0x78, 0x2, 0x2, 0x112, 0x113, 0x7, 0x63, 0x2, 0x2,
0x113, 0x114, 0x7, 0x75, 0x2, 0x2, 0x114, 0x115, 0x7,
0x65, 0x2, 0x2, 0x115, 0x116, 0x7, 0x74, 0x2, 0x2,
0x116, 0x117, 0x7, 0x6b, 0x2, 0x2, 0x117, 0x118, 0x7,
0x72, 0x2, 0x2, 0x118, 0x119, 0x7, 0x76, 0x2, 0x2,
0x119, 0x34, 0x3, 0x2, 0x2, 0x2, 0x11a, 0x11b, 0x7,
0x66, 0x2, 0x2, 0x11b, 0x11c, 0x7, 0x67, 0x2, 0x2,
0x11c, 0x11d, 0x7, 0x68, 0x2, 0x2, 0x11d, 0x11e, 0x7,
0x67, 0x2, 0x2, 0x11e, 0x11f, 0x7, 0x74, 0x2, 0x2,
0x11f, 0x120, 0x7, 0x74, 0x2, 0x2, 0x120, 0x121, 0x7,
0x67, 0x2, 0x2, 0x121, 0x122, 0x7, 0x66, 0x2, 0x2,
0x122, 0x36, 0x3, 0x2, 0x2, 0x2, 0x123, 0x124, 0x7,
0x6b, 0x2, 0x2, 0x124, 0x125, 0x7, 0x68, 0x2, 0x2,
0x125, 0x38, 0x3, 0x2, 0x2, 0x2, 0x126, 0x127, 0x7,
0x68, 0x2, 0x2, 0x127, 0x128, 0x7, 0x71, 0x2, 0x2,
0x128, 0x129, 0x7, 0x74, 0x2, 0x2, 0x129, 0x3a, 0x3,
0x2, 0x2, 0x2, 0x12a, 0x12b, 0x7, 0x79, 0x2, 0x2,
0x12b, 0x12c, 0x7, 0x6a, 0x2, 0x2, 0x12c, 0x12d, 0x7,
0x6b, 0x2, 0x2, 0x12d, 0x12e, 0x7, 0x6e, 0x2, 0x2,
0x12e, 0x12f, 0x7, 0x67, 0x2, 0x2, 0x12f, 0x3c, 0x3,
0x2, 0x2, 0x2, 0x130, 0x131, 0x7, 0x74, 0x2, 0x2,
0x131, 0x132, 0x7, 0x67, 0x2, 0x2, 0x132, 0x133, 0x7,
0x76, 0x2, 0x2, 0x133, 0x134, 0x7, 0x77, 0x2, 0x2,
0x134, 0x135, 0x7, 0x74, 0x2, 0x2, 0x135, 0x136, 0x7,
0x70, 0x2, 0x2, 0x136, 0x3e, 0x3, 0x2, 0x2, 0x2,
0x137, 0x138, 0x7, 0x65, 0x2, 0x2, 0x138, 0x139, 0x7,
0x71, 0x2, 0x2, 0x139, 0x13a, 0x7, 0x70, 0x2, 0x2,
0x13a, 0x13b, 0x7, 0x75, 0x2, 0x2, 0x13b, 0x13c, 0x7,
0x76, 0x2, 0x2, 0x13c, 0x13d, 0x7, 0x67, 0x2, 0x2,
0x13d, 0x13e, 0x7, 0x7a, 0x2, 0x2, 0x13e, 0x13f, 0x7,
0x72, 0x2, 0x2, 0x13f, 0x140, 0x7, 0x74, 0x2, 0x2,
0x140, 0x40, 0x3, 0x2, 0x2, 0x2, 0x141, 0x142, 0x7,
0x65, 0x2, 0x2, 0x142, 0x143, 0x7, 0x71, 0x2, 0x2,
0x143, 0x144, 0x7, 0x70, 0x2, 0x2, 0x144, 0x145, 0x7,
0x76, 0x2, 0x2, 0x145, 0x146, 0x7, 0x6b, 0x2, 0x2,
0x146, 0x147, 0x7, 0x70, 0x2, 0x2, 0x147, 0x148, 0x7,
0x77, 0x2, 0x2, 0x148, 0x149, 0x7, 0x67, 0x2, 0x2,
0x149, 0x42, 0x3, 0x2, 0x2, 0x2, 0x14a, 0x14b, 0x7,
0x64, 0x2, 0x2, 0x14b, 0x14c, 0x7, 0x74, 0x2, 0x2,
0x14c, 0x14d, 0x7, 0x67, 0x2, 0x2, 0x14d, 0x14e, 0x7,
0x63, 0x2, 0x2, 0x14e, 0x14f, 0x7, 0x6d, 0x2, 0x2,
0x14f, 0x44, 0x3, 0x2, 0x2, 0x2, 0x150, 0x151, 0x7,
0x69, 0x2, 0x2, 0x151, 0x152, 0x7, 0x71, 0x2, 0x2,
0x152, 0x153, 0x7, 0x76, 0x2, 0x2, 0x153, 0x154, 0x7,
0x71, 0x2, 0x2, 0x154, 0x46, 0x3, 0x2, 0x2, 0x2,
0x155, 0x156, 0x7, 0x71, 0x2, 0x2, 0x156, 0x157, 0x7,
0x76, 0x2, 0x2, 0x157, 0x158, 0x7, 0x6a, 0x2, 0x2,
0x158, 0x159, 0x7, 0x67, 0x2, 0x2, 0x159, 0x15a, 0x7,
0x74, 0x2, 0x2, 0x15a, 0x15b, 0x7, 0x79, 0x2, 0x2,
0x15b, 0x15c, 0x7, 0x6b, 0x2, 0x2, 0x15c, 0x15d, 0x7,
0x75, 0x2, 0x2, 0x15d, 0x15e, 0x7, 0x67, 0x2, 0x2,
0x15e, 0x48, 0x3, 0x2, 0x2, 0x2, 0x15f, 0x160, 0x7,
0x76, 0x2, 0x2, 0x160, 0x161, 0x7, 0x74, 0x2, 0x2,
0x161, 0x162, 0x7, 0x7b, 0x2, 0x2, 0x162, 0x4a, 0x3,
0x2, 0x2, 0x2, 0x163, 0x164, 0x7, 0x6e, 0x2, 0x2,
0x164, 0x165, 0x7, 0x63, 0x2, 0x2, 0x165, 0x166, 0x7,
0x64, 0x2, 0x2, 0x166, 0x167, 0x7, 0x67, 0x2, 0x2,
0x167, 0x168, 0x7, 0x6e, 0x2, 0x2, 0x168, 0x4c, 0x3,
0x2, 0x2, 0x2, 0x169, 0x16a, 0x7, 0x6e, 0x2, 0x2,
0x16a, 0x16b, 0x7, 0x63, 0x2, 0x2, 0x16b, 0x16c, 0x7,
0x64, 0x2, 0x2, 0x16c, 0x16d, 0x7, 0x67, 0x2, 0x2,
0x16d, 0x16e, 0x7, 0x6e, 0x2, 0x2, 0x16e, 0x16f, 0x7,
0x75, 0x2, 0x2, 0x16f, 0x4e, 0x3, 0x2, 0x2, 0x2,
0x170, 0x171, 0x7, 0x76, 0x2, 0x2, 0x171, 0x172, 0x7,
0x63, 0x2, 0x2, 0x172, 0x173, 0x7, 0x6b, 0x2, 0x2,
0x173, 0x174, 0x7, 0x6e, 0x2, 0x2, 0x174, 0x50, 0x3,
0x2, 0x2, 0x2, 0x175, 0x176, 0x7, 0x6b, 0x2, 0x2,
0x176, 0x177, 0x7, 0x75, 0x2, 0x2, 0x177, 0x178, 0x7,
0x70, 0x2, 0x2, 0x178, 0x179, 0x7, 0x76, 0x2, 0x2,
0x179, 0x52, 0x3, 0x2, 0x2, 0x2, 0x17a, 0x17b, 0x7,
0x6b, 0x2, 0x2, 0x17b, 0x17c, 0x7, 0x75, 0x2, 0x2,
0x17c, 0x54, 0x3, 0x2, 0x2, 0x2, 0x17d, 0x17e, 0x7,
0x6e, 0x2, 0x2, 0x17e, 0x17f, 0x7, 0x67, 0x2, 0x2,
0x17f, 0x180, 0x7, 0x76, 0x2, 0x2, 0x180, 0x56, 0x3,
0x2, 0x2, 0x2, 0x181, 0x182, 0x7, 0x65, 0x2, 0x2,
0x182, 0x183, 0x7, 0x71, 0x2, 0x2, 0x183, 0x184, 0x7,
0x70, 0x2, 0x2, 0x184, 0x185, 0x7, 0x75, 0x2, 0x2,
0x185, 0x186, 0x7, 0x76, 0x2, 0x2, 0x186, 0x58, 0x3,
0x2, 0x2, 0x2, 0x187, 0x188, 0x7, 0x67, 0x2, 0x2,
0x188, 0x189, 0x7, 0x7a, 0x2, 0x2, 0x189, 0x18a, 0x7,
0x76, 0x2, 0x2, 0x18a, 0x18b, 0x7, 0x67, 0x2, 0x2,
0x18b, 0x18c, 0x7, 0x74, 0x2, 0x2, 0x18c, 0x18d, 0x7,
0x70, 0x2, 0x2, 0x18d, 0x5a, 0x3, 0x2, 0x2, 0x2,
0x18e, 0x18f, 0x7, 0x63, 0x2, 0x2, 0x18f, 0x190, 0x7,
0x75, 0x2, 0x2, 0x190, 0x191, 0x7, 0x75, 0x2, 0x2,
0x191, 0x192, 0x7, 0x67, 0x2, 0x2, 0x192, 0x193, 0x7,
0x74, 0x2, 0x2, 0x193, 0x194, 0x7, 0x76, 0x2, 0x2,
0x194, 0x5c, 0x3, 0x2, 0x2, 0x2, 0x195, 0x196, 0x7,
0x65, 0x2, 0x2, 0x196, 0x197, 0x7, 0x6a, 0x2, 0x2,
0x197, 0x198, 0x7, 0x67, 0x2, 0x2, 0x198, 0x199, 0x7,
0x65, 0x2, 0x2, 0x199, 0x19a, 0x7, 0x6d, 0x2, 0x2,
0x19a, 0x5e, 0x3, 0x2, 0x2, 0x2, 0x19b, 0x19c, 0x7,
0x77, 0x2, 0x2, 0x19c, 0x19d, 0x7, 0x70, 0x2, 0x2,
0x19d, 0x19e, 0x7, 0x74, 0x2, 0x2, 0x19e, 0x19f, 0x7,
0x67, 0x2, 0x2, 0x19f, 0x1a0, 0x7, 0x63, 0x2, 0x2,
0x1a0, 0x1a1, 0x7, 0x65, 0x2, 0x2, 0x1a1, 0x1a2, 0x7,
0x6a, 0x2, 0x2, 0x1a2, 0x1a3, 0x7, 0x63, 0x2, 0x2,
0x1a3, 0x1a4, 0x7, 0x64, 0x2, 0x2, 0x1a4, 0x1a5, 0x7,
0x6e, 0x2, 0x2, 0x1a5, 0x1a6, 0x7, 0x67, 0x2, 0x2,
0x1a6, 0x60, 0x3, 0x2, 0x2, 0x2, 0x1a7, 0x1a8, 0x7,
0x66, 0x2, 0x2, 0x1a8, 0x1a9, 0x7, 0x67, 0x2, 0x2,
0x1a9, 0x1aa, 0x7, 0x64, 0x2, 0x2, 0x1aa, 0x1ab, 0x7,
0x77, 0x2, 0x2, 0x1ab, 0x1ac, 0x7, 0x69, 0x2, 0x2,
0x1ac, 0x62, 0x3, 0x2, 0x2, 0x2, 0x1ad, 0x1ae, 0x7,
0x3f, 0x2, 0x2, 0x1ae, 0x64, 0x3, 0x2, 0x2, 0x2,
0x1af, 0x1b0, 0x7, 0x2c, 0x2, 0x2, 0x1b0, 0x1ca, 0x7,
0x3f, 0x2, 0x2, 0x1b1, 0x1b2, 0x7, 0x31, 0x2, 0x2,
0x1b2, 0x1ca, 0x7, 0x3f, 0x2, 0x2, 0x1b3, 0x1b4, 0x7,
0x27, 0x2, 0x2, 0x1b4, 0x1ca, 0x7, 0x3f, 0x2, 0x2,
0x1b5, 0x1b6, 0x7, 0x2d, 0x2, 0x2, 0x1b6, 0x1ca, 0x7,
0x3f, 0x2, 0x2, 0x1b7, 0x1b8, 0x7, 0x2f, 0x2, 0x2,
0x1b8, 0x1ca, 0x7, 0x3f, 0x2, 0x2, 0x1b9, 0x1ba, 0x7,
0x3e, 0x2, 0x2, 0x1ba, 0x1bb, 0x7, 0x3e, 0x2, 0x2,
0x1bb, 0x1ca, 0x7, 0x3f, 0x2, 0x2, 0x1bc, 0x1bd, 0x7,
0x40, 0x2, 0x2, 0x1bd, 0x1be, 0x7, 0x40, 0x2, 0x2,
0x1be, 0x1ca, 0x7, 0x3f, 0x2, 0x2, 0x1bf, 0x1c0, 0x7,
0x40, 0x2, 0x2, 0x1c0, 0x1c1, 0x7, 0x40, 0x2, 0x2,
0x1c1, 0x1c2, 0x7, 0x40, 0x2, 0x2, 0x1c2, 0x1ca, 0x7,
0x3f, 0x2, 0x2, 0x1c3, 0x1c4, 0x7, 0x28, 0x2, 0x2,
0x1c4, 0x1ca, 0x7, 0x3f, 0x2, 0x2, 0x1c5, 0x1c6, 0x7,
0x60, 0x2, 0x2, 0x1c6, 0x1ca, 0x7, 0x3f, 0x2, 0x2,
0x1c7, 0x1c8, 0x7, 0x7e, 0x2, 0x2, 0x1c8, 0x1ca, 0x7,
0x3f, 0x2, 0x2, 0x1c9, 0x1af, 0x3, 0x2, 0x2, 0x2,
0x1c9, 0x1b1, 0x3, 0x2, 0x2, 0x2, 0x1c9, 0x1b3, 0x3,
0x2, 0x2, 0x2, 0x1c9, 0x1b5, 0x3, 0x2, 0x2, 0x2,
0x1c9, 0x1b7, 0x3, 0x2, 0x2, 0x2, 0x1c9, 0x1b9, 0x3,
0x2, 0x2, 0x2, 0x1c9, 0x1bc, 0x3, 0x2, 0x2, 0x2,
0x1c9, 0x1bf, 0x3, 0x2, 0x2, 0x2, 0x1c9, 0x1c3, 0x3,
0x2, 0x2, 0x2, 0x1c9, 0x1c5, 0x3, 0x2, 0x2, 0x2,
0x1c9, 0x1c7, 0x3, 0x2, 0x2, 0x2, 0x1ca, 0x66, 0x3,
0x2, 0x2, 0x2, 0x1cb, 0x1cc, 0x7, 0x3f, 0x2, 0x2,
0x1cc, 0x1cd, 0x7, 0x3f, 0x2, 0x2, 0x1cd, 0x68, 0x3,
0x2, 0x2, 0x2, 0x1ce, 0x1cf, 0x7, 0x2d, 0x2, 0x2,
0x1cf, 0x6a, 0x3, 0x2, 0x2, 0x2, 0x1d0, 0x1d1, 0x7,
0x2f, 0x2, 0x2, 0x1d1, 0x6c, 0x3, 0x2, 0x2, 0x2,
0x1d2, 0x1d3, 0x7, 0x2c, 0x2, 0x2, 0x1d3, 0x6e, 0x3,
0x2, 0x2, 0x2, 0x1d4, 0x1d5, 0x7, 0x31, 0x2, 0x2,
0x1d5, 0x70, 0x3, 0x2, 0x2, 0x2, 0x1d6, 0x1d7, 0x7,
0x27, 0x2, 0x2, 0x1d7, 0x72, 0x3, 0x2, 0x2, 0x2,
0x1d8, 0x1d9, 0x7, 0x7e, 0x2, 0x2, 0x1d9, 0x74, 0x3,
0x2, 0x2, 0x2, 0x1da, 0x1db, 0x7, 0x28, 0x2, 0x2,
0x1db, 0x76, 0x3, 0x2, 0x2, 0x2, 0x1dc, 0x1dd, 0x7,
0x80, 0x2, 0x2, 0x1dd, 0x78, 0x3, 0x2, 0x2, 0x2,
0x1de, 0x1df, 0x7, 0x6f, 0x2, 0x2, 0x1df, 0x1e0, 0x7,
0x63, 0x2, 0x2, 0x1e0, 0x1e1, 0x7, 0x7a, 0x2, 0x2,
0x1e1, 0x7a, 0x3, 0x2, 0x2, 0x2, 0x1e2, 0x1e3, 0x7,
0x6f, 0x2, 0x2, 0x1e3, 0x1e4, 0x7, 0x6b, 0x2, 0x2,
0x1e4, 0x1e5, 0x7, 0x70, 0x2, 0x2, 0x1e5, 0x7c, 0x3,
0x2, 0x2, 0x2, 0x1e6, 0x1e7, 0x7, 0x23, 0x2, 0x2,
0x1e7, 0x1e8, 0x7, 0x3f, 0x2, 0x2, 0x1e8, 0x7e, 0x3,
0x2, 0x2, 0x2, 0x1e9, 0x1ea, 0x7, 0x3e, 0x2, 0x2,
0x1ea, 0x80, 0x3, 0x2, 0x2, 0x2, 0x1eb, 0x1ec, 0x7,
0x3e, 0x2, 0x2, 0x1ec, 0x1ed, 0x7, 0x3f, 0x2, 0x2,
0x1ed, 0x82, 0x3, 0x2, 0x2, 0x2, 0x1ee, 0x1ef, 0x7,
0x40, 0x2, 0x2, 0x1ef, 0x84, 0x3, 0x2, 0x2, 0x2,
0x1f0, 0x1f1, 0x7, 0x40, 0x2, 0x2, 0x1f1, 0x1f2, 0x7,
0x3f, 0x2, 0x2, 0x1f2, 0x86, 0x3, 0x2, 0x2, 0x2,
0x1f3, 0x1f4, 0x7, 0x3e, 0x2, 0x2, 0x1f4, 0x1f5, 0x7,
0x3e, 0x2, 0x2, 0x1f5, 0x88, 0x3, 0x2, 0x2, 0x2,
0x1f6, 0x1f7, 0x7, 0x40, 0x2, 0x2, 0x1f7, 0x1f8, 0x7,
0x40, 0x2, 0x2, 0x1f8, 0x8a, 0x3, 0x2, 0x2, 0x2,
0x1f9, 0x1fa, 0x7, 0x40, 0x2, 0x2, 0x1fa, 0x1fb, 0x7,
0x40, 0x2, 0x2, 0x1fb, 0x1fc, 0x7, 0x40, 0x2, 0x2,
0x1fc, 0x8c, 0x3, 0x2, 0x2, 0x2, 0x1fd, 0x1fe, 0x7,
0x30, 0x2, 0x2, 0x1fe, 0x1ff, 0x7, 0x30, 0x2, 0x2,
0x1ff, 0x200, 0x7, 0x30, 0x2, 0x2, 0x200, 0x8e, 0x3,
0x2, 0x2, 0x2, 0x201, 0x204, 0x5, 0x67, 0x34, 0x2,
0x202, 0x204, 0x5, 0x7d, 0x3f, 0x2, 0x203, 0x201, 0x3,
0x2, 0x2, 0x2, 0x203, 0x202, 0x3, 0x2, 0x2, 0x2,
0x204, 0x90, 0x3, 0x2, 0x2, 0x2, 0x205, 0x206, 0x7,
0x2d, 0x2, 0x2, 0x206, 0x207, 0x7, 0x2d, 0x2, 0x2,
0x207, 0x92, 0x3, 0x2, 0x2, 0x2, 0x208, 0x209, 0x7,
0x2f, 0x2, 0x2, 0x209, 0x20a, 0x7, 0x2f, 0x2, 0x2,
0x20a, 0x94, 0x3, 0x2, 0x2, 0x2, 0x20b, 0x20c, 0x7,
0x23, 0x2, 0x2, 0x20c, 0x96, 0x3, 0x2, 0x2, 0x2,
0x20d, 0x212, 0x7, 0x24, 0x2, 0x2, 0x20e, 0x211, 0x5,
0x99, 0x4d, 0x2, 0x20f, 0x211, 0xa, 0x2, 0x2, 0x2,
0x210, 0x20e, 0x3, 0x2, 0x2, 0x2, 0x210, 0x20f, 0x3,
0x2, 0x2, 0x2, 0x211, 0x214, 0x3, 0x2, 0x2, 0x2,
0x212, 0x210, 0x3, 0x2, 0x2, 0x2, 0x212, 0x213, 0x3,
0x2, 0x2, 0x2, 0x213, 0x215, 0x3, 0x2, 0x2, 0x2,
0x214, 0x212, 0x3, 0x2, 0x2, 0x2, 0x215, 0x220, 0x7,
0x24, 0x2, 0x2, 0x216, 0x21b, 0x7, 0x29, 0x2, 0x2,
0x217, 0x21a, 0x5, 0x99, 0x4d, 0x2, 0x218, 0x21a, 0xa,
0x3, 0x2, 0x2, 0x219, 0x217, 0x3, 0x2, 0x2, 0x2,
0x219, 0x218, 0x3, 0x2, 0x2, 0x2, 0x21a, 0x21d, 0x3,
0x2, 0x2, 0x2, 0x21b, 0x219, 0x3, 0x2, 0x2, 0x2,
0x21b, 0x21c, 0x3, 0x2, 0x2, 0x2, 0x21c, 0x21e, 0x3,
0x2, 0x2, 0x2, 0x21d, 0x21b, 0x3, 0x2, 0x2, 0x2,
0x21e, 0x220, 0x7, 0x29, 0x2, 0x2, 0x21f, 0x20d, 0x3,
0x2, 0x2, 0x2, 0x21f, 0x216, 0x3, 0x2, 0x2, 0x2,
0x220, 0x98, 0x3, 0x2, 0x2, 0x2, 0x221, 0x222, 0x7,
0x5e, 0x2, 0x2, 0x222, 0x223, 0x9, 0x4, 0x2, 0x2,
0x223, 0x9a, 0x3, 0x2, 0x2, 0x2, 0x224, 0x228, 0x9,
0x5, 0x2, 0x2, 0x225, 0x227, 0x9, 0x6, 0x2, 0x2,
0x226, 0x225, 0x3, 0x2, 0x2, 0x2, 0x227, 0x22a, 0x3,
0x2, 0x2, 0x2, 0x228, 0x226, 0x3, 0x2, 0x2, 0x2,
0x228, 0x229, 0x3, 0x2, 0x2, 0x2, 0x229, 0x9c, 0x3,
0x2, 0x2, 0x2, 0x22a, 0x228, 0x3, 0x2, 0x2, 0x2,
0x22b, 0x22d, 0x9, 0x7, 0x2, 0x2, 0x22c, 0x22b, 0x3,
0x2, 0x2, 0x2, 0x22d, 0x22e, 0x3, 0x2, 0x2, 0x2,
0x22e, 0x22c, 0x3, 0x2, 0x2, 0x2, 0x22e, 0x22f, 0x3,
0x2, 0x2, 0x2, 0x22f, 0x230, 0x3, 0x2, 0x2, 0x2,
0x230, 0x231, 0x8, 0x4f, 0x2, 0x2, 0x231, 0x9e, 0x3,
0x2, 0x2, 0x2, 0x232, 0x233, 0x7, 0x31, 0x2, 0x2,
0x233, 0x234, 0x7, 0x2c, 0x2, 0x2, 0x234, 0x238, 0x3,
0x2, 0x2, 0x2, 0x235, 0x237, 0xb, 0x2, 0x2, 0x2,
0x236, 0x235, 0x3, 0x2, 0x2, 0x2, 0x237, 0x23a, 0x3,
0x2, 0x2, 0x2, 0x238, 0x239, 0x3, 0x2, 0x2, 0x2,
0x238, 0x236, 0x3, 0x2, 0x2, 0x2, 0x239, 0x23e, 0x3,
0x2, 0x2, 0x2, 0x23a, 0x238, 0x3, 0x2, 0x2, 0x2,
0x23b, 0x23c, 0x7, 0x2c, 0x2, 0x2, 0x23c, 0x23f, 0x7,
0x31, 0x2, 0x2, 0x23d, 0x23f, 0x7, 0x2, 0x2, 0x3,
0x23e, 0x23b, 0x3, 0x2, 0x2, 0x2, 0x23e, 0x23d, 0x3,
0x2, 0x2, 0x2, 0x23f, 0x240, 0x3, 0x2, 0x2, 0x2,
0x240, 0x241, 0x8, 0x50, 0x2, 0x2, 0x241, 0xa0, 0x3,
0x2, 0x2, 0x2, 0x242, 0x243, 0x7, 0x31, 0x2, 0x2,
0x243, 0x244, 0x7, 0x31, 0x2, 0x2, 0x244, 0x248, 0x3,
0x2, 0x2, 0x2, 0x245, 0x247, 0xa, 0x8, 0x2, 0x2,
0x246, 0x245, 0x3, 0x2, 0x2, 0x2, 0x247, 0x24a, 0x3,
0x2, 0x2, 0x2, 0x248, 0x246, 0x3, 0x2, 0x2, 0x2,
0x248, 0x249, 0x3, 0x2, 0x2, 0x2, 0x249, 0x24b, 0x3,
0x2, 0x2, 0x2, 0x24a, 0x248, 0x3, 0x2, 0x2, 0x2,
0x24b, 0x24c, 0x8, 0x51, 0x2, 0x2, 0x24c, 0xa2, 0x3,
0x2, 0x2, 0x2, 0x24d, 0x24e, 0x9, 0x9, 0x2, 0x2,
0x24e, 0xa4, 0x3, 0x2, 0x2, 0x2, 0x24f, 0x258, 0x7,
0x32, 0x2, 0x2, 0x250, 0x254, 0x9, 0xa, 0x2, 0x2,
0x251, 0x253, 0x5, 0xa3, 0x52, 0x2, 0x252, 0x251, 0x3,
0x2, 0x2, 0x2, 0x253, 0x256, 0x3, 0x2, 0x2, 0x2,
0x254, 0x252, 0x3, 0x2, 0x2, 0x2, 0x254, 0x255, 0x3,
0x2, 0x2, 0x2, 0x255, 0x258, 0x3, 0x2, 0x2, 0x2,
0x256, 0x254, 0x3, 0x2, 0x2, 0x2, 0x257, 0x24f, 0x3,
0x2, 0x2, 0x2, 0x257, 0x250, 0x3, 0x2, 0x2, 0x2,
0x258, 0xa6, 0x3, 0x2, 0x2, 0x2, 0x259, 0x25b, 0x9,
0xb, 0x2, 0x2, 0x25a, 0x25c, 0x9, 0xc, 0x2, 0x2,
0x25b, 0x25a, 0x3, 0x2, 0x2, 0x2, 0x25b, 0x25c, 0x3,
0x2, 0x2, 0x2, 0x25c, 0x25e, 0x3, 0x2, 0x2, 0x2,
0x25d, 0x25f, 0x5, 0xa3, 0x52, 0x2, 0x25e, 0x25d, 0x3,
0x2, 0x2, 0x2, 0x25f, 0x260, 0x3, 0x2, 0x2, 0x2,
0x260, 0x25e, 0x3, 0x2, 0x2, 0x2, 0x260, 0x261, 0x3,
0x2, 0x2, 0x2, 0x261, 0xa8, 0x3, 0x2, 0x2, 0x2,
0x262, 0x264, 0x5, 0x6b, 0x36, 0x2, 0x263, 0x262, 0x3,
0x2, 0x2, 0x2, 0x263, 0x264, 0x3, 0x2, 0x2, 0x2,
0x264, 0x265, 0x3, 0x2, 0x2, 0x2, 0x265, 0x266, 0x5,
0xa5, 0x53, 0x2, 0x266, 0x26a, 0x7, 0x30, 0x2, 0x2,
0x267, 0x269, 0x5, 0xa3, 0x52, 0x2, 0x268, 0x267, 0x3,
0x2, 0x2, 0x2, 0x269, 0x26c, 0x3, 0x2, 0x2, 0x2,
0x26a, 0x268, 0x3, 0x2, 0x2, 0x2, 0x26a, 0x26b, 0x3,
0x2, 0x2, 0x2, 0x26b, 0x26e, 0x3, 0x2, 0x2, 0x2,
0x26c, 0x26a, 0x3, 0x2, 0x2, 0x2, 0x26d, 0x26f, 0x5,
0xa7, 0x54, 0x2, 0x26e, 0x26d, 0x3, 0x2, 0x2, 0x2,
0x26e, 0x26f, 0x3, 0x2, 0x2, 0x2, 0x26f, 0x28f, 0x3,
0x2, 0x2, 0x2, 0x270, 0x272, 0x5, 0x6b, 0x36, 0x2,
0x271, 0x270, 0x3, 0x2, 0x2, 0x2, 0x271, 0x272, 0x3,
0x2, 0x2, 0x2, 0x272, 0x273, 0x3, 0x2, 0x2, 0x2,
0x273, 0x275, 0x7, 0x30, 0x2, 0x2, 0x274, 0x276, 0x5,
0xa3, 0x52, 0x2, 0x275, 0x274, 0x3, 0x2, 0x2, 0x2,
0x276, 0x277, 0x3, 0x2, 0x2, 0x2, 0x277, 0x275, 0x3,
0x2, 0x2, 0x2, 0x277, 0x278, 0x3, 0x2, 0x2, 0x2,
0x278, 0x27a, 0x3, 0x2, 0x2, 0x2, 0x279, 0x27b, 0x5,
0xa7, 0x54, 0x2, 0x27a, 0x279, 0x3, 0x2, 0x2, 0x2,
0x27a, 0x27b, 0x3, 0x2, 0x2, 0x2, 0x27b, 0x28f, 0x3,
0x2, 0x2, 0x2, 0x27c, 0x27e, 0x5, 0x6b, 0x36, 0x2,
0x27d, 0x27c, 0x3, 0x2, 0x2, 0x2, 0x27d, 0x27e, 0x3,
0x2, 0x2, 0x2, 0x27e, 0x27f, 0x3, 0x2, 0x2, 0x2,
0x27f, 0x281, 0x5, 0xa5, 0x53, 0x2, 0x280, 0x282, 0x5,
0xa7, 0x54, 0x2, 0x281, 0x280, 0x3, 0x2, 0x2, 0x2,
0x281, 0x282, 0x3, 0x2, 0x2, 0x2, 0x282, 0x28f, 0x3,
0x2, 0x2, 0x2, 0x283, 0x285, 0x5, 0x6b, 0x36, 0x2,
0x284, 0x283, 0x3, 0x2, 0x2, 0x2, 0x284, 0x285, 0x3,
0x2, 0x2, 0x2, 0x285, 0x286, 0x3, 0x2, 0x2, 0x2,
0x286, 0x287, 0x7, 0x32, 0x2, 0x2, 0x287, 0x288, 0x7,
0x7a, 0x2, 0x2, 0x288, 0x28a, 0x3, 0x2, 0x2, 0x2,
0x289, 0x28b, 0x9, 0xd, 0x2, 0x2, 0x28a, 0x289, 0x3,
0x2, 0x2, 0x2, 0x28b, 0x28c, 0x3, 0x2, 0x2, 0x2,
0x28c, 0x28a, 0x3, 0x2, 0x2, 0x2, 0x28c, 0x28d, 0x3,
0x2, 0x2, 0x2, 0x28d, 0x28f, 0x3, 0x2, 0x2, 0x2,
0x28e, 0x263, 0x3, 0x2, 0x2, 0x2, 0x28e, 0x271, 0x3,
0x2, 0x2, 0x2, 0x28e, 0x27d, 0x3, 0x2, 0x2, 0x2,
0x28e, 0x284, 0x3, 0x2, 0x2, 0x2, 0x28f, 0xaa, 0x3,
0x2, 0x2, 0x2, 0x1e, 0x2, 0x1c9, 0x203, 0x210, 0x212,
0x219, 0x21b, 0x21f, 0x228, 0x22e, 0x238, 0x23e, 0x248, 0x254,
0x257, 0x25b, 0x260, 0x263, 0x26a, 0x26e, 0x271, 0x277, 0x27a,
0x27d, 0x281, 0x284, 0x28c, 0x28e, 0x3, 0x2, 0x3, 0x2,
0x4a, 0x93, 0x4b, 0x95, 0x4c, 0x97, 0x4d, 0x99, 0x4e,
0x9b, 0x2, 0x9d, 0x4f, 0x9f, 0x50, 0xa1, 0x51, 0xa3,
0x52, 0xa5, 0x2, 0xa7, 0x2, 0xa9, 0x2, 0xab, 0x53,
0x3, 0x2, 0xe, 0x6, 0x2, 0xc, 0xc, 0xf, 0xf,
0x24, 0x24, 0x5e, 0x5e, 0x6, 0x2, 0xc, 0xc, 0xf,
0xf, 0x29, 0x29, 0x5e, 0x5e, 0x7, 0x2, 0x24, 0x24,
0x29, 0x29, 0x5e, 0x5e, 0x70, 0x70, 0x74, 0x74, 0x4,
0x2, 0x43, 0x5c, 0x63, 0x7c, 0x6, 0x2, 0x32, 0x3b,
0x43, 0x5c, 0x61, 0x61, 0x63, 0x7c, 0x5, 0x2, 0xb,
0xc, 0xe, 0xf, 0x22, 0x22, 0x4, 0x2, 0xc, 0xc,
0xf, 0xf, 0x3, 0x2, 0x32, 0x3b, 0x3, 0x2, 0x33,
0x3b, 0x4, 0x2, 0x47, 0x47, 0x67, 0x67, 0x4, 0x2,
0x2d, 0x2d, 0x2f, 0x2f, 0x5, 0x2, 0x32, 0x3b, 0x43,
0x48, 0x63, 0x68, 0x2, 0x2ba, 0x2, 0x3, 0x3, 0x2,
0x2, 0x2, 0x2, 0x5, 0x3, 0x2, 0x2, 0x2, 0x2,
0x7, 0x3, 0x2, 0x2, 0x2, 0x2, 0x9, 0x3, 0x2,
0x2, 0x2, 0x2, 0xb, 0x3, 0x2, 0x2, 0x2, 0x2,
0xd, 0x3, 0x2, 0x2, 0x2, 0x2, 0xf, 0x3, 0x2,
0x2, 0x2, 0x2, 0x11, 0x3, 0x2, 0x2, 0x2, 0x2,
0x13, 0x3, 0x2, 0x2, 0x2, 0x2, 0x15, 0x3, 0x2,
0x2, 0x2, 0x2, 0x17, 0x3, 0x2, 0x2, 0x2, 0x2,
0x19, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1b, 0x3, 0x2,
0x2, 0x2, 0x2, 0x1d, 0x3, 0x2, 0x2, 0x2, 0x2,
0x1f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x21, 0x3, 0x2,
0x2, 0x2, 0x2, 0x23, 0x3, 0x2, 0x2, 0x2, 0x2,
0x25, 0x3, 0x2, 0x2, 0x2, 0x2, 0x27, 0x3, 0x2,
0x2, 0x2, 0x2, 0x29, 0x3, 0x2, 0x2, 0x2, 0x2,
0x2b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2d, 0x3, 0x2,
0x2, 0x2, 0x2, 0x2f, 0x3, 0x2, 0x2, 0x2, 0x2,
0x31, 0x3, 0x2, 0x2, 0x2, 0x2, 0x33, 0x3, 0x2,
0x2, 0x2, 0x2, 0x35, 0x3, 0x2, 0x2, 0x2, 0x2,
0x37, 0x3, 0x2, 0x2, 0x2, 0x2, 0x39, 0x3, 0x2,
0x2, 0x2, 0x2, 0x3b, 0x3, 0x2, 0x2, 0x2, 0x2,
0x3d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x3f, 0x3, 0x2,
0x2, 0x2, 0x2, 0x41, 0x3, 0x2, 0x2, 0x2, 0x2,
0x43, 0x3, 0x2, 0x2, 0x2, 0x2, 0x45, 0x3, 0x2,
0x2, 0x2, 0x2, 0x47, 0x3, 0x2, 0x2, 0x2, 0x2,
0x49, 0x3, 0x2, 0x2, 0x2, 0x2, 0x4b, 0x3, 0x2,
0x2, 0x2, 0x2, 0x4d, 0x3, 0x2, 0x2, 0x2, 0x2,
0x4f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x51, 0x3, 0x2,
0x2, 0x2, 0x2, 0x53, 0x3, 0x2, 0x2, 0x2, 0x2,
0x55, 0x3, 0x2, 0x2, 0x2, 0x2, 0x57, 0x3, 0x2,
0x2, 0x2, 0x2, 0x59, 0x3, 0x2, 0x2, 0x2, 0x2,
0x5b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x5d, 0x3, 0x2,
0x2, 0x2, 0x2, 0x5f, 0x3, 0x2, 0x2, 0x2, 0x2,
0x61, 0x3, 0x2, 0x2, 0x2, 0x2, 0x63, 0x3, 0x2,
0x2, 0x2, 0x2, 0x65, 0x3, 0x2, 0x2, 0x2, 0x2,
0x67, 0x3, 0x2, 0x2, 0x2, 0x2, 0x69, 0x3, 0x2,
0x2, 0x2, 0x2, 0x6b, 0x3, 0x2, 0x2, 0x2, 0x2,
0x6d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x6f, 0x3, 0x2,
0x2, 0x2, 0x2, 0x71, 0x3, 0x2, 0x2, 0x2, 0x2,
0x73, 0x3, 0x2, 0x2, 0x2, 0x2, 0x75, 0x3, 0x2,
0x2, 0x2, 0x2, 0x77, 0x3, 0x2, 0x2, 0x2, 0x2,
0x79, 0x3, 0x2, 0x2, 0x2, 0x2, 0x7b, 0x3, 0x2,
0x2, 0x2, 0x2, 0x7d, 0x3, 0x2, 0x2, 0x2, 0x2,
0x7f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x81, 0x3, 0x2,
0x2, 0x2, 0x2, 0x83, 0x3, 0x2, 0x2, 0x2, 0x2,
0x85, 0x3, 0x2, 0x2, 0x2, 0x2, 0x87, 0x3, 0x2,
0x2, 0x2, 0x2, 0x89, 0x3, 0x2, 0x2, 0x2, 0x2,
0x8b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x8d, 0x3, 0x2,
0x2, 0x2, 0x2, 0x8f, 0x3, 0x2, 0x2, 0x2, 0x2,
0x91, 0x3, 0x2, 0x2, 0x2, 0x2, 0x93, 0x3, 0x2,
0x2, 0x2, 0x2, 0x95, 0x3, 0x2, 0x2, 0x2, 0x2,
0x97, 0x3, 0x2, 0x2, 0x2, 0x2, 0x99, 0x3, 0x2,
0x2, 0x2, 0x2, 0x9d, 0x3, 0x2, 0x2, 0x2, 0x2,
0x9f, 0x3, 0x2, 0x2, 0x2, 0x2, 0xa1, 0x3, 0x2,
0x2, 0x2, 0x2, 0xa3, 0x3, 0x2, 0x2, 0x2, 0x2,
0xab, 0x3, 0x2, 0x2, 0x2, 0x3, 0xad, 0x3, 0x2,
0x2, 0x2, 0x5, 0xaf, 0x3, 0x2, 0x2, 0x2, 0x7,
0xb1, 0x3, 0x2, 0x2, 0x2, 0x9, 0xb4, 0x3, 0x2,
0x2, 0x2, 0xb, 0xb6, 0x3, 0x2, 0x2, 0x2, 0xd,
0xb8, 0x3, 0x2, 0x2, 0x2, 0xf, 0xbd, 0x3, 0x2,
0x2, 0x2, 0x11, 0xbf, 0x3, 0x2, 0x2, 0x2, 0x13,
0xc2, 0x3, 0x2, 0x2, 0x2, 0x15, 0xc5, 0x3, 0x2,
0x2, 0x2, 0x17, 0xc7, 0x3, 0x2, 0x2, 0x2, 0x19,
0xc9, 0x3, 0x2, 0x2, 0x2, 0x1b, 0xcb, 0x3, 0x2,
0x2, 0x2, 0x1d, 0xcd, 0x3, 0x2, 0x2, 0x2, 0x1f,
0xcf, 0x3, 0x2, 0x2, 0x2, 0x21, 0xd1, 0x3, 0x2,
0x2, 0x2, 0x23, 0xd4, 0x3, 0x2, 0x2, 0x2, 0x25,
0xd9, 0x3, 0x2, 0x2, 0x2, 0x27, 0xe1, 0x3, 0x2,
0x2, 0x2, 0x29, 0xeb, 0x3, 0x2, 0x2, 0x2, 0x2b,
0xf4, 0x3, 0x2, 0x2, 0x2, 0x2d, 0xfb, 0x3, 0x2,
0x2, 0x2, 0x2f, 0x101, 0x3, 0x2, 0x2, 0x2, 0x31,
0x109, 0x3, 0x2, 0x2, 0x2, 0x33, 0x111, 0x3, 0x2,
0x2, 0x2, 0x35, 0x118, 0x3, 0x2, 0x2, 0x2, 0x37,
0x123, 0x3, 0x2, 0x2, 0x2, 0x39, 0x12c, 0x3, 0x2,
0x2, 0x2, 0x3b, 0x12f, 0x3, 0x2, 0x2, 0x2, 0x3d,
0x133, 0x3, 0x2, 0x2, 0x2, 0x3f, 0x139, 0x3, 0x2,
0x2, 0x2, 0x41, 0x140, 0x3, 0x2, 0x2, 0x2, 0x43,
0x14a, 0x3, 0x2, 0x2, 0x2, 0x45, 0x153, 0x3, 0x2,
0x2, 0x2, 0x47, 0x159, 0x3, 0x2, 0x2, 0x2, 0x49,
0x15e, 0x3, 0x2, 0x2, 0x2, 0x4b, 0x168, 0x3, 0x2,
0x2, 0x2, 0x4d, 0x16c, 0x3, 0x2, 0x2, 0x2, 0x4f,
0x172, 0x3, 0x2, 0x2, 0x2, 0x51, 0x179, 0x3, 0x2,
0x2, 0x2, 0x53, 0x17e, 0x3, 0x2, 0x2, 0x2, 0x55,
0x183, 0x3, 0x2, 0x2, 0x2, 0x57, 0x186, 0x3, 0x2,
0x2, 0x2, 0x59, 0x18a, 0x3, 0x2, 0x2, 0x2, 0x5b,
0x190, 0x3, 0x2, 0x2, 0x2, 0x5d, 0x197, 0x3, 0x2,
0x2, 0x2, 0x5f, 0x19e, 0x3, 0x2, 0x2, 0x2, 0x61,
0x1a4, 0x3, 0x2, 0x2, 0x2, 0x63, 0x1b0, 0x3, 0x2,
0x2, 0x2, 0x65, 0x1b6, 0x3, 0x2, 0x2, 0x2, 0x67,
0x1d2, 0x3, 0x2, 0x2, 0x2, 0x69, 0x1d4, 0x3, 0x2,
0x2, 0x2, 0x6b, 0x1d7, 0x3, 0x2, 0x2, 0x2, 0x6d,
0x1d9, 0x3, 0x2, 0x2, 0x2, 0x6f, 0x1db, 0x3, 0x2,
0x2, 0x2, 0x71, 0x1dd, 0x3, 0x2, 0x2, 0x2, 0x73,
0x1df, 0x3, 0x2, 0x2, 0x2, 0x75, 0x1e1, 0x3, 0x2,
0x2, 0x2, 0x77, 0x1e3, 0x3, 0x2, 0x2, 0x2, 0x79,
0x1e5, 0x3, 0x2, 0x2, 0x2, 0x7b, 0x1e7, 0x3, 0x2,
0x2, 0x2, 0x7d, 0x1eb, 0x3, 0x2, 0x2, 0x2, 0x7f,
0x1ef, 0x3, 0x2, 0x2, 0x2, 0x81, 0x1f2, 0x3, 0x2,
0x2, 0x2, 0x83, 0x1f4, 0x3, 0x2, 0x2, 0x2, 0x85,
0x1f7, 0x3, 0x2, 0x2, 0x2, 0x87, 0x1f9, 0x3, 0x2,
0x2, 0x2, 0x89, 0x1fc, 0x3, 0x2, 0x2, 0x2, 0x8b,
0x1ff, 0x3, 0x2, 0x2, 0x2, 0x8d, 0x202, 0x3, 0x2,
0x2, 0x2, 0x8f, 0x206, 0x3, 0x2, 0x2, 0x2, 0x91,
0x20c, 0x3, 0x2, 0x2, 0x2, 0x93, 0x20e, 0x3, 0x2,
0x2, 0x2, 0x95, 0x211, 0x3, 0x2, 0x2, 0x2, 0x97,
0x214, 0x3, 0x2, 0x2, 0x2, 0x99, 0x228, 0x3, 0x2,
0x2, 0x2, 0x9b, 0x22a, 0x3, 0x2, 0x2, 0x2, 0x9d,
0x22d, 0x3, 0x2, 0x2, 0x2, 0x9f, 0x235, 0x3, 0x2,
0x2, 0x2, 0xa1, 0x23b, 0x3, 0x2, 0x2, 0x2, 0xa3,
0x24b, 0x3, 0x2, 0x2, 0x2, 0xa5, 0x256, 0x3, 0x2,
0x2, 0x2, 0xa7, 0x260, 0x3, 0x2, 0x2, 0x2, 0xa9,
0x262, 0x3, 0x2, 0x2, 0x2, 0xab, 0x297, 0x3, 0x2,
0x2, 0x2, 0xad, 0xae, 0x7, 0x2a, 0x2, 0x2, 0xae,
0x4, 0x3, 0x2, 0x2, 0x2, 0xaf, 0xb0, 0x7, 0x2b,
0x2, 0x2, 0xb0, 0x6, 0x3, 0x2, 0x2, 0x2, 0xb1,
0xb2, 0x7, 0x3f, 0x2, 0x2, 0xb2, 0xb3, 0x7, 0x40,
0x2, 0x2, 0xb3, 0x8, 0x3, 0x2, 0x2, 0x2, 0xb4,
0xb5, 0x7, 0x2e, 0x2, 0x2, 0xb5, 0xa, 0x3, 0x2,
0x2, 0x2, 0xb6, 0xb7, 0x7, 0x3c, 0x2, 0x2, 0xb7,
0xc, 0x3, 0x2, 0x2, 0x2, 0xb8, 0xb9, 0x7, 0x76,
0x2, 0x2, 0xb9, 0xba, 0x7, 0x7b, 0x2, 0x2, 0xba,
0xbb, 0x7, 0x72, 0x2, 0x2, 0xbb, 0xbc, 0x7, 0x67,
0x2, 0x2, 0xbc, 0xe, 0x3, 0x2, 0x2, 0x2, 0xbd,
0xbe, 0x7, 0x41, 0x2, 0x2, 0xbe, 0x10, 0x3, 0x2,
0x2, 0x2, 0xbf, 0xc0, 0x7, 0x7e, 0x2, 0x2, 0xc0,
0xc1, 0x7, 0x7e, 0x2, 0x2, 0xc1, 0x12, 0x3, 0x2,
0x2, 0x2, 0xc2, 0xc3, 0x7, 0x28, 0x2, 0x2, 0xc3,
0xc4, 0x7, 0x28, 0x2, 0x2, 0xc4, 0x14, 0x3, 0x2,
0x2, 0x2, 0xc5, 0xc6, 0x7, 0x30, 0x2, 0x2, 0xc6,
0x16, 0x3, 0x2, 0x2, 0x2, 0xc7, 0xc8, 0x7, 0x5d,
0x2, 0x2, 0xc8, 0x18, 0x3, 0x2, 0x2, 0x2, 0xc9,
0xca, 0x7, 0x5f, 0x2, 0x2, 0xca, 0x1a, 0x3, 0x2,
0x2, 0x2, 0xcb, 0xcc, 0x7, 0x7d, 0x2, 0x2, 0xcc,
0x1c, 0x3, 0x2, 0x2, 0x2, 0xcd, 0xce, 0x7, 0x7f,
0x2, 0x2, 0xce, 0x1e, 0x3, 0x2, 0x2, 0x2, 0xcf,
0xd0, 0x7, 0x3d, 0x2, 0x2, 0xd0, 0x20, 0x3, 0x2,
0x2, 0x2, 0xd1, 0xd2, 0x7, 0x71, 0x2, 0x2, 0xd2,
0xd3, 0x7, 0x68, 0x2, 0x2, 0xd3, 0x22, 0x3, 0x2,
0x2, 0x2, 0xd4, 0xd5, 0x7, 0x67, 0x2, 0x2, 0xd5,
0xd6, 0x7, 0x6e, 0x2, 0x2, 0xd6, 0xd7, 0x7, 0x75,
0x2, 0x2, 0xd7, 0xd8, 0x7, 0x67, 0x2, 0x2, 0xd8,
0x24, 0x3, 0x2, 0x2, 0x2, 0xd9, 0xda, 0x7, 0x67,
0x2, 0x2, 0xda, 0xdb, 0x7, 0x7a, 0x2, 0x2, 0xdb,
0xdc, 0x7, 0x76, 0x2, 0x2, 0xdc, 0xdd, 0x7, 0x67,
0x2, 0x2, 0xdd, 0xde, 0x7, 0x70, 0x2, 0x2, 0xde,
0xdf, 0x7, 0x66, 0x2, 0x2, 0xdf, 0xe0, 0x7, 0x75,
0x2, 0x2, 0xe0, 0x26, 0x3, 0x2, 0x2, 0x2, 0xe1,
0xe2, 0x7, 0x69, 0x2, 0x2, 0xe2, 0xe3, 0x7, 0x67,
0x2, 0x2, 0xe3, 0xe4, 0x7, 0x70, 0x2, 0x2, 0xe4,
0xe5, 0x7, 0x67, 0x2, 0x2, 0xe5, 0xe6, 0x7, 0x74,
0x2, 0x2, 0xe6, 0xe7, 0x7, 0x63, 0x2, 0x2, 0xe7,
0xe8, 0x7, 0x76, 0x2, 0x2, 0xe8, 0xe9, 0x7, 0x67,
0x2, 0x2, 0xe9, 0xea, 0x7, 0x75, 0x2, 0x2, 0xea,
0x28, 0x3, 0x2, 0x2, 0x2, 0xeb, 0xec, 0x7, 0x71,
0x2, 0x2, 0xec, 0xed, 0x7, 0x72, 0x2, 0x2, 0xed,
0xee, 0x7, 0x67, 0x2, 0x2, 0xee, 0xef, 0x7, 0x74,
0x2, 0x2, 0xef, 0xf0, 0x7, 0x63, 0x2, 0x2, 0xf0,
0xf1, 0x7, 0x76, 0x2, 0x2, 0xf1, 0xf2, 0x7, 0x71,
0x2, 0x2, 0xf2, 0xf3, 0x7, 0x74, 0x2, 0x2, 0xf3,
0x2a, 0x3, 0x2, 0x2, 0x2, 0xf4, 0xf5, 0x7, 0x75,
0x2, 0x2, 0xf5, 0xf6, 0x7, 0x76, 0x2, 0x2, 0xf6,
0xf7, 0x7, 0x74, 0x2, 0x2, 0xf7, 0xf8, 0x7, 0x77,
0x2, 0x2, 0xf8, 0xf9, 0x7, 0x65, 0x2, 0x2, 0xf9,
0xfa, 0x7, 0x76, 0x2, 0x2, 0xfa, 0x2c, 0x3, 0x2,
0x2, 0x2, 0xfb, 0xfc, 0x7, 0x6f, 0x2, 0x2, 0xfc,
0xfd, 0x7, 0x63, 0x2, 0x2, 0xfd, 0xfe, 0x7, 0x65,
0x2, 0x2, 0xfe, 0xff, 0x7, 0x74, 0x2, 0x2, 0xff,
0x100, 0x7, 0x71, 0x2, 0x2, 0x100, 0x2e, 0x3, 0x2,
0x2, 0x2, 0x101, 0x102, 0x7, 0x64, 0x2, 0x2, 0x102,
0x103, 0x7, 0x77, 0x2, 0x2, 0x103, 0x104, 0x7, 0x6b,
0x2, 0x2, 0x104, 0x105, 0x7, 0x6e, 0x2, 0x2, 0x105,
0x106, 0x7, 0x76, 0x2, 0x2, 0x106, 0x107, 0x7, 0x6b,
0x2, 0x2, 0x107, 0x108, 0x7, 0x70, 0x2, 0x2, 0x108,
0x30, 0x3, 0x2, 0x2, 0x2, 0x109, 0x10a, 0x7, 0x74,
0x2, 0x2, 0x10a, 0x10b, 0x7, 0x77, 0x2, 0x2, 0x10b,
0x10c, 0x7, 0x70, 0x2, 0x2, 0x10c, 0x10d, 0x7, 0x76,
0x2, 0x2, 0x10d, 0x10e, 0x7, 0x6b, 0x2, 0x2, 0x10e,
0x10f, 0x7, 0x6f, 0x2, 0x2, 0x10f, 0x110, 0x7, 0x67,
0x2, 0x2, 0x110, 0x32, 0x3, 0x2, 0x2, 0x2, 0x111,
0x112, 0x7, 0x6f, 0x2, 0x2, 0x112, 0x113, 0x7, 0x71,
0x2, 0x2, 0x113, 0x114, 0x7, 0x66, 0x2, 0x2, 0x114,
0x115, 0x7, 0x77, 0x2, 0x2, 0x115, 0x116, 0x7, 0x6e,
0x2, 0x2, 0x116, 0x117, 0x7, 0x67, 0x2, 0x2, 0x117,
0x34, 0x3, 0x2, 0x2, 0x2, 0x118, 0x119, 0x7, 0x6c,
0x2, 0x2, 0x119, 0x11a, 0x7, 0x63, 0x2, 0x2, 0x11a,
0x11b, 0x7, 0x78, 0x2, 0x2, 0x11b, 0x11c, 0x7, 0x63,
0x2, 0x2, 0x11c, 0x11d, 0x7, 0x75, 0x2, 0x2, 0x11d,
0x11e, 0x7, 0x65, 0x2, 0x2, 0x11e, 0x11f, 0x7, 0x74,
0x2, 0x2, 0x11f, 0x120, 0x7, 0x6b, 0x2, 0x2, 0x120,
0x121, 0x7, 0x72, 0x2, 0x2, 0x121, 0x122, 0x7, 0x76,
0x2, 0x2, 0x122, 0x36, 0x3, 0x2, 0x2, 0x2, 0x123,
0x124, 0x7, 0x66, 0x2, 0x2, 0x124, 0x125, 0x7, 0x67,
0x2, 0x2, 0x125, 0x126, 0x7, 0x68, 0x2, 0x2, 0x126,
0x127, 0x7, 0x67, 0x2, 0x2, 0x127, 0x128, 0x7, 0x74,
0x2, 0x2, 0x128, 0x129, 0x7, 0x74, 0x2, 0x2, 0x129,
0x12a, 0x7, 0x67, 0x2, 0x2, 0x12a, 0x12b, 0x7, 0x66,
0x2, 0x2, 0x12b, 0x38, 0x3, 0x2, 0x2, 0x2, 0x12c,
0x12d, 0x7, 0x6b, 0x2, 0x2, 0x12d, 0x12e, 0x7, 0x68,
0x2, 0x2, 0x12e, 0x3a, 0x3, 0x2, 0x2, 0x2, 0x12f,
0x130, 0x7, 0x68, 0x2, 0x2, 0x130, 0x131, 0x7, 0x71,
0x2, 0x2, 0x131, 0x132, 0x7, 0x74, 0x2, 0x2, 0x132,
0x3c, 0x3, 0x2, 0x2, 0x2, 0x133, 0x134, 0x7, 0x79,
0x2, 0x2, 0x134, 0x135, 0x7, 0x6a, 0x2, 0x2, 0x135,
0x136, 0x7, 0x6b, 0x2, 0x2, 0x136, 0x137, 0x7, 0x6e,
0x2, 0x2, 0x137, 0x138, 0x7, 0x67, 0x2, 0x2, 0x138,
0x3e, 0x3, 0x2, 0x2, 0x2, 0x139, 0x13a, 0x7, 0x74,
0x2, 0x2, 0x13a, 0x13b, 0x7, 0x67, 0x2, 0x2, 0x13b,
0x13c, 0x7, 0x76, 0x2, 0x2, 0x13c, 0x13d, 0x7, 0x77,
0x2, 0x2, 0x13d, 0x13e, 0x7, 0x74, 0x2, 0x2, 0x13e,
0x13f, 0x7, 0x70, 0x2, 0x2, 0x13f, 0x40, 0x3, 0x2,
0x2, 0x2, 0x140, 0x141, 0x7, 0x65, 0x2, 0x2, 0x141,
0x142, 0x7, 0x71, 0x2, 0x2, 0x142, 0x143, 0x7, 0x70,
0x2, 0x2, 0x143, 0x144, 0x7, 0x75, 0x2, 0x2, 0x144,
0x145, 0x7, 0x76, 0x2, 0x2, 0x145, 0x146, 0x7, 0x67,
0x2, 0x2, 0x146, 0x147, 0x7, 0x7a, 0x2, 0x2, 0x147,
0x148, 0x7, 0x72, 0x2, 0x2, 0x148, 0x149, 0x7, 0x74,
0x2, 0x2, 0x149, 0x42, 0x3, 0x2, 0x2, 0x2, 0x14a,
0x14b, 0x7, 0x65, 0x2, 0x2, 0x14b, 0x14c, 0x7, 0x71,
0x2, 0x2, 0x14c, 0x14d, 0x7, 0x70, 0x2, 0x2, 0x14d,
0x14e, 0x7, 0x76, 0x2, 0x2, 0x14e, 0x14f, 0x7, 0x6b,
0x2, 0x2, 0x14f, 0x150, 0x7, 0x70, 0x2, 0x2, 0x150,
0x151, 0x7, 0x77, 0x2, 0x2, 0x151, 0x152, 0x7, 0x67,
0x2, 0x2, 0x152, 0x44, 0x3, 0x2, 0x2, 0x2, 0x153,
0x154, 0x7, 0x64, 0x2, 0x2, 0x154, 0x155, 0x7, 0x74,
0x2, 0x2, 0x155, 0x156, 0x7, 0x67, 0x2, 0x2, 0x156,
0x157, 0x7, 0x63, 0x2, 0x2, 0x157, 0x158, 0x7, 0x6d,
0x2, 0x2, 0x158, 0x46, 0x3, 0x2, 0x2, 0x2, 0x159,
0x15a, 0x7, 0x69, 0x2, 0x2, 0x15a, 0x15b, 0x7, 0x71,
0x2, 0x2, 0x15b, 0x15c, 0x7, 0x76, 0x2, 0x2, 0x15c,
0x15d, 0x7, 0x71, 0x2, 0x2, 0x15d, 0x48, 0x3, 0x2,
0x2, 0x2, 0x15e, 0x15f, 0x7, 0x71, 0x2, 0x2, 0x15f,
0x160, 0x7, 0x76, 0x2, 0x2, 0x160, 0x161, 0x7, 0x6a,
0x2, 0x2, 0x161, 0x162, 0x7, 0x67, 0x2, 0x2, 0x162,
0x163, 0x7, 0x74, 0x2, 0x2, 0x163, 0x164, 0x7, 0x79,
0x2, 0x2, 0x164, 0x165, 0x7, 0x6b, 0x2, 0x2, 0x165,
0x166, 0x7, 0x75, 0x2, 0x2, 0x166, 0x167, 0x7, 0x67,
0x2, 0x2, 0x167, 0x4a, 0x3, 0x2, 0x2, 0x2, 0x168,
0x169, 0x7, 0x76, 0x2, 0x2, 0x169, 0x16a, 0x7, 0x74,
0x2, 0x2, 0x16a, 0x16b, 0x7, 0x7b, 0x2, 0x2, 0x16b,
0x4c, 0x3, 0x2, 0x2, 0x2, 0x16c, 0x16d, 0x7, 0x6e,
0x2, 0x2, 0x16d, 0x16e, 0x7, 0x63, 0x2, 0x2, 0x16e,
0x16f, 0x7, 0x64, 0x2, 0x2, 0x16f, 0x170, 0x7, 0x67,
0x2, 0x2, 0x170, 0x171, 0x7, 0x6e, 0x2, 0x2, 0x171,
0x4e, 0x3, 0x2, 0x2, 0x2, 0x172, 0x173, 0x7, 0x6e,
0x2, 0x2, 0x173, 0x174, 0x7, 0x63, 0x2, 0x2, 0x174,
0x175, 0x7, 0x64, 0x2, 0x2, 0x175, 0x176, 0x7, 0x67,
0x2, 0x2, 0x176, 0x177, 0x7, 0x6e, 0x2, 0x2, 0x177,
0x178, 0x7, 0x75, 0x2, 0x2, 0x178, 0x50, 0x3, 0x2,
0x2, 0x2, 0x179, 0x17a, 0x7, 0x76, 0x2, 0x2, 0x17a,
0x17b, 0x7, 0x63, 0x2, 0x2, 0x17b, 0x17c, 0x7, 0x6b,
0x2, 0x2, 0x17c, 0x17d, 0x7, 0x6e, 0x2, 0x2, 0x17d,
0x52, 0x3, 0x2, 0x2, 0x2, 0x17e, 0x17f, 0x7, 0x6b,
0x2, 0x2, 0x17f, 0x180, 0x7, 0x75, 0x2, 0x2, 0x180,
0x181, 0x7, 0x70, 0x2, 0x2, 0x181, 0x182, 0x7, 0x76,
0x2, 0x2, 0x182, 0x54, 0x3, 0x2, 0x2, 0x2, 0x183,
0x184, 0x7, 0x6b, 0x2, 0x2, 0x184, 0x185, 0x7, 0x75,
0x2, 0x2, 0x185, 0x56, 0x3, 0x2, 0x2, 0x2, 0x186,
0x187, 0x7, 0x6e, 0x2, 0x2, 0x187, 0x188, 0x7, 0x67,
0x2, 0x2, 0x188, 0x189, 0x7, 0x76, 0x2, 0x2, 0x189,
0x58, 0x3, 0x2, 0x2, 0x2, 0x18a, 0x18b, 0x7, 0x65,
0x2, 0x2, 0x18b, 0x18c, 0x7, 0x71, 0x2, 0x2, 0x18c,
0x18d, 0x7, 0x70, 0x2, 0x2, 0x18d, 0x18e, 0x7, 0x75,
0x2, 0x2, 0x18e, 0x18f, 0x7, 0x76, 0x2, 0x2, 0x18f,
0x5a, 0x3, 0x2, 0x2, 0x2, 0x190, 0x191, 0x7, 0x67,
0x2, 0x2, 0x191, 0x192, 0x7, 0x7a, 0x2, 0x2, 0x192,
0x193, 0x7, 0x76, 0x2, 0x2, 0x193, 0x194, 0x7, 0x67,
0x2, 0x2, 0x194, 0x195, 0x7, 0x74, 0x2, 0x2, 0x195,
0x196, 0x7, 0x70, 0x2, 0x2, 0x196, 0x5c, 0x3, 0x2,
0x2, 0x2, 0x197, 0x198, 0x7, 0x63, 0x2, 0x2, 0x198,
0x199, 0x7, 0x75, 0x2, 0x2, 0x199, 0x19a, 0x7, 0x75,
0x2, 0x2, 0x19a, 0x19b, 0x7, 0x67, 0x2, 0x2, 0x19b,
0x19c, 0x7, 0x74, 0x2, 0x2, 0x19c, 0x19d, 0x7, 0x76,
0x2, 0x2, 0x19d, 0x5e, 0x3, 0x2, 0x2, 0x2, 0x19e,
0x19f, 0x7, 0x65, 0x2, 0x2, 0x19f, 0x1a0, 0x7, 0x6a,
0x2, 0x2, 0x1a0, 0x1a1, 0x7, 0x67, 0x2, 0x2, 0x1a1,
0x1a2, 0x7, 0x65, 0x2, 0x2, 0x1a2, 0x1a3, 0x7, 0x6d,
0x2, 0x2, 0x1a3, 0x60, 0x3, 0x2, 0x2, 0x2, 0x1a4,
0x1a5, 0x7, 0x77, 0x2, 0x2, 0x1a5, 0x1a6, 0x7, 0x70,
0x2, 0x2, 0x1a6, 0x1a7, 0x7, 0x74, 0x2, 0x2, 0x1a7,
0x1a8, 0x7, 0x67, 0x2, 0x2, 0x1a8, 0x1a9, 0x7, 0x63,
0x2, 0x2, 0x1a9, 0x1aa, 0x7, 0x65, 0x2, 0x2, 0x1aa,
0x1ab, 0x7, 0x6a, 0x2, 0x2, 0x1ab, 0x1ac, 0x7, 0x63,
0x2, 0x2, 0x1ac, 0x1ad, 0x7, 0x64, 0x2, 0x2, 0x1ad,
0x1ae, 0x7, 0x6e, 0x2, 0x2, 0x1ae, 0x1af, 0x7, 0x67,
0x2, 0x2, 0x1af, 0x62, 0x3, 0x2, 0x2, 0x2, 0x1b0,
0x1b1, 0x7, 0x66, 0x2, 0x2, 0x1b1, 0x1b2, 0x7, 0x67,
0x2, 0x2, 0x1b2, 0x1b3, 0x7, 0x64, 0x2, 0x2, 0x1b3,
0x1b4, 0x7, 0x77, 0x2, 0x2, 0x1b4, 0x1b5, 0x7, 0x69,
0x2, 0x2, 0x1b5, 0x64, 0x3, 0x2, 0x2, 0x2, 0x1b6,
0x1b7, 0x7, 0x3f, 0x2, 0x2, 0x1b7, 0x66, 0x3, 0x2,
0x2, 0x2, 0x1b8, 0x1b9, 0x7, 0x2c, 0x2, 0x2, 0x1b9,
0x1d3, 0x7, 0x3f, 0x2, 0x2, 0x1ba, 0x1bb, 0x7, 0x31,
0x2, 0x2, 0x1bb, 0x1d3, 0x7, 0x3f, 0x2, 0x2, 0x1bc,
0x1bd, 0x7, 0x27, 0x2, 0x2, 0x1bd, 0x1d3, 0x7, 0x3f,
0x2, 0x2, 0x1be, 0x1bf, 0x7, 0x2d, 0x2, 0x2, 0x1bf,
0x1d3, 0x7, 0x3f, 0x2, 0x2, 0x1c0, 0x1c1, 0x7, 0x2f,
0x2, 0x2, 0x1c1, 0x1d3, 0x7, 0x3f, 0x2, 0x2, 0x1c2,
0x1c3, 0x7, 0x3e, 0x2, 0x2, 0x1c3, 0x1c4, 0x7, 0x3e,
0x2, 0x2, 0x1c4, 0x1d3, 0x7, 0x3f, 0x2, 0x2, 0x1c5,
0x1c6, 0x7, 0x40, 0x2, 0x2, 0x1c6, 0x1c7, 0x7, 0x40,
0x2, 0x2, 0x1c7, 0x1d3, 0x7, 0x3f, 0x2, 0x2, 0x1c8,
0x1c9, 0x7, 0x40, 0x2, 0x2, 0x1c9, 0x1ca, 0x7, 0x40,
0x2, 0x2, 0x1ca, 0x1cb, 0x7, 0x40, 0x2, 0x2, 0x1cb,
0x1d3, 0x7, 0x3f, 0x2, 0x2, 0x1cc, 0x1cd, 0x7, 0x28,
0x2, 0x2, 0x1cd, 0x1d3, 0x7, 0x3f, 0x2, 0x2, 0x1ce,
0x1cf, 0x7, 0x60, 0x2, 0x2, 0x1cf, 0x1d3, 0x7, 0x3f,
0x2, 0x2, 0x1d0, 0x1d1, 0x7, 0x7e, 0x2, 0x2, 0x1d1,
0x1d3, 0x7, 0x3f, 0x2, 0x2, 0x1d2, 0x1b8, 0x3, 0x2,
0x2, 0x2, 0x1d2, 0x1ba, 0x3, 0x2, 0x2, 0x2, 0x1d2,
0x1bc, 0x3, 0x2, 0x2, 0x2, 0x1d2, 0x1be, 0x3, 0x2,
0x2, 0x2, 0x1d2, 0x1c0, 0x3, 0x2, 0x2, 0x2, 0x1d2,
0x1c2, 0x3, 0x2, 0x2, 0x2, 0x1d2, 0x1c5, 0x3, 0x2,
0x2, 0x2, 0x1d2, 0x1c8, 0x3, 0x2, 0x2, 0x2, 0x1d2,
0x1cc, 0x3, 0x2, 0x2, 0x2, 0x1d2, 0x1ce, 0x3, 0x2,
0x2, 0x2, 0x1d2, 0x1d0, 0x3, 0x2, 0x2, 0x2, 0x1d3,
0x68, 0x3, 0x2, 0x2, 0x2, 0x1d4, 0x1d5, 0x7, 0x3f,
0x2, 0x2, 0x1d5, 0x1d6, 0x7, 0x3f, 0x2, 0x2, 0x1d6,
0x6a, 0x3, 0x2, 0x2, 0x2, 0x1d7, 0x1d8, 0x7, 0x2d,
0x2, 0x2, 0x1d8, 0x6c, 0x3, 0x2, 0x2, 0x2, 0x1d9,
0x1da, 0x7, 0x2f, 0x2, 0x2, 0x1da, 0x6e, 0x3, 0x2,
0x2, 0x2, 0x1db, 0x1dc, 0x7, 0x2c, 0x2, 0x2, 0x1dc,
0x70, 0x3, 0x2, 0x2, 0x2, 0x1dd, 0x1de, 0x7, 0x31,
0x2, 0x2, 0x1de, 0x72, 0x3, 0x2, 0x2, 0x2, 0x1df,
0x1e0, 0x7, 0x27, 0x2, 0x2, 0x1e0, 0x74, 0x3, 0x2,
0x2, 0x2, 0x1e1, 0x1e2, 0x7, 0x7e, 0x2, 0x2, 0x1e2,
0x76, 0x3, 0x2, 0x2, 0x2, 0x1e3, 0x1e4, 0x7, 0x28,
0x2, 0x2, 0x1e4, 0x78, 0x3, 0x2, 0x2, 0x2, 0x1e5,
0x1e6, 0x7, 0x80, 0x2, 0x2, 0x1e6, 0x7a, 0x3, 0x2,
0x2, 0x2, 0x1e7, 0x1e8, 0x7, 0x6f, 0x2, 0x2, 0x1e8,
0x1e9, 0x7, 0x63, 0x2, 0x2, 0x1e9, 0x1ea, 0x7, 0x7a,
0x2, 0x2, 0x1ea, 0x7c, 0x3, 0x2, 0x2, 0x2, 0x1eb,
0x1ec, 0x7, 0x6f, 0x2, 0x2, 0x1ec, 0x1ed, 0x7, 0x6b,
0x2, 0x2, 0x1ed, 0x1ee, 0x7, 0x70, 0x2, 0x2, 0x1ee,
0x7e, 0x3, 0x2, 0x2, 0x2, 0x1ef, 0x1f0, 0x7, 0x23,
0x2, 0x2, 0x1f0, 0x1f1, 0x7, 0x3f, 0x2, 0x2, 0x1f1,
0x80, 0x3, 0x2, 0x2, 0x2, 0x1f2, 0x1f3, 0x7, 0x3e,
0x2, 0x2, 0x1f3, 0x82, 0x3, 0x2, 0x2, 0x2, 0x1f4,
0x1f5, 0x7, 0x3e, 0x2, 0x2, 0x1f5, 0x1f6, 0x7, 0x3f,
0x2, 0x2, 0x1f6, 0x84, 0x3, 0x2, 0x2, 0x2, 0x1f7,
0x1f8, 0x7, 0x40, 0x2, 0x2, 0x1f8, 0x86, 0x3, 0x2,
0x2, 0x2, 0x1f9, 0x1fa, 0x7, 0x40, 0x2, 0x2, 0x1fa,
0x1fb, 0x7, 0x3f, 0x2, 0x2, 0x1fb, 0x88, 0x3, 0x2,
0x2, 0x2, 0x1fc, 0x1fd, 0x7, 0x3e, 0x2, 0x2, 0x1fd,
0x1fe, 0x7, 0x3e, 0x2, 0x2, 0x1fe, 0x8a, 0x3, 0x2,
0x2, 0x2, 0x1ff, 0x200, 0x7, 0x40, 0x2, 0x2, 0x200,
0x201, 0x7, 0x40, 0x2, 0x2, 0x201, 0x8c, 0x3, 0x2,
0x2, 0x2, 0x202, 0x203, 0x7, 0x40, 0x2, 0x2, 0x203,
0x204, 0x7, 0x40, 0x2, 0x2, 0x204, 0x205, 0x7, 0x40,
0x2, 0x2, 0x205, 0x8e, 0x3, 0x2, 0x2, 0x2, 0x206,
0x207, 0x7, 0x30, 0x2, 0x2, 0x207, 0x208, 0x7, 0x30,
0x2, 0x2, 0x208, 0x209, 0x7, 0x30, 0x2, 0x2, 0x209,
0x90, 0x3, 0x2, 0x2, 0x2, 0x20a, 0x20d, 0x5, 0x69,
0x35, 0x2, 0x20b, 0x20d, 0x5, 0x7f, 0x40, 0x2, 0x20c,
0x20a, 0x3, 0x2, 0x2, 0x2, 0x20c, 0x20b, 0x3, 0x2,
0x2, 0x2, 0x20d, 0x92, 0x3, 0x2, 0x2, 0x2, 0x20e,
0x20f, 0x7, 0x2d, 0x2, 0x2, 0x20f, 0x210, 0x7, 0x2d,
0x2, 0x2, 0x210, 0x94, 0x3, 0x2, 0x2, 0x2, 0x211,
0x212, 0x7, 0x2f, 0x2, 0x2, 0x212, 0x213, 0x7, 0x2f,
0x2, 0x2, 0x213, 0x96, 0x3, 0x2, 0x2, 0x2, 0x214,
0x215, 0x7, 0x23, 0x2, 0x2, 0x215, 0x98, 0x3, 0x2,
0x2, 0x2, 0x216, 0x21b, 0x7, 0x24, 0x2, 0x2, 0x217,
0x21a, 0x5, 0x9b, 0x4e, 0x2, 0x218, 0x21a, 0xa, 0x2,
0x2, 0x2, 0x219, 0x217, 0x3, 0x2, 0x2, 0x2, 0x219,
0x218, 0x3, 0x2, 0x2, 0x2, 0x21a, 0x21d, 0x3, 0x2,
0x2, 0x2, 0x21b, 0x219, 0x3, 0x2, 0x2, 0x2, 0x21b,
0x21c, 0x3, 0x2, 0x2, 0x2, 0x21c, 0x21e, 0x3, 0x2,
0x2, 0x2, 0x21d, 0x21b, 0x3, 0x2, 0x2, 0x2, 0x21e,
0x229, 0x7, 0x24, 0x2, 0x2, 0x21f, 0x224, 0x7, 0x29,
0x2, 0x2, 0x220, 0x223, 0x5, 0x9b, 0x4e, 0x2, 0x221,
0x223, 0xa, 0x3, 0x2, 0x2, 0x222, 0x220, 0x3, 0x2,
0x2, 0x2, 0x222, 0x221, 0x3, 0x2, 0x2, 0x2, 0x223,
0x226, 0x3, 0x2, 0x2, 0x2, 0x224, 0x222, 0x3, 0x2,
0x2, 0x2, 0x224, 0x225, 0x3, 0x2, 0x2, 0x2, 0x225,
0x227, 0x3, 0x2, 0x2, 0x2, 0x226, 0x224, 0x3, 0x2,
0x2, 0x2, 0x227, 0x229, 0x7, 0x29, 0x2, 0x2, 0x228,
0x216, 0x3, 0x2, 0x2, 0x2, 0x228, 0x21f, 0x3, 0x2,
0x2, 0x2, 0x229, 0x9a, 0x3, 0x2, 0x2, 0x2, 0x22a,
0x22b, 0x7, 0x5e, 0x2, 0x2, 0x22b, 0x22c, 0x9, 0x4,
0x2, 0x2, 0x22c, 0x9c, 0x3, 0x2, 0x2, 0x2, 0x22d,
0x231, 0x9, 0x5, 0x2, 0x2, 0x22e, 0x230, 0x9, 0x6,
0x2, 0x2, 0x22f, 0x22e, 0x3, 0x2, 0x2, 0x2, 0x230,
0x233, 0x3, 0x2, 0x2, 0x2, 0x231, 0x22f, 0x3, 0x2,
0x2, 0x2, 0x231, 0x232, 0x3, 0x2, 0x2, 0x2, 0x232,
0x9e, 0x3, 0x2, 0x2, 0x2, 0x233, 0x231, 0x3, 0x2,
0x2, 0x2, 0x234, 0x236, 0x9, 0x7, 0x2, 0x2, 0x235,
0x234, 0x3, 0x2, 0x2, 0x2, 0x236, 0x237, 0x3, 0x2,
0x2, 0x2, 0x237, 0x235, 0x3, 0x2, 0x2, 0x2, 0x237,
0x238, 0x3, 0x2, 0x2, 0x2, 0x238, 0x239, 0x3, 0x2,
0x2, 0x2, 0x239, 0x23a, 0x8, 0x50, 0x2, 0x2, 0x23a,
0xa0, 0x3, 0x2, 0x2, 0x2, 0x23b, 0x23c, 0x7, 0x31,
0x2, 0x2, 0x23c, 0x23d, 0x7, 0x2c, 0x2, 0x2, 0x23d,
0x241, 0x3, 0x2, 0x2, 0x2, 0x23e, 0x240, 0xb, 0x2,
0x2, 0x2, 0x23f, 0x23e, 0x3, 0x2, 0x2, 0x2, 0x240,
0x243, 0x3, 0x2, 0x2, 0x2, 0x241, 0x242, 0x3, 0x2,
0x2, 0x2, 0x241, 0x23f, 0x3, 0x2, 0x2, 0x2, 0x242,
0x247, 0x3, 0x2, 0x2, 0x2, 0x243, 0x241, 0x3, 0x2,
0x2, 0x2, 0x244, 0x245, 0x7, 0x2c, 0x2, 0x2, 0x245,
0x248, 0x7, 0x31, 0x2, 0x2, 0x246, 0x248, 0x7, 0x2,
0x2, 0x3, 0x247, 0x244, 0x3, 0x2, 0x2, 0x2, 0x247,
0x246, 0x3, 0x2, 0x2, 0x2, 0x248, 0x249, 0x3, 0x2,
0x2, 0x2, 0x249, 0x24a, 0x8, 0x51, 0x2, 0x2, 0x24a,
0xa2, 0x3, 0x2, 0x2, 0x2, 0x24b, 0x24c, 0x7, 0x31,
0x2, 0x2, 0x24c, 0x24d, 0x7, 0x31, 0x2, 0x2, 0x24d,
0x251, 0x3, 0x2, 0x2, 0x2, 0x24e, 0x250, 0xa, 0x8,
0x2, 0x2, 0x24f, 0x24e, 0x3, 0x2, 0x2, 0x2, 0x250,
0x253, 0x3, 0x2, 0x2, 0x2, 0x251, 0x24f, 0x3, 0x2,
0x2, 0x2, 0x251, 0x252, 0x3, 0x2, 0x2, 0x2, 0x252,
0x254, 0x3, 0x2, 0x2, 0x2, 0x253, 0x251, 0x3, 0x2,
0x2, 0x2, 0x254, 0x255, 0x8, 0x52, 0x2, 0x2, 0x255,
0xa4, 0x3, 0x2, 0x2, 0x2, 0x256, 0x257, 0x9, 0x9,
0x2, 0x2, 0x257, 0xa6, 0x3, 0x2, 0x2, 0x2, 0x258,
0x261, 0x7, 0x32, 0x2, 0x2, 0x259, 0x25d, 0x9, 0xa,
0x2, 0x2, 0x25a, 0x25c, 0x5, 0xa5, 0x53, 0x2, 0x25b,
0x25a, 0x3, 0x2, 0x2, 0x2, 0x25c, 0x25f, 0x3, 0x2,
0x2, 0x2, 0x25d, 0x25b, 0x3, 0x2, 0x2, 0x2, 0x25d,
0x25e, 0x3, 0x2, 0x2, 0x2, 0x25e, 0x261, 0x3, 0x2,
0x2, 0x2, 0x25f, 0x25d, 0x3, 0x2, 0x2, 0x2, 0x260,
0x258, 0x3, 0x2, 0x2, 0x2, 0x260, 0x259, 0x3, 0x2,
0x2, 0x2, 0x261, 0xa8, 0x3, 0x2, 0x2, 0x2, 0x262,
0x264, 0x9, 0xb, 0x2, 0x2, 0x263, 0x265, 0x9, 0xc,
0x2, 0x2, 0x264, 0x263, 0x3, 0x2, 0x2, 0x2, 0x264,
0x265, 0x3, 0x2, 0x2, 0x2, 0x265, 0x267, 0x3, 0x2,
0x2, 0x2, 0x266, 0x268, 0x5, 0xa5, 0x53, 0x2, 0x267,
0x266, 0x3, 0x2, 0x2, 0x2, 0x268, 0x269, 0x3, 0x2,
0x2, 0x2, 0x269, 0x267, 0x3, 0x2, 0x2, 0x2, 0x269,
0x26a, 0x3, 0x2, 0x2, 0x2, 0x26a, 0xaa, 0x3, 0x2,
0x2, 0x2, 0x26b, 0x26d, 0x5, 0x6d, 0x37, 0x2, 0x26c,
0x26b, 0x3, 0x2, 0x2, 0x2, 0x26c, 0x26d, 0x3, 0x2,
0x2, 0x2, 0x26d, 0x26e, 0x3, 0x2, 0x2, 0x2, 0x26e,
0x26f, 0x5, 0xa7, 0x54, 0x2, 0x26f, 0x273, 0x7, 0x30,
0x2, 0x2, 0x270, 0x272, 0x5, 0xa5, 0x53, 0x2, 0x271,
0x270, 0x3, 0x2, 0x2, 0x2, 0x272, 0x275, 0x3, 0x2,
0x2, 0x2, 0x273, 0x271, 0x3, 0x2, 0x2, 0x2, 0x273,
0x274, 0x3, 0x2, 0x2, 0x2, 0x274, 0x277, 0x3, 0x2,
0x2, 0x2, 0x275, 0x273, 0x3, 0x2, 0x2, 0x2, 0x276,
0x278, 0x5, 0xa9, 0x55, 0x2, 0x277, 0x276, 0x3, 0x2,
0x2, 0x2, 0x277, 0x278, 0x3, 0x2, 0x2, 0x2, 0x278,
0x298, 0x3, 0x2, 0x2, 0x2, 0x279, 0x27b, 0x5, 0x6d,
0x37, 0x2, 0x27a, 0x279, 0x3, 0x2, 0x2, 0x2, 0x27a,
0x27b, 0x3, 0x2, 0x2, 0x2, 0x27b, 0x27c, 0x3, 0x2,
0x2, 0x2, 0x27c, 0x27e, 0x7, 0x30, 0x2, 0x2, 0x27d,
0x27f, 0x5, 0xa5, 0x53, 0x2, 0x27e, 0x27d, 0x3, 0x2,
0x2, 0x2, 0x27f, 0x280, 0x3, 0x2, 0x2, 0x2, 0x280,
0x27e, 0x3, 0x2, 0x2, 0x2, 0x280, 0x281, 0x3, 0x2,
0x2, 0x2, 0x281, 0x283, 0x3, 0x2, 0x2, 0x2, 0x282,
0x284, 0x5, 0xa9, 0x55, 0x2, 0x283, 0x282, 0x3, 0x2,
0x2, 0x2, 0x283, 0x284, 0x3, 0x2, 0x2, 0x2, 0x284,
0x298, 0x3, 0x2, 0x2, 0x2, 0x285, 0x287, 0x5, 0x6d,
0x37, 0x2, 0x286, 0x285, 0x3, 0x2, 0x2, 0x2, 0x286,
0x287, 0x3, 0x2, 0x2, 0x2, 0x287, 0x288, 0x3, 0x2,
0x2, 0x2, 0x288, 0x28a, 0x5, 0xa7, 0x54, 0x2, 0x289,
0x28b, 0x5, 0xa9, 0x55, 0x2, 0x28a, 0x289, 0x3, 0x2,
0x2, 0x2, 0x28a, 0x28b, 0x3, 0x2, 0x2, 0x2, 0x28b,
0x298, 0x3, 0x2, 0x2, 0x2, 0x28c, 0x28e, 0x5, 0x6d,
0x37, 0x2, 0x28d, 0x28c, 0x3, 0x2, 0x2, 0x2, 0x28d,
0x28e, 0x3, 0x2, 0x2, 0x2, 0x28e, 0x28f, 0x3, 0x2,
0x2, 0x2, 0x28f, 0x290, 0x7, 0x32, 0x2, 0x2, 0x290,
0x291, 0x7, 0x7a, 0x2, 0x2, 0x291, 0x293, 0x3, 0x2,
0x2, 0x2, 0x292, 0x294, 0x9, 0xd, 0x2, 0x2, 0x293,
0x292, 0x3, 0x2, 0x2, 0x2, 0x294, 0x295, 0x3, 0x2,
0x2, 0x2, 0x295, 0x293, 0x3, 0x2, 0x2, 0x2, 0x295,
0x296, 0x3, 0x2, 0x2, 0x2, 0x296, 0x298, 0x3, 0x2,
0x2, 0x2, 0x297, 0x26c, 0x3, 0x2, 0x2, 0x2, 0x297,
0x27a, 0x3, 0x2, 0x2, 0x2, 0x297, 0x286, 0x3, 0x2,
0x2, 0x2, 0x297, 0x28d, 0x3, 0x2, 0x2, 0x2, 0x298,
0xac, 0x3, 0x2, 0x2, 0x2, 0x1e, 0x2, 0x1d2, 0x20c,
0x219, 0x21b, 0x222, 0x224, 0x228, 0x231, 0x237, 0x241, 0x247,
0x251, 0x25d, 0x260, 0x264, 0x269, 0x26c, 0x273, 0x277, 0x27a,
0x280, 0x283, 0x286, 0x28a, 0x28d, 0x295, 0x297, 0x3, 0x2,
0x3, 0x2,
};
atn::ATNDeserializer deserializer;
......
......@@ -33,66 +33,67 @@ class TorqueLexer : public antlr4::Lexer {
T__17 = 18,
T__18 = 19,
T__19 = 20,
MACRO = 21,
BUILTIN = 22,
RUNTIME = 23,
MODULE = 24,
JAVASCRIPT = 25,
DEFERRED = 26,
IF = 27,
FOR = 28,
WHILE = 29,
RETURN = 30,
CONSTEXPR = 31,
CONTINUE = 32,
BREAK = 33,
GOTO = 34,
OTHERWISE = 35,
TRY = 36,
LABEL = 37,
LABELS = 38,
TAIL = 39,
ISNT = 40,
IS = 41,
LET = 42,
CONST = 43,
EXTERN = 44,
ASSERT_TOKEN = 45,
CHECK_TOKEN = 46,
UNREACHABLE_TOKEN = 47,
DEBUG_TOKEN = 48,
ASSIGNMENT = 49,
ASSIGNMENT_OPERATOR = 50,
EQUAL = 51,
PLUS = 52,
MINUS = 53,
MULTIPLY = 54,
DIVIDE = 55,
MODULO = 56,
BIT_OR = 57,
BIT_AND = 58,
BIT_NOT = 59,
MAX = 60,
MIN = 61,
NOT_EQUAL = 62,
LESS_THAN = 63,
LESS_THAN_EQUAL = 64,
GREATER_THAN = 65,
GREATER_THAN_EQUAL = 66,
SHIFT_LEFT = 67,
SHIFT_RIGHT = 68,
SHIFT_RIGHT_ARITHMETIC = 69,
VARARGS = 70,
EQUALITY_OPERATOR = 71,
INCREMENT = 72,
DECREMENT = 73,
NOT = 74,
STRING_LITERAL = 75,
IDENTIFIER = 76,
WS = 77,
BLOCK_COMMENT = 78,
LINE_COMMENT = 79,
DECIMAL_LITERAL = 80
T__20 = 21,
MACRO = 22,
BUILTIN = 23,
RUNTIME = 24,
MODULE = 25,
JAVASCRIPT = 26,
DEFERRED = 27,
IF = 28,
FOR = 29,
WHILE = 30,
RETURN = 31,
CONSTEXPR = 32,
CONTINUE = 33,
BREAK = 34,
GOTO = 35,
OTHERWISE = 36,
TRY = 37,
LABEL = 38,
LABELS = 39,
TAIL = 40,
ISNT = 41,
IS = 42,
LET = 43,
CONST = 44,
EXTERN = 45,
ASSERT_TOKEN = 46,
CHECK_TOKEN = 47,
UNREACHABLE_TOKEN = 48,
DEBUG_TOKEN = 49,
ASSIGNMENT = 50,
ASSIGNMENT_OPERATOR = 51,
EQUAL = 52,
PLUS = 53,
MINUS = 54,
MULTIPLY = 55,
DIVIDE = 56,
MODULO = 57,
BIT_OR = 58,
BIT_AND = 59,
BIT_NOT = 60,
MAX = 61,
MIN = 62,
NOT_EQUAL = 63,
LESS_THAN = 64,
LESS_THAN_EQUAL = 65,
GREATER_THAN = 66,
GREATER_THAN_EQUAL = 67,
SHIFT_LEFT = 68,
SHIFT_RIGHT = 69,
SHIFT_RIGHT_ARITHMETIC = 70,
VARARGS = 71,
EQUALITY_OPERATOR = 72,
INCREMENT = 73,
DECREMENT = 74,
NOT = 75,
STRING_LITERAL = 76,
IDENTIFIER = 77,
WS = 78,
BLOCK_COMMENT = 79,
LINE_COMMENT = 80,
DECIMAL_LITERAL = 81
};
explicit TorqueLexer(antlr4::CharStream* input);
......
token literal names:
null
'('
')'
'=>'
','
':'
'type'
'?'
'||'
'&&'
'.'
'['
']'
'{'
'}'
';'
'of'
'else'
'extends'
'generates'
'operator'
'struct'
'macro'
'builtin'
'runtime'
'module'
'javascript'
'deferred'
'if'
'for'
'while'
'return'
'constexpr'
'continue'
'break'
'goto'
'otherwise'
'try'
'label'
'labels'
'tail'
'isnt'
'is'
'let'
'const'
'extern'
'assert'
'check'
'unreachable'
'debug'
'='
null
'=='
'+'
'-'
'*'
'/'
'%'
'|'
'&'
'~'
'max'
'min'
'!='
'<'
'<='
'>'
'>='
'<<'
'>>'
'>>>'
'...'
null
'++'
'--'
'!'
null
null
null
null
null
null
token symbolic names:
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
MACRO
BUILTIN
RUNTIME
MODULE
JAVASCRIPT
DEFERRED
IF
FOR
WHILE
RETURN
CONSTEXPR
CONTINUE
BREAK
GOTO
OTHERWISE
TRY
LABEL
LABELS
TAIL
ISNT
IS
LET
CONST
EXTERN
ASSERT_TOKEN
CHECK_TOKEN
UNREACHABLE_TOKEN
DEBUG_TOKEN
ASSIGNMENT
ASSIGNMENT_OPERATOR
EQUAL
PLUS
MINUS
MULTIPLY
DIVIDE
MODULO
BIT_OR
BIT_AND
BIT_NOT
MAX
MIN
NOT_EQUAL
LESS_THAN
LESS_THAN_EQUAL
GREATER_THAN
GREATER_THAN_EQUAL
SHIFT_LEFT
SHIFT_RIGHT
SHIFT_RIGHT_ARITHMETIC
VARARGS
EQUALITY_OPERATOR
INCREMENT
DECREMENT
NOT
STRING_LITERAL
IDENTIFIER
WS
BLOCK_COMMENT
LINE_COMMENT
DECIMAL_LITERAL
rule names:
T__0
T__1
T__2
T__3
T__4
T__5
T__6
T__7
T__8
T__9
T__10
T__11
T__12
T__13
T__14
T__15
T__16
T__17
T__18
T__19
T__20
MACRO
BUILTIN
RUNTIME
MODULE
JAVASCRIPT
DEFERRED
IF
FOR
WHILE
RETURN
CONSTEXPR
CONTINUE
BREAK
GOTO
OTHERWISE
TRY
LABEL
LABELS
TAIL
ISNT
IS
LET
CONST
EXTERN
ASSERT_TOKEN
CHECK_TOKEN
UNREACHABLE_TOKEN
DEBUG_TOKEN
ASSIGNMENT
ASSIGNMENT_OPERATOR
EQUAL
PLUS
MINUS
MULTIPLY
DIVIDE
MODULO
BIT_OR
BIT_AND
BIT_NOT
MAX
MIN
NOT_EQUAL
LESS_THAN
LESS_THAN_EQUAL
GREATER_THAN
GREATER_THAN_EQUAL
SHIFT_LEFT
SHIFT_RIGHT
SHIFT_RIGHT_ARITHMETIC
VARARGS
EQUALITY_OPERATOR
INCREMENT
DECREMENT
NOT
STRING_LITERAL
ESCAPE
IDENTIFIER
WS
BLOCK_COMMENT
LINE_COMMENT
DECIMAL_DIGIT
DECIMAL_INTEGER_LITERAL
EXPONENT_PART
DECIMAL_LITERAL
channel names:
DEFAULT_TOKEN_CHANNEL
HIDDEN
mode names:
DEFAULT_MODE
atn:
[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 83, 665, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 5, 52, 467, 10, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 55, 3, 55, 3, 56, 3, 56, 3, 57, 3, 57, 3, 58, 3, 58, 3, 59, 3, 59, 3, 60, 3, 60, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 5, 73, 525, 10, 73, 3, 74, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 7, 77, 538, 10, 77, 12, 77, 14, 77, 541, 11, 77, 3, 77, 3, 77, 3, 77, 3, 77, 7, 77, 547, 10, 77, 12, 77, 14, 77, 550, 11, 77, 3, 77, 5, 77, 553, 10, 77, 3, 78, 3, 78, 3, 78, 3, 79, 3, 79, 7, 79, 560, 10, 79, 12, 79, 14, 79, 563, 11, 79, 3, 80, 6, 80, 566, 10, 80, 13, 80, 14, 80, 567, 3, 80, 3, 80, 3, 81, 3, 81, 3, 81, 3, 81, 7, 81, 576, 10, 81, 12, 81, 14, 81, 579, 11, 81, 3, 81, 3, 81, 3, 81, 5, 81, 584, 10, 81, 3, 81, 3, 81, 3, 82, 3, 82, 3, 82, 3, 82, 7, 82, 592, 10, 82, 12, 82, 14, 82, 595, 11, 82, 3, 82, 3, 82, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 7, 84, 604, 10, 84, 12, 84, 14, 84, 607, 11, 84, 5, 84, 609, 10, 84, 3, 85, 3, 85, 5, 85, 613, 10, 85, 3, 85, 6, 85, 616, 10, 85, 13, 85, 14, 85, 617, 3, 86, 5, 86, 621, 10, 86, 3, 86, 3, 86, 3, 86, 7, 86, 626, 10, 86, 12, 86, 14, 86, 629, 11, 86, 3, 86, 5, 86, 632, 10, 86, 3, 86, 5, 86, 635, 10, 86, 3, 86, 3, 86, 6, 86, 639, 10, 86, 13, 86, 14, 86, 640, 3, 86, 5, 86, 644, 10, 86, 3, 86, 5, 86, 647, 10, 86, 3, 86, 3, 86, 5, 86, 651, 10, 86, 3, 86, 5, 86, 654, 10, 86, 3, 86, 3, 86, 3, 86, 3, 86, 6, 86, 660, 10, 86, 13, 86, 14, 86, 661, 5, 86, 664, 10, 86, 3, 577, 2, 87, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 75, 149, 76, 151, 77, 153, 78, 155, 2, 157, 79, 159, 80, 161, 81, 163, 82, 165, 2, 167, 2, 169, 2, 171, 83, 3, 2, 14, 6, 2, 12, 12, 15, 15, 36, 36, 94, 94, 6, 2, 12, 12, 15, 15, 41, 41, 94, 94, 7, 2, 36, 36, 41, 41, 94, 94, 112, 112, 116, 116, 4, 2, 67, 92, 99, 124, 6, 2, 50, 59, 67, 92, 97, 97, 99, 124, 5, 2, 11, 12, 14, 15, 34, 34, 4, 2, 12, 12, 15, 15, 3, 2, 50, 59, 3, 2, 51, 59, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 5, 2, 50, 59, 67, 72, 99, 104, 2, 698, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 2, 161, 3, 2, 2, 2, 2, 163, 3, 2, 2, 2, 2, 171, 3, 2, 2, 2, 3, 173, 3, 2, 2, 2, 5, 175, 3, 2, 2, 2, 7, 177, 3, 2, 2, 2, 9, 180, 3, 2, 2, 2, 11, 182, 3, 2, 2, 2, 13, 184, 3, 2, 2, 2, 15, 189, 3, 2, 2, 2, 17, 191, 3, 2, 2, 2, 19, 194, 3, 2, 2, 2, 21, 197, 3, 2, 2, 2, 23, 199, 3, 2, 2, 2, 25, 201, 3, 2, 2, 2, 27, 203, 3, 2, 2, 2, 29, 205, 3, 2, 2, 2, 31, 207, 3, 2, 2, 2, 33, 209, 3, 2, 2, 2, 35, 212, 3, 2, 2, 2, 37, 217, 3, 2, 2, 2, 39, 225, 3, 2, 2, 2, 41, 235, 3, 2, 2, 2, 43, 244, 3, 2, 2, 2, 45, 251, 3, 2, 2, 2, 47, 257, 3, 2, 2, 2, 49, 265, 3, 2, 2, 2, 51, 273, 3, 2, 2, 2, 53, 280, 3, 2, 2, 2, 55, 291, 3, 2, 2, 2, 57, 300, 3, 2, 2, 2, 59, 303, 3, 2, 2, 2, 61, 307, 3, 2, 2, 2, 63, 313, 3, 2, 2, 2, 65, 320, 3, 2, 2, 2, 67, 330, 3, 2, 2, 2, 69, 339, 3, 2, 2, 2, 71, 345, 3, 2, 2, 2, 73, 350, 3, 2, 2, 2, 75, 360, 3, 2, 2, 2, 77, 364, 3, 2, 2, 2, 79, 370, 3, 2, 2, 2, 81, 377, 3, 2, 2, 2, 83, 382, 3, 2, 2, 2, 85, 387, 3, 2, 2, 2, 87, 390, 3, 2, 2, 2, 89, 394, 3, 2, 2, 2, 91, 400, 3, 2, 2, 2, 93, 407, 3, 2, 2, 2, 95, 414, 3, 2, 2, 2, 97, 420, 3, 2, 2, 2, 99, 432, 3, 2, 2, 2, 101, 438, 3, 2, 2, 2, 103, 466, 3, 2, 2, 2, 105, 468, 3, 2, 2, 2, 107, 471, 3, 2, 2, 2, 109, 473, 3, 2, 2, 2, 111, 475, 3, 2, 2, 2, 113, 477, 3, 2, 2, 2, 115, 479, 3, 2, 2, 2, 117, 481, 3, 2, 2, 2, 119, 483, 3, 2, 2, 2, 121, 485, 3, 2, 2, 2, 123, 487, 3, 2, 2, 2, 125, 491, 3, 2, 2, 2, 127, 495, 3, 2, 2, 2, 129, 498, 3, 2, 2, 2, 131, 500, 3, 2, 2, 2, 133, 503, 3, 2, 2, 2, 135, 505, 3, 2, 2, 2, 137, 508, 3, 2, 2, 2, 139, 511, 3, 2, 2, 2, 141, 514, 3, 2, 2, 2, 143, 518, 3, 2, 2, 2, 145, 524, 3, 2, 2, 2, 147, 526, 3, 2, 2, 2, 149, 529, 3, 2, 2, 2, 151, 532, 3, 2, 2, 2, 153, 552, 3, 2, 2, 2, 155, 554, 3, 2, 2, 2, 157, 557, 3, 2, 2, 2, 159, 565, 3, 2, 2, 2, 161, 571, 3, 2, 2, 2, 163, 587, 3, 2, 2, 2, 165, 598, 3, 2, 2, 2, 167, 608, 3, 2, 2, 2, 169, 610, 3, 2, 2, 2, 171, 663, 3, 2, 2, 2, 173, 174, 7, 42, 2, 2, 174, 4, 3, 2, 2, 2, 175, 176, 7, 43, 2, 2, 176, 6, 3, 2, 2, 2, 177, 178, 7, 63, 2, 2, 178, 179, 7, 64, 2, 2, 179, 8, 3, 2, 2, 2, 180, 181, 7, 46, 2, 2, 181, 10, 3, 2, 2, 2, 182, 183, 7, 60, 2, 2, 183, 12, 3, 2, 2, 2, 184, 185, 7, 118, 2, 2, 185, 186, 7, 123, 2, 2, 186, 187, 7, 114, 2, 2, 187, 188, 7, 103, 2, 2, 188, 14, 3, 2, 2, 2, 189, 190, 7, 65, 2, 2, 190, 16, 3, 2, 2, 2, 191, 192, 7, 126, 2, 2, 192, 193, 7, 126, 2, 2, 193, 18, 3, 2, 2, 2, 194, 195, 7, 40, 2, 2, 195, 196, 7, 40, 2, 2, 196, 20, 3, 2, 2, 2, 197, 198, 7, 48, 2, 2, 198, 22, 3, 2, 2, 2, 199, 200, 7, 93, 2, 2, 200, 24, 3, 2, 2, 2, 201, 202, 7, 95, 2, 2, 202, 26, 3, 2, 2, 2, 203, 204, 7, 125, 2, 2, 204, 28, 3, 2, 2, 2, 205, 206, 7, 127, 2, 2, 206, 30, 3, 2, 2, 2, 207, 208, 7, 61, 2, 2, 208, 32, 3, 2, 2, 2, 209, 210, 7, 113, 2, 2, 210, 211, 7, 104, 2, 2, 211, 34, 3, 2, 2, 2, 212, 213, 7, 103, 2, 2, 213, 214, 7, 110, 2, 2, 214, 215, 7, 117, 2, 2, 215, 216, 7, 103, 2, 2, 216, 36, 3, 2, 2, 2, 217, 218, 7, 103, 2, 2, 218, 219, 7, 122, 2, 2, 219, 220, 7, 118, 2, 2, 220, 221, 7, 103, 2, 2, 221, 222, 7, 112, 2, 2, 222, 223, 7, 102, 2, 2, 223, 224, 7, 117, 2, 2, 224, 38, 3, 2, 2, 2, 225, 226, 7, 105, 2, 2, 226, 227, 7, 103, 2, 2, 227, 228, 7, 112, 2, 2, 228, 229, 7, 103, 2, 2, 229, 230, 7, 116, 2, 2, 230, 231, 7, 99, 2, 2, 231, 232, 7, 118, 2, 2, 232, 233, 7, 103, 2, 2, 233, 234, 7, 117, 2, 2, 234, 40, 3, 2, 2, 2, 235, 236, 7, 113, 2, 2, 236, 237, 7, 114, 2, 2, 237, 238, 7, 103, 2, 2, 238, 239, 7, 116, 2, 2, 239, 240, 7, 99, 2, 2, 240, 241, 7, 118, 2, 2, 241, 242, 7, 113, 2, 2, 242, 243, 7, 116, 2, 2, 243, 42, 3, 2, 2, 2, 244, 245, 7, 117, 2, 2, 245, 246, 7, 118, 2, 2, 246, 247, 7, 116, 2, 2, 247, 248, 7, 119, 2, 2, 248, 249, 7, 101, 2, 2, 249, 250, 7, 118, 2, 2, 250, 44, 3, 2, 2, 2, 251, 252, 7, 111, 2, 2, 252, 253, 7, 99, 2, 2, 253, 254, 7, 101, 2, 2, 254, 255, 7, 116, 2, 2, 255, 256, 7, 113, 2, 2, 256, 46, 3, 2, 2, 2, 257, 258, 7, 100, 2, 2, 258, 259, 7, 119, 2, 2, 259, 260, 7, 107, 2, 2, 260, 261, 7, 110, 2, 2, 261, 262, 7, 118, 2, 2, 262, 263, 7, 107, 2, 2, 263, 264, 7, 112, 2, 2, 264, 48, 3, 2, 2, 2, 265, 266, 7, 116, 2, 2, 266, 267, 7, 119, 2, 2, 267, 268, 7, 112, 2, 2, 268, 269, 7, 118, 2, 2, 269, 270, 7, 107, 2, 2, 270, 271, 7, 111, 2, 2, 271, 272, 7, 103, 2, 2, 272, 50, 3, 2, 2, 2, 273, 274, 7, 111, 2, 2, 274, 275, 7, 113, 2, 2, 275, 276, 7, 102, 2, 2, 276, 277, 7, 119, 2, 2, 277, 278, 7, 110, 2, 2, 278, 279, 7, 103, 2, 2, 279, 52, 3, 2, 2, 2, 280, 281, 7, 108, 2, 2, 281, 282, 7, 99, 2, 2, 282, 283, 7, 120, 2, 2, 283, 284, 7, 99, 2, 2, 284, 285, 7, 117, 2, 2, 285, 286, 7, 101, 2, 2, 286, 287, 7, 116, 2, 2, 287, 288, 7, 107, 2, 2, 288, 289, 7, 114, 2, 2, 289, 290, 7, 118, 2, 2, 290, 54, 3, 2, 2, 2, 291, 292, 7, 102, 2, 2, 292, 293, 7, 103, 2, 2, 293, 294, 7, 104, 2, 2, 294, 295, 7, 103, 2, 2, 295, 296, 7, 116, 2, 2, 296, 297, 7, 116, 2, 2, 297, 298, 7, 103, 2, 2, 298, 299, 7, 102, 2, 2, 299, 56, 3, 2, 2, 2, 300, 301, 7, 107, 2, 2, 301, 302, 7, 104, 2, 2, 302, 58, 3, 2, 2, 2, 303, 304, 7, 104, 2, 2, 304, 305, 7, 113, 2, 2, 305, 306, 7, 116, 2, 2, 306, 60, 3, 2, 2, 2, 307, 308, 7, 121, 2, 2, 308, 309, 7, 106, 2, 2, 309, 310, 7, 107, 2, 2, 310, 311, 7, 110, 2, 2, 311, 312, 7, 103, 2, 2, 312, 62, 3, 2, 2, 2, 313, 314, 7, 116, 2, 2, 314, 315, 7, 103, 2, 2, 315, 316, 7, 118, 2, 2, 316, 317, 7, 119, 2, 2, 317, 318, 7, 116, 2, 2, 318, 319, 7, 112, 2, 2, 319, 64, 3, 2, 2, 2, 320, 321, 7, 101, 2, 2, 321, 322, 7, 113, 2, 2, 322, 323, 7, 112, 2, 2, 323, 324, 7, 117, 2, 2, 324, 325, 7, 118, 2, 2, 325, 326, 7, 103, 2, 2, 326, 327, 7, 122, 2, 2, 327, 328, 7, 114, 2, 2, 328, 329, 7, 116, 2, 2, 329, 66, 3, 2, 2, 2, 330, 331, 7, 101, 2, 2, 331, 332, 7, 113, 2, 2, 332, 333, 7, 112, 2, 2, 333, 334, 7, 118, 2, 2, 334, 335, 7, 107, 2, 2, 335, 336, 7, 112, 2, 2, 336, 337, 7, 119, 2, 2, 337, 338, 7, 103, 2, 2, 338, 68, 3, 2, 2, 2, 339, 340, 7, 100, 2, 2, 340, 341, 7, 116, 2, 2, 341, 342, 7, 103, 2, 2, 342, 343, 7, 99, 2, 2, 343, 344, 7, 109, 2, 2, 344, 70, 3, 2, 2, 2, 345, 346, 7, 105, 2, 2, 346, 347, 7, 113, 2, 2, 347, 348, 7, 118, 2, 2, 348, 349, 7, 113, 2, 2, 349, 72, 3, 2, 2, 2, 350, 351, 7, 113, 2, 2, 351, 352, 7, 118, 2, 2, 352, 353, 7, 106, 2, 2, 353, 354, 7, 103, 2, 2, 354, 355, 7, 116, 2, 2, 355, 356, 7, 121, 2, 2, 356, 357, 7, 107, 2, 2, 357, 358, 7, 117, 2, 2, 358, 359, 7, 103, 2, 2, 359, 74, 3, 2, 2, 2, 360, 361, 7, 118, 2, 2, 361, 362, 7, 116, 2, 2, 362, 363, 7, 123, 2, 2, 363, 76, 3, 2, 2, 2, 364, 365, 7, 110, 2, 2, 365, 366, 7, 99, 2, 2, 366, 367, 7, 100, 2, 2, 367, 368, 7, 103, 2, 2, 368, 369, 7, 110, 2, 2, 369, 78, 3, 2, 2, 2, 370, 371, 7, 110, 2, 2, 371, 372, 7, 99, 2, 2, 372, 373, 7, 100, 2, 2, 373, 374, 7, 103, 2, 2, 374, 375, 7, 110, 2, 2, 375, 376, 7, 117, 2, 2, 376, 80, 3, 2, 2, 2, 377, 378, 7, 118, 2, 2, 378, 379, 7, 99, 2, 2, 379, 380, 7, 107, 2, 2, 380, 381, 7, 110, 2, 2, 381, 82, 3, 2, 2, 2, 382, 383, 7, 107, 2, 2, 383, 384, 7, 117, 2, 2, 384, 385, 7, 112, 2, 2, 385, 386, 7, 118, 2, 2, 386, 84, 3, 2, 2, 2, 387, 388, 7, 107, 2, 2, 388, 389, 7, 117, 2, 2, 389, 86, 3, 2, 2, 2, 390, 391, 7, 110, 2, 2, 391, 392, 7, 103, 2, 2, 392, 393, 7, 118, 2, 2, 393, 88, 3, 2, 2, 2, 394, 395, 7, 101, 2, 2, 395, 396, 7, 113, 2, 2, 396, 397, 7, 112, 2, 2, 397, 398, 7, 117, 2, 2, 398, 399, 7, 118, 2, 2, 399, 90, 3, 2, 2, 2, 400, 401, 7, 103, 2, 2, 401, 402, 7, 122, 2, 2, 402, 403, 7, 118, 2, 2, 403, 404, 7, 103, 2, 2, 404, 405, 7, 116, 2, 2, 405, 406, 7, 112, 2, 2, 406, 92, 3, 2, 2, 2, 407, 408, 7, 99, 2, 2, 408, 409, 7, 117, 2, 2, 409, 410, 7, 117, 2, 2, 410, 411, 7, 103, 2, 2, 411, 412, 7, 116, 2, 2, 412, 413, 7, 118, 2, 2, 413, 94, 3, 2, 2, 2, 414, 415, 7, 101, 2, 2, 415, 416, 7, 106, 2, 2, 416, 417, 7, 103, 2, 2, 417, 418, 7, 101, 2, 2, 418, 419, 7, 109, 2, 2, 419, 96, 3, 2, 2, 2, 420, 421, 7, 119, 2, 2, 421, 422, 7, 112, 2, 2, 422, 423, 7, 116, 2, 2, 423, 424, 7, 103, 2, 2, 424, 425, 7, 99, 2, 2, 425, 426, 7, 101, 2, 2, 426, 427, 7, 106, 2, 2, 427, 428, 7, 99, 2, 2, 428, 429, 7, 100, 2, 2, 429, 430, 7, 110, 2, 2, 430, 431, 7, 103, 2, 2, 431, 98, 3, 2, 2, 2, 432, 433, 7, 102, 2, 2, 433, 434, 7, 103, 2, 2, 434, 435, 7, 100, 2, 2, 435, 436, 7, 119, 2, 2, 436, 437, 7, 105, 2, 2, 437, 100, 3, 2, 2, 2, 438, 439, 7, 63, 2, 2, 439, 102, 3, 2, 2, 2, 440, 441, 7, 44, 2, 2, 441, 467, 7, 63, 2, 2, 442, 443, 7, 49, 2, 2, 443, 467, 7, 63, 2, 2, 444, 445, 7, 39, 2, 2, 445, 467, 7, 63, 2, 2, 446, 447, 7, 45, 2, 2, 447, 467, 7, 63, 2, 2, 448, 449, 7, 47, 2, 2, 449, 467, 7, 63, 2, 2, 450, 451, 7, 62, 2, 2, 451, 452, 7, 62, 2, 2, 452, 467, 7, 63, 2, 2, 453, 454, 7, 64, 2, 2, 454, 455, 7, 64, 2, 2, 455, 467, 7, 63, 2, 2, 456, 457, 7, 64, 2, 2, 457, 458, 7, 64, 2, 2, 458, 459, 7, 64, 2, 2, 459, 467, 7, 63, 2, 2, 460, 461, 7, 40, 2, 2, 461, 467, 7, 63, 2, 2, 462, 463, 7, 96, 2, 2, 463, 467, 7, 63, 2, 2, 464, 465, 7, 126, 2, 2, 465, 467, 7, 63, 2, 2, 466, 440, 3, 2, 2, 2, 466, 442, 3, 2, 2, 2, 466, 444, 3, 2, 2, 2, 466, 446, 3, 2, 2, 2, 466, 448, 3, 2, 2, 2, 466, 450, 3, 2, 2, 2, 466, 453, 3, 2, 2, 2, 466, 456, 3, 2, 2, 2, 466, 460, 3, 2, 2, 2, 466, 462, 3, 2, 2, 2, 466, 464, 3, 2, 2, 2, 467, 104, 3, 2, 2, 2, 468, 469, 7, 63, 2, 2, 469, 470, 7, 63, 2, 2, 470, 106, 3, 2, 2, 2, 471, 472, 7, 45, 2, 2, 472, 108, 3, 2, 2, 2, 473, 474, 7, 47, 2, 2, 474, 110, 3, 2, 2, 2, 475, 476, 7, 44, 2, 2, 476, 112, 3, 2, 2, 2, 477, 478, 7, 49, 2, 2, 478, 114, 3, 2, 2, 2, 479, 480, 7, 39, 2, 2, 480, 116, 3, 2, 2, 2, 481, 482, 7, 126, 2, 2, 482, 118, 3, 2, 2, 2, 483, 484, 7, 40, 2, 2, 484, 120, 3, 2, 2, 2, 485, 486, 7, 128, 2, 2, 486, 122, 3, 2, 2, 2, 487, 488, 7, 111, 2, 2, 488, 489, 7, 99, 2, 2, 489, 490, 7, 122, 2, 2, 490, 124, 3, 2, 2, 2, 491, 492, 7, 111, 2, 2, 492, 493, 7, 107, 2, 2, 493, 494, 7, 112, 2, 2, 494, 126, 3, 2, 2, 2, 495, 496, 7, 35, 2, 2, 496, 497, 7, 63, 2, 2, 497, 128, 3, 2, 2, 2, 498, 499, 7, 62, 2, 2, 499, 130, 3, 2, 2, 2, 500, 501, 7, 62, 2, 2, 501, 502, 7, 63, 2, 2, 502, 132, 3, 2, 2, 2, 503, 504, 7, 64, 2, 2, 504, 134, 3, 2, 2, 2, 505, 506, 7, 64, 2, 2, 506, 507, 7, 63, 2, 2, 507, 136, 3, 2, 2, 2, 508, 509, 7, 62, 2, 2, 509, 510, 7, 62, 2, 2, 510, 138, 3, 2, 2, 2, 511, 512, 7, 64, 2, 2, 512, 513, 7, 64, 2, 2, 513, 140, 3, 2, 2, 2, 514, 515, 7, 64, 2, 2, 515, 516, 7, 64, 2, 2, 516, 517, 7, 64, 2, 2, 517, 142, 3, 2, 2, 2, 518, 519, 7, 48, 2, 2, 519, 520, 7, 48, 2, 2, 520, 521, 7, 48, 2, 2, 521, 144, 3, 2, 2, 2, 522, 525, 5, 105, 53, 2, 523, 525, 5, 127, 64, 2, 524, 522, 3, 2, 2, 2, 524, 523, 3, 2, 2, 2, 525, 146, 3, 2, 2, 2, 526, 527, 7, 45, 2, 2, 527, 528, 7, 45, 2, 2, 528, 148, 3, 2, 2, 2, 529, 530, 7, 47, 2, 2, 530, 531, 7, 47, 2, 2, 531, 150, 3, 2, 2, 2, 532, 533, 7, 35, 2, 2, 533, 152, 3, 2, 2, 2, 534, 539, 7, 36, 2, 2, 535, 538, 5, 155, 78, 2, 536, 538, 10, 2, 2, 2, 537, 535, 3, 2, 2, 2, 537, 536, 3, 2, 2, 2, 538, 541, 3, 2, 2, 2, 539, 537, 3, 2, 2, 2, 539, 540, 3, 2, 2, 2, 540, 542, 3, 2, 2, 2, 541, 539, 3, 2, 2, 2, 542, 553, 7, 36, 2, 2, 543, 548, 7, 41, 2, 2, 544, 547, 5, 155, 78, 2, 545, 547, 10, 3, 2, 2, 546, 544, 3, 2, 2, 2, 546, 545, 3, 2, 2, 2, 547, 550, 3, 2, 2, 2, 548, 546, 3, 2, 2, 2, 548, 549, 3, 2, 2, 2, 549, 551, 3, 2, 2, 2, 550, 548, 3, 2, 2, 2, 551, 553, 7, 41, 2, 2, 552, 534, 3, 2, 2, 2, 552, 543, 3, 2, 2, 2, 553, 154, 3, 2, 2, 2, 554, 555, 7, 94, 2, 2, 555, 556, 9, 4, 2, 2, 556, 156, 3, 2, 2, 2, 557, 561, 9, 5, 2, 2, 558, 560, 9, 6, 2, 2, 559, 558, 3, 2, 2, 2, 560, 563, 3, 2, 2, 2, 561, 559, 3, 2, 2, 2, 561, 562, 3, 2, 2, 2, 562, 158, 3, 2, 2, 2, 563, 561, 3, 2, 2, 2, 564, 566, 9, 7, 2, 2, 565, 564, 3, 2, 2, 2, 566, 567, 3, 2, 2, 2, 567, 565, 3, 2, 2, 2, 567, 568, 3, 2, 2, 2, 568, 569, 3, 2, 2, 2, 569, 570, 8, 80, 2, 2, 570, 160, 3, 2, 2, 2, 571, 572, 7, 49, 2, 2, 572, 573, 7, 44, 2, 2, 573, 577, 3, 2, 2, 2, 574, 576, 11, 2, 2, 2, 575, 574, 3, 2, 2, 2, 576, 579, 3, 2, 2, 2, 577, 578, 3, 2, 2, 2, 577, 575, 3, 2, 2, 2, 578, 583, 3, 2, 2, 2, 579, 577, 3, 2, 2, 2, 580, 581, 7, 44, 2, 2, 581, 584, 7, 49, 2, 2, 582, 584, 7, 2, 2, 3, 583, 580, 3, 2, 2, 2, 583, 582, 3, 2, 2, 2, 584, 585, 3, 2, 2, 2, 585, 586, 8, 81, 2, 2, 586, 162, 3, 2, 2, 2, 587, 588, 7, 49, 2, 2, 588, 589, 7, 49, 2, 2, 589, 593, 3, 2, 2, 2, 590, 592, 10, 8, 2, 2, 591, 590, 3, 2, 2, 2, 592, 595, 3, 2, 2, 2, 593, 591, 3, 2, 2, 2, 593, 594, 3, 2, 2, 2, 594, 596, 3, 2, 2, 2, 595, 593, 3, 2, 2, 2, 596, 597, 8, 82, 2, 2, 597, 164, 3, 2, 2, 2, 598, 599, 9, 9, 2, 2, 599, 166, 3, 2, 2, 2, 600, 609, 7, 50, 2, 2, 601, 605, 9, 10, 2, 2, 602, 604, 5, 165, 83, 2, 603, 602, 3, 2, 2, 2, 604, 607, 3, 2, 2, 2, 605, 603, 3, 2, 2, 2, 605, 606, 3, 2, 2, 2, 606, 609, 3, 2, 2, 2, 607, 605, 3, 2, 2, 2, 608, 600, 3, 2, 2, 2, 608, 601, 3, 2, 2, 2, 609, 168, 3, 2, 2, 2, 610, 612, 9, 11, 2, 2, 611, 613, 9, 12, 2, 2, 612, 611, 3, 2, 2, 2, 612, 613, 3, 2, 2, 2, 613, 615, 3, 2, 2, 2, 614, 616, 5, 165, 83, 2, 615, 614, 3, 2, 2, 2, 616, 617, 3, 2, 2, 2, 617, 615, 3, 2, 2, 2, 617, 618, 3, 2, 2, 2, 618, 170, 3, 2, 2, 2, 619, 621, 5, 109, 55, 2, 620, 619, 3, 2, 2, 2, 620, 621, 3, 2, 2, 2, 621, 622, 3, 2, 2, 2, 622, 623, 5, 167, 84, 2, 623, 627, 7, 48, 2, 2, 624, 626, 5, 165, 83, 2, 625, 624, 3, 2, 2, 2, 626, 629, 3, 2, 2, 2, 627, 625, 3, 2, 2, 2, 627, 628, 3, 2, 2, 2, 628, 631, 3, 2, 2, 2, 629, 627, 3, 2, 2, 2, 630, 632, 5, 169, 85, 2, 631, 630, 3, 2, 2, 2, 631, 632, 3, 2, 2, 2, 632, 664, 3, 2, 2, 2, 633, 635, 5, 109, 55, 2, 634, 633, 3, 2, 2, 2, 634, 635, 3, 2, 2, 2, 635, 636, 3, 2, 2, 2, 636, 638, 7, 48, 2, 2, 637, 639, 5, 165, 83, 2, 638, 637, 3, 2, 2, 2, 639, 640, 3, 2, 2, 2, 640, 638, 3, 2, 2, 2, 640, 641, 3, 2, 2, 2, 641, 643, 3, 2, 2, 2, 642, 644, 5, 169, 85, 2, 643, 642, 3, 2, 2, 2, 643, 644, 3, 2, 2, 2, 644, 664, 3, 2, 2, 2, 645, 647, 5, 109, 55, 2, 646, 645, 3, 2, 2, 2, 646, 647, 3, 2, 2, 2, 647, 648, 3, 2, 2, 2, 648, 650, 5, 167, 84, 2, 649, 651, 5, 169, 85, 2, 650, 649, 3, 2, 2, 2, 650, 651, 3, 2, 2, 2, 651, 664, 3, 2, 2, 2, 652, 654, 5, 109, 55, 2, 653, 652, 3, 2, 2, 2, 653, 654, 3, 2, 2, 2, 654, 655, 3, 2, 2, 2, 655, 656, 7, 50, 2, 2, 656, 657, 7, 122, 2, 2, 657, 659, 3, 2, 2, 2, 658, 660, 9, 13, 2, 2, 659, 658, 3, 2, 2, 2, 660, 661, 3, 2, 2, 2, 661, 659, 3, 2, 2, 2, 661, 662, 3, 2, 2, 2, 662, 664, 3, 2, 2, 2, 663, 620, 3, 2, 2, 2, 663, 634, 3, 2, 2, 2, 663, 646, 3, 2, 2, 2, 663, 653, 3, 2, 2, 2, 664, 172, 3, 2, 2, 2, 30, 2, 466, 524, 537, 539, 546, 548, 552, 561, 567, 577, 583, 593, 605, 608, 612, 617, 620, 627, 631, 634, 640, 643, 646, 650, 653, 661, 663, 3, 2, 3, 2]
\ No newline at end of file
T__0=1
T__1=2
T__2=3
T__3=4
T__4=5
T__5=6
T__6=7
T__7=8
T__8=9
T__9=10
T__10=11
T__11=12
T__12=13
T__13=14
T__14=15
T__15=16
T__16=17
T__17=18
T__18=19
T__19=20
T__20=21
MACRO=22
BUILTIN=23
RUNTIME=24
MODULE=25
JAVASCRIPT=26
DEFERRED=27
IF=28
FOR=29
WHILE=30
RETURN=31
CONSTEXPR=32
CONTINUE=33
BREAK=34
GOTO=35
OTHERWISE=36
TRY=37
LABEL=38
LABELS=39
TAIL=40
ISNT=41
IS=42
LET=43
CONST=44
EXTERN=45
ASSERT_TOKEN=46
CHECK_TOKEN=47
UNREACHABLE_TOKEN=48
DEBUG_TOKEN=49
ASSIGNMENT=50
ASSIGNMENT_OPERATOR=51
EQUAL=52
PLUS=53
MINUS=54
MULTIPLY=55
DIVIDE=56
MODULO=57
BIT_OR=58
BIT_AND=59
BIT_NOT=60
MAX=61
MIN=62
NOT_EQUAL=63
LESS_THAN=64
LESS_THAN_EQUAL=65
GREATER_THAN=66
GREATER_THAN_EQUAL=67
SHIFT_LEFT=68
SHIFT_RIGHT=69
SHIFT_RIGHT_ARITHMETIC=70
VARARGS=71
EQUALITY_OPERATOR=72
INCREMENT=73
DECREMENT=74
NOT=75
STRING_LITERAL=76
IDENTIFIER=77
WS=78
BLOCK_COMMENT=79
LINE_COMMENT=80
DECIMAL_LITERAL=81
'('=1
')'=2
'=>'=3
','=4
':'=5
'type'=6
'?'=7
'||'=8
'&&'=9
'.'=10
'['=11
']'=12
'{'=13
'}'=14
';'=15
'of'=16
'else'=17
'extends'=18
'generates'=19
'operator'=20
'struct'=21
'macro'=22
'builtin'=23
'runtime'=24
'module'=25
'javascript'=26
'deferred'=27
'if'=28
'for'=29
'while'=30
'return'=31
'constexpr'=32
'continue'=33
'break'=34
'goto'=35
'otherwise'=36
'try'=37
'label'=38
'labels'=39
'tail'=40
'isnt'=41
'is'=42
'let'=43
'const'=44
'extern'=45
'assert'=46
'check'=47
'unreachable'=48
'debug'=49
'='=50
'=='=52
'+'=53
'-'=54
'*'=55
'/'=56
'%'=57
'|'=58
'&'=59
'~'=60
'max'=61
'min'=62
'!='=63
'<'=64
'<='=65
'>'=66
'>='=67
'<<'=68
'>>'=69
'>>>'=70
'...'=71
'++'=73
'--'=74
'!'=75
......@@ -137,6 +137,16 @@ class TorqueListener : public antlr4::tree::ParseTreeListener {
virtual void exitAssignmentExpression(
TorqueParser::AssignmentExpressionContext* ctx) = 0;
virtual void enterStructExpression(
TorqueParser::StructExpressionContext* ctx) = 0;
virtual void exitStructExpression(
TorqueParser::StructExpressionContext* ctx) = 0;
virtual void enterFunctionPointerExpression(
TorqueParser::FunctionPointerExpressionContext* ctx) = 0;
virtual void exitFunctionPointerExpression(
TorqueParser::FunctionPointerExpressionContext* ctx) = 0;
virtual void enterPrimaryExpression(
TorqueParser::PrimaryExpressionContext* ctx) = 0;
virtual void exitPrimaryExpression(
......@@ -248,6 +258,16 @@ class TorqueListener : public antlr4::tree::ParseTreeListener {
virtual void enterHelperBody(TorqueParser::HelperBodyContext* ctx) = 0;
virtual void exitHelperBody(TorqueParser::HelperBodyContext* ctx) = 0;
virtual void enterFieldDeclaration(
TorqueParser::FieldDeclarationContext* ctx) = 0;
virtual void exitFieldDeclaration(
TorqueParser::FieldDeclarationContext* ctx) = 0;
virtual void enterFieldListDeclaration(
TorqueParser::FieldListDeclarationContext* ctx) = 0;
virtual void exitFieldListDeclaration(
TorqueParser::FieldListDeclarationContext* ctx) = 0;
virtual void enterExtendsDeclaration(
TorqueParser::ExtendsDeclarationContext* ctx) = 0;
virtual void exitExtendsDeclaration(
......@@ -311,6 +331,11 @@ class TorqueListener : public antlr4::tree::ParseTreeListener {
virtual void exitConstDeclaration(
TorqueParser::ConstDeclarationContext* ctx) = 0;
virtual void enterStructDeclaration(
TorqueParser::StructDeclarationContext* ctx) = 0;
virtual void exitStructDeclaration(
TorqueParser::StructDeclarationContext* ctx) = 0;
virtual void enterDeclaration(TorqueParser::DeclarationContext* ctx) = 0;
virtual void exitDeclaration(TorqueParser::DeclarationContext* ctx) = 0;
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -33,66 +33,67 @@ class TorqueParser : public antlr4::Parser {
T__17 = 18,
T__18 = 19,
T__19 = 20,
MACRO = 21,
BUILTIN = 22,
RUNTIME = 23,
MODULE = 24,
JAVASCRIPT = 25,
DEFERRED = 26,
IF = 27,
FOR = 28,
WHILE = 29,
RETURN = 30,
CONSTEXPR = 31,
CONTINUE = 32,
BREAK = 33,
GOTO = 34,
OTHERWISE = 35,
TRY = 36,
LABEL = 37,
LABELS = 38,
TAIL = 39,
ISNT = 40,
IS = 41,
LET = 42,
CONST = 43,
EXTERN = 44,
ASSERT_TOKEN = 45,
CHECK_TOKEN = 46,
UNREACHABLE_TOKEN = 47,
DEBUG_TOKEN = 48,
ASSIGNMENT = 49,
ASSIGNMENT_OPERATOR = 50,
EQUAL = 51,
PLUS = 52,
MINUS = 53,
MULTIPLY = 54,
DIVIDE = 55,
MODULO = 56,
BIT_OR = 57,
BIT_AND = 58,
BIT_NOT = 59,
MAX = 60,
MIN = 61,
NOT_EQUAL = 62,
LESS_THAN = 63,
LESS_THAN_EQUAL = 64,
GREATER_THAN = 65,
GREATER_THAN_EQUAL = 66,
SHIFT_LEFT = 67,
SHIFT_RIGHT = 68,
SHIFT_RIGHT_ARITHMETIC = 69,
VARARGS = 70,
EQUALITY_OPERATOR = 71,
INCREMENT = 72,
DECREMENT = 73,
NOT = 74,
STRING_LITERAL = 75,
IDENTIFIER = 76,
WS = 77,
BLOCK_COMMENT = 78,
LINE_COMMENT = 79,
DECIMAL_LITERAL = 80
T__20 = 21,
MACRO = 22,
BUILTIN = 23,
RUNTIME = 24,
MODULE = 25,
JAVASCRIPT = 26,
DEFERRED = 27,
IF = 28,
FOR = 29,
WHILE = 30,
RETURN = 31,
CONSTEXPR = 32,
CONTINUE = 33,
BREAK = 34,
GOTO = 35,
OTHERWISE = 36,
TRY = 37,
LABEL = 38,
LABELS = 39,
TAIL = 40,
ISNT = 41,
IS = 42,
LET = 43,
CONST = 44,
EXTERN = 45,
ASSERT_TOKEN = 46,
CHECK_TOKEN = 47,
UNREACHABLE_TOKEN = 48,
DEBUG_TOKEN = 49,
ASSIGNMENT = 50,
ASSIGNMENT_OPERATOR = 51,
EQUAL = 52,
PLUS = 53,
MINUS = 54,
MULTIPLY = 55,
DIVIDE = 56,
MODULO = 57,
BIT_OR = 58,
BIT_AND = 59,
BIT_NOT = 60,
MAX = 61,
MIN = 62,
NOT_EQUAL = 63,
LESS_THAN = 64,
LESS_THAN_EQUAL = 65,
GREATER_THAN = 66,
GREATER_THAN_EQUAL = 67,
SHIFT_LEFT = 68,
SHIFT_RIGHT = 69,
SHIFT_RIGHT_ARITHMETIC = 70,
VARARGS = 71,
EQUALITY_OPERATOR = 72,
INCREMENT = 73,
DECREMENT = 74,
NOT = 75,
STRING_LITERAL = 76,
IDENTIFIER = 77,
WS = 78,
BLOCK_COMMENT = 79,
LINE_COMMENT = 80,
DECIMAL_LITERAL = 81
};
enum {
......@@ -123,50 +124,55 @@ class TorqueParser : public antlr4::Parser {
RuleIncrementDecrement = 24,
RuleAssignment = 25,
RuleAssignmentExpression = 26,
RulePrimaryExpression = 27,
RuleForInitialization = 28,
RuleForLoop = 29,
RuleRangeSpecifier = 30,
RuleForOfRange = 31,
RuleForOfLoop = 32,
RuleArgument = 33,
RuleArgumentList = 34,
RuleHelperCall = 35,
RuleLabelReference = 36,
RuleVariableDeclaration = 37,
RuleVariableDeclarationWithInitialization = 38,
RuleHelperCallStatement = 39,
RuleExpressionStatement = 40,
RuleIfStatement = 41,
RuleWhileLoop = 42,
RuleReturnStatement = 43,
RuleBreakStatement = 44,
RuleContinueStatement = 45,
RuleGotoStatement = 46,
RuleHandlerWithStatement = 47,
RuleTryLabelStatement = 48,
RuleDiagnosticStatement = 49,
RuleStatement = 50,
RuleStatementList = 51,
RuleStatementScope = 52,
RuleStatementBlock = 53,
RuleHelperBody = 54,
RuleExtendsDeclaration = 55,
RuleGeneratesDeclaration = 56,
RuleConstexprDeclaration = 57,
RuleTypeDeclaration = 58,
RuleTypeAliasDeclaration = 59,
RuleExternalBuiltin = 60,
RuleExternalMacro = 61,
RuleExternalRuntime = 62,
RuleBuiltinDeclaration = 63,
RuleGenericSpecialization = 64,
RuleMacroDeclaration = 65,
RuleExternConstDeclaration = 66,
RuleConstDeclaration = 67,
RuleDeclaration = 68,
RuleModuleDeclaration = 69,
RuleFile = 70
RuleStructExpression = 27,
RuleFunctionPointerExpression = 28,
RulePrimaryExpression = 29,
RuleForInitialization = 30,
RuleForLoop = 31,
RuleRangeSpecifier = 32,
RuleForOfRange = 33,
RuleForOfLoop = 34,
RuleArgument = 35,
RuleArgumentList = 36,
RuleHelperCall = 37,
RuleLabelReference = 38,
RuleVariableDeclaration = 39,
RuleVariableDeclarationWithInitialization = 40,
RuleHelperCallStatement = 41,
RuleExpressionStatement = 42,
RuleIfStatement = 43,
RuleWhileLoop = 44,
RuleReturnStatement = 45,
RuleBreakStatement = 46,
RuleContinueStatement = 47,
RuleGotoStatement = 48,
RuleHandlerWithStatement = 49,
RuleTryLabelStatement = 50,
RuleDiagnosticStatement = 51,
RuleStatement = 52,
RuleStatementList = 53,
RuleStatementScope = 54,
RuleStatementBlock = 55,
RuleHelperBody = 56,
RuleFieldDeclaration = 57,
RuleFieldListDeclaration = 58,
RuleExtendsDeclaration = 59,
RuleGeneratesDeclaration = 60,
RuleConstexprDeclaration = 61,
RuleTypeDeclaration = 62,
RuleTypeAliasDeclaration = 63,
RuleExternalBuiltin = 64,
RuleExternalMacro = 65,
RuleExternalRuntime = 66,
RuleBuiltinDeclaration = 67,
RuleGenericSpecialization = 68,
RuleMacroDeclaration = 69,
RuleExternConstDeclaration = 70,
RuleConstDeclaration = 71,
RuleStructDeclaration = 72,
RuleDeclaration = 73,
RuleModuleDeclaration = 74,
RuleFile = 75
};
explicit TorqueParser(antlr4::TokenStream* input);
......@@ -207,6 +213,8 @@ class TorqueParser : public antlr4::Parser {
class IncrementDecrementContext;
class AssignmentContext;
class AssignmentExpressionContext;
class StructExpressionContext;
class FunctionPointerExpressionContext;
class PrimaryExpressionContext;
class ForInitializationContext;
class ForLoopContext;
......@@ -235,6 +243,8 @@ class TorqueParser : public antlr4::Parser {
class StatementScopeContext;
class StatementBlockContext;
class HelperBodyContext;
class FieldDeclarationContext;
class FieldListDeclarationContext;
class ExtendsDeclarationContext;
class GeneratesDeclarationContext;
class ConstexprDeclarationContext;
......@@ -248,6 +258,7 @@ class TorqueParser : public antlr4::Parser {
class MacroDeclarationContext;
class ExternConstDeclarationContext;
class ConstDeclarationContext;
class StructDeclarationContext;
class DeclarationContext;
class ModuleDeclarationContext;
class FileContext;
......@@ -658,9 +669,9 @@ class TorqueParser : public antlr4::Parser {
size_t invokingState);
size_t getRuleIndex() const override;
antlr4::tree::TerminalNode* IDENTIFIER();
GenericSpecializationTypeListContext* genericSpecializationTypeList();
LocationExpressionContext* locationExpression();
PrimaryExpressionContext* primaryExpression();
ExpressionContext* expression();
LocationExpressionContext* locationExpression();
void enterRule(antlr4::tree::ParseTreeListener* listener) override;
void exitRule(antlr4::tree::ParseTreeListener* listener) override;
......@@ -711,7 +722,7 @@ class TorqueParser : public antlr4::Parser {
AssignmentExpressionContext(antlr4::ParserRuleContext* parent,
size_t invokingState);
size_t getRuleIndex() const override;
PrimaryExpressionContext* primaryExpression();
FunctionPointerExpressionContext* functionPointerExpression();
AssignmentContext* assignment();
void enterRule(antlr4::tree::ParseTreeListener* listener) override;
......@@ -722,12 +733,47 @@ class TorqueParser : public antlr4::Parser {
AssignmentExpressionContext* assignmentExpression();
class StructExpressionContext : public antlr4::ParserRuleContext {
public:
StructExpressionContext(antlr4::ParserRuleContext* parent,
size_t invokingState);
size_t getRuleIndex() const override;
antlr4::tree::TerminalNode* IDENTIFIER();
std::vector<ExpressionContext*> expression();
ExpressionContext* expression(size_t i);
void enterRule(antlr4::tree::ParseTreeListener* listener) override;
void exitRule(antlr4::tree::ParseTreeListener* listener) override;
antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor* visitor) override;
};
StructExpressionContext* structExpression();
class FunctionPointerExpressionContext : public antlr4::ParserRuleContext {
public:
FunctionPointerExpressionContext(antlr4::ParserRuleContext* parent,
size_t invokingState);
size_t getRuleIndex() const override;
PrimaryExpressionContext* primaryExpression();
antlr4::tree::TerminalNode* IDENTIFIER();
GenericSpecializationTypeListContext* genericSpecializationTypeList();
void enterRule(antlr4::tree::ParseTreeListener* listener) override;
void exitRule(antlr4::tree::ParseTreeListener* listener) override;
antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor* visitor) override;
};
FunctionPointerExpressionContext* functionPointerExpression();
class PrimaryExpressionContext : public antlr4::ParserRuleContext {
public:
PrimaryExpressionContext(antlr4::ParserRuleContext* parent,
size_t invokingState);
size_t getRuleIndex() const override;
HelperCallContext* helperCall();
StructExpressionContext* structExpression();
antlr4::tree::TerminalNode* DECIMAL_LITERAL();
antlr4::tree::TerminalNode* STRING_LITERAL();
ExpressionContext* expression();
......@@ -1196,6 +1242,38 @@ class TorqueParser : public antlr4::Parser {
HelperBodyContext* helperBody();
class FieldDeclarationContext : public antlr4::ParserRuleContext {
public:
FieldDeclarationContext(antlr4::ParserRuleContext* parent,
size_t invokingState);
size_t getRuleIndex() const override;
antlr4::tree::TerminalNode* IDENTIFIER();
TypeContext* type();
void enterRule(antlr4::tree::ParseTreeListener* listener) override;
void exitRule(antlr4::tree::ParseTreeListener* listener) override;
antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor* visitor) override;
};
FieldDeclarationContext* fieldDeclaration();
class FieldListDeclarationContext : public antlr4::ParserRuleContext {
public:
FieldListDeclarationContext(antlr4::ParserRuleContext* parent,
size_t invokingState);
size_t getRuleIndex() const override;
std::vector<FieldDeclarationContext*> fieldDeclaration();
FieldDeclarationContext* fieldDeclaration(size_t i);
void enterRule(antlr4::tree::ParseTreeListener* listener) override;
void exitRule(antlr4::tree::ParseTreeListener* listener) override;
antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor* visitor) override;
};
FieldListDeclarationContext* fieldListDeclaration();
class ExtendsDeclarationContext : public antlr4::ParserRuleContext {
public:
ExtendsDeclarationContext(antlr4::ParserRuleContext* parent,
......@@ -1437,10 +1515,27 @@ class TorqueParser : public antlr4::Parser {
ConstDeclarationContext* constDeclaration();
class StructDeclarationContext : public antlr4::ParserRuleContext {
public:
StructDeclarationContext(antlr4::ParserRuleContext* parent,
size_t invokingState);
size_t getRuleIndex() const override;
antlr4::tree::TerminalNode* IDENTIFIER();
FieldListDeclarationContext* fieldListDeclaration();
void enterRule(antlr4::tree::ParseTreeListener* listener) override;
void exitRule(antlr4::tree::ParseTreeListener* listener) override;
antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor* visitor) override;
};
StructDeclarationContext* structDeclaration();
class DeclarationContext : public antlr4::ParserRuleContext {
public:
DeclarationContext(antlr4::ParserRuleContext* parent, size_t invokingState);
size_t getRuleIndex() const override;
StructDeclarationContext* structDeclaration();
TypeDeclarationContext* typeDeclaration();
TypeAliasDeclarationContext* typeAliasDeclaration();
BuiltinDeclarationContext* builtinDeclaration();
......
......@@ -100,6 +100,12 @@ class TorqueVisitor : public antlr4::tree::AbstractParseTreeVisitor {
virtual antlrcpp::Any visitAssignmentExpression(
TorqueParser::AssignmentExpressionContext* context) = 0;
virtual antlrcpp::Any visitStructExpression(
TorqueParser::StructExpressionContext* context) = 0;
virtual antlrcpp::Any visitFunctionPointerExpression(
TorqueParser::FunctionPointerExpressionContext* context) = 0;
virtual antlrcpp::Any visitPrimaryExpression(
TorqueParser::PrimaryExpressionContext* context) = 0;
......@@ -183,6 +189,12 @@ class TorqueVisitor : public antlr4::tree::AbstractParseTreeVisitor {
virtual antlrcpp::Any visitHelperBody(
TorqueParser::HelperBodyContext* context) = 0;
virtual antlrcpp::Any visitFieldDeclaration(
TorqueParser::FieldDeclarationContext* context) = 0;
virtual antlrcpp::Any visitFieldListDeclaration(
TorqueParser::FieldListDeclarationContext* context) = 0;
virtual antlrcpp::Any visitExtendsDeclaration(
TorqueParser::ExtendsDeclarationContext* context) = 0;
......@@ -222,6 +234,9 @@ class TorqueVisitor : public antlr4::tree::AbstractParseTreeVisitor {
virtual antlrcpp::Any visitConstDeclaration(
TorqueParser::ConstDeclarationContext* context) = 0;
virtual antlrcpp::Any visitStructDeclaration(
TorqueParser::StructDeclarationContext* context) = 0;
virtual antlrcpp::Any visitDeclaration(
TorqueParser::DeclarationContext* context) = 0;
......
......@@ -545,6 +545,21 @@ antlrcpp::Any AstGenerator::visitTryLabelStatement(
return implicit_cast<Statement*>(result);
}
antlrcpp::Any AstGenerator::visitFunctionPointerExpression(
TorqueParser::FunctionPointerExpressionContext* context) {
if (context->IDENTIFIER()) {
std::vector<TypeExpression*> templateArguments;
if (context->genericSpecializationTypeList()) {
templateArguments =
GetTypeVector(context->genericSpecializationTypeList()->typeList());
}
return implicit_cast<Expression*>(RegisterNode(new IdentifierExpression{
Pos(context), context->IDENTIFIER()->getSymbol()->getText(),
std::move(templateArguments)}));
}
return context->primaryExpression()->accept(this);
}
antlrcpp::Any AstGenerator::visitPrimaryExpression(
TorqueParser::PrimaryExpressionContext* context) {
if (auto* e = context->helperCall()) return e->accept(this);
......@@ -554,9 +569,23 @@ antlrcpp::Any AstGenerator::visitPrimaryExpression(
if (auto* e = context->STRING_LITERAL())
return implicit_cast<Expression*>(RegisterNode(
new StringLiteralExpression{Pos(context), e->getSymbol()->getText()}));
if (context->structExpression()) {
return context->structExpression()->accept(this);
}
return context->expression()->accept(this);
}
antlrcpp::Any AstGenerator::visitStructExpression(
TorqueParser::StructExpressionContext* context) {
std::vector<Expression*> expressions;
for (auto& e : context->expression()) {
expressions.push_back(e->accept(this).as<Expression*>());
}
return implicit_cast<Expression*>(RegisterNode(new StructExpression{
Pos(context), context->IDENTIFIER()->getSymbol()->getText(),
expressions}));
}
antlrcpp::Any AstGenerator::visitAssignment(
TorqueParser::AssignmentContext* context) {
if (auto* e = context->incrementDecrement()) return e->accept(this);
......@@ -589,25 +618,23 @@ antlrcpp::Any AstGenerator::visitIncrementDecrement(
antlrcpp::Any AstGenerator::visitLocationExpression(
TorqueParser::LocationExpressionContext* context) {
if (auto* l = context->locationExpression()) {
Expression* location = l->accept(this).as<Expression*>();
Expression* location = nullptr;
if (auto* p = context->primaryExpression()) {
location = p->accept(this).as<Expression*>();
} else if (auto* l = context->locationExpression()) {
location = l->accept(this).as<Expression*>();
} else {
return implicit_cast<Expression*>(RegisterNode(new IdentifierExpression{
Pos(context), context->IDENTIFIER()->getSymbol()->getText(), {}}));
}
if (auto* e = context->expression()) {
return implicit_cast<Expression*>(
RegisterNode(new ElementAccessExpression{
return implicit_cast<Expression*>(RegisterNode(new ElementAccessExpression{
Pos(context), location, e->accept(this).as<Expression*>()}));
}
return implicit_cast<Expression*>(RegisterNode(new FieldAccessExpression{
Pos(context), location,
context->IDENTIFIER()->getSymbol()->getText()}));
}
std::vector<TypeExpression*> templateArguments;
if (context->genericSpecializationTypeList()) {
templateArguments =
GetTypeVector(context->genericSpecializationTypeList()->typeList());
}
return implicit_cast<Expression*>(RegisterNode(new IdentifierExpression{
Pos(context), context->IDENTIFIER()->getSymbol()->getText(),
std::move(templateArguments)}));
Pos(context), location, context->IDENTIFIER()->getSymbol()->getText()}));
}
antlrcpp::Any AstGenerator::visitUnaryExpression(
......@@ -768,6 +795,22 @@ antlrcpp::Any AstGenerator::visitDiagnosticStatement(
}
}
antlrcpp::Any AstGenerator::visitStructDeclaration(
TorqueParser::StructDeclarationContext* context) {
StructDeclaration* struct_declaration = RegisterNode(new StructDeclaration{
Pos(context), context->IDENTIFIER()->getSymbol()->getText()});
for (auto* fieldDeclaration :
context->fieldListDeclaration()->fieldDeclaration()) {
FieldNameAndType field = {
fieldDeclaration->IDENTIFIER()->getSymbol()->getText(),
GetType(fieldDeclaration->type())};
struct_declaration->fields.push_back(field);
}
return implicit_cast<Declaration*>(struct_declaration);
}
void AstGenerator::visitSourceFile(SourceFileContext* context) {
source_file_context_ = context;
current_source_file_ = SourceFileMap::Get().AddSource(context->name);
......
......@@ -69,6 +69,9 @@ class AstGenerator : public TorqueBaseVisitor {
antlrcpp::Any visitHelperCallStatement(
TorqueParser::HelperCallStatementContext* context) override;
antlrcpp::Any visitStructExpression(
TorqueParser::StructExpressionContext* context) override;
antlrcpp::Any visitConditionalExpression(
TorqueParser::ConditionalExpressionContext* context) override;
......@@ -108,6 +111,9 @@ class AstGenerator : public TorqueBaseVisitor {
antlrcpp::Any visitAssignment(
TorqueParser::AssignmentContext* context) override;
antlrcpp::Any visitFunctionPointerExpression(
TorqueParser::FunctionPointerExpressionContext* context) override;
antlrcpp::Any visitPrimaryExpression(
TorqueParser::PrimaryExpressionContext* context) override;
......@@ -146,6 +152,9 @@ class AstGenerator : public TorqueBaseVisitor {
antlrcpp::Any visitDiagnosticStatement(
TorqueParser::DiagnosticStatementContext* context) override;
antlrcpp::Any visitStructDeclaration(
TorqueParser::StructDeclarationContext* context) override;
antlrcpp::Any aggregateResult(antlrcpp::Any aggregate,
const antlrcpp::Any& nextResult) override {
if (aggregate.isNull())
......
......@@ -29,6 +29,7 @@ DECLARE_CONTEXTUAL_VARIABLE(CurrentSourcePosition, SourcePosition)
#define AST_EXPRESSION_NODE_KIND_LIST(V) \
V(CallExpression) \
V(StructExpression) \
V(LogicalOrExpression) \
V(LogicalAndExpression) \
V(ConditionalExpression) \
......@@ -69,6 +70,7 @@ DECLARE_CONTEXTUAL_VARIABLE(CurrentSourcePosition, SourcePosition)
V(GenericDeclaration) \
V(SpecializationDeclaration) \
V(ExternConstDeclaration) \
V(StructDeclaration) \
V(DefaultModuleDeclaration) \
V(ExplicitModuleDeclaration) \
V(ConstDeclaration)
......@@ -260,6 +262,14 @@ struct CallExpression : Expression {
std::vector<std::string> labels;
};
struct StructExpression : Expression {
DEFINE_AST_NODE_LEAF_BOILERPLATE(StructExpression)
StructExpression(SourcePosition p, std::string n, std::vector<Expression*> e)
: Expression(kKind, p), name(n), expressions(std::move(e)) {}
std::string name;
std::vector<Expression*> expressions;
};
struct LogicalOrExpression : Expression {
DEFINE_AST_NODE_LEAF_BOILERPLATE(LogicalOrExpression)
LogicalOrExpression(SourcePosition p, Expression* l, Expression* r)
......@@ -552,6 +562,11 @@ struct TypeAliasDeclaration : Declaration {
TypeExpression* type;
};
struct FieldNameAndType {
std::string name;
TypeExpression* type;
};
struct LabelAndTypes {
std::string name;
std::vector<TypeExpression*> types;
......@@ -693,6 +708,14 @@ struct ExternConstDeclaration : Declaration {
std::string literal;
};
struct StructDeclaration : Declaration {
DEFINE_AST_NODE_LEAF_BOILERPLATE(StructDeclaration)
StructDeclaration(SourcePosition p, std::string n)
: Declaration(kKind, p), name(std::move(n)) {}
std::string name;
std::vector<FieldNameAndType> fields;
};
#define ENUM_ITEM(name) \
case AstNode::Kind::k##name: \
return std::is_base_of<T, name>::value; \
......
......@@ -34,6 +34,18 @@ std::ostream& operator<<(std::ostream& os, const RuntimeFunction& b) {
return os;
}
std::string Variable::RValue() const {
if (!IsDefined()) {
ReportError("Reading uninitialized variable.");
}
if (type()->IsStructType()) {
return value();
}
std::string result = "(*" + value() + ")";
if (!IsConst()) result += ".value()";
return result;
}
void PrintLabel(std::ostream& os, const Label& l, bool with_names) {
os << l.name();
if (l.GetParameterCount() != 0) {
......
......@@ -134,14 +134,7 @@ class Variable : public Value {
DECLARE_DECLARABLE_BOILERPLATE(Variable, variable);
bool IsConst() const override { return const_; }
std::string value() const override { return value_; }
std::string RValue() const override {
if (!IsDefined()) {
ReportError("Reading uninitialized variable.");
}
std::string result = "(*" + value() + ")";
if (!IsConst()) result += ".value()";
return result;
}
std::string RValue() const override;
void Define() {
if (defined_ && IsConst()) {
ReportError("Cannot re-define a const-bound variable.");
......
......@@ -95,6 +95,15 @@ Builtin* DeclarationVisitor::BuiltinDeclarationCommon(
}
}
if (const StructType* struct_type =
StructType::DynamicCast(signature.return_type)) {
std::stringstream stream;
stream << "builtins (in this case" << decl->name
<< ") cannot return structs (in this case " << struct_type->name()
<< ")";
ReportError(stream.str());
}
std::string generated_name = GetGeneratedCallableName(
decl->name, declarations()->GetCurrentSpecializationTypeNamesVector());
return declarations()->DeclareBuiltin(generated_name, kind, external,
......@@ -117,6 +126,15 @@ void DeclarationVisitor::Visit(ExternalRuntimeDeclaration* decl,
ReportError(stream.str());
}
if (signature.return_type->IsStructType()) {
std::stringstream stream;
stream << "runtime functions (in this case" << decl->name
<< ") cannot return structs (in this case "
<< static_cast<const StructType*>(signature.return_type)->name()
<< ")";
ReportError(stream.str());
}
declarations()->DeclareRuntimeFunction(decl->name, signature);
}
......@@ -158,8 +176,8 @@ void DeclarationVisitor::Visit(TorqueMacroDeclaration* decl,
DeclareSignature(signature);
Variable* return_variable = nullptr;
if (!signature.return_type->IsVoidOrNever()) {
return_variable = declarations()->DeclareVariable(
kReturnValueVariable, signature.return_type,
return_variable =
DeclareVariable(kReturnValueVariable, signature.return_type,
signature.return_type->IsConstexpr());
}
......@@ -252,6 +270,33 @@ void DeclarationVisitor::Visit(ReturnStatement* stmt) {
}
}
Variable* DeclarationVisitor::DeclareVariable(const std::string& name,
const Type* type, bool is_const) {
Variable* result = declarations()->DeclareVariable(name, type, is_const);
if (type->IsStructType()) {
const StructType* struct_type = StructType::cast(type);
for (auto& field : struct_type->fields()) {
std::string field_var_name = name + "." + field.name;
DeclareVariable(field_var_name, field.type, is_const);
}
}
return result;
}
Parameter* DeclarationVisitor::DeclareParameter(const std::string& name,
const Type* type) {
Parameter* result = declarations()->DeclareParameter(
name, GetParameterVariableFromName(name), type);
if (type->IsStructType()) {
const StructType* struct_type = StructType::cast(type);
for (auto& field : struct_type->fields()) {
std::string field_var_name = name + "." + field.name;
DeclareParameter(field_var_name, field.type);
}
}
return result;
}
void DeclarationVisitor::Visit(VarDeclarationStatement* stmt) {
std::string variable_name = stmt->name;
const Type* type = declarations()->GetType(stmt->type);
......@@ -259,7 +304,7 @@ void DeclarationVisitor::Visit(VarDeclarationStatement* stmt) {
ReportError(
"cannot declare variable with constexpr type. Use 'const' instead.");
}
declarations()->DeclareVariable(variable_name, type, stmt->const_qualified);
DeclareVariable(variable_name, type, stmt->const_qualified);
if (global_context_.verbose()) {
std::cout << "declared variable " << variable_name << " with type " << *type
<< "\n";
......@@ -293,6 +338,15 @@ void DeclarationVisitor::Visit(ExternConstDeclaration* decl) {
declarations()->DeclareExternConstant(decl->name, type, decl->literal);
}
void DeclarationVisitor::Visit(StructDeclaration* decl) {
std::vector<NameAndType> fields;
for (auto& field : decl->fields) {
const Type* field_type = declarations()->GetType(field.type);
fields.push_back({field.name, field_type});
}
declarations()->DeclareStruct(CurrentModule(), decl->name, fields);
}
void DeclarationVisitor::Visit(LogicalOrExpression* expr) {
{
Declarations::NodeScopeActivator scope(declarations(), expr->left);
......@@ -415,8 +469,7 @@ void DeclarationVisitor::Visit(TryLabelStatement* stmt) {
ReportError("no constexpr type allowed for label arguments");
}
shared_label->AddVariable(
declarations()->DeclareVariable(p, type, false));
shared_label->AddVariable(DeclareVariable(p, type, false));
++i;
}
}
......@@ -556,8 +609,7 @@ void DeclarationVisitor::DeclareSignature(const Signature& signature) {
for (auto name : signature.parameter_names) {
const Type* t(*type_iterator++);
if (name.size() != 0) {
declarations()->DeclareParameter(name, GetParameterVariableFromName(name),
t);
DeclareParameter(name, t);
}
}
for (auto& label : signature.labels) {
......@@ -570,8 +622,7 @@ void DeclarationVisitor::DeclareSignature(const Signature& signature) {
}
std::string var_name = label.name + std::to_string(i++);
new_label->AddVariable(
declarations()->DeclareVariable(var_name, var_type, false));
new_label->AddVariable(DeclareVariable(var_name, var_type, false));
}
}
}
......
......@@ -108,6 +108,10 @@ class DeclarationVisitor : public FileVisitor {
void Visit(VarDeclarationStatement* stmt);
void Visit(ExternConstDeclaration* decl);
void Visit(StructDeclaration* decl);
void Visit(StructExpression* decl) {}
void Visit(LogicalOrExpression* expr);
void Visit(LogicalAndExpression* expr);
void DeclareExpressionForBranch(Expression* node);
......@@ -148,6 +152,10 @@ class DeclarationVisitor : public FileVisitor {
live_and_changed_variables_.push_back(live_and_changed);
}
Variable* DeclareVariable(const std::string& name, const Type* type,
bool is_const);
Parameter* DeclareParameter(const std::string& name, const Type* type);
std::set<const Variable*> PopControlSplit() {
auto result = live_and_changed_variables_.back().changed;
live_and_changed_variables_.pop_back();
......
......@@ -224,6 +224,12 @@ void Declarations::DeclareType(const std::string& name, const Type* type) {
Declare(name, std::unique_ptr<TypeAlias>(result));
}
void Declarations::DeclareStruct(Module* module, const std::string& name,
const std::vector<NameAndType>& fields) {
const StructType* new_type = TypeOracle::GetStructType(module, name, fields);
DeclareType(name, new_type);
}
Label* Declarations::DeclareLabel(const std::string& name) {
CheckAlreadyDeclared(name, "label");
Label* result = new Label(name);
......@@ -289,7 +295,9 @@ RuntimeFunction* Declarations::DeclareRuntimeFunction(
Variable* Declarations::DeclareVariable(const std::string& var,
const Type* type, bool is_const) {
std::string name(var + std::to_string(GetNextUniqueDeclarationNumber()));
std::string name(var + "_" +
std::to_string(GetNextUniqueDeclarationNumber()));
std::replace(name.begin(), name.end(), '.', '_');
CheckAlreadyDeclared(var, "variable");
Variable* result = new Variable(var, name, type, is_const);
Declare(var, std::unique_ptr<Declarable>(result));
......
......@@ -76,6 +76,9 @@ class Declarations {
void DeclareType(const std::string& name, const Type* type);
void DeclareStruct(Module* module, const std::string& name,
const std::vector<NameAndType>& fields);
Label* DeclareLabel(const std::string& name);
Macro* DeclareMacro(const std::string& name, const Signature& signature,
......
......@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <algorithm>
#include "src/torque/implementation-visitor.h"
#include "src/torque/parameter-difference.h"
......@@ -188,6 +190,18 @@ void ImplementationVisitor::Visit(ConstDeclaration* decl) {
source_out() << "}\n\n";
}
void ImplementationVisitor::Visit(StructDeclaration* decl) {
header_out() << " struct " << decl->name << " {\n";
const StructType* struct_type =
static_cast<const StructType*>(declarations()->LookupType(decl->name));
for (auto& field : struct_type->fields()) {
header_out() << " " << field.type->GetGeneratedTypeName();
header_out() << " " << field.name << ";\n";
}
header_out() << " } "
<< ";\n";
}
void ImplementationVisitor::Visit(TorqueMacroDeclaration* decl,
const Signature& sig, Statement* body) {
Signature signature = MakeSignature(decl->signature.get());
......@@ -246,7 +260,8 @@ void ImplementationVisitor::Visit(TorqueMacroDeclaration* decl,
if (result_var != nullptr) {
GenerateIndent();
source_out() << "return "
<< VisitResult(result_var->type(), result_var).RValue()
<< RValueFlattenStructs(
VisitResult(result_var->type(), result_var))
<< ";" << std::endl;
}
source_out() << "}" << std::endl << std::endl;
......@@ -335,7 +350,7 @@ VisitResult ImplementationVisitor::Visit(ConditionalExpression* expr) {
source_out() << "" << std::endl;
left = Visit(expr->if_true);
GenerateIndent();
source_out() << "return " << left.RValue() << ";" << std::endl;
source_out() << "return " << RValueFlattenStructs(left) << ";" << std::endl;
}
source_out() << ";" << std::endl;
GenerateIndent();
......@@ -345,7 +360,8 @@ VisitResult ImplementationVisitor::Visit(ConditionalExpression* expr) {
source_out() << "" << std::endl;
right = Visit(expr->if_false);
GenerateIndent();
source_out() << "return " << right.RValue() << ";" << std::endl;
source_out() << "return " << RValueFlattenStructs(right) << ";"
<< std::endl;
}
source_out() << ";" << std::endl;
......@@ -397,7 +413,7 @@ VisitResult ImplementationVisitor::Visit(LogicalOrExpression* expr) {
if (left_result.type()->IsBool()) {
Label* true_label = declarations()->LookupLabel(kTrueLabelName);
GenerateIndent();
source_out() << "GotoIf(" << left_result.RValue() << ", "
source_out() << "GotoIf(" << RValueFlattenStructs(left_result) << ", "
<< true_label->generated() << ");" << std::endl;
} else if (!left_result.type()->IsConstexprBool()) {
GenerateLabelBind(false_label);
......@@ -412,9 +428,9 @@ VisitResult ImplementationVisitor::Visit(LogicalOrExpression* expr) {
ReportError(stream.str());
}
if (left_result.type()->IsConstexprBool()) {
return VisitResult(left_result.type(), std::string("(") +
left_result.RValue() + " || " +
right_result.RValue() + ")");
return VisitResult(left_result.type(),
std::string("(") + RValueFlattenStructs(left_result) +
" || " + RValueFlattenStructs(right_result) + ")");
} else {
return right_result;
}
......@@ -430,7 +446,7 @@ VisitResult ImplementationVisitor::Visit(LogicalAndExpression* expr) {
if (left_result.type()->IsBool()) {
Label* false_label = declarations()->LookupLabel(kFalseLabelName);
GenerateIndent();
source_out() << "GotoIfNot(" << left_result.RValue() << ", "
source_out() << "GotoIfNot(" << RValueFlattenStructs(left_result) << ", "
<< false_label->generated() << ");" << std::endl;
} else if (!left_result.type()->IsConstexprBool()) {
GenerateLabelBind(true_label);
......@@ -445,9 +461,9 @@ VisitResult ImplementationVisitor::Visit(LogicalAndExpression* expr) {
ReportError(stream.str());
}
if (left_result.type()->IsConstexprBool()) {
return VisitResult(left_result.type(), std::string("(") +
left_result.RValue() + " && " +
right_result.RValue() + ")");
return VisitResult(left_result.type(),
std::string("(") + RValueFlattenStructs(left_result) +
" && " + RValueFlattenStructs(right_result) + ")");
} else {
return right_result;
}
......@@ -591,7 +607,8 @@ const Type* ImplementationVisitor::Visit(IfStatement* stmt) {
const Type* right_result = TypeOracle::GetVoidType();
{
GenerateIndent();
source_out() << "if ((" << expression_result.RValue() << ")) ";
source_out() << "if ((" << RValueFlattenStructs(expression_result)
<< ")) ";
ScopedIndent indent(this, false);
source_out() << std::endl;
left_result = Visit(stmt->if_true);
......@@ -807,11 +824,12 @@ const Type* ImplementationVisitor::Visit(ReturnStatement* stmt) {
} else if (current_callable->IsBuiltin()) {
if (Builtin::cast(current_callable)->IsVarArgsJavaScript()) {
GenerateIndent();
source_out() << "arguments->PopAndReturn(" << return_result.RValue()
<< ");" << std::endl;
source_out() << "arguments->PopAndReturn("
<< RValueFlattenStructs(return_result) << ");"
<< std::endl;
} else {
GenerateIndent();
source_out() << "Return(" << return_result.RValue() << ");"
source_out() << "Return(" << RValueFlattenStructs(return_result) << ");"
<< std::endl;
}
} else {
......@@ -1070,7 +1088,10 @@ void ImplementationVisitor::GenerateFunctionDeclaration(
// Quite a hack here. Make sure that TNode is namespace qualified if the
// macro/constant name is also qualified.
std::string return_type_name(signature.return_type->GetGeneratedTypeName());
if (macro_prefix != "" && (return_type_name.length() > 5) &&
if (const StructType* struct_type =
StructType::DynamicCast(signature.return_type)) {
o << GetDSLAssemblerName(struct_type->module()) << "::";
} else if (macro_prefix != "" && (return_type_name.length() > 5) &&
(return_type_name.substr(0, 5) == "TNode")) {
o << "compiler::";
}
......@@ -1220,21 +1241,33 @@ Callable* ImplementationVisitor::LookupCall(const std::string& name,
return result;
}
void ImplementationVisitor::GetFlattenedStructsVars(
const Variable* base, std::set<const Variable*>& vars) {
const Type* type = base->type();
if (base->IsConst()) return;
if (type->IsStructType()) {
const StructType* struct_type = StructType::cast(type);
for (auto& field : struct_type->fields()) {
std::string field_var_name = base->name() + "." + field.name;
GetFlattenedStructsVars(
Variable::cast(declarations()->LookupValue(field_var_name)), vars);
}
} else {
vars.insert(base);
}
}
void ImplementationVisitor::GenerateChangedVarsFromControlSplit(AstNode* node) {
const std::set<const Variable*>& changed_vars =
global_context_.GetControlSplitChangedVariables(
node, declarations()->GetCurrentSpecializationTypeNamesVector());
source_out() << "{";
bool first = true;
std::set<const Variable*> flattened_vars;
for (auto v : changed_vars) {
if (v->IsConst()) continue;
if (first) {
first = false;
} else {
source_out() << ", ";
}
source_out() << v->value();
GetFlattenedStructsVars(v, flattened_vars);
}
source_out() << "{";
PrintCommaSeparatedList(source_out(), flattened_vars,
[&](const Variable* v) { return v->value(); });
source_out() << "}";
}
......@@ -1254,12 +1287,42 @@ const Type* ImplementationVisitor::GetCommonType(const Type* left,
VisitResult ImplementationVisitor::GenerateCopy(const VisitResult& to_copy) {
std::string temp = GenerateNewTempVariable(to_copy.type());
source_out() << to_copy.RValue() << ";" << std::endl;
source_out() << RValueFlattenStructs(to_copy) << ";" << std::endl;
GenerateIndent();
source_out() << "USE(" << temp << ");" << std::endl;
return VisitResult(to_copy.type(), temp);
}
VisitResult ImplementationVisitor::Visit(StructExpression* decl) {
const Type* raw_type = declarations()->LookupType(decl->name);
if (!raw_type->IsStructType()) {
std::stringstream s;
s << decl->name << " is not a struct but used like one ";
ReportError(s.str());
}
const StructType* struct_type = StructType::cast(raw_type);
if (struct_type->fields().size() != decl->expressions.size()) {
std::stringstream s;
s << "initializer count mismatch for struct " << decl->name << " (expected "
<< struct_type->fields().size() << ", found " << decl->expressions.size()
<< ")";
ReportError(s.str());
}
std::vector<VisitResult> expression_results;
for (auto& field : struct_type->fields()) {
VisitResult value = Visit(decl->expressions[expression_results.size()]);
value = GenerateImplicitConvert(field.type, value);
expression_results.push_back(value);
}
std::string result_var_name = GenerateNewTempVariable(struct_type);
source_out() << "{";
PrintCommaSeparatedList(
source_out(), expression_results,
[&](const VisitResult& result) { return RValueFlattenStructs(result); });
source_out() << "};\n";
return VisitResult(struct_type, result_var_name);
}
LocationReference ImplementationVisitor::GetLocationReference(
LocationExpression* location) {
switch (location->kind) {
......@@ -1276,6 +1339,47 @@ LocationReference ImplementationVisitor::GetLocationReference(
}
}
LocationReference ImplementationVisitor::GetLocationReference(
FieldAccessExpression* expr) {
VisitResult result = Visit(expr->object);
if (result.type()->IsStructType()) {
if (result.declarable()) {
return LocationReference(
declarations()->LookupValue((*result.declarable())->name() + "." +
expr->field),
{}, {});
} else {
return LocationReference(
nullptr,
VisitResult(result.type(), result.RValue() + "." + expr->field), {});
}
}
return LocationReference(nullptr, result, {});
}
std::string ImplementationVisitor::RValueFlattenStructs(VisitResult result) {
if (result.declarable()) {
const Value* value = *result.declarable();
const Type* type = value->type();
if (const StructType* struct_type = StructType::DynamicCast(type)) {
std::stringstream s;
s << struct_type->name() << "{";
PrintCommaSeparatedList(
s, struct_type->fields(), [&](const NameAndType& field) {
std::string field_declaration = value->name() + "." + field.name;
Variable* field_variable =
Variable::cast(declarations()->LookupValue(field_declaration));
return RValueFlattenStructs(
VisitResult(field_variable->type(), field_variable));
});
s << "}";
return s.str();
}
}
return result.RValue();
}
VisitResult ImplementationVisitor::GenerateFetchFromLocation(
LocationExpression* location, LocationReference reference) {
switch (location->kind) {
......@@ -1293,28 +1397,77 @@ VisitResult ImplementationVisitor::GenerateFetchFromLocation(
}
}
VisitResult ImplementationVisitor::GenerateFetchFromLocation(
FieldAccessExpression* expr, LocationReference reference) {
const Type* type = reference.base.type();
if (reference.value != nullptr) {
return GenerateFetchFromLocation(reference);
} else if (const StructType* struct_type = StructType::DynamicCast(type)) {
auto& fields = struct_type->fields();
auto i = std::find_if(
fields.begin(), fields.end(),
[&](const NameAndType& f) { return f.name == expr->field; });
if (i == fields.end()) {
std::stringstream s;
s << "\"" << expr->field << "\" is not a field of struct type \""
<< struct_type->name() << "\"";
ReportError(s.str());
}
return VisitResult(i->type, reference.base.RValue());
} else {
Arguments arguments;
arguments.parameters = {reference.base};
return GenerateCall(std::string(".") + expr->field, arguments);
}
}
void ImplementationVisitor::GenerateAssignToVariable(Variable* var,
VisitResult value) {
if (var->type()->IsStructType()) {
if (value.type() != var->type()) {
std::stringstream s;
s << "incompatable assignment from type " << *value.type() << " to "
<< *var->type();
ReportError(s.str());
}
const StructType* struct_type = StructType::cast(var->type());
for (auto& field : struct_type->fields()) {
std::string field_declaration = var->name() + "." + field.name;
Variable* field_variable =
Variable::cast(declarations()->LookupValue(field_declaration));
if (value.declarable() && (*value.declarable())->IsVariable()) {
Variable* source_field = Variable::cast(declarations()->LookupValue(
Variable::cast((*value.declarable()))->name() + "." + field.name));
GenerateAssignToVariable(
field_variable, VisitResult{source_field->type(), source_field});
} else {
GenerateAssignToVariable(
field_variable, VisitResult{field_variable->type(),
value.RValue() + "." + field.name});
}
}
} else {
VisitResult casted_value = GenerateImplicitConvert(var->type(), value);
GenerateIndent();
VisitResult variable_result = {var->type(), var};
source_out() << variable_result.LValue() << " = " << casted_value.RValue()
<< ";\n";
VisitResult var_value = {var->type(), var};
source_out() << var_value.LValue() << " = "
<< RValueFlattenStructs(casted_value) << ";" << std::endl;
}
var->Define();
}
void ImplementationVisitor::GenerateAssignToLocation(
LocationExpression* location, const LocationReference& reference,
VisitResult assignment_value) {
if (IdentifierExpression::cast(location)) {
if (reference.value != nullptr) {
Value* value = reference.value;
if (value->IsConst()) {
Variable* var = Variable::cast(value);
if (var->IsConst()) {
std::stringstream s;
s << "\"" << value->name()
s << "\"" << var->name()
<< "\" is declared const (maybe implicitly) and cannot be assigned to";
ReportError(s.str());
}
Variable* var = Variable::cast(value);
GenerateAssignToVariable(var, assignment_value);
} else if (auto access = FieldAccessExpression::cast(location)) {
GenerateCall(std::string(".") + access->field + "=",
......@@ -1326,6 +1479,36 @@ void ImplementationVisitor::GenerateAssignToLocation(
}
}
void ImplementationVisitor::GenerateVariableDeclaration(const Variable* var) {
const Type* var_type = var->type();
if (var_type->IsStructType()) {
const StructType* struct_type = StructType::cast(var_type);
for (auto& field : struct_type->fields()) {
GenerateVariableDeclaration(Variable::cast(
declarations()->LookupValue(var->name() + "." + field.name)));
}
} else {
std::string value = var->value();
GenerateIndent();
if (var_type->IsConstexpr()) {
source_out() << var_type->GetGeneratedTypeName();
source_out() << " " << value << "_impl;" << std::endl;
} else if (var->IsConst()) {
source_out() << "TNode<" << var->type()->GetGeneratedTNodeTypeName();
source_out() << "> " << var->value() << "_impl;\n";
} else {
source_out() << "TVARIABLE(";
source_out() << var_type->GetGeneratedTNodeTypeName();
source_out() << ", " << value << "_impl);" << std::endl;
}
GenerateIndent();
source_out() << "auto " << value << " = &" << value << "_impl;"
<< std::endl;
GenerateIndent();
source_out() << "USE(" << value << ");" << std::endl;
}
}
Variable* ImplementationVisitor::GenerateVariableDeclaration(
AstNode* node, const std::string& name,
const base::Optional<const Type*>& type,
......@@ -1344,24 +1527,7 @@ Variable* ImplementationVisitor::GenerateVariableDeclaration(
node, declarations()->GetCurrentSpecializationTypeNamesVector(),
variable);
}
GenerateIndent();
if (variable->type()->IsConstexpr()) {
source_out() << variable->type()->GetGeneratedTypeName();
source_out() << " " << variable->value() << "_impl;\n";
} else if (variable->IsConst()) {
source_out() << "TNode<" << variable->type()->GetGeneratedTNodeTypeName();
source_out() << "> " << variable->value() << "_impl;\n";
} else {
source_out() << "TVARIABLE(";
source_out() << variable->type()->GetGeneratedTNodeTypeName();
source_out() << ", " << variable->value() << "_impl);\n";
}
GenerateIndent();
source_out() << "auto " << variable->value() << " = &" << variable->value()
<< "_impl;\n";
GenerateIndent();
source_out() << "USE(" << variable->value() << ");\n";
GenerateVariableDeclaration(variable);
if (initialization) {
GenerateAssignToVariable(variable, *initialization);
}
......@@ -1431,7 +1597,7 @@ VisitResult ImplementationVisitor::GeneratePointerCall(
const Type* to_type = type->parameter_types()[current];
VisitResult result =
GenerateImplicitConvert(to_type, arguments.parameters[current]);
variables.push_back(result.RValue());
variables.push_back(RValueFlattenStructs(result));
}
std::string result_variable_name;
......@@ -1439,11 +1605,16 @@ VisitResult ImplementationVisitor::GeneratePointerCall(
if (no_result) {
GenerateIndent();
} else {
result_variable_name = GenerateNewTempVariable(type->return_type());
const Type* return_type = type->return_type();
result_variable_name = GenerateNewTempVariable(return_type);
if (return_type->IsStructType()) {
source_out() << "(";
} else {
source_out() << "UncheckedCast<";
source_out() << type->return_type()->GetGeneratedTNodeTypeName();
source_out() << ">(";
}
}
Builtin* example_builtin =
declarations()->FindSomeInternalBuiltinWithType(type);
......@@ -1460,7 +1631,7 @@ VisitResult ImplementationVisitor::GeneratePointerCall(
}
source_out() << "Builtins::CallableFor(isolate(), Builtins::k"
<< example_builtin->name() << ").descriptor(), "
<< callee_result.RValue() << ", ";
<< RValueFlattenStructs(callee_result) << ", ";
size_t total_parameters = 0;
for (size_t i = 0; i < arguments.parameters.size(); ++i) {
......@@ -1499,7 +1670,7 @@ VisitResult ImplementationVisitor::GenerateCall(
: callable->signature().types()[current];
VisitResult result =
GenerateImplicitConvert(to_type, arguments.parameters[current]);
variables.push_back(result.RValue());
variables.push_back(RValueFlattenStructs(result));
}
std::string result_variable_name;
......@@ -1508,11 +1679,15 @@ VisitResult ImplementationVisitor::GenerateCall(
} else {
result_variable_name = GenerateNewTempVariable(result_type);
if (!result_type->IsConstexpr()) {
if (result_type->IsStructType()) {
source_out() << "(";
} else {
source_out() << "UncheckedCast<";
source_out() << result_type->GetGeneratedTNodeTypeName();
source_out() << ">(";
}
}
}
if (callable->IsBuiltin()) {
if (is_tailcall) {
source_out() << "TailCallBuiltin(Builtins::k" << callable->name() << ", ";
......@@ -1663,7 +1838,7 @@ VisitResult ImplementationVisitor::Visit(CallExpression* expr,
}
if (!result.type()->IsVoidOrNever()) {
GenerateIndent();
source_out() << "USE(" << result.RValue() << ");" << std::endl;
source_out() << "USE(" << RValueFlattenStructs(result) << ");" << std::endl;
}
if (is_tailcall) {
result = {TypeOracle::GetNeverType(), ""};
......@@ -1695,7 +1870,7 @@ void ImplementationVisitor::GenerateBranch(const VisitResult& condition,
Label* true_label,
Label* false_label) {
GenerateIndent();
source_out() << "Branch(" << condition.RValue() << ", "
source_out() << "Branch(" << RValueFlattenStructs(condition) << ", "
<< true_label->generated() << ", " << false_label->generated()
<< ");" << std::endl;
}
......
......@@ -37,35 +37,31 @@ class ImplementationVisitor : public FileVisitor {
const Type* Visit(Statement* stmt);
void Visit(Declaration* decl);
VisitResult Visit(StructExpression* decl);
LocationReference GetLocationReference(LocationExpression* location);
LocationReference GetLocationReference(IdentifierExpression* expr) {
return LocationReference(declarations()->LookupValue(expr->name), {}, {});
}
LocationReference GetLocationReference(FieldAccessExpression* expr) {
return LocationReference({}, Visit(expr->object), {});
}
LocationReference GetLocationReference(FieldAccessExpression* expr);
LocationReference GetLocationReference(ElementAccessExpression* expr) {
return LocationReference({}, Visit(expr->array), Visit(expr->index));
}
std::string RValueFlattenStructs(VisitResult result);
VisitResult GenerateFetchFromLocation(LocationReference reference) {
const Value* value = reference.value;
return VisitResult(value->type(), value);
}
VisitResult GenerateFetchFromLocation(LocationExpression* location,
LocationReference reference);
VisitResult GenerateFetchFromLocation(IdentifierExpression* expr,
LocationReference reference) {
Value* value = reference.value;
if (value->IsVariable() && !Variable::cast(value)->IsDefined()) {
std::stringstream s;
s << "\"" << value->name() << "\" is used before it is defined";
ReportError(s.str());
}
return VisitResult(value->type(), value);
return GenerateFetchFromLocation(reference);
}
VisitResult GenerateFetchFromLocation(FieldAccessExpression* expr,
LocationReference reference) {
Arguments arguments;
arguments.parameters = {reference.base};
return GenerateCall(std::string(".") + expr->field, arguments);
}
LocationReference reference);
VisitResult GenerateFetchFromLocation(ElementAccessExpression* expr,
LocationReference reference) {
Arguments arguments;
......@@ -93,6 +89,7 @@ class ImplementationVisitor : public FileVisitor {
void Visit(TypeDeclaration* decl) {}
void Visit(TypeAliasDeclaration* decl) {}
void Visit(ExternConstDeclaration* decl) {}
void Visit(StructDeclaration* decl);
void Visit(StandardDeclaration* decl);
void Visit(GenericDeclaration* decl) {}
void Visit(SpecializationDeclaration* decl);
......@@ -176,6 +173,11 @@ class ImplementationVisitor : public FileVisitor {
Callable* LookupCall(const std::string& name, const Arguments& arguments);
bool GenerateChangedVarFromControlSplit(const Variable* v, bool first = true);
void GetFlattenedStructsVars(const Variable* base,
std::set<const Variable*>& vars);
void GenerateChangedVarsFromControlSplit(AstNode* node);
const Type* GetCommonType(const Type* left, const Type* right);
......@@ -188,6 +190,8 @@ class ImplementationVisitor : public FileVisitor {
const LocationReference& reference,
VisitResult assignment_value);
void GenerateVariableDeclaration(const Variable* var);
Variable* GenerateVariableDeclaration(
AstNode* node, const std::string& name,
const base::Optional<const Type*>& type,
......
......@@ -29,6 +29,14 @@ class TypeOracle : public ContextualClass<TypeOracle> {
return result;
}
static const StructType* GetStructType(
Module* module, const std::string& name,
const std::vector<NameAndType>& fields) {
StructType* result = new StructType(module, name, fields);
Get().struct_types_.push_back(std::unique_ptr<StructType>(result));
return result;
}
static const FunctionPointerType* GetFunctionPointerType(
TypeVector argument_types, const Type* return_type) {
const Type* code_type = Get().GetBuiltinType(CODE_TYPE_STRING);
......@@ -101,6 +109,7 @@ class TypeOracle : public ContextualClass<TypeOracle> {
Deduplicator<FunctionPointerType> function_pointer_types_;
Deduplicator<UnionType> union_types_;
std::vector<std::unique_ptr<Type>> nominal_types_;
std::vector<std::unique_ptr<Type>> struct_types_;
};
} // namespace torque
......
......@@ -154,6 +154,14 @@ const Type* UnionType::NonConstexprVersion() const {
return this;
}
std::string StructType::ToExplicitString() const {
std::stringstream result;
result << "{";
PrintCommaSeparatedList(result, fields_);
result << "}";
return result.str();
}
void PrintSignature(std::ostream& os, const Signature& sig, bool with_names) {
os << "(";
for (size_t i = 0; i < sig.parameter_types.types.size(); ++i) {
......@@ -181,6 +189,13 @@ void PrintSignature(std::ostream& os, const Signature& sig, bool with_names) {
}
}
std::ostream& operator<<(std::ostream& os, const NameAndType& name_and_type) {
os << name_and_type.name;
os << ": ";
os << *name_and_type.type;
return os;
}
std::ostream& operator<<(std::ostream& os, const Signature& sig) {
PrintSignature(os, sig, true);
return os;
......@@ -256,7 +271,17 @@ std::string VisitResult::LValue() const {
}
std::string VisitResult::RValue() const {
return declarable_ ? (*declarable_)->RValue() : value_;
if (declarable()) {
auto value = *declarable();
if (value->IsVariable() && !Variable::cast(value)->IsDefined()) {
std::stringstream s;
s << "\"" << value->name() << "\" is used before it is defined";
ReportError(s.str());
}
return value->RValue();
} else {
return value_;
}
}
} // namespace torque
......
......@@ -37,13 +37,19 @@ class Value;
class TypeBase {
public:
enum class Kind { kAbstractType, kFunctionPointerType, kUnionType };
enum class Kind {
kAbstractType,
kFunctionPointerType,
kUnionType,
kStructType
};
virtual ~TypeBase() {}
bool IsAbstractType() const { return kind() == Kind::kAbstractType; }
bool IsFunctionPointerType() const {
return kind() == Kind::kFunctionPointerType;
}
bool IsUnionType() const { return kind() == Kind::kUnionType; }
bool IsStructType() const { return kind() == Kind::kStructType; }
protected:
explicit TypeBase(Kind kind) : kind_(kind) {}
......@@ -111,6 +117,13 @@ class Type : public TypeBase {
using TypeVector = std::vector<const Type*>;
struct NameAndType {
std::string name;
const Type* type;
};
std::ostream& operator<<(std::ostream& os, const NameAndType& name_and_type);
class AbstractType final : public Type {
public:
DECLARE_TYPE_BOILERPLATE(AbstractType);
......@@ -285,6 +298,37 @@ class UnionType final : public Type {
std::set<const Type*, TypeLess> types_;
};
class StructType final : public Type {
public:
DECLARE_TYPE_BOILERPLATE(StructType);
std::string ToExplicitString() const override;
std::string MangledName() const override { return name_; }
std::string GetGeneratedTypeName() const override { return GetStructName(); }
std::string GetGeneratedTNodeTypeName() const override { UNREACHABLE(); }
const Type* NonConstexprVersion() const override { return this; }
bool IsConstexpr() const override { return false; }
const std::vector<NameAndType>& fields() const { return fields_; }
const std::string& name() const { return name_; }
Module* module() const { return module_; }
private:
friend class TypeOracle;
StructType(Module* module, const std::string& name,
const std::vector<NameAndType>& fields)
: Type(Kind::kStructType, nullptr),
module_(module),
name_(name),
fields_(fields) {}
const std::string& GetStructName() const { return name_; }
Module* module_;
std::string name_;
std::vector<NameAndType> fields_;
};
inline std::ostream& operator<<(std::ostream& os, const Type& t) {
os << t.ToString();
return os;
......@@ -325,11 +369,6 @@ class VisitResultVector : public std::vector<VisitResult> {
std::ostream& operator<<(std::ostream& os, const TypeVector& types);
struct NameAndType {
std::string name;
const Type* type;
};
typedef std::vector<NameAndType> NameAndTypeVector;
struct LabelDefinition {
......
......@@ -4,7 +4,7 @@
module test {
macro ElementsKindTestHelper1(kind: constexpr ElementsKind): bool {
if constexpr ((kind == UINT8_ELEMENTS) || (kind == UINT16_ELEMENTS)) {
if constexpr((kind == UINT8_ELEMENTS) || (kind == UINT16_ELEMENTS)) {
return true;
}
else {
......@@ -82,7 +82,7 @@ module test {
}
}
builtin GenericBuiltinTest<T: type>(c: Context, param: T): Object {
builtin GenericBuiltinTest<T : type>(c: Context, param: T): Object {
return Null;
}
......@@ -98,7 +98,8 @@ module test {
}
macro LabelTestHelper4(flag: constexpr bool): never labels Label4, Label5 {
if constexpr (flag) goto Label4;
if
constexpr(flag) goto Label4;
else
goto Label5;
}
......@@ -125,7 +126,7 @@ module test {
return False;
}
macro GenericMacroTest<T: type>(param: T): Object {
macro GenericMacroTest<T : type>(param: T): Object {
return Undefined;
}
......@@ -133,7 +134,7 @@ module test {
return param2;
}
macro GenericMacroTestWithLabels<T: type>(param: T): Object labels X {
macro GenericMacroTestWithLabels<T : type>(param: T): Object labels X {
return Undefined;
}
......@@ -158,29 +159,29 @@ module test {
}
}
builtin TestHelperPlus1(context : Context, x : Smi) : Smi {
builtin TestHelperPlus1(context: Context, x: Smi): Smi {
return x + 1;
}
builtin TestHelperPlus2(context : Context, x : Smi) : Smi {
builtin TestHelperPlus2(context: Context, x: Smi): Smi {
return x + 2;
}
macro TestFunctionPointers(context : Context) : Boolean {
let fptr : builtin(Context, Smi) => Smi = TestHelperPlus1;
macro TestFunctionPointers(context: Context): Boolean {
let fptr: builtin(Context, Smi) => Smi = TestHelperPlus1;
check(fptr(context, 42) == 43);
fptr = TestHelperPlus2;
check(fptr(context, 42) == 44);
return True;
}
macro TestVariableRedeclaration(context : Context) : Boolean {
let var1 : int31 = from_constexpr<bool>(42 == 0) ? 0 : 1;
let var2 : int31 = from_constexpr<bool>(42 == 0) ? 1 : 0;
macro TestVariableRedeclaration(context: Context): Boolean {
let var1: int31 = from_constexpr<bool>(42 == 0) ? 0 : 1;
let var2: int31 = from_constexpr<bool>(42 == 0) ? 1 : 0;
return True;
}
macro TestTernaryOperator(x : Smi) : Smi {
let b : bool = x < 0 ? true : false;
macro TestTernaryOperator(x: Smi): Smi {
let b: bool = x < 0 ? true : false;
return b ? x - 10 : x + 100;
}
......@@ -195,7 +196,7 @@ module test {
}
type SmiToSmi = builtin(Smi) => Smi;
macro TestTypeAlias(x : SmiToSmi) : Code {
macro TestTypeAlias(x: SmiToSmi): Code {
return x;
}
......@@ -221,8 +222,9 @@ module test {
macro TestMultilineAssert() {
let someVeryLongVariableNameThatWillCauseLineBreaks: Smi = 5;
check(someVeryLongVariableNameThatWillCauseLineBreaks > 0
&& someVeryLongVariableNameThatWillCauseLineBreaks < 10);
check(
someVeryLongVariableNameThatWillCauseLineBreaks > 0 &&
someVeryLongVariableNameThatWillCauseLineBreaks < 10);
}
macro TestNewlineInString() {
......@@ -243,4 +245,48 @@ module test {
const kSmi: Smi = 3;
check(kSmi == 3);
}
struct TestStructA {
indexes: FixedArray;
i: Smi;
k: Number;
}
struct TestStructB {
x: TestStructA;
y: Smi;
}
macro TestStruct1(i: TestStructA): Smi {
return i.i;
}
macro TestStruct2(): TestStructA {
return TestStructA{unsafe_cast<FixedArray>(kEmptyFixedArray), 27, 31};
}
macro TestStruct3(): TestStructA {
let a: TestStructA =
TestStructA{unsafe_cast<FixedArray>(kEmptyFixedArray), 13, 5};
let b: TestStructA = a;
let c: TestStructA = TestStruct2();
a.i = TestStruct1(c);
a.k = a.i;
let d: TestStructB;
d.x = a;
d = TestStructB{a, 7};
let e: TestStructA = d.x;
let f: Smi = TestStructA{unsafe_cast<FixedArray>(kEmptyFixedArray), 27, 31}.i;
f = TestStruct2().i;
return a;
}
struct TestStructC {
x : TestStructA;
y : TestStructA;
}
macro TestStruct4(): TestStructC {
return TestStructC{TestStruct2(), TestStruct2()};
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment