From 8ac4f691d631e9726d6fd178a7cca4554039e6f1 Mon Sep 17 00:00:00 2001 From: Gregory Tucker Date: Sat, 9 Dec 2023 13:25:01 +0100 Subject: [PATCH 1/4] [Fix] generated runtime errors - Parts of the generated runtime were not handled correctly due to oversights and lack of testing. The OpenACC-only funnel version of the raytracer did not index component instances correctly and always skipped the first component. The jump and split logic in the main raytrace included Expr output which did not check for instrument-parameter-ness via the {:p} format specification. - Indexing and formatting errors are fixed. Tests are added to exercise the runtime logic. Additionally, the operators "%", "<<" and ">>" are now supported in Expr objects (and parse from Instr/Comp files). - The runtime should now be more correct without any negative side effects. --- mccode_antlr/common/expression.py | 2 +- mccode_antlr/comp/visitor.py | 16 + mccode_antlr/compiler/c.py | 14 + mccode_antlr/grammar/McCommon.g4 | 5 +- mccode_antlr/grammar/McCompLexer.py | 2345 ++++++++++++----------- mccode_antlr/grammar/McCompListener.py | 173 +- mccode_antlr/grammar/McCompParser.py | 1641 +++++++++------- mccode_antlr/grammar/McCompVisitor.py | 95 +- mccode_antlr/grammar/McInstrLexer.py | 2345 ++++++++++++----------- mccode_antlr/grammar/McInstrListener.py | 173 +- mccode_antlr/grammar/McInstrParser.py | 1635 +++++++++------- mccode_antlr/grammar/McInstrVisitor.py | 95 +- mccode_antlr/instr/visitor.py | 15 + mccode_antlr/translators/c_header.py | 2 +- mccode_antlr/translators/c_raytrace.py | 14 +- test/compiled.py | 91 + test/test_c_runtime.py | 137 ++ 17 files changed, 4745 insertions(+), 4053 deletions(-) create mode 100644 test/compiled.py create mode 100644 test/test_c_runtime.py diff --git a/mccode_antlr/common/expression.py b/mccode_antlr/common/expression.py index b201263..7449d9f 100644 --- a/mccode_antlr/common/expression.py +++ b/mccode_antlr/common/expression.py @@ -436,7 +436,7 @@ def _str_repr_(self, lstr, rstr): return f'{lstr} || {rstr}' if 'C' == self.style else f'{lstr} or {rstr}' if '__and__' == self.op: return f'{lstr} && {rstr}' if 'C' == self.style else f'{lstr} and {rstr}' - if any(x in self.op for x in '+-'): + if any(x == self.op for x in ('+', '-', '%', '<<', '>>')): return f'({lstr} {self.op} {rstr})' if self.op == '//' and 'C' == self.style: # Verify that the operands are integers before reducing to a single slash? diff --git a/mccode_antlr/comp/visitor.py b/mccode_antlr/comp/visitor.py index 4f040b2..c5537dd 100644 --- a/mccode_antlr/comp/visitor.py +++ b/mccode_antlr/comp/visitor.py @@ -302,6 +302,22 @@ def visitExpressionBinaryMD(self, ctx: Parser.ExpressionBinaryMDContext): left, right = self.visit(ctx.left), self.visit(ctx.right) return left * right if ctx.Div() is None else left / right + + def visitExpressionBinaryMod(self, ctx: Parser.ExpressionBinaryModContext): + from ..common import BinaryOp + left, right = self.visit(ctx.left), self.visit(ctx.right) + return Expr(BinaryOp('%', left, right)) + + def visitExpressionBinaryLeftShift(self, ctx: Parser.ExpressionBinaryLeftShiftContext): + from ..common import BinaryOp + left, right = self.visit(ctx.left), self.visit(ctx.right) + return Expr(BinaryOp('<<', left, right)) + + def visitExpressionBinaryRightShift(self, ctx: Parser.ExpressionBinaryRightShiftContext): + from ..common import BinaryOp + left, right = self.visit(ctx.left), self.visit(ctx.right) + return Expr(BinaryOp('>>', left, right)) + def visitInitializerlist(self, ctx: Parser.InitializerlistContext): from ..common import Value, ObjectType, ShapeType values = [self.visit(x).expr[0].value for x in ctx.values] diff --git a/mccode_antlr/compiler/c.py b/mccode_antlr/compiler/c.py index a7cf578..96722d7 100644 --- a/mccode_antlr/compiler/c.py +++ b/mccode_antlr/compiler/c.py @@ -28,6 +28,20 @@ def __init__(self, mpi: bool = False, acc: bool = False, count: int = 1, nexus: if nexus: self.type |= CBinaryTarget.Type.nexus + def update(self, d: dict): + self.count = d.get('count', self.count) + d_mpi = d.get('mpi', self.type & CBinaryTarget.Type.mpi) + d_acc = d.get('acc', self.type & CBinaryTarget.Type.acc) + if d_mpi and d_acc: + self.type = CBinaryTarget.Type.acc | CBinaryTarget.Type.mpi + elif d_mpi: + self.type = CBinaryTarget.Type.mpi + elif d_acc: + self.type = CBinaryTarget.Type.acc + else: + self.type = CBinaryTarget.Type.single + if d.get('nexus', self.type & CBinaryTarget.Type.nexus): + self.type |= CBinaryTarget.Type.nexus @property def compiler(self) -> str: diff --git a/mccode_antlr/grammar/McCommon.g4 b/mccode_antlr/grammar/McCommon.g4 index 8c402da..12d8ea3 100644 --- a/mccode_antlr/grammar/McCommon.g4 +++ b/mccode_antlr/grammar/McCommon.g4 @@ -50,6 +50,9 @@ expr | base=expr '^' exponent=expr #ExpressionExponentiation | left=expr ('*' | '/') right=expr #ExpressionBinaryMD | left=expr ('+' | '-') right=expr #ExpressionBinaryPM + | left=expr '%' right=expr #ExpressionBinaryMod + | left=expr '>>' right=expr #ExpressionBinaryRightShift + | left=expr '<<' right=expr #ExpressionBinaryLeftShift | Identifier #ExpressionIdentifier | left=expr '==' right=expr #ExpressionBinaryEqual | left=expr '<=' right=expr #ExpressionBinaryLessEqual @@ -81,7 +84,7 @@ Category: 'CATEGORY' | 'Category' | 'category'; Component : 'COMPONENT' | 'Component' | 'component'; UserVars: 'USERVARS' | 'UserVars' | 'uservars'; Define: 'DEFINE' | 'Define' | 'define'; -Declare: 'DECLARE'; +Declare: 'DECLARE' | 'Declare' | 'declare'; Definition: 'DEFINITION' | 'Definition' | 'definition'; End: 'END' | 'End' | 'end'; McDisplay: 'MCDISPLAY' | 'DISPLAY' | 'McDisplay' | 'mcdisplay' | 'Display' | 'display'; diff --git a/mccode_antlr/grammar/McCompLexer.py b/mccode_antlr/grammar/McCompLexer.py index 0b33def..368e118 100644 --- a/mccode_antlr/grammar/McCompLexer.py +++ b/mccode_antlr/grammar/McCompLexer.py @@ -1,4 +1,4 @@ -# Generated from /home/g/Code/mccode_antlr-antlr/mccode_antlr/grammar/McComp.g4 by ANTLR 4.13.1 +# Generated from /home/gst/PycharmProjects/mccode4/mccode_antlr/grammar/McComp.g4 by ANTLR 4.13.1 from antlr4 import * from io import StringIO import sys @@ -10,7 +10,7 @@ def serializedATN(): return [ - 4,0,190,2472,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7, + 4,0,192,2497,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7, 5,2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12, 2,13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19, 7,19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25, @@ -46,946 +46,957 @@ def serializedATN(): 2,197,7,197,2,198,7,198,2,199,7,199,2,200,7,200,2,201,7,201,2,202, 7,202,2,203,7,203,2,204,7,204,2,205,7,205,2,206,7,206,2,207,7,207, 2,208,7,208,2,209,7,209,2,210,7,210,2,211,7,211,2,212,7,212,2,213, - 7,213,2,214,7,214,2,215,7,215,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,3,1,460,8,1,1,2,1,2,1,2,1,2,1,2,1,2,3,2,468,8,2,1,3,1,3,1, - 3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1, - 3,1,3,1,3,1,3,1,3,1,3,3,3,494,8,3,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1, - 4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1, - 4,1,4,1,4,1,4,3,4,523,8,4,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1, - 5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,3,5,549, - 8,5,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6, - 1,6,1,6,1,6,3,6,569,8,6,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,8,1,8, - 1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8, - 1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,3,8,609,8,8,1,9, - 1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,3,9,620,8,9,1,10,1,10,1,10,1,10, - 1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10, - 1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10, - 1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10, - 1,10,1,10,1,10,1,10,1,10,3,10,670,8,10,1,11,1,11,1,11,1,11,1,11, - 1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11, - 1,11,1,11,1,11,3,11,693,8,11,1,12,1,12,1,12,1,12,1,12,1,12,1,12, + 7,213,2,214,7,214,2,215,7,215,2,216,7,216,2,217,7,217,1,0,1,0,1, + 1,1,1,1,1,1,2,1,2,1,2,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1, + 3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,470,8, + 3,1,4,1,4,1,4,1,4,1,4,1,4,3,4,478,8,4,1,5,1,5,1,5,1,5,1,5,1,5,1, + 5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1, + 5,1,5,3,5,504,8,5,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1, + 6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,3, + 6,533,8,6,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1, + 7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,3,7,559,8,7,1,8,1,8,1, + 8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,3, + 8,579,8,8,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1, + 9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,3,9,602,8,9,1,10,1,10,1,10,1,10,1, + 10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1, + 10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,3, + 10,634,8,10,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,3,11,645, + 8,11,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12, 1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12, 1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12, - 1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12, - 1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12, - 1,12,3,12,755,8,12,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13, + 1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,3,12,695,8,12, 1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13, - 1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,3,13,787,8,13,1,14,1,14, + 1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,3,13,718,8,13,1,14,1,14, + 1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14, + 1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14, 1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14, - 1,14,1,14,1,14,3,14,807,8,14,1,15,1,15,1,15,1,15,1,15,1,15,1,15, + 1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14, + 1,14,1,14,1,14,1,14,1,14,1,14,3,14,780,8,14,1,15,1,15,1,15,1,15, + 1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15, 1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15, - 1,15,3,15,830,8,15,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16, - 1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16, - 1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,3,16,862,8,16,1,17,1,17, + 3,15,812,8,15,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16, + 1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,3,16,832,8,16,1,17,1,17, 1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17, - 1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,3,17,888,8,17,1,18, + 1,17,1,17,1,17,1,17,1,17,1,17,3,17,855,8,17,1,18,1,18,1,18,1,18, + 1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18, 1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18, - 1,18,1,18,1,18,1,18,1,18,1,18,1,18,3,18,911,8,18,1,19,1,19,1,19, + 3,18,887,8,18,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19, 1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19, - 1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,3,19,937,8,19,1,20,1,20, - 1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20, - 1,20,1,20,1,20,1,20,1,20,1,20,3,20,960,8,20,1,21,1,21,1,21,1,21, - 1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,3,21,977, - 8,21,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22, - 1,22,1,22,1,22,3,22,994,8,22,1,23,1,23,1,23,1,23,1,23,1,23,1,23, - 1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,3,23,1014, - 8,23,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,3,24,1031,8,24,1,25,1,25,1,25,1,25,1,25,1,25,1,25, - 1,25,1,25,1,25,1,25,1,25,3,25,1045,8,25,1,26,1,26,1,26,1,26,1,26, - 1,26,1,26,1,26,1,26,1,26,1,26,1,26,3,26,1059,8,26,1,27,1,27,1,27, - 1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,3,27,1073,8,27,1,28, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,3,28,1087, - 8,28,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29, - 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,3,29,1110,8,29,1,30, - 1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30, - 1,30,1,30,1,30,1,30,3,30,1130,8,30,1,31,1,31,1,31,1,31,1,31,1,31, - 1,31,1,31,1,31,1,31,1,31,1,31,3,31,1144,8,31,1,32,1,32,1,32,1,32, - 1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,3,32,1161, - 8,32,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33, - 1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33, - 1,33,1,33,3,33,1190,8,33,1,34,1,34,1,34,1,34,1,34,1,34,3,34,1198, - 8,34,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35, - 1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,3,35,1220,8,35,1,36,1,36, - 1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36, - 1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36, - 1,36,1,36,3,36,1252,8,36,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, - 1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,1269,8,37,1,38,1,38,1,38, + 1,19,3,19,913,8,19,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20, + 1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,3,20, + 936,8,20,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21, + 1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21, + 3,21,962,8,21,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22, + 1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,3,22,985, + 8,22,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23, + 1,23,1,23,1,23,3,23,1002,8,23,1,24,1,24,1,24,1,24,1,24,1,24,1,24, + 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,3,24,1019,8,24,1,25,1,25, + 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25, + 1,25,1,25,1,25,3,25,1039,8,25,1,26,1,26,1,26,1,26,1,26,1,26,1,26, + 1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,3,26,1056,8,26,1,27,1,27, + 1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,3,27,1070,8,27, + 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,3,28, + 1084,8,28,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29, + 1,29,3,29,1098,8,29,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30, + 1,30,1,30,1,30,3,30,1112,8,30,1,31,1,31,1,31,1,31,1,31,1,31,1,31, + 1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31, + 1,31,3,31,1135,8,31,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32, + 1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,3,32,1155,8,32,1,33, + 1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,3,33,1169, + 8,33,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34, + 1,34,1,34,1,34,3,34,1186,8,34,1,35,1,35,1,35,1,35,1,35,1,35,1,35, + 1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35, + 1,35,1,35,1,35,1,35,1,35,1,35,1,35,3,35,1215,8,35,1,36,1,36,1,36, + 1,36,1,36,1,36,3,36,1223,8,36,1,37,1,37,1,37,1,37,1,37,1,37,1,37, + 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, + 3,37,1245,8,37,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38, 1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38, - 1,38,1,38,3,38,1289,8,38,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39, - 1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39, - 1,39,1,39,1,39,3,39,1315,8,39,1,40,1,40,1,40,1,40,1,40,1,40,1,40, - 1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,42,1,42,1,42,1,42,1,42,1,42, - 1,42,1,43,1,43,1,43,1,43,5,43,1342,8,43,10,43,12,43,1345,9,43,1, - 43,1,43,1,43,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,45,1, - 45,1,45,1,45,1,45,1,46,1,46,3,46,1366,8,46,1,46,1,46,3,46,1370,8, - 46,1,46,1,46,3,46,1374,8,46,1,46,1,46,3,46,1378,8,46,3,46,1380,8, - 46,1,47,3,47,1383,8,47,1,47,1,47,4,47,1387,8,47,11,47,12,47,1388, - 1,47,1,47,1,48,1,48,3,48,1395,8,48,1,48,3,48,1398,8,48,1,48,1,48, - 1,48,3,48,1403,8,48,3,48,1405,8,48,1,49,3,49,1408,8,49,1,49,1,49, - 1,49,5,49,1413,8,49,10,49,12,49,1416,9,49,1,49,3,49,1419,8,49,1, - 50,1,50,3,50,1423,8,50,1,51,1,51,1,52,1,52,1,52,1,52,3,52,1431,8, - 52,1,53,1,53,5,53,1435,8,53,10,53,12,53,1438,9,53,1,53,1,53,3,53, - 1442,8,53,1,53,4,53,1445,8,53,11,53,12,53,1446,1,53,4,53,1450,8, - 53,11,53,12,53,1451,1,53,1,53,1,54,1,54,5,54,1458,8,54,10,54,12, - 54,1461,9,54,1,54,1,54,1,55,1,55,1,55,1,55,1,55,1,55,1,55,1,55,1, - 56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,57,1,57,1,57,1,57,1,58,1, - 58,1,58,1,58,1,58,1,59,1,59,1,59,1,59,1,59,1,60,1,60,1,60,1,60,1, - 60,1,60,1,61,1,61,1,61,1,61,1,61,1,62,1,62,1,62,1,62,1,62,1,62,1, - 63,1,63,1,63,1,63,1,63,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1, - 64,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1, - 66,1,66,1,66,1,67,1,67,1,67,1,67,1,67,1,67,1,68,1,68,1,68,1,68,1, - 68,1,68,1,68,1,68,1,68,1,68,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1, - 69,1,69,1,69,1,69,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1, - 71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,72,1,72,1,72,1,72,1, - 72,1,72,1,72,1,72,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,74,1,74,1, - 74,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,76,1,76,1,76,1,76,1,76,1, - 76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,77,1,77,1,77,1,77,1,77,1, - 78,1,78,1,78,1,78,1,78,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1, - 79,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,81,1,81,1,81,1,81,1,81,1, - 81,1,81,1,82,1,82,1,82,1,82,1,82,1,82,1,83,1,83,1,83,1,83,1,83,1, - 83,1,84,1,84,1,84,1,84,1,84,1,84,1,85,1,85,1,85,1,85,1,86,1,86,1, - 86,1,86,1,86,1,86,1,86,1,87,1,87,1,87,1,87,1,87,1,88,1,88,1,88,1, - 89,1,89,1,89,1,89,1,89,1,89,1,89,1,90,1,90,1,90,1,90,1,91,1,91,1, - 91,1,91,1,91,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,93,1,93,1, - 93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,94,1,94,1,94,1,94,1,95,1, - 95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,96,1,96,1,96,1,96,1,96,1, - 96,1,96,1,96,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,98,1, - 98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,99,1,99,1,99,1,99,1,99,1, - 99,1,99,1,99,1,99,1,99,1,100,1,100,1,100,1,100,1,100,1,100,1,100, - 1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,102,1,102, - 1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,102, - 1,102,1,102,1,102,1,102,1,103,1,103,1,103,1,103,1,103,1,103,1,103, - 1,104,1,104,1,104,1,104,1,104,1,104,1,105,1,105,1,105,1,105,1,105, - 1,105,1,105,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,107,1,107, - 1,107,1,107,1,107,1,107,1,107,1,108,1,108,1,108,1,108,1,108,1,108, - 1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,109,1,109,1,109, - 1,109,1,109,1,109,1,109,1,109,1,109,1,109,1,109,1,109,1,110,1,110, - 1,110,1,110,1,110,1,110,1,110,1,111,1,111,1,111,1,111,1,111,1,111, - 1,111,1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,113, - 1,113,1,113,1,113,1,113,1,114,1,114,1,114,1,114,1,114,1,114,1,114, - 1,114,1,114,1,114,1,114,1,114,1,114,1,115,1,115,1,115,1,115,1,115, - 1,115,1,116,1,116,1,116,1,116,1,116,1,117,1,117,1,117,1,117,1,118, - 1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,119,1,119,1,119,1,119, - 1,119,1,119,1,119,1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,120, - 1,120,1,121,1,121,1,121,1,121,1,121,1,121,1,122,1,122,1,122,1,122, - 1,122,1,122,1,122,1,122,1,122,1,123,1,123,1,123,1,123,1,123,1,123, - 1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,125,1,125,1,125, - 1,125,1,125,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126, - 1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,128,1,128,1,128, - 1,128,1,128,1,128,1,129,1,129,1,130,1,130,1,131,1,131,1,132,1,132, - 1,133,1,133,1,134,1,134,1,135,1,135,1,136,1,136,1,137,1,137,1,138, - 1,138,1,139,1,139,1,140,1,140,1,141,1,141,1,142,1,142,1,143,1,143, - 1,144,1,144,1,144,1,144,3,144,2041,8,144,1,145,1,145,1,146,1,146, - 1,147,1,147,1,148,1,148,1,148,1,149,1,149,1,149,1,150,1,150,1,150, + 1,38,1,38,1,38,1,38,1,38,1,38,1,38,3,38,1277,8,38,1,39,1,39,1,39, + 1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,3,39, + 1294,8,39,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40, + 1,40,1,40,1,40,1,40,1,40,1,40,1,40,3,40,1314,8,40,1,41,1,41,1,41, + 1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41, + 1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,3,41,1340,8,41,1,42,1,42, + 1,42,1,42,1,42,1,42,1,42,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,44, + 1,44,1,44,1,44,1,44,1,44,1,44,1,45,1,45,1,45,1,45,5,45,1367,8,45, + 10,45,12,45,1370,9,45,1,45,1,45,1,45,1,46,1,46,1,46,1,46,1,46,1, + 46,1,46,1,46,1,46,1,47,1,47,1,47,1,47,1,47,1,48,1,48,3,48,1391,8, + 48,1,48,1,48,3,48,1395,8,48,1,48,1,48,3,48,1399,8,48,1,48,1,48,3, + 48,1403,8,48,3,48,1405,8,48,1,49,3,49,1408,8,49,1,49,1,49,4,49,1412, + 8,49,11,49,12,49,1413,1,49,1,49,1,50,1,50,3,50,1420,8,50,1,50,3, + 50,1423,8,50,1,50,1,50,1,50,3,50,1428,8,50,3,50,1430,8,50,1,51,3, + 51,1433,8,51,1,51,1,51,1,51,5,51,1438,8,51,10,51,12,51,1441,9,51, + 1,51,3,51,1444,8,51,1,52,1,52,3,52,1448,8,52,1,53,1,53,1,54,1,54, + 1,54,1,54,3,54,1456,8,54,1,55,1,55,5,55,1460,8,55,10,55,12,55,1463, + 9,55,1,55,1,55,3,55,1467,8,55,1,55,4,55,1470,8,55,11,55,12,55,1471, + 1,55,4,55,1475,8,55,11,55,12,55,1476,1,55,1,55,1,56,1,56,5,56,1483, + 8,56,10,56,12,56,1486,9,56,1,56,1,56,1,57,1,57,1,57,1,57,1,57,1, + 57,1,57,1,57,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,59,1,59,1, + 59,1,59,1,60,1,60,1,60,1,60,1,60,1,61,1,61,1,61,1,61,1,61,1,62,1, + 62,1,62,1,62,1,62,1,62,1,63,1,63,1,63,1,63,1,63,1,64,1,64,1,64,1, + 64,1,64,1,64,1,65,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,66,1,66,1, + 66,1,66,1,66,1,66,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1, + 68,1,68,1,68,1,68,1,68,1,68,1,69,1,69,1,69,1,69,1,69,1,69,1,70,1, + 70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,71,1,71,1,71,1,71,1, + 71,1,71,1,71,1,71,1,71,1,71,1,71,1,72,1,72,1,72,1,72,1,72,1,72,1, + 72,1,72,1,72,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,74,1, + 74,1,74,1,74,1,74,1,74,1,74,1,74,1,75,1,75,1,75,1,75,1,75,1,75,1, + 75,1,76,1,76,1,76,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,78,1,78,1, + 78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,79,1,79,1, + 79,1,79,1,79,1,80,1,80,1,80,1,80,1,80,1,81,1,81,1,81,1,81,1,81,1, + 81,1,81,1,81,1,81,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,83,1,83,1, + 83,1,83,1,83,1,83,1,83,1,84,1,84,1,84,1,84,1,84,1,84,1,85,1,85,1, + 85,1,85,1,85,1,85,1,86,1,86,1,86,1,86,1,86,1,86,1,87,1,87,1,87,1, + 87,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,89,1,89,1,89,1,89,1,89,1, + 90,1,90,1,90,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,92,1,92,1,92,1, + 92,1,93,1,93,1,93,1,93,1,93,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1, + 94,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,96,1,96,1, + 96,1,96,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,98,1,98,1, + 98,1,98,1,98,1,98,1,98,1,98,1,99,1,99,1,99,1,99,1,99,1,99,1,99,1, + 99,1,99,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1, + 101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,102, + 1,102,1,102,1,102,1,102,1,102,1,102,1,103,1,103,1,103,1,103,1,103, + 1,103,1,103,1,103,1,103,1,104,1,104,1,104,1,104,1,104,1,104,1,104, + 1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,105, + 1,105,1,105,1,105,1,105,1,105,1,105,1,106,1,106,1,106,1,106,1,106, + 1,106,1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,108,1,108,1,108, + 1,108,1,108,1,108,1,108,1,109,1,109,1,109,1,109,1,109,1,109,1,109, + 1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110, + 1,110,1,110,1,110,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111, + 1,111,1,111,1,111,1,111,1,112,1,112,1,112,1,112,1,112,1,112,1,112, + 1,113,1,113,1,113,1,113,1,113,1,113,1,113,1,114,1,114,1,114,1,114, + 1,114,1,114,1,114,1,114,1,114,1,115,1,115,1,115,1,115,1,115,1,116, + 1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116, + 1,116,1,117,1,117,1,117,1,117,1,117,1,117,1,118,1,118,1,118,1,118, + 1,118,1,119,1,119,1,119,1,119,1,120,1,120,1,120,1,120,1,120,1,120, + 1,120,1,120,1,121,1,121,1,121,1,121,1,121,1,121,1,121,1,122,1,122, + 1,122,1,122,1,122,1,122,1,122,1,122,1,122,1,123,1,123,1,123,1,123, + 1,123,1,123,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124, + 1,125,1,125,1,125,1,125,1,125,1,125,1,126,1,126,1,126,1,126,1,126, + 1,126,1,126,1,126,1,127,1,127,1,127,1,127,1,127,1,128,1,128,1,128, + 1,128,1,128,1,128,1,128,1,128,1,128,1,129,1,129,1,129,1,129,1,129, + 1,129,1,129,1,129,1,130,1,130,1,130,1,130,1,130,1,130,1,131,1,131, + 1,132,1,132,1,133,1,133,1,134,1,134,1,135,1,135,1,136,1,136,1,137, + 1,137,1,138,1,138,1,139,1,139,1,140,1,140,1,141,1,141,1,142,1,142, + 1,143,1,143,1,144,1,144,1,145,1,145,1,146,1,146,1,146,1,146,3,146, + 2066,8,146,1,147,1,147,1,148,1,148,1,149,1,149,1,150,1,150,1,150, 1,151,1,151,1,151,1,152,1,152,1,152,1,153,1,153,1,153,1,154,1,154, - 1,154,1,155,1,155,1,155,1,156,1,156,1,156,1,156,1,157,1,157,1,157, - 1,157,1,158,1,158,1,158,1,159,1,159,1,159,1,160,1,160,1,160,1,161, - 1,161,1,161,1,162,1,162,1,162,1,162,1,162,3,162,2098,8,162,1,163, - 1,163,1,163,1,163,3,163,2104,8,163,1,164,1,164,1,164,1,165,1,165, - 1,165,1,166,1,166,1,167,1,167,1,167,1,167,1,168,1,168,1,168,1,169, - 1,169,1,170,1,170,1,171,1,171,1,171,1,172,1,172,1,173,1,173,1,174, - 1,174,1,174,1,175,1,175,1,175,1,175,1,176,1,176,1,176,1,176,1,176, - 1,177,1,177,1,177,1,177,1,177,1,177,1,177,1,177,1,177,1,177,3,177, - 2154,8,177,1,178,1,178,1,178,5,178,2159,8,178,10,178,12,178,2162, - 9,178,1,179,1,179,3,179,2166,8,179,1,180,1,180,1,181,1,181,1,182, - 1,182,3,182,2174,8,182,1,182,5,182,2177,8,182,10,182,12,182,2180, - 9,182,1,183,1,183,3,183,2184,8,183,1,183,5,183,2187,8,183,10,183, - 12,183,2190,9,183,1,184,1,184,1,184,1,184,3,184,2196,8,184,1,184, - 1,184,3,184,2200,8,184,1,184,5,184,2203,8,184,10,184,12,184,2206, - 9,184,1,185,1,185,1,185,1,185,3,185,2212,8,185,1,185,1,185,3,185, - 2216,8,185,1,185,5,185,2219,8,185,10,185,12,185,2222,9,185,1,186, - 1,186,1,187,1,187,1,188,1,188,1,189,1,189,1,190,1,190,3,190,2234, - 8,190,1,190,1,190,3,190,2238,8,190,1,190,1,190,3,190,2242,8,190, - 1,190,1,190,3,190,2246,8,190,3,190,2248,8,190,1,191,1,191,1,192, - 1,192,1,193,1,193,1,193,1,193,3,193,2258,8,193,1,194,1,194,1,194, - 3,194,2263,8,194,1,195,1,195,1,195,3,195,2268,8,195,1,196,1,196, - 1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196, - 1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196,3,196,2291,8,196, - 1,196,3,196,2294,8,196,1,196,1,196,1,196,1,196,3,196,2300,8,196, - 1,197,1,197,1,197,1,197,1,197,1,197,1,197,1,197,1,197,1,197,1,197, - 3,197,2313,8,197,1,198,1,198,1,198,1,198,4,198,2319,8,198,11,198, - 12,198,2320,1,199,3,199,2324,8,199,1,199,1,199,1,199,1,199,1,199, - 3,199,2331,8,199,1,200,1,200,3,200,2335,8,200,1,200,1,200,1,200, - 3,200,2340,8,200,1,200,3,200,2343,8,200,1,201,1,201,1,202,1,202, - 3,202,2349,8,202,1,202,5,202,2352,8,202,10,202,12,202,2355,9,202, - 1,203,1,203,1,204,1,204,1,204,3,204,2362,8,204,1,205,1,205,1,205, - 3,205,2367,8,205,1,206,1,206,1,206,1,206,1,206,1,206,5,206,2375, - 8,206,10,206,12,206,2378,9,206,1,206,1,206,5,206,2382,8,206,10,206, - 12,206,2385,9,206,1,206,1,206,1,206,1,206,5,206,2391,8,206,10,206, - 12,206,2394,9,206,1,206,1,206,1,207,1,207,1,207,1,207,1,207,1,207, - 1,207,1,207,1,207,1,207,1,207,1,207,3,207,2410,8,207,1,208,1,208, - 3,208,2414,8,208,1,208,1,208,1,208,1,208,1,208,1,208,3,208,2422, - 8,208,1,209,1,209,1,209,1,210,1,210,1,210,1,211,1,211,1,212,4,212, - 2433,8,212,11,212,12,212,2434,1,212,1,212,1,213,1,213,3,213,2441, - 8,213,1,213,3,213,2444,8,213,1,213,1,213,1,214,1,214,1,214,1,214, - 5,214,2452,8,214,10,214,12,214,2455,9,214,1,214,1,214,1,214,1,214, - 1,214,1,215,1,215,1,215,1,215,5,215,2466,8,215,10,215,12,215,2469, - 9,215,1,215,1,215,6,1343,1436,2376,2383,2392,2453,0,216,1,1,3,2, - 5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,10,21,11,23,12,25,13,27,14,29, - 15,31,16,33,17,35,18,37,19,39,20,41,21,43,22,45,23,47,24,49,25,51, - 26,53,27,55,28,57,29,59,30,61,31,63,32,65,33,67,34,69,35,71,36,73, - 37,75,38,77,39,79,40,81,41,83,42,85,43,87,44,89,45,91,46,93,47,95, - 48,97,49,99,50,101,51,103,52,105,53,107,54,109,55,111,56,113,57, - 115,58,117,59,119,60,121,61,123,62,125,63,127,64,129,65,131,66,133, - 67,135,68,137,69,139,70,141,71,143,72,145,73,147,74,149,75,151,76, - 153,77,155,78,157,79,159,80,161,81,163,82,165,83,167,84,169,85,171, - 86,173,87,175,88,177,89,179,90,181,91,183,92,185,93,187,94,189,95, - 191,96,193,97,195,98,197,99,199,100,201,101,203,102,205,103,207, - 104,209,105,211,106,213,107,215,108,217,109,219,110,221,111,223, - 112,225,113,227,114,229,115,231,116,233,117,235,118,237,119,239, - 120,241,121,243,122,245,123,247,124,249,125,251,126,253,127,255, - 128,257,129,259,130,261,131,263,132,265,133,267,134,269,135,271, - 136,273,137,275,138,277,139,279,140,281,141,283,142,285,143,287, - 144,289,145,291,146,293,147,295,148,297,149,299,150,301,151,303, - 152,305,153,307,154,309,155,311,156,313,157,315,158,317,159,319, - 160,321,161,323,162,325,163,327,164,329,165,331,166,333,167,335, - 168,337,169,339,170,341,171,343,172,345,173,347,174,349,175,351, - 176,353,0,355,0,357,177,359,0,361,0,363,0,365,178,367,179,369,180, - 371,181,373,0,375,0,377,0,379,0,381,182,383,0,385,0,387,0,389,0, - 391,0,393,0,395,0,397,0,399,0,401,0,403,0,405,0,407,0,409,0,411, - 0,413,0,415,183,417,184,419,185,421,186,423,0,425,187,427,188,429, - 189,431,190,1,0,20,3,0,76,76,85,85,117,117,1,0,10,10,3,0,65,90,95, - 95,97,122,1,0,48,57,1,0,49,57,1,0,48,55,3,0,48,57,65,70,97,102,1, - 0,48,49,2,0,85,85,117,117,2,0,76,76,108,108,4,0,10,10,13,13,39,39, - 92,92,2,0,43,43,45,45,4,0,70,70,76,76,102,102,108,108,4,0,10,10, - 13,13,34,34,92,92,2,0,34,34,40,41,4,0,10,10,13,13,32,32,40,40,1, - 0,41,41,4,0,10,10,13,13,32,32,34,34,2,0,9,9,32,32,2,0,10,10,13,13, - 2623,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0, - 0,11,1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0, - 0,21,1,0,0,0,0,23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0, - 0,31,1,0,0,0,0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,39,1,0,0,0, - 0,41,1,0,0,0,0,43,1,0,0,0,0,45,1,0,0,0,0,47,1,0,0,0,0,49,1,0,0,0, - 0,51,1,0,0,0,0,53,1,0,0,0,0,55,1,0,0,0,0,57,1,0,0,0,0,59,1,0,0,0, - 0,61,1,0,0,0,0,63,1,0,0,0,0,65,1,0,0,0,0,67,1,0,0,0,0,69,1,0,0,0, - 0,71,1,0,0,0,0,73,1,0,0,0,0,75,1,0,0,0,0,77,1,0,0,0,0,79,1,0,0,0, - 0,81,1,0,0,0,0,83,1,0,0,0,0,85,1,0,0,0,0,87,1,0,0,0,0,89,1,0,0,0, - 0,91,1,0,0,0,0,93,1,0,0,0,0,95,1,0,0,0,0,97,1,0,0,0,0,99,1,0,0,0, - 0,101,1,0,0,0,0,103,1,0,0,0,0,105,1,0,0,0,0,107,1,0,0,0,0,109,1, - 0,0,0,0,111,1,0,0,0,0,113,1,0,0,0,0,115,1,0,0,0,0,117,1,0,0,0,0, - 119,1,0,0,0,0,121,1,0,0,0,0,123,1,0,0,0,0,125,1,0,0,0,0,127,1,0, - 0,0,0,129,1,0,0,0,0,131,1,0,0,0,0,133,1,0,0,0,0,135,1,0,0,0,0,137, - 1,0,0,0,0,139,1,0,0,0,0,141,1,0,0,0,0,143,1,0,0,0,0,145,1,0,0,0, - 0,147,1,0,0,0,0,149,1,0,0,0,0,151,1,0,0,0,0,153,1,0,0,0,0,155,1, - 0,0,0,0,157,1,0,0,0,0,159,1,0,0,0,0,161,1,0,0,0,0,163,1,0,0,0,0, - 165,1,0,0,0,0,167,1,0,0,0,0,169,1,0,0,0,0,171,1,0,0,0,0,173,1,0, - 0,0,0,175,1,0,0,0,0,177,1,0,0,0,0,179,1,0,0,0,0,181,1,0,0,0,0,183, - 1,0,0,0,0,185,1,0,0,0,0,187,1,0,0,0,0,189,1,0,0,0,0,191,1,0,0,0, - 0,193,1,0,0,0,0,195,1,0,0,0,0,197,1,0,0,0,0,199,1,0,0,0,0,201,1, - 0,0,0,0,203,1,0,0,0,0,205,1,0,0,0,0,207,1,0,0,0,0,209,1,0,0,0,0, - 211,1,0,0,0,0,213,1,0,0,0,0,215,1,0,0,0,0,217,1,0,0,0,0,219,1,0, - 0,0,0,221,1,0,0,0,0,223,1,0,0,0,0,225,1,0,0,0,0,227,1,0,0,0,0,229, - 1,0,0,0,0,231,1,0,0,0,0,233,1,0,0,0,0,235,1,0,0,0,0,237,1,0,0,0, - 0,239,1,0,0,0,0,241,1,0,0,0,0,243,1,0,0,0,0,245,1,0,0,0,0,247,1, - 0,0,0,0,249,1,0,0,0,0,251,1,0,0,0,0,253,1,0,0,0,0,255,1,0,0,0,0, - 257,1,0,0,0,0,259,1,0,0,0,0,261,1,0,0,0,0,263,1,0,0,0,0,265,1,0, - 0,0,0,267,1,0,0,0,0,269,1,0,0,0,0,271,1,0,0,0,0,273,1,0,0,0,0,275, - 1,0,0,0,0,277,1,0,0,0,0,279,1,0,0,0,0,281,1,0,0,0,0,283,1,0,0,0, - 0,285,1,0,0,0,0,287,1,0,0,0,0,289,1,0,0,0,0,291,1,0,0,0,0,293,1, - 0,0,0,0,295,1,0,0,0,0,297,1,0,0,0,0,299,1,0,0,0,0,301,1,0,0,0,0, - 303,1,0,0,0,0,305,1,0,0,0,0,307,1,0,0,0,0,309,1,0,0,0,0,311,1,0, - 0,0,0,313,1,0,0,0,0,315,1,0,0,0,0,317,1,0,0,0,0,319,1,0,0,0,0,321, - 1,0,0,0,0,323,1,0,0,0,0,325,1,0,0,0,0,327,1,0,0,0,0,329,1,0,0,0, - 0,331,1,0,0,0,0,333,1,0,0,0,0,335,1,0,0,0,0,337,1,0,0,0,0,339,1, - 0,0,0,0,341,1,0,0,0,0,343,1,0,0,0,0,345,1,0,0,0,0,347,1,0,0,0,0, - 349,1,0,0,0,0,351,1,0,0,0,0,357,1,0,0,0,0,365,1,0,0,0,0,367,1,0, - 0,0,0,369,1,0,0,0,0,371,1,0,0,0,0,381,1,0,0,0,0,415,1,0,0,0,0,417, - 1,0,0,0,0,419,1,0,0,0,0,421,1,0,0,0,0,425,1,0,0,0,0,427,1,0,0,0, - 0,429,1,0,0,0,0,431,1,0,0,0,1,433,1,0,0,0,3,459,1,0,0,0,5,467,1, - 0,0,0,7,493,1,0,0,0,9,522,1,0,0,0,11,548,1,0,0,0,13,568,1,0,0,0, - 15,570,1,0,0,0,17,608,1,0,0,0,19,619,1,0,0,0,21,669,1,0,0,0,23,692, - 1,0,0,0,25,754,1,0,0,0,27,786,1,0,0,0,29,806,1,0,0,0,31,829,1,0, - 0,0,33,861,1,0,0,0,35,887,1,0,0,0,37,910,1,0,0,0,39,936,1,0,0,0, - 41,959,1,0,0,0,43,976,1,0,0,0,45,993,1,0,0,0,47,1013,1,0,0,0,49, - 1030,1,0,0,0,51,1044,1,0,0,0,53,1058,1,0,0,0,55,1072,1,0,0,0,57, - 1086,1,0,0,0,59,1109,1,0,0,0,61,1129,1,0,0,0,63,1143,1,0,0,0,65, - 1160,1,0,0,0,67,1189,1,0,0,0,69,1197,1,0,0,0,71,1219,1,0,0,0,73, - 1251,1,0,0,0,75,1268,1,0,0,0,77,1288,1,0,0,0,79,1314,1,0,0,0,81, - 1316,1,0,0,0,83,1323,1,0,0,0,85,1330,1,0,0,0,87,1337,1,0,0,0,89, - 1349,1,0,0,0,91,1358,1,0,0,0,93,1379,1,0,0,0,95,1382,1,0,0,0,97, - 1404,1,0,0,0,99,1407,1,0,0,0,101,1422,1,0,0,0,103,1424,1,0,0,0,105, - 1430,1,0,0,0,107,1432,1,0,0,0,109,1455,1,0,0,0,111,1464,1,0,0,0, - 113,1472,1,0,0,0,115,1480,1,0,0,0,117,1484,1,0,0,0,119,1489,1,0, - 0,0,121,1494,1,0,0,0,123,1500,1,0,0,0,125,1505,1,0,0,0,127,1511, - 1,0,0,0,129,1516,1,0,0,0,131,1525,1,0,0,0,133,1534,1,0,0,0,135,1540, - 1,0,0,0,137,1546,1,0,0,0,139,1556,1,0,0,0,141,1567,1,0,0,0,143,1576, - 1,0,0,0,145,1585,1,0,0,0,147,1593,1,0,0,0,149,1600,1,0,0,0,151,1603, - 1,0,0,0,153,1610,1,0,0,0,155,1623,1,0,0,0,157,1628,1,0,0,0,159,1633, - 1,0,0,0,161,1642,1,0,0,0,163,1649,1,0,0,0,165,1656,1,0,0,0,167,1662, - 1,0,0,0,169,1668,1,0,0,0,171,1674,1,0,0,0,173,1678,1,0,0,0,175,1685, - 1,0,0,0,177,1690,1,0,0,0,179,1693,1,0,0,0,181,1700,1,0,0,0,183,1704, - 1,0,0,0,185,1709,1,0,0,0,187,1717,1,0,0,0,189,1727,1,0,0,0,191,1731, - 1,0,0,0,193,1740,1,0,0,0,195,1748,1,0,0,0,197,1757,1,0,0,0,199,1766, - 1,0,0,0,201,1776,1,0,0,0,203,1783,1,0,0,0,205,1792,1,0,0,0,207,1809, - 1,0,0,0,209,1816,1,0,0,0,211,1822,1,0,0,0,213,1829,1,0,0,0,215,1836, - 1,0,0,0,217,1843,1,0,0,0,219,1857,1,0,0,0,221,1869,1,0,0,0,223,1876, - 1,0,0,0,225,1883,1,0,0,0,227,1892,1,0,0,0,229,1897,1,0,0,0,231,1910, - 1,0,0,0,233,1916,1,0,0,0,235,1921,1,0,0,0,237,1925,1,0,0,0,239,1933, - 1,0,0,0,241,1940,1,0,0,0,243,1949,1,0,0,0,245,1955,1,0,0,0,247,1964, - 1,0,0,0,249,1970,1,0,0,0,251,1978,1,0,0,0,253,1983,1,0,0,0,255,1992, - 1,0,0,0,257,2000,1,0,0,0,259,2006,1,0,0,0,261,2008,1,0,0,0,263,2010, - 1,0,0,0,265,2012,1,0,0,0,267,2014,1,0,0,0,269,2016,1,0,0,0,271,2018, - 1,0,0,0,273,2020,1,0,0,0,275,2022,1,0,0,0,277,2024,1,0,0,0,279,2026, - 1,0,0,0,281,2028,1,0,0,0,283,2030,1,0,0,0,285,2032,1,0,0,0,287,2034, - 1,0,0,0,289,2040,1,0,0,0,291,2042,1,0,0,0,293,2044,1,0,0,0,295,2046, - 1,0,0,0,297,2048,1,0,0,0,299,2051,1,0,0,0,301,2054,1,0,0,0,303,2057, - 1,0,0,0,305,2060,1,0,0,0,307,2063,1,0,0,0,309,2066,1,0,0,0,311,2069, - 1,0,0,0,313,2072,1,0,0,0,315,2076,1,0,0,0,317,2080,1,0,0,0,319,2083, - 1,0,0,0,321,2086,1,0,0,0,323,2089,1,0,0,0,325,2097,1,0,0,0,327,2103, - 1,0,0,0,329,2105,1,0,0,0,331,2108,1,0,0,0,333,2111,1,0,0,0,335,2113, - 1,0,0,0,337,2117,1,0,0,0,339,2120,1,0,0,0,341,2122,1,0,0,0,343,2124, - 1,0,0,0,345,2127,1,0,0,0,347,2129,1,0,0,0,349,2131,1,0,0,0,351,2134, - 1,0,0,0,353,2138,1,0,0,0,355,2153,1,0,0,0,357,2155,1,0,0,0,359,2165, - 1,0,0,0,361,2167,1,0,0,0,363,2169,1,0,0,0,365,2171,1,0,0,0,367,2181, - 1,0,0,0,369,2195,1,0,0,0,371,2211,1,0,0,0,373,2223,1,0,0,0,375,2225, - 1,0,0,0,377,2227,1,0,0,0,379,2229,1,0,0,0,381,2247,1,0,0,0,383,2249, - 1,0,0,0,385,2251,1,0,0,0,387,2257,1,0,0,0,389,2262,1,0,0,0,391,2267, - 1,0,0,0,393,2299,1,0,0,0,395,2312,1,0,0,0,397,2314,1,0,0,0,399,2330, - 1,0,0,0,401,2342,1,0,0,0,403,2344,1,0,0,0,405,2346,1,0,0,0,407,2356, - 1,0,0,0,409,2361,1,0,0,0,411,2366,1,0,0,0,413,2368,1,0,0,0,415,2409, - 1,0,0,0,417,2421,1,0,0,0,419,2423,1,0,0,0,421,2426,1,0,0,0,423,2429, - 1,0,0,0,425,2432,1,0,0,0,427,2443,1,0,0,0,429,2447,1,0,0,0,431,2461, - 1,0,0,0,433,434,5,48,0,0,434,2,1,0,0,0,435,436,5,65,0,0,436,437, - 5,66,0,0,437,438,5,83,0,0,438,439,5,79,0,0,439,440,5,76,0,0,440, - 441,5,85,0,0,441,442,5,84,0,0,442,460,5,69,0,0,443,444,5,65,0,0, - 444,445,5,98,0,0,445,446,5,115,0,0,446,447,5,111,0,0,447,448,5,108, - 0,0,448,449,5,117,0,0,449,450,5,116,0,0,450,460,5,101,0,0,451,452, - 5,97,0,0,452,453,5,98,0,0,453,454,5,115,0,0,454,455,5,111,0,0,455, - 456,5,108,0,0,456,457,5,117,0,0,457,458,5,116,0,0,458,460,5,101, - 0,0,459,435,1,0,0,0,459,443,1,0,0,0,459,451,1,0,0,0,460,4,1,0,0, - 0,461,462,5,65,0,0,462,468,5,84,0,0,463,464,5,65,0,0,464,468,5,116, - 0,0,465,466,5,97,0,0,466,468,5,116,0,0,467,461,1,0,0,0,467,463,1, - 0,0,0,467,465,1,0,0,0,468,6,1,0,0,0,469,470,5,67,0,0,470,471,5,65, - 0,0,471,472,5,84,0,0,472,473,5,69,0,0,473,474,5,71,0,0,474,475,5, - 79,0,0,475,476,5,82,0,0,476,494,5,89,0,0,477,478,5,67,0,0,478,479, - 5,97,0,0,479,480,5,116,0,0,480,481,5,101,0,0,481,482,5,103,0,0,482, - 483,5,111,0,0,483,484,5,114,0,0,484,494,5,121,0,0,485,486,5,99,0, - 0,486,487,5,97,0,0,487,488,5,116,0,0,488,489,5,101,0,0,489,490,5, - 103,0,0,490,491,5,111,0,0,491,492,5,114,0,0,492,494,5,121,0,0,493, - 469,1,0,0,0,493,477,1,0,0,0,493,485,1,0,0,0,494,8,1,0,0,0,495,496, - 5,67,0,0,496,497,5,79,0,0,497,498,5,77,0,0,498,499,5,80,0,0,499, - 500,5,79,0,0,500,501,5,78,0,0,501,502,5,69,0,0,502,503,5,78,0,0, - 503,523,5,84,0,0,504,505,5,67,0,0,505,506,5,111,0,0,506,507,5,109, - 0,0,507,508,5,112,0,0,508,509,5,111,0,0,509,510,5,110,0,0,510,511, - 5,101,0,0,511,512,5,110,0,0,512,523,5,116,0,0,513,514,5,99,0,0,514, - 515,5,111,0,0,515,516,5,109,0,0,516,517,5,112,0,0,517,518,5,111, - 0,0,518,519,5,110,0,0,519,520,5,101,0,0,520,521,5,110,0,0,521,523, - 5,116,0,0,522,495,1,0,0,0,522,504,1,0,0,0,522,513,1,0,0,0,523,10, - 1,0,0,0,524,525,5,85,0,0,525,526,5,83,0,0,526,527,5,69,0,0,527,528, - 5,82,0,0,528,529,5,86,0,0,529,530,5,65,0,0,530,531,5,82,0,0,531, - 549,5,83,0,0,532,533,5,85,0,0,533,534,5,115,0,0,534,535,5,101,0, - 0,535,536,5,114,0,0,536,537,5,86,0,0,537,538,5,97,0,0,538,539,5, - 114,0,0,539,549,5,115,0,0,540,541,5,117,0,0,541,542,5,115,0,0,542, - 543,5,101,0,0,543,544,5,114,0,0,544,545,5,118,0,0,545,546,5,97,0, - 0,546,547,5,114,0,0,547,549,5,115,0,0,548,524,1,0,0,0,548,532,1, - 0,0,0,548,540,1,0,0,0,549,12,1,0,0,0,550,551,5,68,0,0,551,552,5, - 69,0,0,552,553,5,70,0,0,553,554,5,73,0,0,554,555,5,78,0,0,555,569, - 5,69,0,0,556,557,5,68,0,0,557,558,5,101,0,0,558,559,5,102,0,0,559, - 560,5,105,0,0,560,561,5,110,0,0,561,569,5,101,0,0,562,563,5,100, - 0,0,563,564,5,101,0,0,564,565,5,102,0,0,565,566,5,105,0,0,566,567, - 5,110,0,0,567,569,5,101,0,0,568,550,1,0,0,0,568,556,1,0,0,0,568, - 562,1,0,0,0,569,14,1,0,0,0,570,571,5,68,0,0,571,572,5,69,0,0,572, - 573,5,67,0,0,573,574,5,76,0,0,574,575,5,65,0,0,575,576,5,82,0,0, - 576,577,5,69,0,0,577,16,1,0,0,0,578,579,5,68,0,0,579,580,5,69,0, - 0,580,581,5,70,0,0,581,582,5,73,0,0,582,583,5,78,0,0,583,584,5,73, - 0,0,584,585,5,84,0,0,585,586,5,73,0,0,586,587,5,79,0,0,587,609,5, - 78,0,0,588,589,5,68,0,0,589,590,5,101,0,0,590,591,5,102,0,0,591, - 592,5,105,0,0,592,593,5,110,0,0,593,594,5,105,0,0,594,595,5,116, - 0,0,595,596,5,105,0,0,596,597,5,111,0,0,597,609,5,110,0,0,598,599, - 5,100,0,0,599,600,5,101,0,0,600,601,5,102,0,0,601,602,5,105,0,0, - 602,603,5,110,0,0,603,604,5,105,0,0,604,605,5,116,0,0,605,606,5, - 105,0,0,606,607,5,111,0,0,607,609,5,110,0,0,608,578,1,0,0,0,608, - 588,1,0,0,0,608,598,1,0,0,0,609,18,1,0,0,0,610,611,5,69,0,0,611, - 612,5,78,0,0,612,620,5,68,0,0,613,614,5,69,0,0,614,615,5,110,0,0, - 615,620,5,100,0,0,616,617,5,101,0,0,617,618,5,110,0,0,618,620,5, - 100,0,0,619,610,1,0,0,0,619,613,1,0,0,0,619,616,1,0,0,0,620,20,1, - 0,0,0,621,622,5,77,0,0,622,623,5,67,0,0,623,624,5,68,0,0,624,625, - 5,73,0,0,625,626,5,83,0,0,626,627,5,80,0,0,627,628,5,76,0,0,628, - 629,5,65,0,0,629,670,5,89,0,0,630,631,5,68,0,0,631,632,5,73,0,0, - 632,633,5,83,0,0,633,634,5,80,0,0,634,635,5,76,0,0,635,636,5,65, - 0,0,636,670,5,89,0,0,637,638,5,77,0,0,638,639,5,99,0,0,639,640,5, - 68,0,0,640,641,5,105,0,0,641,642,5,115,0,0,642,643,5,112,0,0,643, - 644,5,108,0,0,644,645,5,97,0,0,645,670,5,121,0,0,646,647,5,109,0, - 0,647,648,5,99,0,0,648,649,5,100,0,0,649,650,5,105,0,0,650,651,5, - 115,0,0,651,652,5,112,0,0,652,653,5,108,0,0,653,654,5,97,0,0,654, - 670,5,121,0,0,655,656,5,68,0,0,656,657,5,105,0,0,657,658,5,115,0, - 0,658,659,5,112,0,0,659,660,5,108,0,0,660,661,5,97,0,0,661,670,5, - 121,0,0,662,663,5,100,0,0,663,664,5,105,0,0,664,665,5,115,0,0,665, - 666,5,112,0,0,666,667,5,108,0,0,667,668,5,97,0,0,668,670,5,121,0, - 0,669,621,1,0,0,0,669,630,1,0,0,0,669,637,1,0,0,0,669,646,1,0,0, - 0,669,655,1,0,0,0,669,662,1,0,0,0,670,22,1,0,0,0,671,672,5,70,0, - 0,672,673,5,73,0,0,673,674,5,78,0,0,674,675,5,65,0,0,675,676,5,76, - 0,0,676,677,5,76,0,0,677,693,5,89,0,0,678,679,5,70,0,0,679,680,5, - 105,0,0,680,681,5,110,0,0,681,682,5,97,0,0,682,683,5,108,0,0,683, - 684,5,108,0,0,684,693,5,121,0,0,685,686,5,102,0,0,686,687,5,105, - 0,0,687,688,5,110,0,0,688,689,5,97,0,0,689,690,5,108,0,0,690,691, - 5,108,0,0,691,693,5,121,0,0,692,671,1,0,0,0,692,678,1,0,0,0,692, - 685,1,0,0,0,693,24,1,0,0,0,694,695,5,73,0,0,695,696,5,78,0,0,696, - 697,5,73,0,0,697,698,5,84,0,0,698,699,5,73,0,0,699,700,5,65,0,0, - 700,701,5,76,0,0,701,702,5,73,0,0,702,703,5,90,0,0,703,755,5,69, - 0,0,704,705,5,73,0,0,705,706,5,78,0,0,706,707,5,73,0,0,707,708,5, - 84,0,0,708,709,5,73,0,0,709,710,5,65,0,0,710,711,5,76,0,0,711,712, - 5,73,0,0,712,713,5,83,0,0,713,755,5,69,0,0,714,715,5,73,0,0,715, - 716,5,110,0,0,716,717,5,105,0,0,717,718,5,116,0,0,718,719,5,105, - 0,0,719,720,5,97,0,0,720,721,5,108,0,0,721,722,5,105,0,0,722,723, - 5,122,0,0,723,755,5,101,0,0,724,725,5,105,0,0,725,726,5,110,0,0, - 726,727,5,105,0,0,727,728,5,116,0,0,728,729,5,105,0,0,729,730,5, - 97,0,0,730,731,5,108,0,0,731,732,5,105,0,0,732,733,5,122,0,0,733, - 755,5,101,0,0,734,735,5,73,0,0,735,736,5,110,0,0,736,737,5,105,0, - 0,737,738,5,116,0,0,738,739,5,105,0,0,739,740,5,97,0,0,740,741,5, - 108,0,0,741,742,5,105,0,0,742,743,5,115,0,0,743,755,5,101,0,0,744, - 745,5,105,0,0,745,746,5,110,0,0,746,747,5,105,0,0,747,748,5,116, - 0,0,748,749,5,105,0,0,749,750,5,97,0,0,750,751,5,108,0,0,751,752, - 5,105,0,0,752,753,5,115,0,0,753,755,5,101,0,0,754,694,1,0,0,0,754, - 704,1,0,0,0,754,714,1,0,0,0,754,724,1,0,0,0,754,734,1,0,0,0,754, - 744,1,0,0,0,755,26,1,0,0,0,756,757,5,73,0,0,757,758,5,78,0,0,758, - 759,5,83,0,0,759,760,5,84,0,0,760,761,5,82,0,0,761,762,5,85,0,0, - 762,763,5,77,0,0,763,764,5,69,0,0,764,765,5,78,0,0,765,787,5,84, - 0,0,766,767,5,73,0,0,767,768,5,110,0,0,768,769,5,115,0,0,769,770, - 5,116,0,0,770,771,5,114,0,0,771,772,5,117,0,0,772,773,5,109,0,0, - 773,774,5,101,0,0,774,775,5,110,0,0,775,787,5,116,0,0,776,777,5, - 105,0,0,777,778,5,110,0,0,778,779,5,115,0,0,779,780,5,116,0,0,780, - 781,5,114,0,0,781,782,5,117,0,0,782,783,5,109,0,0,783,784,5,101, - 0,0,784,785,5,110,0,0,785,787,5,116,0,0,786,756,1,0,0,0,786,766, - 1,0,0,0,786,776,1,0,0,0,787,28,1,0,0,0,788,789,5,79,0,0,789,790, - 5,85,0,0,790,791,5,84,0,0,791,792,5,80,0,0,792,793,5,85,0,0,793, - 807,5,84,0,0,794,795,5,79,0,0,795,796,5,117,0,0,796,797,5,116,0, - 0,797,798,5,112,0,0,798,799,5,117,0,0,799,807,5,116,0,0,800,801, - 5,111,0,0,801,802,5,117,0,0,802,803,5,116,0,0,803,804,5,112,0,0, - 804,805,5,117,0,0,805,807,5,116,0,0,806,788,1,0,0,0,806,794,1,0, - 0,0,806,800,1,0,0,0,807,30,1,0,0,0,808,809,5,80,0,0,809,810,5,82, - 0,0,810,811,5,73,0,0,811,812,5,86,0,0,812,813,5,65,0,0,813,814,5, - 84,0,0,814,830,5,69,0,0,815,816,5,80,0,0,816,817,5,114,0,0,817,818, - 5,105,0,0,818,819,5,118,0,0,819,820,5,97,0,0,820,821,5,116,0,0,821, - 830,5,101,0,0,822,823,5,112,0,0,823,824,5,114,0,0,824,825,5,105, - 0,0,825,826,5,118,0,0,826,827,5,97,0,0,827,828,5,116,0,0,828,830, - 5,101,0,0,829,808,1,0,0,0,829,815,1,0,0,0,829,822,1,0,0,0,830,32, - 1,0,0,0,831,832,5,80,0,0,832,833,5,65,0,0,833,834,5,82,0,0,834,835, - 5,65,0,0,835,836,5,77,0,0,836,837,5,69,0,0,837,838,5,84,0,0,838, - 839,5,69,0,0,839,840,5,82,0,0,840,862,5,83,0,0,841,842,5,80,0,0, - 842,843,5,97,0,0,843,844,5,114,0,0,844,845,5,97,0,0,845,846,5,109, - 0,0,846,847,5,101,0,0,847,848,5,116,0,0,848,849,5,101,0,0,849,850, - 5,114,0,0,850,862,5,115,0,0,851,852,5,112,0,0,852,853,5,97,0,0,853, - 854,5,114,0,0,854,855,5,97,0,0,855,856,5,109,0,0,856,857,5,101,0, - 0,857,858,5,116,0,0,858,859,5,101,0,0,859,860,5,114,0,0,860,862, - 5,115,0,0,861,831,1,0,0,0,861,841,1,0,0,0,861,851,1,0,0,0,862,34, - 1,0,0,0,863,864,5,82,0,0,864,865,5,69,0,0,865,866,5,76,0,0,866,867, - 5,65,0,0,867,868,5,84,0,0,868,869,5,73,0,0,869,870,5,86,0,0,870, - 888,5,69,0,0,871,872,5,82,0,0,872,873,5,101,0,0,873,874,5,108,0, - 0,874,875,5,97,0,0,875,876,5,116,0,0,876,877,5,105,0,0,877,878,5, - 118,0,0,878,888,5,101,0,0,879,880,5,114,0,0,880,881,5,101,0,0,881, - 882,5,108,0,0,882,883,5,97,0,0,883,884,5,116,0,0,884,885,5,105,0, - 0,885,886,5,118,0,0,886,888,5,101,0,0,887,863,1,0,0,0,887,871,1, - 0,0,0,887,879,1,0,0,0,888,36,1,0,0,0,889,890,5,82,0,0,890,891,5, - 79,0,0,891,892,5,84,0,0,892,893,5,65,0,0,893,894,5,84,0,0,894,895, - 5,69,0,0,895,911,5,68,0,0,896,897,5,82,0,0,897,898,5,111,0,0,898, - 899,5,116,0,0,899,900,5,97,0,0,900,901,5,116,0,0,901,902,5,101,0, - 0,902,911,5,100,0,0,903,904,5,114,0,0,904,905,5,111,0,0,905,906, - 5,116,0,0,906,907,5,97,0,0,907,908,5,116,0,0,908,909,5,101,0,0,909, - 911,5,100,0,0,910,889,1,0,0,0,910,896,1,0,0,0,910,903,1,0,0,0,911, - 38,1,0,0,0,912,913,5,80,0,0,913,914,5,82,0,0,914,915,5,69,0,0,915, - 916,5,86,0,0,916,917,5,73,0,0,917,918,5,79,0,0,918,919,5,85,0,0, - 919,937,5,83,0,0,920,921,5,80,0,0,921,922,5,114,0,0,922,923,5,101, - 0,0,923,924,5,118,0,0,924,925,5,105,0,0,925,926,5,111,0,0,926,927, - 5,117,0,0,927,937,5,115,0,0,928,929,5,112,0,0,929,930,5,114,0,0, - 930,931,5,101,0,0,931,932,5,118,0,0,932,933,5,105,0,0,933,934,5, - 111,0,0,934,935,5,117,0,0,935,937,5,115,0,0,936,912,1,0,0,0,936, - 920,1,0,0,0,936,928,1,0,0,0,937,40,1,0,0,0,938,939,5,83,0,0,939, - 940,5,69,0,0,940,941,5,84,0,0,941,942,5,84,0,0,942,943,5,73,0,0, - 943,944,5,78,0,0,944,960,5,71,0,0,945,946,5,83,0,0,946,947,5,101, - 0,0,947,948,5,116,0,0,948,949,5,116,0,0,949,950,5,105,0,0,950,951, - 5,110,0,0,951,960,5,103,0,0,952,953,5,115,0,0,953,954,5,101,0,0, - 954,955,5,116,0,0,955,956,5,116,0,0,956,957,5,105,0,0,957,958,5, - 110,0,0,958,960,5,103,0,0,959,938,1,0,0,0,959,945,1,0,0,0,959,952, - 1,0,0,0,960,42,1,0,0,0,961,962,5,84,0,0,962,963,5,82,0,0,963,964, - 5,65,0,0,964,965,5,67,0,0,965,977,5,69,0,0,966,967,5,84,0,0,967, - 968,5,114,0,0,968,969,5,97,0,0,969,970,5,99,0,0,970,977,5,101,0, - 0,971,972,5,116,0,0,972,973,5,114,0,0,973,974,5,97,0,0,974,975,5, - 99,0,0,975,977,5,101,0,0,976,961,1,0,0,0,976,966,1,0,0,0,976,971, - 1,0,0,0,977,44,1,0,0,0,978,979,5,83,0,0,979,980,5,72,0,0,980,981, - 5,65,0,0,981,982,5,82,0,0,982,994,5,69,0,0,983,984,5,83,0,0,984, - 985,5,104,0,0,985,986,5,97,0,0,986,987,5,114,0,0,987,994,5,101,0, - 0,988,989,5,115,0,0,989,990,5,104,0,0,990,991,5,97,0,0,991,992,5, - 114,0,0,992,994,5,101,0,0,993,978,1,0,0,0,993,983,1,0,0,0,993,988, - 1,0,0,0,994,46,1,0,0,0,995,996,5,69,0,0,996,997,5,88,0,0,997,998, - 5,84,0,0,998,999,5,69,0,0,999,1000,5,78,0,0,1000,1014,5,68,0,0,1001, - 1002,5,69,0,0,1002,1003,5,120,0,0,1003,1004,5,116,0,0,1004,1005, - 5,101,0,0,1005,1006,5,110,0,0,1006,1014,5,100,0,0,1007,1008,5,101, - 0,0,1008,1009,5,120,0,0,1009,1010,5,116,0,0,1010,1011,5,101,0,0, - 1011,1012,5,110,0,0,1012,1014,5,100,0,0,1013,995,1,0,0,0,1013,1001, - 1,0,0,0,1013,1007,1,0,0,0,1014,48,1,0,0,0,1015,1016,5,71,0,0,1016, - 1017,5,82,0,0,1017,1018,5,79,0,0,1018,1019,5,85,0,0,1019,1031,5, - 80,0,0,1020,1021,5,71,0,0,1021,1022,5,114,0,0,1022,1023,5,111,0, - 0,1023,1024,5,117,0,0,1024,1031,5,112,0,0,1025,1026,5,103,0,0,1026, - 1027,5,114,0,0,1027,1028,5,111,0,0,1028,1029,5,117,0,0,1029,1031, - 5,112,0,0,1030,1015,1,0,0,0,1030,1020,1,0,0,0,1030,1025,1,0,0,0, - 1031,50,1,0,0,0,1032,1033,5,83,0,0,1033,1034,5,65,0,0,1034,1035, - 5,86,0,0,1035,1045,5,69,0,0,1036,1037,5,83,0,0,1037,1038,5,97,0, - 0,1038,1039,5,118,0,0,1039,1045,5,101,0,0,1040,1041,5,115,0,0,1041, - 1042,5,97,0,0,1042,1043,5,118,0,0,1043,1045,5,101,0,0,1044,1032, - 1,0,0,0,1044,1036,1,0,0,0,1044,1040,1,0,0,0,1045,52,1,0,0,0,1046, - 1047,5,74,0,0,1047,1048,5,85,0,0,1048,1049,5,77,0,0,1049,1059,5, - 80,0,0,1050,1051,5,74,0,0,1051,1052,5,117,0,0,1052,1053,5,109,0, - 0,1053,1059,5,112,0,0,1054,1055,5,106,0,0,1055,1056,5,117,0,0,1056, - 1057,5,109,0,0,1057,1059,5,112,0,0,1058,1046,1,0,0,0,1058,1050,1, - 0,0,0,1058,1054,1,0,0,0,1059,54,1,0,0,0,1060,1061,5,87,0,0,1061, - 1062,5,72,0,0,1062,1063,5,69,0,0,1063,1073,5,78,0,0,1064,1065,5, - 87,0,0,1065,1066,5,104,0,0,1066,1067,5,101,0,0,1067,1073,5,110,0, - 0,1068,1069,5,119,0,0,1069,1070,5,104,0,0,1070,1071,5,101,0,0,1071, - 1073,5,110,0,0,1072,1060,1,0,0,0,1072,1064,1,0,0,0,1072,1068,1,0, - 0,0,1073,56,1,0,0,0,1074,1075,5,78,0,0,1075,1076,5,69,0,0,1076,1077, - 5,88,0,0,1077,1087,5,84,0,0,1078,1079,5,78,0,0,1079,1080,5,101,0, - 0,1080,1081,5,120,0,0,1081,1087,5,116,0,0,1082,1083,5,110,0,0,1083, - 1084,5,101,0,0,1084,1085,5,120,0,0,1085,1087,5,116,0,0,1086,1074, - 1,0,0,0,1086,1078,1,0,0,0,1086,1082,1,0,0,0,1087,58,1,0,0,0,1088, - 1089,5,73,0,0,1089,1090,5,84,0,0,1090,1091,5,69,0,0,1091,1092,5, - 82,0,0,1092,1093,5,65,0,0,1093,1094,5,84,0,0,1094,1110,5,69,0,0, - 1095,1096,5,73,0,0,1096,1097,5,116,0,0,1097,1098,5,101,0,0,1098, - 1099,5,114,0,0,1099,1100,5,97,0,0,1100,1101,5,116,0,0,1101,1110, - 5,101,0,0,1102,1103,5,105,0,0,1103,1104,5,116,0,0,1104,1105,5,101, - 0,0,1105,1106,5,114,0,0,1106,1107,5,97,0,0,1107,1108,5,116,0,0,1108, - 1110,5,101,0,0,1109,1088,1,0,0,0,1109,1095,1,0,0,0,1109,1102,1,0, - 0,0,1110,60,1,0,0,0,1111,1112,5,77,0,0,1112,1113,5,89,0,0,1113,1114, - 5,83,0,0,1114,1115,5,69,0,0,1115,1116,5,76,0,0,1116,1130,5,70,0, - 0,1117,1118,5,77,0,0,1118,1119,5,121,0,0,1119,1120,5,115,0,0,1120, - 1121,5,101,0,0,1121,1122,5,108,0,0,1122,1130,5,102,0,0,1123,1124, - 5,109,0,0,1124,1125,5,121,0,0,1125,1126,5,115,0,0,1126,1127,5,101, - 0,0,1127,1128,5,108,0,0,1128,1130,5,102,0,0,1129,1111,1,0,0,0,1129, - 1117,1,0,0,0,1129,1123,1,0,0,0,1130,62,1,0,0,0,1131,1132,5,67,0, - 0,1132,1133,5,79,0,0,1133,1134,5,80,0,0,1134,1144,5,89,0,0,1135, - 1136,5,67,0,0,1136,1137,5,111,0,0,1137,1138,5,112,0,0,1138,1144, - 5,121,0,0,1139,1140,5,99,0,0,1140,1141,5,111,0,0,1141,1142,5,112, - 0,0,1142,1144,5,121,0,0,1143,1131,1,0,0,0,1143,1135,1,0,0,0,1143, - 1139,1,0,0,0,1144,64,1,0,0,0,1145,1146,5,83,0,0,1146,1147,5,80,0, - 0,1147,1148,5,76,0,0,1148,1149,5,73,0,0,1149,1161,5,84,0,0,1150, - 1151,5,83,0,0,1151,1152,5,112,0,0,1152,1153,5,108,0,0,1153,1154, - 5,105,0,0,1154,1161,5,116,0,0,1155,1156,5,115,0,0,1156,1157,5,112, - 0,0,1157,1158,5,108,0,0,1158,1159,5,105,0,0,1159,1161,5,116,0,0, - 1160,1145,1,0,0,0,1160,1150,1,0,0,0,1160,1155,1,0,0,0,1161,66,1, - 0,0,0,1162,1163,5,82,0,0,1163,1164,5,69,0,0,1164,1165,5,77,0,0,1165, - 1166,5,79,0,0,1166,1167,5,86,0,0,1167,1168,5,65,0,0,1168,1169,5, - 66,0,0,1169,1170,5,76,0,0,1170,1190,5,69,0,0,1171,1172,5,82,0,0, - 1172,1173,5,101,0,0,1173,1174,5,109,0,0,1174,1175,5,111,0,0,1175, - 1176,5,118,0,0,1176,1177,5,97,0,0,1177,1178,5,98,0,0,1178,1179,5, - 101,0,0,1179,1190,5,108,0,0,1180,1181,5,114,0,0,1181,1182,5,101, - 0,0,1182,1183,5,109,0,0,1183,1184,5,111,0,0,1184,1185,5,118,0,0, - 1185,1186,5,97,0,0,1186,1187,5,98,0,0,1187,1188,5,108,0,0,1188,1190, - 5,101,0,0,1189,1162,1,0,0,0,1189,1171,1,0,0,0,1189,1180,1,0,0,0, - 1190,68,1,0,0,0,1191,1192,5,67,0,0,1192,1193,5,80,0,0,1193,1198, - 5,85,0,0,1194,1195,5,99,0,0,1195,1196,5,112,0,0,1196,1198,5,117, - 0,0,1197,1191,1,0,0,0,1197,1194,1,0,0,0,1198,70,1,0,0,0,1199,1200, - 5,78,0,0,1200,1201,5,79,0,0,1201,1202,5,65,0,0,1202,1203,5,67,0, - 0,1203,1220,5,67,0,0,1204,1205,5,78,0,0,1205,1206,5,111,0,0,1206, - 1207,5,65,0,0,1207,1208,5,67,0,0,1208,1220,5,67,0,0,1209,1210,5, - 78,0,0,1210,1211,5,111,0,0,1211,1212,5,65,0,0,1212,1213,5,99,0,0, - 1213,1220,5,99,0,0,1214,1215,5,110,0,0,1215,1216,5,111,0,0,1216, - 1217,5,97,0,0,1217,1218,5,99,0,0,1218,1220,5,99,0,0,1219,1199,1, - 0,0,0,1219,1204,1,0,0,0,1219,1209,1,0,0,0,1219,1214,1,0,0,0,1220, - 72,1,0,0,0,1221,1222,5,68,0,0,1222,1223,5,69,0,0,1223,1224,5,80, - 0,0,1224,1225,5,69,0,0,1225,1226,5,78,0,0,1226,1227,5,68,0,0,1227, - 1228,5,69,0,0,1228,1229,5,78,0,0,1229,1230,5,67,0,0,1230,1252,5, - 89,0,0,1231,1232,5,68,0,0,1232,1233,5,101,0,0,1233,1234,5,112,0, - 0,1234,1235,5,101,0,0,1235,1236,5,110,0,0,1236,1237,5,100,0,0,1237, - 1238,5,101,0,0,1238,1239,5,110,0,0,1239,1240,5,99,0,0,1240,1252, - 5,121,0,0,1241,1242,5,100,0,0,1242,1243,5,101,0,0,1243,1244,5,112, - 0,0,1244,1245,5,101,0,0,1245,1246,5,110,0,0,1246,1247,5,100,0,0, - 1247,1248,5,101,0,0,1248,1249,5,110,0,0,1249,1250,5,99,0,0,1250, - 1252,5,121,0,0,1251,1221,1,0,0,0,1251,1231,1,0,0,0,1251,1241,1,0, - 0,0,1252,74,1,0,0,0,1253,1254,5,83,0,0,1254,1255,5,72,0,0,1255,1256, - 5,69,0,0,1256,1257,5,76,0,0,1257,1269,5,76,0,0,1258,1259,5,83,0, - 0,1259,1260,5,104,0,0,1260,1261,5,101,0,0,1261,1262,5,108,0,0,1262, - 1269,5,108,0,0,1263,1264,5,115,0,0,1264,1265,5,104,0,0,1265,1266, - 5,101,0,0,1266,1267,5,108,0,0,1267,1269,5,108,0,0,1268,1253,1,0, - 0,0,1268,1258,1,0,0,0,1268,1263,1,0,0,0,1269,76,1,0,0,0,1270,1271, - 5,83,0,0,1271,1272,5,69,0,0,1272,1273,5,65,0,0,1273,1274,5,82,0, - 0,1274,1275,5,67,0,0,1275,1289,5,72,0,0,1276,1277,5,83,0,0,1277, - 1278,5,101,0,0,1278,1279,5,97,0,0,1279,1280,5,114,0,0,1280,1281, - 5,99,0,0,1281,1289,5,104,0,0,1282,1283,5,115,0,0,1283,1284,5,101, - 0,0,1284,1285,5,97,0,0,1285,1286,5,114,0,0,1286,1287,5,99,0,0,1287, - 1289,5,104,0,0,1288,1270,1,0,0,0,1288,1276,1,0,0,0,1288,1282,1,0, - 0,0,1289,78,1,0,0,0,1290,1291,5,77,0,0,1291,1292,5,69,0,0,1292,1293, - 5,84,0,0,1293,1294,5,65,0,0,1294,1295,5,68,0,0,1295,1296,5,65,0, - 0,1296,1297,5,84,0,0,1297,1315,5,65,0,0,1298,1299,5,77,0,0,1299, - 1300,5,101,0,0,1300,1301,5,116,0,0,1301,1302,5,97,0,0,1302,1303, - 5,68,0,0,1303,1304,5,97,0,0,1304,1305,5,116,0,0,1305,1315,5,97,0, - 0,1306,1307,5,109,0,0,1307,1308,5,101,0,0,1308,1309,5,116,0,0,1309, - 1310,5,97,0,0,1310,1311,5,100,0,0,1311,1312,5,97,0,0,1312,1313,5, - 116,0,0,1313,1315,5,97,0,0,1314,1290,1,0,0,0,1314,1298,1,0,0,0,1314, - 1306,1,0,0,0,1315,80,1,0,0,0,1316,1317,5,115,0,0,1317,1318,5,116, - 0,0,1318,1319,5,114,0,0,1319,1320,5,105,0,0,1320,1321,5,110,0,0, - 1321,1322,5,103,0,0,1322,82,1,0,0,0,1323,1324,5,118,0,0,1324,1325, - 5,101,0,0,1325,1326,5,99,0,0,1326,1327,5,116,0,0,1327,1328,5,111, - 0,0,1328,1329,5,114,0,0,1329,84,1,0,0,0,1330,1331,5,115,0,0,1331, - 1332,5,121,0,0,1332,1333,5,109,0,0,1333,1334,5,98,0,0,1334,1335, - 5,111,0,0,1335,1336,5,108,0,0,1336,86,1,0,0,0,1337,1338,5,37,0,0, - 1338,1339,5,123,0,0,1339,1343,1,0,0,0,1340,1342,9,0,0,0,1341,1340, - 1,0,0,0,1342,1345,1,0,0,0,1343,1344,1,0,0,0,1343,1341,1,0,0,0,1344, - 1346,1,0,0,0,1345,1343,1,0,0,0,1346,1347,5,37,0,0,1347,1348,5,125, - 0,0,1348,88,1,0,0,0,1349,1350,5,37,0,0,1350,1351,5,105,0,0,1351, - 1352,5,110,0,0,1352,1353,5,99,0,0,1353,1354,5,108,0,0,1354,1355, - 5,117,0,0,1355,1356,5,100,0,0,1356,1357,5,101,0,0,1357,90,1,0,0, - 0,1358,1359,5,78,0,0,1359,1360,5,85,0,0,1360,1361,5,76,0,0,1361, - 1362,5,76,0,0,1362,92,1,0,0,0,1363,1365,3,365,182,0,1364,1366,3, - 381,190,0,1365,1364,1,0,0,0,1365,1366,1,0,0,0,1366,1380,1,0,0,0, - 1367,1369,3,367,183,0,1368,1370,3,381,190,0,1369,1368,1,0,0,0,1369, - 1370,1,0,0,0,1370,1380,1,0,0,0,1371,1373,3,369,184,0,1372,1374,3, - 381,190,0,1373,1372,1,0,0,0,1373,1374,1,0,0,0,1374,1380,1,0,0,0, - 1375,1377,3,371,185,0,1376,1378,3,381,190,0,1377,1376,1,0,0,0,1377, - 1378,1,0,0,0,1378,1380,1,0,0,0,1379,1363,1,0,0,0,1379,1367,1,0,0, - 0,1379,1371,1,0,0,0,1379,1375,1,0,0,0,1380,94,1,0,0,0,1381,1383, - 7,0,0,0,1382,1381,1,0,0,0,1382,1383,1,0,0,0,1383,1384,1,0,0,0,1384, - 1386,5,39,0,0,1385,1387,3,389,194,0,1386,1385,1,0,0,0,1387,1388, - 1,0,0,0,1388,1386,1,0,0,0,1388,1389,1,0,0,0,1389,1390,1,0,0,0,1390, - 1391,5,39,0,0,1391,96,1,0,0,0,1392,1394,3,399,199,0,1393,1395,3, - 401,200,0,1394,1393,1,0,0,0,1394,1395,1,0,0,0,1395,1397,1,0,0,0, - 1396,1398,3,407,203,0,1397,1396,1,0,0,0,1397,1398,1,0,0,0,1398,1405, - 1,0,0,0,1399,1400,3,405,202,0,1400,1402,3,401,200,0,1401,1403,3, - 407,203,0,1402,1401,1,0,0,0,1402,1403,1,0,0,0,1403,1405,1,0,0,0, - 1404,1392,1,0,0,0,1404,1399,1,0,0,0,1405,98,1,0,0,0,1406,1408,3, - 409,204,0,1407,1406,1,0,0,0,1407,1408,1,0,0,0,1408,1418,1,0,0,0, - 1409,1419,3,413,206,0,1410,1414,5,34,0,0,1411,1413,3,411,205,0,1412, - 1411,1,0,0,0,1413,1416,1,0,0,0,1414,1412,1,0,0,0,1414,1415,1,0,0, - 0,1415,1417,1,0,0,0,1416,1414,1,0,0,0,1417,1419,5,34,0,0,1418,1409, - 1,0,0,0,1418,1410,1,0,0,0,1419,100,1,0,0,0,1420,1423,3,165,82,0, - 1421,1423,3,233,116,0,1422,1420,1,0,0,0,1422,1421,1,0,0,0,1423,102, - 1,0,0,0,1424,1425,3,193,96,0,1425,104,1,0,0,0,1426,1431,3,415,207, - 0,1427,1431,3,417,208,0,1428,1431,3,419,209,0,1429,1431,3,421,210, - 0,1430,1426,1,0,0,0,1430,1427,1,0,0,0,1430,1428,1,0,0,0,1430,1429, - 1,0,0,0,1431,106,1,0,0,0,1432,1444,5,35,0,0,1433,1435,8,1,0,0,1434, - 1433,1,0,0,0,1435,1438,1,0,0,0,1436,1437,1,0,0,0,1436,1434,1,0,0, - 0,1437,1439,1,0,0,0,1438,1436,1,0,0,0,1439,1441,5,92,0,0,1440,1442, - 5,13,0,0,1441,1440,1,0,0,0,1441,1442,1,0,0,0,1442,1443,1,0,0,0,1443, - 1445,5,10,0,0,1444,1436,1,0,0,0,1445,1446,1,0,0,0,1446,1444,1,0, - 0,0,1446,1447,1,0,0,0,1447,1449,1,0,0,0,1448,1450,8,1,0,0,1449,1448, - 1,0,0,0,1450,1451,1,0,0,0,1451,1449,1,0,0,0,1451,1452,1,0,0,0,1452, - 1453,1,0,0,0,1453,1454,6,53,0,0,1454,108,1,0,0,0,1455,1459,5,35, - 0,0,1456,1458,8,1,0,0,1457,1456,1,0,0,0,1458,1461,1,0,0,0,1459,1457, - 1,0,0,0,1459,1460,1,0,0,0,1460,1462,1,0,0,0,1461,1459,1,0,0,0,1462, - 1463,6,54,0,0,1463,110,1,0,0,0,1464,1465,5,97,0,0,1465,1466,5,108, - 0,0,1466,1467,5,105,0,0,1467,1468,5,103,0,0,1468,1469,5,110,0,0, - 1469,1470,5,97,0,0,1470,1471,5,115,0,0,1471,112,1,0,0,0,1472,1473, - 5,97,0,0,1473,1474,5,108,0,0,1474,1475,5,105,0,0,1475,1476,5,103, - 0,0,1476,1477,5,110,0,0,1477,1478,5,111,0,0,1478,1479,5,102,0,0, - 1479,114,1,0,0,0,1480,1481,5,97,0,0,1481,1482,5,115,0,0,1482,1483, - 5,109,0,0,1483,116,1,0,0,0,1484,1485,5,97,0,0,1485,1486,5,117,0, - 0,1486,1487,5,116,0,0,1487,1488,5,111,0,0,1488,118,1,0,0,0,1489, - 1490,5,98,0,0,1490,1491,5,111,0,0,1491,1492,5,111,0,0,1492,1493, - 5,108,0,0,1493,120,1,0,0,0,1494,1495,5,98,0,0,1495,1496,5,114,0, - 0,1496,1497,5,101,0,0,1497,1498,5,97,0,0,1498,1499,5,107,0,0,1499, - 122,1,0,0,0,1500,1501,5,99,0,0,1501,1502,5,97,0,0,1502,1503,5,115, - 0,0,1503,1504,5,101,0,0,1504,124,1,0,0,0,1505,1506,5,99,0,0,1506, - 1507,5,97,0,0,1507,1508,5,116,0,0,1508,1509,5,99,0,0,1509,1510,5, - 104,0,0,1510,126,1,0,0,0,1511,1512,5,99,0,0,1512,1513,5,104,0,0, - 1513,1514,5,97,0,0,1514,1515,5,114,0,0,1515,128,1,0,0,0,1516,1517, - 5,99,0,0,1517,1518,5,104,0,0,1518,1519,5,97,0,0,1519,1520,5,114, - 0,0,1520,1521,5,49,0,0,1521,1522,5,54,0,0,1522,1523,5,95,0,0,1523, - 1524,5,116,0,0,1524,130,1,0,0,0,1525,1526,5,99,0,0,1526,1527,5,104, - 0,0,1527,1528,5,97,0,0,1528,1529,5,114,0,0,1529,1530,5,51,0,0,1530, - 1531,5,50,0,0,1531,1532,5,95,0,0,1532,1533,5,116,0,0,1533,132,1, - 0,0,0,1534,1535,5,99,0,0,1535,1536,5,108,0,0,1536,1537,5,97,0,0, - 1537,1538,5,115,0,0,1538,1539,5,115,0,0,1539,134,1,0,0,0,1540,1541, - 5,99,0,0,1541,1542,5,111,0,0,1542,1543,5,110,0,0,1543,1544,5,115, - 0,0,1544,1545,5,116,0,0,1545,136,1,0,0,0,1546,1547,5,99,0,0,1547, - 1548,5,111,0,0,1548,1549,5,110,0,0,1549,1550,5,115,0,0,1550,1551, - 5,116,0,0,1551,1552,5,101,0,0,1552,1553,5,120,0,0,1553,1554,5,112, - 0,0,1554,1555,5,114,0,0,1555,138,1,0,0,0,1556,1557,5,99,0,0,1557, - 1558,5,111,0,0,1558,1559,5,110,0,0,1559,1560,5,115,0,0,1560,1561, - 5,116,0,0,1561,1562,5,95,0,0,1562,1563,5,99,0,0,1563,1564,5,97,0, - 0,1564,1565,5,115,0,0,1565,1566,5,116,0,0,1566,140,1,0,0,0,1567, - 1568,5,99,0,0,1568,1569,5,111,0,0,1569,1570,5,110,0,0,1570,1571, - 5,116,0,0,1571,1572,5,105,0,0,1572,1573,5,110,0,0,1573,1574,5,117, - 0,0,1574,1575,5,101,0,0,1575,142,1,0,0,0,1576,1577,5,100,0,0,1577, - 1578,5,101,0,0,1578,1579,5,99,0,0,1579,1580,5,108,0,0,1580,1581, - 5,116,0,0,1581,1582,5,121,0,0,1582,1583,5,112,0,0,1583,1584,5,101, - 0,0,1584,144,1,0,0,0,1585,1586,5,100,0,0,1586,1587,5,101,0,0,1587, - 1588,5,102,0,0,1588,1589,5,97,0,0,1589,1590,5,117,0,0,1590,1591, - 5,108,0,0,1591,1592,5,116,0,0,1592,146,1,0,0,0,1593,1594,5,100,0, - 0,1594,1595,5,101,0,0,1595,1596,5,108,0,0,1596,1597,5,101,0,0,1597, - 1598,5,116,0,0,1598,1599,5,101,0,0,1599,148,1,0,0,0,1600,1601,5, - 100,0,0,1601,1602,5,111,0,0,1602,150,1,0,0,0,1603,1604,5,100,0,0, - 1604,1605,5,111,0,0,1605,1606,5,117,0,0,1606,1607,5,98,0,0,1607, - 1608,5,108,0,0,1608,1609,5,101,0,0,1609,152,1,0,0,0,1610,1611,5, - 100,0,0,1611,1612,5,121,0,0,1612,1613,5,110,0,0,1613,1614,5,97,0, - 0,1614,1615,5,109,0,0,1615,1616,5,105,0,0,1616,1617,5,99,0,0,1617, - 1618,5,95,0,0,1618,1619,5,99,0,0,1619,1620,5,97,0,0,1620,1621,5, - 115,0,0,1621,1622,5,116,0,0,1622,154,1,0,0,0,1623,1624,5,101,0,0, - 1624,1625,5,108,0,0,1625,1626,5,115,0,0,1626,1627,5,101,0,0,1627, - 156,1,0,0,0,1628,1629,5,101,0,0,1629,1630,5,110,0,0,1630,1631,5, - 117,0,0,1631,1632,5,109,0,0,1632,158,1,0,0,0,1633,1634,5,101,0,0, - 1634,1635,5,120,0,0,1635,1636,5,112,0,0,1636,1637,5,108,0,0,1637, - 1638,5,105,0,0,1638,1639,5,99,0,0,1639,1640,5,105,0,0,1640,1641, - 5,116,0,0,1641,160,1,0,0,0,1642,1643,5,101,0,0,1643,1644,5,120,0, - 0,1644,1645,5,112,0,0,1645,1646,5,111,0,0,1646,1647,5,114,0,0,1647, - 1648,5,116,0,0,1648,162,1,0,0,0,1649,1650,5,101,0,0,1650,1651,5, - 120,0,0,1651,1652,5,116,0,0,1652,1653,5,101,0,0,1653,1654,5,114, - 0,0,1654,1655,5,110,0,0,1655,164,1,0,0,0,1656,1657,5,102,0,0,1657, - 1658,5,97,0,0,1658,1659,5,108,0,0,1659,1660,5,115,0,0,1660,1661, - 5,101,0,0,1661,166,1,0,0,0,1662,1663,5,102,0,0,1663,1664,5,105,0, - 0,1664,1665,5,110,0,0,1665,1666,5,97,0,0,1666,1667,5,108,0,0,1667, - 168,1,0,0,0,1668,1669,5,102,0,0,1669,1670,5,108,0,0,1670,1671,5, - 111,0,0,1671,1672,5,97,0,0,1672,1673,5,116,0,0,1673,170,1,0,0,0, - 1674,1675,5,102,0,0,1675,1676,5,111,0,0,1676,1677,5,114,0,0,1677, - 172,1,0,0,0,1678,1679,5,102,0,0,1679,1680,5,114,0,0,1680,1681,5, - 105,0,0,1681,1682,5,101,0,0,1682,1683,5,110,0,0,1683,1684,5,100, - 0,0,1684,174,1,0,0,0,1685,1686,5,103,0,0,1686,1687,5,111,0,0,1687, - 1688,5,116,0,0,1688,1689,5,111,0,0,1689,176,1,0,0,0,1690,1691,5, - 105,0,0,1691,1692,5,102,0,0,1692,178,1,0,0,0,1693,1694,5,105,0,0, - 1694,1695,5,110,0,0,1695,1696,5,108,0,0,1696,1697,5,105,0,0,1697, - 1698,5,110,0,0,1698,1699,5,101,0,0,1699,180,1,0,0,0,1700,1701,5, - 105,0,0,1701,1702,5,110,0,0,1702,1703,5,116,0,0,1703,182,1,0,0,0, - 1704,1705,5,108,0,0,1705,1706,5,111,0,0,1706,1707,5,110,0,0,1707, - 1708,5,103,0,0,1708,184,1,0,0,0,1709,1710,5,109,0,0,1710,1711,5, - 117,0,0,1711,1712,5,116,0,0,1712,1713,5,97,0,0,1713,1714,5,98,0, - 0,1714,1715,5,108,0,0,1715,1716,5,101,0,0,1716,186,1,0,0,0,1717, - 1718,5,110,0,0,1718,1719,5,97,0,0,1719,1720,5,109,0,0,1720,1721, - 5,101,0,0,1721,1722,5,115,0,0,1722,1723,5,112,0,0,1723,1724,5,97, - 0,0,1724,1725,5,99,0,0,1725,1726,5,101,0,0,1726,188,1,0,0,0,1727, - 1728,5,110,0,0,1728,1729,5,101,0,0,1729,1730,5,119,0,0,1730,190, - 1,0,0,0,1731,1732,5,110,0,0,1732,1733,5,111,0,0,1733,1734,5,101, - 0,0,1734,1735,5,120,0,0,1735,1736,5,99,0,0,1736,1737,5,101,0,0,1737, - 1738,5,112,0,0,1738,1739,5,116,0,0,1739,192,1,0,0,0,1740,1741,5, - 110,0,0,1741,1742,5,117,0,0,1742,1743,5,108,0,0,1743,1744,5,108, - 0,0,1744,1745,5,112,0,0,1745,1746,5,116,0,0,1746,1747,5,114,0,0, - 1747,194,1,0,0,0,1748,1749,5,111,0,0,1749,1750,5,112,0,0,1750,1751, - 5,101,0,0,1751,1752,5,114,0,0,1752,1753,5,97,0,0,1753,1754,5,116, - 0,0,1754,1755,5,111,0,0,1755,1756,5,114,0,0,1756,196,1,0,0,0,1757, - 1758,5,111,0,0,1758,1759,5,118,0,0,1759,1760,5,101,0,0,1760,1761, - 5,114,0,0,1761,1762,5,114,0,0,1762,1763,5,105,0,0,1763,1764,5,100, - 0,0,1764,1765,5,101,0,0,1765,198,1,0,0,0,1766,1767,5,112,0,0,1767, - 1768,5,114,0,0,1768,1769,5,111,0,0,1769,1770,5,116,0,0,1770,1771, - 5,101,0,0,1771,1772,5,99,0,0,1772,1773,5,116,0,0,1773,1774,5,101, - 0,0,1774,1775,5,100,0,0,1775,200,1,0,0,0,1776,1777,5,112,0,0,1777, - 1778,5,117,0,0,1778,1779,5,98,0,0,1779,1780,5,108,0,0,1780,1781, - 5,105,0,0,1781,1782,5,99,0,0,1782,202,1,0,0,0,1783,1784,5,114,0, - 0,1784,1785,5,101,0,0,1785,1786,5,103,0,0,1786,1787,5,105,0,0,1787, - 1788,5,115,0,0,1788,1789,5,116,0,0,1789,1790,5,101,0,0,1790,1791, - 5,114,0,0,1791,204,1,0,0,0,1792,1793,5,114,0,0,1793,1794,5,101,0, - 0,1794,1795,5,105,0,0,1795,1796,5,110,0,0,1796,1797,5,116,0,0,1797, - 1798,5,101,0,0,1798,1799,5,114,0,0,1799,1800,5,112,0,0,1800,1801, - 5,114,0,0,1801,1802,5,101,0,0,1802,1803,5,116,0,0,1803,1804,5,95, - 0,0,1804,1805,5,99,0,0,1805,1806,5,97,0,0,1806,1807,5,115,0,0,1807, - 1808,5,116,0,0,1808,206,1,0,0,0,1809,1810,5,114,0,0,1810,1811,5, - 101,0,0,1811,1812,5,116,0,0,1812,1813,5,117,0,0,1813,1814,5,114, - 0,0,1814,1815,5,110,0,0,1815,208,1,0,0,0,1816,1817,5,115,0,0,1817, - 1818,5,104,0,0,1818,1819,5,111,0,0,1819,1820,5,114,0,0,1820,1821, - 5,116,0,0,1821,210,1,0,0,0,1822,1823,5,115,0,0,1823,1824,5,105,0, - 0,1824,1825,5,103,0,0,1825,1826,5,110,0,0,1826,1827,5,101,0,0,1827, - 1828,5,100,0,0,1828,212,1,0,0,0,1829,1830,5,115,0,0,1830,1831,5, - 105,0,0,1831,1832,5,122,0,0,1832,1833,5,101,0,0,1833,1834,5,111, - 0,0,1834,1835,5,102,0,0,1835,214,1,0,0,0,1836,1837,5,115,0,0,1837, - 1838,5,116,0,0,1838,1839,5,97,0,0,1839,1840,5,116,0,0,1840,1841, - 5,105,0,0,1841,1842,5,99,0,0,1842,216,1,0,0,0,1843,1844,5,115,0, - 0,1844,1845,5,116,0,0,1845,1846,5,97,0,0,1846,1847,5,116,0,0,1847, - 1848,5,105,0,0,1848,1849,5,99,0,0,1849,1850,5,95,0,0,1850,1851,5, - 97,0,0,1851,1852,5,115,0,0,1852,1853,5,115,0,0,1853,1854,5,101,0, - 0,1854,1855,5,114,0,0,1855,1856,5,116,0,0,1856,218,1,0,0,0,1857, - 1858,5,115,0,0,1858,1859,5,116,0,0,1859,1860,5,97,0,0,1860,1861, - 5,116,0,0,1861,1862,5,105,0,0,1862,1863,5,99,0,0,1863,1864,5,95, - 0,0,1864,1865,5,99,0,0,1865,1866,5,97,0,0,1866,1867,5,115,0,0,1867, - 1868,5,116,0,0,1868,220,1,0,0,0,1869,1870,5,115,0,0,1870,1871,5, - 116,0,0,1871,1872,5,114,0,0,1872,1873,5,117,0,0,1873,1874,5,99,0, - 0,1874,1875,5,116,0,0,1875,222,1,0,0,0,1876,1877,5,115,0,0,1877, - 1878,5,119,0,0,1878,1879,5,105,0,0,1879,1880,5,116,0,0,1880,1881, - 5,99,0,0,1881,1882,5,104,0,0,1882,224,1,0,0,0,1883,1884,5,116,0, - 0,1884,1885,5,101,0,0,1885,1886,5,109,0,0,1886,1887,5,112,0,0,1887, - 1888,5,108,0,0,1888,1889,5,97,0,0,1889,1890,5,116,0,0,1890,1891, - 5,101,0,0,1891,226,1,0,0,0,1892,1893,5,116,0,0,1893,1894,5,104,0, - 0,1894,1895,5,105,0,0,1895,1896,5,115,0,0,1896,228,1,0,0,0,1897, - 1898,5,116,0,0,1898,1899,5,104,0,0,1899,1900,5,114,0,0,1900,1901, - 5,101,0,0,1901,1902,5,97,0,0,1902,1903,5,100,0,0,1903,1904,5,95, - 0,0,1904,1905,5,108,0,0,1905,1906,5,111,0,0,1906,1907,5,99,0,0,1907, - 1908,5,97,0,0,1908,1909,5,108,0,0,1909,230,1,0,0,0,1910,1911,5,116, - 0,0,1911,1912,5,104,0,0,1912,1913,5,114,0,0,1913,1914,5,111,0,0, - 1914,1915,5,119,0,0,1915,232,1,0,0,0,1916,1917,5,116,0,0,1917,1918, - 5,114,0,0,1918,1919,5,117,0,0,1919,1920,5,101,0,0,1920,234,1,0,0, - 0,1921,1922,5,116,0,0,1922,1923,5,114,0,0,1923,1924,5,121,0,0,1924, - 236,1,0,0,0,1925,1926,5,116,0,0,1926,1927,5,121,0,0,1927,1928,5, - 112,0,0,1928,1929,5,101,0,0,1929,1930,5,100,0,0,1930,1931,5,101, - 0,0,1931,1932,5,102,0,0,1932,238,1,0,0,0,1933,1934,5,116,0,0,1934, - 1935,5,121,0,0,1935,1936,5,112,0,0,1936,1937,5,101,0,0,1937,1938, - 5,105,0,0,1938,1939,5,100,0,0,1939,240,1,0,0,0,1940,1941,5,116,0, - 0,1941,1942,5,121,0,0,1942,1943,5,112,0,0,1943,1944,5,101,0,0,1944, - 1945,5,110,0,0,1945,1946,5,97,0,0,1946,1947,5,109,0,0,1947,1948, - 5,101,0,0,1948,242,1,0,0,0,1949,1950,5,117,0,0,1950,1951,5,110,0, - 0,1951,1952,5,105,0,0,1952,1953,5,111,0,0,1953,1954,5,110,0,0,1954, - 244,1,0,0,0,1955,1956,5,117,0,0,1956,1957,5,110,0,0,1957,1958,5, - 115,0,0,1958,1959,5,105,0,0,1959,1960,5,103,0,0,1960,1961,5,110, - 0,0,1961,1962,5,101,0,0,1962,1963,5,100,0,0,1963,246,1,0,0,0,1964, - 1965,5,117,0,0,1965,1966,5,115,0,0,1966,1967,5,105,0,0,1967,1968, - 5,110,0,0,1968,1969,5,103,0,0,1969,248,1,0,0,0,1970,1971,5,118,0, - 0,1971,1972,5,105,0,0,1972,1973,5,114,0,0,1973,1974,5,116,0,0,1974, - 1975,5,117,0,0,1975,1976,5,97,0,0,1976,1977,5,108,0,0,1977,250,1, - 0,0,0,1978,1979,5,118,0,0,1979,1980,5,111,0,0,1980,1981,5,105,0, - 0,1981,1982,5,100,0,0,1982,252,1,0,0,0,1983,1984,5,118,0,0,1984, - 1985,5,111,0,0,1985,1986,5,108,0,0,1986,1987,5,97,0,0,1987,1988, - 5,116,0,0,1988,1989,5,105,0,0,1989,1990,5,108,0,0,1990,1991,5,101, - 0,0,1991,254,1,0,0,0,1992,1993,5,119,0,0,1993,1994,5,99,0,0,1994, - 1995,5,104,0,0,1995,1996,5,97,0,0,1996,1997,5,114,0,0,1997,1998, - 5,95,0,0,1998,1999,5,116,0,0,1999,256,1,0,0,0,2000,2001,5,119,0, - 0,2001,2002,5,104,0,0,2002,2003,5,105,0,0,2003,2004,5,108,0,0,2004, - 2005,5,101,0,0,2005,258,1,0,0,0,2006,2007,5,40,0,0,2007,260,1,0, - 0,0,2008,2009,5,41,0,0,2009,262,1,0,0,0,2010,2011,5,91,0,0,2011, - 264,1,0,0,0,2012,2013,5,93,0,0,2013,266,1,0,0,0,2014,2015,5,123, - 0,0,2015,268,1,0,0,0,2016,2017,5,125,0,0,2017,270,1,0,0,0,2018,2019, - 5,43,0,0,2019,272,1,0,0,0,2020,2021,5,45,0,0,2021,274,1,0,0,0,2022, - 2023,5,42,0,0,2023,276,1,0,0,0,2024,2025,5,47,0,0,2025,278,1,0,0, - 0,2026,2027,5,37,0,0,2027,280,1,0,0,0,2028,2029,5,94,0,0,2029,282, - 1,0,0,0,2030,2031,5,38,0,0,2031,284,1,0,0,0,2032,2033,5,124,0,0, - 2033,286,1,0,0,0,2034,2035,5,126,0,0,2035,288,1,0,0,0,2036,2041, - 5,33,0,0,2037,2038,5,110,0,0,2038,2039,5,111,0,0,2039,2041,5,116, - 0,0,2040,2036,1,0,0,0,2040,2037,1,0,0,0,2041,290,1,0,0,0,2042,2043, - 5,61,0,0,2043,292,1,0,0,0,2044,2045,5,60,0,0,2045,294,1,0,0,0,2046, - 2047,5,62,0,0,2047,296,1,0,0,0,2048,2049,5,43,0,0,2049,2050,5,61, - 0,0,2050,298,1,0,0,0,2051,2052,5,45,0,0,2052,2053,5,61,0,0,2053, - 300,1,0,0,0,2054,2055,5,42,0,0,2055,2056,5,61,0,0,2056,302,1,0,0, - 0,2057,2058,5,47,0,0,2058,2059,5,61,0,0,2059,304,1,0,0,0,2060,2061, - 5,37,0,0,2061,2062,5,61,0,0,2062,306,1,0,0,0,2063,2064,5,94,0,0, - 2064,2065,5,61,0,0,2065,308,1,0,0,0,2066,2067,5,38,0,0,2067,2068, - 5,61,0,0,2068,310,1,0,0,0,2069,2070,5,124,0,0,2070,2071,5,61,0,0, - 2071,312,1,0,0,0,2072,2073,5,60,0,0,2073,2074,5,60,0,0,2074,2075, - 5,61,0,0,2075,314,1,0,0,0,2076,2077,5,62,0,0,2077,2078,5,62,0,0, - 2078,2079,5,61,0,0,2079,316,1,0,0,0,2080,2081,5,61,0,0,2081,2082, - 5,61,0,0,2082,318,1,0,0,0,2083,2084,5,33,0,0,2084,2085,5,61,0,0, - 2085,320,1,0,0,0,2086,2087,5,60,0,0,2087,2088,5,61,0,0,2088,322, - 1,0,0,0,2089,2090,5,62,0,0,2090,2091,5,61,0,0,2091,324,1,0,0,0,2092, - 2093,5,38,0,0,2093,2098,5,38,0,0,2094,2095,5,97,0,0,2095,2096,5, - 110,0,0,2096,2098,5,100,0,0,2097,2092,1,0,0,0,2097,2094,1,0,0,0, - 2098,326,1,0,0,0,2099,2100,5,124,0,0,2100,2104,5,124,0,0,2101,2102, - 5,111,0,0,2102,2104,5,114,0,0,2103,2099,1,0,0,0,2103,2101,1,0,0, - 0,2104,328,1,0,0,0,2105,2106,5,43,0,0,2106,2107,5,43,0,0,2107,330, - 1,0,0,0,2108,2109,5,45,0,0,2109,2110,5,45,0,0,2110,332,1,0,0,0,2111, - 2112,5,44,0,0,2112,334,1,0,0,0,2113,2114,5,45,0,0,2114,2115,5,62, - 0,0,2115,2116,5,42,0,0,2116,336,1,0,0,0,2117,2118,5,45,0,0,2118, - 2119,5,62,0,0,2119,338,1,0,0,0,2120,2121,5,63,0,0,2121,340,1,0,0, - 0,2122,2123,5,58,0,0,2123,342,1,0,0,0,2124,2125,5,58,0,0,2125,2126, - 5,58,0,0,2126,344,1,0,0,0,2127,2128,5,59,0,0,2128,346,1,0,0,0,2129, - 2130,5,46,0,0,2130,348,1,0,0,0,2131,2132,5,46,0,0,2132,2133,5,42, - 0,0,2133,350,1,0,0,0,2134,2135,5,46,0,0,2135,2136,5,46,0,0,2136, - 2137,5,46,0,0,2137,352,1,0,0,0,2138,2139,3,377,188,0,2139,2140,3, - 377,188,0,2140,2141,3,377,188,0,2141,2142,3,377,188,0,2142,354,1, - 0,0,0,2143,2144,5,92,0,0,2144,2145,5,117,0,0,2145,2146,1,0,0,0,2146, - 2154,3,353,176,0,2147,2148,5,92,0,0,2148,2149,5,85,0,0,2149,2150, - 1,0,0,0,2150,2151,3,353,176,0,2151,2152,3,353,176,0,2152,2154,1, - 0,0,0,2153,2143,1,0,0,0,2153,2147,1,0,0,0,2154,356,1,0,0,0,2155, - 2160,3,359,179,0,2156,2159,3,359,179,0,2157,2159,3,363,181,0,2158, - 2156,1,0,0,0,2158,2157,1,0,0,0,2159,2162,1,0,0,0,2160,2158,1,0,0, - 0,2160,2161,1,0,0,0,2161,358,1,0,0,0,2162,2160,1,0,0,0,2163,2166, - 3,361,180,0,2164,2166,3,355,177,0,2165,2163,1,0,0,0,2165,2164,1, - 0,0,0,2166,360,1,0,0,0,2167,2168,7,2,0,0,2168,362,1,0,0,0,2169,2170, - 7,3,0,0,2170,364,1,0,0,0,2171,2178,3,373,186,0,2172,2174,5,39,0, - 0,2173,2172,1,0,0,0,2173,2174,1,0,0,0,2174,2175,1,0,0,0,2175,2177, - 3,363,181,0,2176,2173,1,0,0,0,2177,2180,1,0,0,0,2178,2176,1,0,0, - 0,2178,2179,1,0,0,0,2179,366,1,0,0,0,2180,2178,1,0,0,0,2181,2188, - 5,48,0,0,2182,2184,5,39,0,0,2183,2182,1,0,0,0,2183,2184,1,0,0,0, - 2184,2185,1,0,0,0,2185,2187,3,375,187,0,2186,2183,1,0,0,0,2187,2190, - 1,0,0,0,2188,2186,1,0,0,0,2188,2189,1,0,0,0,2189,368,1,0,0,0,2190, - 2188,1,0,0,0,2191,2192,5,48,0,0,2192,2196,5,120,0,0,2193,2194,5, - 48,0,0,2194,2196,5,88,0,0,2195,2191,1,0,0,0,2195,2193,1,0,0,0,2196, - 2197,1,0,0,0,2197,2204,3,377,188,0,2198,2200,5,39,0,0,2199,2198, - 1,0,0,0,2199,2200,1,0,0,0,2200,2201,1,0,0,0,2201,2203,3,377,188, - 0,2202,2199,1,0,0,0,2203,2206,1,0,0,0,2204,2202,1,0,0,0,2204,2205, - 1,0,0,0,2205,370,1,0,0,0,2206,2204,1,0,0,0,2207,2208,5,48,0,0,2208, - 2212,5,98,0,0,2209,2210,5,48,0,0,2210,2212,5,66,0,0,2211,2207,1, - 0,0,0,2211,2209,1,0,0,0,2212,2213,1,0,0,0,2213,2220,3,379,189,0, - 2214,2216,5,39,0,0,2215,2214,1,0,0,0,2215,2216,1,0,0,0,2216,2217, - 1,0,0,0,2217,2219,3,379,189,0,2218,2215,1,0,0,0,2219,2222,1,0,0, - 0,2220,2218,1,0,0,0,2220,2221,1,0,0,0,2221,372,1,0,0,0,2222,2220, - 1,0,0,0,2223,2224,7,4,0,0,2224,374,1,0,0,0,2225,2226,7,5,0,0,2226, - 376,1,0,0,0,2227,2228,7,6,0,0,2228,378,1,0,0,0,2229,2230,7,7,0,0, - 2230,380,1,0,0,0,2231,2233,3,383,191,0,2232,2234,3,385,192,0,2233, - 2232,1,0,0,0,2233,2234,1,0,0,0,2234,2248,1,0,0,0,2235,2237,3,383, - 191,0,2236,2238,3,387,193,0,2237,2236,1,0,0,0,2237,2238,1,0,0,0, - 2238,2248,1,0,0,0,2239,2241,3,385,192,0,2240,2242,3,383,191,0,2241, - 2240,1,0,0,0,2241,2242,1,0,0,0,2242,2248,1,0,0,0,2243,2245,3,387, - 193,0,2244,2246,3,383,191,0,2245,2244,1,0,0,0,2245,2246,1,0,0,0, - 2246,2248,1,0,0,0,2247,2231,1,0,0,0,2247,2235,1,0,0,0,2247,2239, - 1,0,0,0,2247,2243,1,0,0,0,2248,382,1,0,0,0,2249,2250,7,8,0,0,2250, - 384,1,0,0,0,2251,2252,7,9,0,0,2252,386,1,0,0,0,2253,2254,5,108,0, - 0,2254,2258,5,108,0,0,2255,2256,5,76,0,0,2256,2258,5,76,0,0,2257, - 2253,1,0,0,0,2257,2255,1,0,0,0,2258,388,1,0,0,0,2259,2263,8,10,0, - 0,2260,2263,3,391,195,0,2261,2263,3,355,177,0,2262,2259,1,0,0,0, - 2262,2260,1,0,0,0,2262,2261,1,0,0,0,2263,390,1,0,0,0,2264,2268,3, - 393,196,0,2265,2268,3,395,197,0,2266,2268,3,397,198,0,2267,2264, - 1,0,0,0,2267,2265,1,0,0,0,2267,2266,1,0,0,0,2268,392,1,0,0,0,2269, - 2270,5,92,0,0,2270,2300,5,39,0,0,2271,2272,5,92,0,0,2272,2300,5, - 34,0,0,2273,2274,5,92,0,0,2274,2300,5,63,0,0,2275,2276,5,92,0,0, - 2276,2300,5,92,0,0,2277,2278,5,92,0,0,2278,2300,5,97,0,0,2279,2280, - 5,92,0,0,2280,2300,5,98,0,0,2281,2282,5,92,0,0,2282,2300,5,102,0, - 0,2283,2284,5,92,0,0,2284,2300,5,110,0,0,2285,2286,5,92,0,0,2286, - 2300,5,114,0,0,2287,2293,5,92,0,0,2288,2290,5,13,0,0,2289,2291,5, - 10,0,0,2290,2289,1,0,0,0,2290,2291,1,0,0,0,2291,2294,1,0,0,0,2292, - 2294,5,10,0,0,2293,2288,1,0,0,0,2293,2292,1,0,0,0,2294,2300,1,0, - 0,0,2295,2296,5,92,0,0,2296,2300,5,116,0,0,2297,2298,5,92,0,0,2298, - 2300,5,118,0,0,2299,2269,1,0,0,0,2299,2271,1,0,0,0,2299,2273,1,0, - 0,0,2299,2275,1,0,0,0,2299,2277,1,0,0,0,2299,2279,1,0,0,0,2299,2281, - 1,0,0,0,2299,2283,1,0,0,0,2299,2285,1,0,0,0,2299,2287,1,0,0,0,2299, - 2295,1,0,0,0,2299,2297,1,0,0,0,2300,394,1,0,0,0,2301,2302,5,92,0, - 0,2302,2313,3,375,187,0,2303,2304,5,92,0,0,2304,2305,3,375,187,0, - 2305,2306,3,375,187,0,2306,2313,1,0,0,0,2307,2308,5,92,0,0,2308, - 2309,3,375,187,0,2309,2310,3,375,187,0,2310,2311,3,375,187,0,2311, - 2313,1,0,0,0,2312,2301,1,0,0,0,2312,2303,1,0,0,0,2312,2307,1,0,0, - 0,2313,396,1,0,0,0,2314,2315,5,92,0,0,2315,2316,5,120,0,0,2316,2318, - 1,0,0,0,2317,2319,3,377,188,0,2318,2317,1,0,0,0,2319,2320,1,0,0, - 0,2320,2318,1,0,0,0,2320,2321,1,0,0,0,2321,398,1,0,0,0,2322,2324, - 3,405,202,0,2323,2322,1,0,0,0,2323,2324,1,0,0,0,2324,2325,1,0,0, - 0,2325,2326,5,46,0,0,2326,2331,3,405,202,0,2327,2328,3,405,202,0, - 2328,2329,5,46,0,0,2329,2331,1,0,0,0,2330,2323,1,0,0,0,2330,2327, - 1,0,0,0,2331,400,1,0,0,0,2332,2334,5,101,0,0,2333,2335,3,403,201, - 0,2334,2333,1,0,0,0,2334,2335,1,0,0,0,2335,2336,1,0,0,0,2336,2343, - 3,405,202,0,2337,2339,5,69,0,0,2338,2340,3,403,201,0,2339,2338,1, - 0,0,0,2339,2340,1,0,0,0,2340,2341,1,0,0,0,2341,2343,3,405,202,0, - 2342,2332,1,0,0,0,2342,2337,1,0,0,0,2343,402,1,0,0,0,2344,2345,7, - 11,0,0,2345,404,1,0,0,0,2346,2353,3,363,181,0,2347,2349,5,39,0,0, - 2348,2347,1,0,0,0,2348,2349,1,0,0,0,2349,2350,1,0,0,0,2350,2352, - 3,363,181,0,2351,2348,1,0,0,0,2352,2355,1,0,0,0,2353,2351,1,0,0, - 0,2353,2354,1,0,0,0,2354,406,1,0,0,0,2355,2353,1,0,0,0,2356,2357, - 7,12,0,0,2357,408,1,0,0,0,2358,2359,5,117,0,0,2359,2362,5,56,0,0, - 2360,2362,7,0,0,0,2361,2358,1,0,0,0,2361,2360,1,0,0,0,2362,410,1, - 0,0,0,2363,2367,8,13,0,0,2364,2367,3,391,195,0,2365,2367,3,355,177, - 0,2366,2363,1,0,0,0,2366,2364,1,0,0,0,2366,2365,1,0,0,0,2367,412, - 1,0,0,0,2368,2369,5,82,0,0,2369,2370,5,34,0,0,2370,2376,1,0,0,0, - 2371,2372,5,92,0,0,2372,2375,7,14,0,0,2373,2375,8,15,0,0,2374,2371, - 1,0,0,0,2374,2373,1,0,0,0,2375,2378,1,0,0,0,2376,2377,1,0,0,0,2376, - 2374,1,0,0,0,2377,2379,1,0,0,0,2378,2376,1,0,0,0,2379,2383,5,40, - 0,0,2380,2382,8,16,0,0,2381,2380,1,0,0,0,2382,2385,1,0,0,0,2383, - 2384,1,0,0,0,2383,2381,1,0,0,0,2384,2386,1,0,0,0,2385,2383,1,0,0, - 0,2386,2392,5,41,0,0,2387,2388,5,92,0,0,2388,2391,7,14,0,0,2389, - 2391,8,17,0,0,2390,2387,1,0,0,0,2390,2389,1,0,0,0,2391,2394,1,0, - 0,0,2392,2393,1,0,0,0,2392,2390,1,0,0,0,2393,2395,1,0,0,0,2394,2392, - 1,0,0,0,2395,2396,5,34,0,0,2396,414,1,0,0,0,2397,2398,3,365,182, - 0,2398,2399,3,423,211,0,2399,2410,1,0,0,0,2400,2401,3,367,183,0, - 2401,2402,3,423,211,0,2402,2410,1,0,0,0,2403,2404,3,369,184,0,2404, - 2405,3,423,211,0,2405,2410,1,0,0,0,2406,2407,3,371,185,0,2407,2408, - 3,423,211,0,2408,2410,1,0,0,0,2409,2397,1,0,0,0,2409,2400,1,0,0, - 0,2409,2403,1,0,0,0,2409,2406,1,0,0,0,2410,416,1,0,0,0,2411,2413, - 3,399,199,0,2412,2414,3,401,200,0,2413,2412,1,0,0,0,2413,2414,1, - 0,0,0,2414,2415,1,0,0,0,2415,2416,3,423,211,0,2416,2422,1,0,0,0, - 2417,2418,3,405,202,0,2418,2419,3,401,200,0,2419,2420,3,423,211, - 0,2420,2422,1,0,0,0,2421,2411,1,0,0,0,2421,2417,1,0,0,0,2422,418, - 1,0,0,0,2423,2424,3,99,49,0,2424,2425,3,423,211,0,2425,420,1,0,0, - 0,2426,2427,3,95,47,0,2427,2428,3,423,211,0,2428,422,1,0,0,0,2429, - 2430,3,357,178,0,2430,424,1,0,0,0,2431,2433,7,18,0,0,2432,2431,1, - 0,0,0,2433,2434,1,0,0,0,2434,2432,1,0,0,0,2434,2435,1,0,0,0,2435, - 2436,1,0,0,0,2436,2437,6,212,1,0,2437,426,1,0,0,0,2438,2440,5,13, - 0,0,2439,2441,5,10,0,0,2440,2439,1,0,0,0,2440,2441,1,0,0,0,2441, - 2444,1,0,0,0,2442,2444,5,10,0,0,2443,2438,1,0,0,0,2443,2442,1,0, - 0,0,2444,2445,1,0,0,0,2445,2446,6,213,1,0,2446,428,1,0,0,0,2447, - 2448,5,47,0,0,2448,2449,5,42,0,0,2449,2453,1,0,0,0,2450,2452,9,0, - 0,0,2451,2450,1,0,0,0,2452,2455,1,0,0,0,2453,2454,1,0,0,0,2453,2451, - 1,0,0,0,2454,2456,1,0,0,0,2455,2453,1,0,0,0,2456,2457,5,42,0,0,2457, - 2458,5,47,0,0,2458,2459,1,0,0,0,2459,2460,6,214,1,0,2460,430,1,0, - 0,0,2461,2462,5,47,0,0,2462,2463,5,47,0,0,2463,2467,1,0,0,0,2464, - 2466,8,19,0,0,2465,2464,1,0,0,0,2466,2469,1,0,0,0,2467,2465,1,0, - 0,0,2467,2468,1,0,0,0,2468,2470,1,0,0,0,2469,2467,1,0,0,0,2470,2471, - 6,215,1,0,2471,432,1,0,0,0,113,0,459,467,493,522,548,568,608,619, - 669,692,754,786,806,829,861,887,910,936,959,976,993,1013,1030,1044, - 1058,1072,1086,1109,1129,1143,1160,1189,1197,1219,1251,1268,1288, - 1314,1343,1365,1369,1373,1377,1379,1382,1388,1394,1397,1402,1404, - 1407,1414,1418,1422,1430,1436,1441,1446,1451,1459,2040,2097,2103, - 2153,2158,2160,2165,2173,2178,2183,2188,2195,2199,2204,2211,2215, - 2220,2233,2237,2241,2245,2247,2257,2262,2267,2290,2293,2299,2312, - 2320,2323,2330,2334,2339,2342,2348,2353,2361,2366,2374,2376,2383, - 2390,2392,2409,2413,2421,2434,2440,2443,2453,2467,2,0,1,0,6,0,0 + 1,154,1,155,1,155,1,155,1,156,1,156,1,156,1,157,1,157,1,157,1,158, + 1,158,1,158,1,158,1,159,1,159,1,159,1,159,1,160,1,160,1,160,1,161, + 1,161,1,161,1,162,1,162,1,162,1,163,1,163,1,163,1,164,1,164,1,164, + 1,164,1,164,3,164,2123,8,164,1,165,1,165,1,165,1,165,3,165,2129, + 8,165,1,166,1,166,1,166,1,167,1,167,1,167,1,168,1,168,1,169,1,169, + 1,169,1,169,1,170,1,170,1,170,1,171,1,171,1,172,1,172,1,173,1,173, + 1,173,1,174,1,174,1,175,1,175,1,176,1,176,1,176,1,177,1,177,1,177, + 1,177,1,178,1,178,1,178,1,178,1,178,1,179,1,179,1,179,1,179,1,179, + 1,179,1,179,1,179,1,179,1,179,3,179,2179,8,179,1,180,1,180,1,180, + 5,180,2184,8,180,10,180,12,180,2187,9,180,1,181,1,181,3,181,2191, + 8,181,1,182,1,182,1,183,1,183,1,184,1,184,3,184,2199,8,184,1,184, + 5,184,2202,8,184,10,184,12,184,2205,9,184,1,185,1,185,3,185,2209, + 8,185,1,185,5,185,2212,8,185,10,185,12,185,2215,9,185,1,186,1,186, + 1,186,1,186,3,186,2221,8,186,1,186,1,186,3,186,2225,8,186,1,186, + 5,186,2228,8,186,10,186,12,186,2231,9,186,1,187,1,187,1,187,1,187, + 3,187,2237,8,187,1,187,1,187,3,187,2241,8,187,1,187,5,187,2244,8, + 187,10,187,12,187,2247,9,187,1,188,1,188,1,189,1,189,1,190,1,190, + 1,191,1,191,1,192,1,192,3,192,2259,8,192,1,192,1,192,3,192,2263, + 8,192,1,192,1,192,3,192,2267,8,192,1,192,1,192,3,192,2271,8,192, + 3,192,2273,8,192,1,193,1,193,1,194,1,194,1,195,1,195,1,195,1,195, + 3,195,2283,8,195,1,196,1,196,1,196,3,196,2288,8,196,1,197,1,197, + 1,197,3,197,2293,8,197,1,198,1,198,1,198,1,198,1,198,1,198,1,198, + 1,198,1,198,1,198,1,198,1,198,1,198,1,198,1,198,1,198,1,198,1,198, + 1,198,1,198,1,198,3,198,2316,8,198,1,198,3,198,2319,8,198,1,198, + 1,198,1,198,1,198,3,198,2325,8,198,1,199,1,199,1,199,1,199,1,199, + 1,199,1,199,1,199,1,199,1,199,1,199,3,199,2338,8,199,1,200,1,200, + 1,200,1,200,4,200,2344,8,200,11,200,12,200,2345,1,201,3,201,2349, + 8,201,1,201,1,201,1,201,1,201,1,201,3,201,2356,8,201,1,202,1,202, + 3,202,2360,8,202,1,202,1,202,1,202,3,202,2365,8,202,1,202,3,202, + 2368,8,202,1,203,1,203,1,204,1,204,3,204,2374,8,204,1,204,5,204, + 2377,8,204,10,204,12,204,2380,9,204,1,205,1,205,1,206,1,206,1,206, + 3,206,2387,8,206,1,207,1,207,1,207,3,207,2392,8,207,1,208,1,208, + 1,208,1,208,1,208,1,208,5,208,2400,8,208,10,208,12,208,2403,9,208, + 1,208,1,208,5,208,2407,8,208,10,208,12,208,2410,9,208,1,208,1,208, + 1,208,1,208,5,208,2416,8,208,10,208,12,208,2419,9,208,1,208,1,208, + 1,209,1,209,1,209,1,209,1,209,1,209,1,209,1,209,1,209,1,209,1,209, + 1,209,3,209,2435,8,209,1,210,1,210,3,210,2439,8,210,1,210,1,210, + 1,210,1,210,1,210,1,210,3,210,2447,8,210,1,211,1,211,1,211,1,212, + 1,212,1,212,1,213,1,213,1,214,4,214,2458,8,214,11,214,12,214,2459, + 1,214,1,214,1,215,1,215,3,215,2466,8,215,1,215,3,215,2469,8,215, + 1,215,1,215,1,216,1,216,1,216,1,216,5,216,2477,8,216,10,216,12,216, + 2480,9,216,1,216,1,216,1,216,1,216,1,216,1,217,1,217,1,217,1,217, + 5,217,2491,8,217,10,217,12,217,2494,9,217,1,217,1,217,6,1368,1461, + 2401,2408,2417,2478,0,218,1,1,3,2,5,3,7,4,9,5,11,6,13,7,15,8,17, + 9,19,10,21,11,23,12,25,13,27,14,29,15,31,16,33,17,35,18,37,19,39, + 20,41,21,43,22,45,23,47,24,49,25,51,26,53,27,55,28,57,29,59,30,61, + 31,63,32,65,33,67,34,69,35,71,36,73,37,75,38,77,39,79,40,81,41,83, + 42,85,43,87,44,89,45,91,46,93,47,95,48,97,49,99,50,101,51,103,52, + 105,53,107,54,109,55,111,56,113,57,115,58,117,59,119,60,121,61,123, + 62,125,63,127,64,129,65,131,66,133,67,135,68,137,69,139,70,141,71, + 143,72,145,73,147,74,149,75,151,76,153,77,155,78,157,79,159,80,161, + 81,163,82,165,83,167,84,169,85,171,86,173,87,175,88,177,89,179,90, + 181,91,183,92,185,93,187,94,189,95,191,96,193,97,195,98,197,99,199, + 100,201,101,203,102,205,103,207,104,209,105,211,106,213,107,215, + 108,217,109,219,110,221,111,223,112,225,113,227,114,229,115,231, + 116,233,117,235,118,237,119,239,120,241,121,243,122,245,123,247, + 124,249,125,251,126,253,127,255,128,257,129,259,130,261,131,263, + 132,265,133,267,134,269,135,271,136,273,137,275,138,277,139,279, + 140,281,141,283,142,285,143,287,144,289,145,291,146,293,147,295, + 148,297,149,299,150,301,151,303,152,305,153,307,154,309,155,311, + 156,313,157,315,158,317,159,319,160,321,161,323,162,325,163,327, + 164,329,165,331,166,333,167,335,168,337,169,339,170,341,171,343, + 172,345,173,347,174,349,175,351,176,353,177,355,178,357,0,359,0, + 361,179,363,0,365,0,367,0,369,180,371,181,373,182,375,183,377,0, + 379,0,381,0,383,0,385,184,387,0,389,0,391,0,393,0,395,0,397,0,399, + 0,401,0,403,0,405,0,407,0,409,0,411,0,413,0,415,0,417,0,419,185, + 421,186,423,187,425,188,427,0,429,189,431,190,433,191,435,192,1, + 0,20,3,0,76,76,85,85,117,117,1,0,10,10,3,0,65,90,95,95,97,122,1, + 0,48,57,1,0,49,57,1,0,48,55,3,0,48,57,65,70,97,102,1,0,48,49,2,0, + 85,85,117,117,2,0,76,76,108,108,4,0,10,10,13,13,39,39,92,92,2,0, + 43,43,45,45,4,0,70,70,76,76,102,102,108,108,4,0,10,10,13,13,34,34, + 92,92,2,0,34,34,40,41,4,0,10,10,13,13,32,32,40,40,1,0,41,41,4,0, + 10,10,13,13,32,32,34,34,2,0,9,9,32,32,2,0,10,10,13,13,2650,0,1,1, + 0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11,1,0,0, + 0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,0,21,1,0,0, + 0,0,23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0,0,31,1,0,0, + 0,0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,39,1,0,0,0,0,41,1,0,0, + 0,0,43,1,0,0,0,0,45,1,0,0,0,0,47,1,0,0,0,0,49,1,0,0,0,0,51,1,0,0, + 0,0,53,1,0,0,0,0,55,1,0,0,0,0,57,1,0,0,0,0,59,1,0,0,0,0,61,1,0,0, + 0,0,63,1,0,0,0,0,65,1,0,0,0,0,67,1,0,0,0,0,69,1,0,0,0,0,71,1,0,0, + 0,0,73,1,0,0,0,0,75,1,0,0,0,0,77,1,0,0,0,0,79,1,0,0,0,0,81,1,0,0, + 0,0,83,1,0,0,0,0,85,1,0,0,0,0,87,1,0,0,0,0,89,1,0,0,0,0,91,1,0,0, + 0,0,93,1,0,0,0,0,95,1,0,0,0,0,97,1,0,0,0,0,99,1,0,0,0,0,101,1,0, + 0,0,0,103,1,0,0,0,0,105,1,0,0,0,0,107,1,0,0,0,0,109,1,0,0,0,0,111, + 1,0,0,0,0,113,1,0,0,0,0,115,1,0,0,0,0,117,1,0,0,0,0,119,1,0,0,0, + 0,121,1,0,0,0,0,123,1,0,0,0,0,125,1,0,0,0,0,127,1,0,0,0,0,129,1, + 0,0,0,0,131,1,0,0,0,0,133,1,0,0,0,0,135,1,0,0,0,0,137,1,0,0,0,0, + 139,1,0,0,0,0,141,1,0,0,0,0,143,1,0,0,0,0,145,1,0,0,0,0,147,1,0, + 0,0,0,149,1,0,0,0,0,151,1,0,0,0,0,153,1,0,0,0,0,155,1,0,0,0,0,157, + 1,0,0,0,0,159,1,0,0,0,0,161,1,0,0,0,0,163,1,0,0,0,0,165,1,0,0,0, + 0,167,1,0,0,0,0,169,1,0,0,0,0,171,1,0,0,0,0,173,1,0,0,0,0,175,1, + 0,0,0,0,177,1,0,0,0,0,179,1,0,0,0,0,181,1,0,0,0,0,183,1,0,0,0,0, + 185,1,0,0,0,0,187,1,0,0,0,0,189,1,0,0,0,0,191,1,0,0,0,0,193,1,0, + 0,0,0,195,1,0,0,0,0,197,1,0,0,0,0,199,1,0,0,0,0,201,1,0,0,0,0,203, + 1,0,0,0,0,205,1,0,0,0,0,207,1,0,0,0,0,209,1,0,0,0,0,211,1,0,0,0, + 0,213,1,0,0,0,0,215,1,0,0,0,0,217,1,0,0,0,0,219,1,0,0,0,0,221,1, + 0,0,0,0,223,1,0,0,0,0,225,1,0,0,0,0,227,1,0,0,0,0,229,1,0,0,0,0, + 231,1,0,0,0,0,233,1,0,0,0,0,235,1,0,0,0,0,237,1,0,0,0,0,239,1,0, + 0,0,0,241,1,0,0,0,0,243,1,0,0,0,0,245,1,0,0,0,0,247,1,0,0,0,0,249, + 1,0,0,0,0,251,1,0,0,0,0,253,1,0,0,0,0,255,1,0,0,0,0,257,1,0,0,0, + 0,259,1,0,0,0,0,261,1,0,0,0,0,263,1,0,0,0,0,265,1,0,0,0,0,267,1, + 0,0,0,0,269,1,0,0,0,0,271,1,0,0,0,0,273,1,0,0,0,0,275,1,0,0,0,0, + 277,1,0,0,0,0,279,1,0,0,0,0,281,1,0,0,0,0,283,1,0,0,0,0,285,1,0, + 0,0,0,287,1,0,0,0,0,289,1,0,0,0,0,291,1,0,0,0,0,293,1,0,0,0,0,295, + 1,0,0,0,0,297,1,0,0,0,0,299,1,0,0,0,0,301,1,0,0,0,0,303,1,0,0,0, + 0,305,1,0,0,0,0,307,1,0,0,0,0,309,1,0,0,0,0,311,1,0,0,0,0,313,1, + 0,0,0,0,315,1,0,0,0,0,317,1,0,0,0,0,319,1,0,0,0,0,321,1,0,0,0,0, + 323,1,0,0,0,0,325,1,0,0,0,0,327,1,0,0,0,0,329,1,0,0,0,0,331,1,0, + 0,0,0,333,1,0,0,0,0,335,1,0,0,0,0,337,1,0,0,0,0,339,1,0,0,0,0,341, + 1,0,0,0,0,343,1,0,0,0,0,345,1,0,0,0,0,347,1,0,0,0,0,349,1,0,0,0, + 0,351,1,0,0,0,0,353,1,0,0,0,0,355,1,0,0,0,0,361,1,0,0,0,0,369,1, + 0,0,0,0,371,1,0,0,0,0,373,1,0,0,0,0,375,1,0,0,0,0,385,1,0,0,0,0, + 419,1,0,0,0,0,421,1,0,0,0,0,423,1,0,0,0,0,425,1,0,0,0,0,429,1,0, + 0,0,0,431,1,0,0,0,0,433,1,0,0,0,0,435,1,0,0,0,1,437,1,0,0,0,3,439, + 1,0,0,0,5,442,1,0,0,0,7,469,1,0,0,0,9,477,1,0,0,0,11,503,1,0,0,0, + 13,532,1,0,0,0,15,558,1,0,0,0,17,578,1,0,0,0,19,601,1,0,0,0,21,633, + 1,0,0,0,23,644,1,0,0,0,25,694,1,0,0,0,27,717,1,0,0,0,29,779,1,0, + 0,0,31,811,1,0,0,0,33,831,1,0,0,0,35,854,1,0,0,0,37,886,1,0,0,0, + 39,912,1,0,0,0,41,935,1,0,0,0,43,961,1,0,0,0,45,984,1,0,0,0,47,1001, + 1,0,0,0,49,1018,1,0,0,0,51,1038,1,0,0,0,53,1055,1,0,0,0,55,1069, + 1,0,0,0,57,1083,1,0,0,0,59,1097,1,0,0,0,61,1111,1,0,0,0,63,1134, + 1,0,0,0,65,1154,1,0,0,0,67,1168,1,0,0,0,69,1185,1,0,0,0,71,1214, + 1,0,0,0,73,1222,1,0,0,0,75,1244,1,0,0,0,77,1276,1,0,0,0,79,1293, + 1,0,0,0,81,1313,1,0,0,0,83,1339,1,0,0,0,85,1341,1,0,0,0,87,1348, + 1,0,0,0,89,1355,1,0,0,0,91,1362,1,0,0,0,93,1374,1,0,0,0,95,1383, + 1,0,0,0,97,1404,1,0,0,0,99,1407,1,0,0,0,101,1429,1,0,0,0,103,1432, + 1,0,0,0,105,1447,1,0,0,0,107,1449,1,0,0,0,109,1455,1,0,0,0,111,1457, + 1,0,0,0,113,1480,1,0,0,0,115,1489,1,0,0,0,117,1497,1,0,0,0,119,1505, + 1,0,0,0,121,1509,1,0,0,0,123,1514,1,0,0,0,125,1519,1,0,0,0,127,1525, + 1,0,0,0,129,1530,1,0,0,0,131,1536,1,0,0,0,133,1541,1,0,0,0,135,1550, + 1,0,0,0,137,1559,1,0,0,0,139,1565,1,0,0,0,141,1571,1,0,0,0,143,1581, + 1,0,0,0,145,1592,1,0,0,0,147,1601,1,0,0,0,149,1610,1,0,0,0,151,1618, + 1,0,0,0,153,1625,1,0,0,0,155,1628,1,0,0,0,157,1635,1,0,0,0,159,1648, + 1,0,0,0,161,1653,1,0,0,0,163,1658,1,0,0,0,165,1667,1,0,0,0,167,1674, + 1,0,0,0,169,1681,1,0,0,0,171,1687,1,0,0,0,173,1693,1,0,0,0,175,1699, + 1,0,0,0,177,1703,1,0,0,0,179,1710,1,0,0,0,181,1715,1,0,0,0,183,1718, + 1,0,0,0,185,1725,1,0,0,0,187,1729,1,0,0,0,189,1734,1,0,0,0,191,1742, + 1,0,0,0,193,1752,1,0,0,0,195,1756,1,0,0,0,197,1765,1,0,0,0,199,1773, + 1,0,0,0,201,1782,1,0,0,0,203,1791,1,0,0,0,205,1801,1,0,0,0,207,1808, + 1,0,0,0,209,1817,1,0,0,0,211,1834,1,0,0,0,213,1841,1,0,0,0,215,1847, + 1,0,0,0,217,1854,1,0,0,0,219,1861,1,0,0,0,221,1868,1,0,0,0,223,1882, + 1,0,0,0,225,1894,1,0,0,0,227,1901,1,0,0,0,229,1908,1,0,0,0,231,1917, + 1,0,0,0,233,1922,1,0,0,0,235,1935,1,0,0,0,237,1941,1,0,0,0,239,1946, + 1,0,0,0,241,1950,1,0,0,0,243,1958,1,0,0,0,245,1965,1,0,0,0,247,1974, + 1,0,0,0,249,1980,1,0,0,0,251,1989,1,0,0,0,253,1995,1,0,0,0,255,2003, + 1,0,0,0,257,2008,1,0,0,0,259,2017,1,0,0,0,261,2025,1,0,0,0,263,2031, + 1,0,0,0,265,2033,1,0,0,0,267,2035,1,0,0,0,269,2037,1,0,0,0,271,2039, + 1,0,0,0,273,2041,1,0,0,0,275,2043,1,0,0,0,277,2045,1,0,0,0,279,2047, + 1,0,0,0,281,2049,1,0,0,0,283,2051,1,0,0,0,285,2053,1,0,0,0,287,2055, + 1,0,0,0,289,2057,1,0,0,0,291,2059,1,0,0,0,293,2065,1,0,0,0,295,2067, + 1,0,0,0,297,2069,1,0,0,0,299,2071,1,0,0,0,301,2073,1,0,0,0,303,2076, + 1,0,0,0,305,2079,1,0,0,0,307,2082,1,0,0,0,309,2085,1,0,0,0,311,2088, + 1,0,0,0,313,2091,1,0,0,0,315,2094,1,0,0,0,317,2097,1,0,0,0,319,2101, + 1,0,0,0,321,2105,1,0,0,0,323,2108,1,0,0,0,325,2111,1,0,0,0,327,2114, + 1,0,0,0,329,2122,1,0,0,0,331,2128,1,0,0,0,333,2130,1,0,0,0,335,2133, + 1,0,0,0,337,2136,1,0,0,0,339,2138,1,0,0,0,341,2142,1,0,0,0,343,2145, + 1,0,0,0,345,2147,1,0,0,0,347,2149,1,0,0,0,349,2152,1,0,0,0,351,2154, + 1,0,0,0,353,2156,1,0,0,0,355,2159,1,0,0,0,357,2163,1,0,0,0,359,2178, + 1,0,0,0,361,2180,1,0,0,0,363,2190,1,0,0,0,365,2192,1,0,0,0,367,2194, + 1,0,0,0,369,2196,1,0,0,0,371,2206,1,0,0,0,373,2220,1,0,0,0,375,2236, + 1,0,0,0,377,2248,1,0,0,0,379,2250,1,0,0,0,381,2252,1,0,0,0,383,2254, + 1,0,0,0,385,2272,1,0,0,0,387,2274,1,0,0,0,389,2276,1,0,0,0,391,2282, + 1,0,0,0,393,2287,1,0,0,0,395,2292,1,0,0,0,397,2324,1,0,0,0,399,2337, + 1,0,0,0,401,2339,1,0,0,0,403,2355,1,0,0,0,405,2367,1,0,0,0,407,2369, + 1,0,0,0,409,2371,1,0,0,0,411,2381,1,0,0,0,413,2386,1,0,0,0,415,2391, + 1,0,0,0,417,2393,1,0,0,0,419,2434,1,0,0,0,421,2446,1,0,0,0,423,2448, + 1,0,0,0,425,2451,1,0,0,0,427,2454,1,0,0,0,429,2457,1,0,0,0,431,2468, + 1,0,0,0,433,2472,1,0,0,0,435,2486,1,0,0,0,437,438,5,48,0,0,438,2, + 1,0,0,0,439,440,5,62,0,0,440,441,5,62,0,0,441,4,1,0,0,0,442,443, + 5,60,0,0,443,444,5,60,0,0,444,6,1,0,0,0,445,446,5,65,0,0,446,447, + 5,66,0,0,447,448,5,83,0,0,448,449,5,79,0,0,449,450,5,76,0,0,450, + 451,5,85,0,0,451,452,5,84,0,0,452,470,5,69,0,0,453,454,5,65,0,0, + 454,455,5,98,0,0,455,456,5,115,0,0,456,457,5,111,0,0,457,458,5,108, + 0,0,458,459,5,117,0,0,459,460,5,116,0,0,460,470,5,101,0,0,461,462, + 5,97,0,0,462,463,5,98,0,0,463,464,5,115,0,0,464,465,5,111,0,0,465, + 466,5,108,0,0,466,467,5,117,0,0,467,468,5,116,0,0,468,470,5,101, + 0,0,469,445,1,0,0,0,469,453,1,0,0,0,469,461,1,0,0,0,470,8,1,0,0, + 0,471,472,5,65,0,0,472,478,5,84,0,0,473,474,5,65,0,0,474,478,5,116, + 0,0,475,476,5,97,0,0,476,478,5,116,0,0,477,471,1,0,0,0,477,473,1, + 0,0,0,477,475,1,0,0,0,478,10,1,0,0,0,479,480,5,67,0,0,480,481,5, + 65,0,0,481,482,5,84,0,0,482,483,5,69,0,0,483,484,5,71,0,0,484,485, + 5,79,0,0,485,486,5,82,0,0,486,504,5,89,0,0,487,488,5,67,0,0,488, + 489,5,97,0,0,489,490,5,116,0,0,490,491,5,101,0,0,491,492,5,103,0, + 0,492,493,5,111,0,0,493,494,5,114,0,0,494,504,5,121,0,0,495,496, + 5,99,0,0,496,497,5,97,0,0,497,498,5,116,0,0,498,499,5,101,0,0,499, + 500,5,103,0,0,500,501,5,111,0,0,501,502,5,114,0,0,502,504,5,121, + 0,0,503,479,1,0,0,0,503,487,1,0,0,0,503,495,1,0,0,0,504,12,1,0,0, + 0,505,506,5,67,0,0,506,507,5,79,0,0,507,508,5,77,0,0,508,509,5,80, + 0,0,509,510,5,79,0,0,510,511,5,78,0,0,511,512,5,69,0,0,512,513,5, + 78,0,0,513,533,5,84,0,0,514,515,5,67,0,0,515,516,5,111,0,0,516,517, + 5,109,0,0,517,518,5,112,0,0,518,519,5,111,0,0,519,520,5,110,0,0, + 520,521,5,101,0,0,521,522,5,110,0,0,522,533,5,116,0,0,523,524,5, + 99,0,0,524,525,5,111,0,0,525,526,5,109,0,0,526,527,5,112,0,0,527, + 528,5,111,0,0,528,529,5,110,0,0,529,530,5,101,0,0,530,531,5,110, + 0,0,531,533,5,116,0,0,532,505,1,0,0,0,532,514,1,0,0,0,532,523,1, + 0,0,0,533,14,1,0,0,0,534,535,5,85,0,0,535,536,5,83,0,0,536,537,5, + 69,0,0,537,538,5,82,0,0,538,539,5,86,0,0,539,540,5,65,0,0,540,541, + 5,82,0,0,541,559,5,83,0,0,542,543,5,85,0,0,543,544,5,115,0,0,544, + 545,5,101,0,0,545,546,5,114,0,0,546,547,5,86,0,0,547,548,5,97,0, + 0,548,549,5,114,0,0,549,559,5,115,0,0,550,551,5,117,0,0,551,552, + 5,115,0,0,552,553,5,101,0,0,553,554,5,114,0,0,554,555,5,118,0,0, + 555,556,5,97,0,0,556,557,5,114,0,0,557,559,5,115,0,0,558,534,1,0, + 0,0,558,542,1,0,0,0,558,550,1,0,0,0,559,16,1,0,0,0,560,561,5,68, + 0,0,561,562,5,69,0,0,562,563,5,70,0,0,563,564,5,73,0,0,564,565,5, + 78,0,0,565,579,5,69,0,0,566,567,5,68,0,0,567,568,5,101,0,0,568,569, + 5,102,0,0,569,570,5,105,0,0,570,571,5,110,0,0,571,579,5,101,0,0, + 572,573,5,100,0,0,573,574,5,101,0,0,574,575,5,102,0,0,575,576,5, + 105,0,0,576,577,5,110,0,0,577,579,5,101,0,0,578,560,1,0,0,0,578, + 566,1,0,0,0,578,572,1,0,0,0,579,18,1,0,0,0,580,581,5,68,0,0,581, + 582,5,69,0,0,582,583,5,67,0,0,583,584,5,76,0,0,584,585,5,65,0,0, + 585,586,5,82,0,0,586,602,5,69,0,0,587,588,5,68,0,0,588,589,5,101, + 0,0,589,590,5,99,0,0,590,591,5,108,0,0,591,592,5,97,0,0,592,593, + 5,114,0,0,593,602,5,101,0,0,594,595,5,100,0,0,595,596,5,101,0,0, + 596,597,5,99,0,0,597,598,5,108,0,0,598,599,5,97,0,0,599,600,5,114, + 0,0,600,602,5,101,0,0,601,580,1,0,0,0,601,587,1,0,0,0,601,594,1, + 0,0,0,602,20,1,0,0,0,603,604,5,68,0,0,604,605,5,69,0,0,605,606,5, + 70,0,0,606,607,5,73,0,0,607,608,5,78,0,0,608,609,5,73,0,0,609,610, + 5,84,0,0,610,611,5,73,0,0,611,612,5,79,0,0,612,634,5,78,0,0,613, + 614,5,68,0,0,614,615,5,101,0,0,615,616,5,102,0,0,616,617,5,105,0, + 0,617,618,5,110,0,0,618,619,5,105,0,0,619,620,5,116,0,0,620,621, + 5,105,0,0,621,622,5,111,0,0,622,634,5,110,0,0,623,624,5,100,0,0, + 624,625,5,101,0,0,625,626,5,102,0,0,626,627,5,105,0,0,627,628,5, + 110,0,0,628,629,5,105,0,0,629,630,5,116,0,0,630,631,5,105,0,0,631, + 632,5,111,0,0,632,634,5,110,0,0,633,603,1,0,0,0,633,613,1,0,0,0, + 633,623,1,0,0,0,634,22,1,0,0,0,635,636,5,69,0,0,636,637,5,78,0,0, + 637,645,5,68,0,0,638,639,5,69,0,0,639,640,5,110,0,0,640,645,5,100, + 0,0,641,642,5,101,0,0,642,643,5,110,0,0,643,645,5,100,0,0,644,635, + 1,0,0,0,644,638,1,0,0,0,644,641,1,0,0,0,645,24,1,0,0,0,646,647,5, + 77,0,0,647,648,5,67,0,0,648,649,5,68,0,0,649,650,5,73,0,0,650,651, + 5,83,0,0,651,652,5,80,0,0,652,653,5,76,0,0,653,654,5,65,0,0,654, + 695,5,89,0,0,655,656,5,68,0,0,656,657,5,73,0,0,657,658,5,83,0,0, + 658,659,5,80,0,0,659,660,5,76,0,0,660,661,5,65,0,0,661,695,5,89, + 0,0,662,663,5,77,0,0,663,664,5,99,0,0,664,665,5,68,0,0,665,666,5, + 105,0,0,666,667,5,115,0,0,667,668,5,112,0,0,668,669,5,108,0,0,669, + 670,5,97,0,0,670,695,5,121,0,0,671,672,5,109,0,0,672,673,5,99,0, + 0,673,674,5,100,0,0,674,675,5,105,0,0,675,676,5,115,0,0,676,677, + 5,112,0,0,677,678,5,108,0,0,678,679,5,97,0,0,679,695,5,121,0,0,680, + 681,5,68,0,0,681,682,5,105,0,0,682,683,5,115,0,0,683,684,5,112,0, + 0,684,685,5,108,0,0,685,686,5,97,0,0,686,695,5,121,0,0,687,688,5, + 100,0,0,688,689,5,105,0,0,689,690,5,115,0,0,690,691,5,112,0,0,691, + 692,5,108,0,0,692,693,5,97,0,0,693,695,5,121,0,0,694,646,1,0,0,0, + 694,655,1,0,0,0,694,662,1,0,0,0,694,671,1,0,0,0,694,680,1,0,0,0, + 694,687,1,0,0,0,695,26,1,0,0,0,696,697,5,70,0,0,697,698,5,73,0,0, + 698,699,5,78,0,0,699,700,5,65,0,0,700,701,5,76,0,0,701,702,5,76, + 0,0,702,718,5,89,0,0,703,704,5,70,0,0,704,705,5,105,0,0,705,706, + 5,110,0,0,706,707,5,97,0,0,707,708,5,108,0,0,708,709,5,108,0,0,709, + 718,5,121,0,0,710,711,5,102,0,0,711,712,5,105,0,0,712,713,5,110, + 0,0,713,714,5,97,0,0,714,715,5,108,0,0,715,716,5,108,0,0,716,718, + 5,121,0,0,717,696,1,0,0,0,717,703,1,0,0,0,717,710,1,0,0,0,718,28, + 1,0,0,0,719,720,5,73,0,0,720,721,5,78,0,0,721,722,5,73,0,0,722,723, + 5,84,0,0,723,724,5,73,0,0,724,725,5,65,0,0,725,726,5,76,0,0,726, + 727,5,73,0,0,727,728,5,90,0,0,728,780,5,69,0,0,729,730,5,73,0,0, + 730,731,5,78,0,0,731,732,5,73,0,0,732,733,5,84,0,0,733,734,5,73, + 0,0,734,735,5,65,0,0,735,736,5,76,0,0,736,737,5,73,0,0,737,738,5, + 83,0,0,738,780,5,69,0,0,739,740,5,73,0,0,740,741,5,110,0,0,741,742, + 5,105,0,0,742,743,5,116,0,0,743,744,5,105,0,0,744,745,5,97,0,0,745, + 746,5,108,0,0,746,747,5,105,0,0,747,748,5,122,0,0,748,780,5,101, + 0,0,749,750,5,105,0,0,750,751,5,110,0,0,751,752,5,105,0,0,752,753, + 5,116,0,0,753,754,5,105,0,0,754,755,5,97,0,0,755,756,5,108,0,0,756, + 757,5,105,0,0,757,758,5,122,0,0,758,780,5,101,0,0,759,760,5,73,0, + 0,760,761,5,110,0,0,761,762,5,105,0,0,762,763,5,116,0,0,763,764, + 5,105,0,0,764,765,5,97,0,0,765,766,5,108,0,0,766,767,5,105,0,0,767, + 768,5,115,0,0,768,780,5,101,0,0,769,770,5,105,0,0,770,771,5,110, + 0,0,771,772,5,105,0,0,772,773,5,116,0,0,773,774,5,105,0,0,774,775, + 5,97,0,0,775,776,5,108,0,0,776,777,5,105,0,0,777,778,5,115,0,0,778, + 780,5,101,0,0,779,719,1,0,0,0,779,729,1,0,0,0,779,739,1,0,0,0,779, + 749,1,0,0,0,779,759,1,0,0,0,779,769,1,0,0,0,780,30,1,0,0,0,781,782, + 5,73,0,0,782,783,5,78,0,0,783,784,5,83,0,0,784,785,5,84,0,0,785, + 786,5,82,0,0,786,787,5,85,0,0,787,788,5,77,0,0,788,789,5,69,0,0, + 789,790,5,78,0,0,790,812,5,84,0,0,791,792,5,73,0,0,792,793,5,110, + 0,0,793,794,5,115,0,0,794,795,5,116,0,0,795,796,5,114,0,0,796,797, + 5,117,0,0,797,798,5,109,0,0,798,799,5,101,0,0,799,800,5,110,0,0, + 800,812,5,116,0,0,801,802,5,105,0,0,802,803,5,110,0,0,803,804,5, + 115,0,0,804,805,5,116,0,0,805,806,5,114,0,0,806,807,5,117,0,0,807, + 808,5,109,0,0,808,809,5,101,0,0,809,810,5,110,0,0,810,812,5,116, + 0,0,811,781,1,0,0,0,811,791,1,0,0,0,811,801,1,0,0,0,812,32,1,0,0, + 0,813,814,5,79,0,0,814,815,5,85,0,0,815,816,5,84,0,0,816,817,5,80, + 0,0,817,818,5,85,0,0,818,832,5,84,0,0,819,820,5,79,0,0,820,821,5, + 117,0,0,821,822,5,116,0,0,822,823,5,112,0,0,823,824,5,117,0,0,824, + 832,5,116,0,0,825,826,5,111,0,0,826,827,5,117,0,0,827,828,5,116, + 0,0,828,829,5,112,0,0,829,830,5,117,0,0,830,832,5,116,0,0,831,813, + 1,0,0,0,831,819,1,0,0,0,831,825,1,0,0,0,832,34,1,0,0,0,833,834,5, + 80,0,0,834,835,5,82,0,0,835,836,5,73,0,0,836,837,5,86,0,0,837,838, + 5,65,0,0,838,839,5,84,0,0,839,855,5,69,0,0,840,841,5,80,0,0,841, + 842,5,114,0,0,842,843,5,105,0,0,843,844,5,118,0,0,844,845,5,97,0, + 0,845,846,5,116,0,0,846,855,5,101,0,0,847,848,5,112,0,0,848,849, + 5,114,0,0,849,850,5,105,0,0,850,851,5,118,0,0,851,852,5,97,0,0,852, + 853,5,116,0,0,853,855,5,101,0,0,854,833,1,0,0,0,854,840,1,0,0,0, + 854,847,1,0,0,0,855,36,1,0,0,0,856,857,5,80,0,0,857,858,5,65,0,0, + 858,859,5,82,0,0,859,860,5,65,0,0,860,861,5,77,0,0,861,862,5,69, + 0,0,862,863,5,84,0,0,863,864,5,69,0,0,864,865,5,82,0,0,865,887,5, + 83,0,0,866,867,5,80,0,0,867,868,5,97,0,0,868,869,5,114,0,0,869,870, + 5,97,0,0,870,871,5,109,0,0,871,872,5,101,0,0,872,873,5,116,0,0,873, + 874,5,101,0,0,874,875,5,114,0,0,875,887,5,115,0,0,876,877,5,112, + 0,0,877,878,5,97,0,0,878,879,5,114,0,0,879,880,5,97,0,0,880,881, + 5,109,0,0,881,882,5,101,0,0,882,883,5,116,0,0,883,884,5,101,0,0, + 884,885,5,114,0,0,885,887,5,115,0,0,886,856,1,0,0,0,886,866,1,0, + 0,0,886,876,1,0,0,0,887,38,1,0,0,0,888,889,5,82,0,0,889,890,5,69, + 0,0,890,891,5,76,0,0,891,892,5,65,0,0,892,893,5,84,0,0,893,894,5, + 73,0,0,894,895,5,86,0,0,895,913,5,69,0,0,896,897,5,82,0,0,897,898, + 5,101,0,0,898,899,5,108,0,0,899,900,5,97,0,0,900,901,5,116,0,0,901, + 902,5,105,0,0,902,903,5,118,0,0,903,913,5,101,0,0,904,905,5,114, + 0,0,905,906,5,101,0,0,906,907,5,108,0,0,907,908,5,97,0,0,908,909, + 5,116,0,0,909,910,5,105,0,0,910,911,5,118,0,0,911,913,5,101,0,0, + 912,888,1,0,0,0,912,896,1,0,0,0,912,904,1,0,0,0,913,40,1,0,0,0,914, + 915,5,82,0,0,915,916,5,79,0,0,916,917,5,84,0,0,917,918,5,65,0,0, + 918,919,5,84,0,0,919,920,5,69,0,0,920,936,5,68,0,0,921,922,5,82, + 0,0,922,923,5,111,0,0,923,924,5,116,0,0,924,925,5,97,0,0,925,926, + 5,116,0,0,926,927,5,101,0,0,927,936,5,100,0,0,928,929,5,114,0,0, + 929,930,5,111,0,0,930,931,5,116,0,0,931,932,5,97,0,0,932,933,5,116, + 0,0,933,934,5,101,0,0,934,936,5,100,0,0,935,914,1,0,0,0,935,921, + 1,0,0,0,935,928,1,0,0,0,936,42,1,0,0,0,937,938,5,80,0,0,938,939, + 5,82,0,0,939,940,5,69,0,0,940,941,5,86,0,0,941,942,5,73,0,0,942, + 943,5,79,0,0,943,944,5,85,0,0,944,962,5,83,0,0,945,946,5,80,0,0, + 946,947,5,114,0,0,947,948,5,101,0,0,948,949,5,118,0,0,949,950,5, + 105,0,0,950,951,5,111,0,0,951,952,5,117,0,0,952,962,5,115,0,0,953, + 954,5,112,0,0,954,955,5,114,0,0,955,956,5,101,0,0,956,957,5,118, + 0,0,957,958,5,105,0,0,958,959,5,111,0,0,959,960,5,117,0,0,960,962, + 5,115,0,0,961,937,1,0,0,0,961,945,1,0,0,0,961,953,1,0,0,0,962,44, + 1,0,0,0,963,964,5,83,0,0,964,965,5,69,0,0,965,966,5,84,0,0,966,967, + 5,84,0,0,967,968,5,73,0,0,968,969,5,78,0,0,969,985,5,71,0,0,970, + 971,5,83,0,0,971,972,5,101,0,0,972,973,5,116,0,0,973,974,5,116,0, + 0,974,975,5,105,0,0,975,976,5,110,0,0,976,985,5,103,0,0,977,978, + 5,115,0,0,978,979,5,101,0,0,979,980,5,116,0,0,980,981,5,116,0,0, + 981,982,5,105,0,0,982,983,5,110,0,0,983,985,5,103,0,0,984,963,1, + 0,0,0,984,970,1,0,0,0,984,977,1,0,0,0,985,46,1,0,0,0,986,987,5,84, + 0,0,987,988,5,82,0,0,988,989,5,65,0,0,989,990,5,67,0,0,990,1002, + 5,69,0,0,991,992,5,84,0,0,992,993,5,114,0,0,993,994,5,97,0,0,994, + 995,5,99,0,0,995,1002,5,101,0,0,996,997,5,116,0,0,997,998,5,114, + 0,0,998,999,5,97,0,0,999,1000,5,99,0,0,1000,1002,5,101,0,0,1001, + 986,1,0,0,0,1001,991,1,0,0,0,1001,996,1,0,0,0,1002,48,1,0,0,0,1003, + 1004,5,83,0,0,1004,1005,5,72,0,0,1005,1006,5,65,0,0,1006,1007,5, + 82,0,0,1007,1019,5,69,0,0,1008,1009,5,83,0,0,1009,1010,5,104,0,0, + 1010,1011,5,97,0,0,1011,1012,5,114,0,0,1012,1019,5,101,0,0,1013, + 1014,5,115,0,0,1014,1015,5,104,0,0,1015,1016,5,97,0,0,1016,1017, + 5,114,0,0,1017,1019,5,101,0,0,1018,1003,1,0,0,0,1018,1008,1,0,0, + 0,1018,1013,1,0,0,0,1019,50,1,0,0,0,1020,1021,5,69,0,0,1021,1022, + 5,88,0,0,1022,1023,5,84,0,0,1023,1024,5,69,0,0,1024,1025,5,78,0, + 0,1025,1039,5,68,0,0,1026,1027,5,69,0,0,1027,1028,5,120,0,0,1028, + 1029,5,116,0,0,1029,1030,5,101,0,0,1030,1031,5,110,0,0,1031,1039, + 5,100,0,0,1032,1033,5,101,0,0,1033,1034,5,120,0,0,1034,1035,5,116, + 0,0,1035,1036,5,101,0,0,1036,1037,5,110,0,0,1037,1039,5,100,0,0, + 1038,1020,1,0,0,0,1038,1026,1,0,0,0,1038,1032,1,0,0,0,1039,52,1, + 0,0,0,1040,1041,5,71,0,0,1041,1042,5,82,0,0,1042,1043,5,79,0,0,1043, + 1044,5,85,0,0,1044,1056,5,80,0,0,1045,1046,5,71,0,0,1046,1047,5, + 114,0,0,1047,1048,5,111,0,0,1048,1049,5,117,0,0,1049,1056,5,112, + 0,0,1050,1051,5,103,0,0,1051,1052,5,114,0,0,1052,1053,5,111,0,0, + 1053,1054,5,117,0,0,1054,1056,5,112,0,0,1055,1040,1,0,0,0,1055,1045, + 1,0,0,0,1055,1050,1,0,0,0,1056,54,1,0,0,0,1057,1058,5,83,0,0,1058, + 1059,5,65,0,0,1059,1060,5,86,0,0,1060,1070,5,69,0,0,1061,1062,5, + 83,0,0,1062,1063,5,97,0,0,1063,1064,5,118,0,0,1064,1070,5,101,0, + 0,1065,1066,5,115,0,0,1066,1067,5,97,0,0,1067,1068,5,118,0,0,1068, + 1070,5,101,0,0,1069,1057,1,0,0,0,1069,1061,1,0,0,0,1069,1065,1,0, + 0,0,1070,56,1,0,0,0,1071,1072,5,74,0,0,1072,1073,5,85,0,0,1073,1074, + 5,77,0,0,1074,1084,5,80,0,0,1075,1076,5,74,0,0,1076,1077,5,117,0, + 0,1077,1078,5,109,0,0,1078,1084,5,112,0,0,1079,1080,5,106,0,0,1080, + 1081,5,117,0,0,1081,1082,5,109,0,0,1082,1084,5,112,0,0,1083,1071, + 1,0,0,0,1083,1075,1,0,0,0,1083,1079,1,0,0,0,1084,58,1,0,0,0,1085, + 1086,5,87,0,0,1086,1087,5,72,0,0,1087,1088,5,69,0,0,1088,1098,5, + 78,0,0,1089,1090,5,87,0,0,1090,1091,5,104,0,0,1091,1092,5,101,0, + 0,1092,1098,5,110,0,0,1093,1094,5,119,0,0,1094,1095,5,104,0,0,1095, + 1096,5,101,0,0,1096,1098,5,110,0,0,1097,1085,1,0,0,0,1097,1089,1, + 0,0,0,1097,1093,1,0,0,0,1098,60,1,0,0,0,1099,1100,5,78,0,0,1100, + 1101,5,69,0,0,1101,1102,5,88,0,0,1102,1112,5,84,0,0,1103,1104,5, + 78,0,0,1104,1105,5,101,0,0,1105,1106,5,120,0,0,1106,1112,5,116,0, + 0,1107,1108,5,110,0,0,1108,1109,5,101,0,0,1109,1110,5,120,0,0,1110, + 1112,5,116,0,0,1111,1099,1,0,0,0,1111,1103,1,0,0,0,1111,1107,1,0, + 0,0,1112,62,1,0,0,0,1113,1114,5,73,0,0,1114,1115,5,84,0,0,1115,1116, + 5,69,0,0,1116,1117,5,82,0,0,1117,1118,5,65,0,0,1118,1119,5,84,0, + 0,1119,1135,5,69,0,0,1120,1121,5,73,0,0,1121,1122,5,116,0,0,1122, + 1123,5,101,0,0,1123,1124,5,114,0,0,1124,1125,5,97,0,0,1125,1126, + 5,116,0,0,1126,1135,5,101,0,0,1127,1128,5,105,0,0,1128,1129,5,116, + 0,0,1129,1130,5,101,0,0,1130,1131,5,114,0,0,1131,1132,5,97,0,0,1132, + 1133,5,116,0,0,1133,1135,5,101,0,0,1134,1113,1,0,0,0,1134,1120,1, + 0,0,0,1134,1127,1,0,0,0,1135,64,1,0,0,0,1136,1137,5,77,0,0,1137, + 1138,5,89,0,0,1138,1139,5,83,0,0,1139,1140,5,69,0,0,1140,1141,5, + 76,0,0,1141,1155,5,70,0,0,1142,1143,5,77,0,0,1143,1144,5,121,0,0, + 1144,1145,5,115,0,0,1145,1146,5,101,0,0,1146,1147,5,108,0,0,1147, + 1155,5,102,0,0,1148,1149,5,109,0,0,1149,1150,5,121,0,0,1150,1151, + 5,115,0,0,1151,1152,5,101,0,0,1152,1153,5,108,0,0,1153,1155,5,102, + 0,0,1154,1136,1,0,0,0,1154,1142,1,0,0,0,1154,1148,1,0,0,0,1155,66, + 1,0,0,0,1156,1157,5,67,0,0,1157,1158,5,79,0,0,1158,1159,5,80,0,0, + 1159,1169,5,89,0,0,1160,1161,5,67,0,0,1161,1162,5,111,0,0,1162,1163, + 5,112,0,0,1163,1169,5,121,0,0,1164,1165,5,99,0,0,1165,1166,5,111, + 0,0,1166,1167,5,112,0,0,1167,1169,5,121,0,0,1168,1156,1,0,0,0,1168, + 1160,1,0,0,0,1168,1164,1,0,0,0,1169,68,1,0,0,0,1170,1171,5,83,0, + 0,1171,1172,5,80,0,0,1172,1173,5,76,0,0,1173,1174,5,73,0,0,1174, + 1186,5,84,0,0,1175,1176,5,83,0,0,1176,1177,5,112,0,0,1177,1178,5, + 108,0,0,1178,1179,5,105,0,0,1179,1186,5,116,0,0,1180,1181,5,115, + 0,0,1181,1182,5,112,0,0,1182,1183,5,108,0,0,1183,1184,5,105,0,0, + 1184,1186,5,116,0,0,1185,1170,1,0,0,0,1185,1175,1,0,0,0,1185,1180, + 1,0,0,0,1186,70,1,0,0,0,1187,1188,5,82,0,0,1188,1189,5,69,0,0,1189, + 1190,5,77,0,0,1190,1191,5,79,0,0,1191,1192,5,86,0,0,1192,1193,5, + 65,0,0,1193,1194,5,66,0,0,1194,1195,5,76,0,0,1195,1215,5,69,0,0, + 1196,1197,5,82,0,0,1197,1198,5,101,0,0,1198,1199,5,109,0,0,1199, + 1200,5,111,0,0,1200,1201,5,118,0,0,1201,1202,5,97,0,0,1202,1203, + 5,98,0,0,1203,1204,5,101,0,0,1204,1215,5,108,0,0,1205,1206,5,114, + 0,0,1206,1207,5,101,0,0,1207,1208,5,109,0,0,1208,1209,5,111,0,0, + 1209,1210,5,118,0,0,1210,1211,5,97,0,0,1211,1212,5,98,0,0,1212,1213, + 5,108,0,0,1213,1215,5,101,0,0,1214,1187,1,0,0,0,1214,1196,1,0,0, + 0,1214,1205,1,0,0,0,1215,72,1,0,0,0,1216,1217,5,67,0,0,1217,1218, + 5,80,0,0,1218,1223,5,85,0,0,1219,1220,5,99,0,0,1220,1221,5,112,0, + 0,1221,1223,5,117,0,0,1222,1216,1,0,0,0,1222,1219,1,0,0,0,1223,74, + 1,0,0,0,1224,1225,5,78,0,0,1225,1226,5,79,0,0,1226,1227,5,65,0,0, + 1227,1228,5,67,0,0,1228,1245,5,67,0,0,1229,1230,5,78,0,0,1230,1231, + 5,111,0,0,1231,1232,5,65,0,0,1232,1233,5,67,0,0,1233,1245,5,67,0, + 0,1234,1235,5,78,0,0,1235,1236,5,111,0,0,1236,1237,5,65,0,0,1237, + 1238,5,99,0,0,1238,1245,5,99,0,0,1239,1240,5,110,0,0,1240,1241,5, + 111,0,0,1241,1242,5,97,0,0,1242,1243,5,99,0,0,1243,1245,5,99,0,0, + 1244,1224,1,0,0,0,1244,1229,1,0,0,0,1244,1234,1,0,0,0,1244,1239, + 1,0,0,0,1245,76,1,0,0,0,1246,1247,5,68,0,0,1247,1248,5,69,0,0,1248, + 1249,5,80,0,0,1249,1250,5,69,0,0,1250,1251,5,78,0,0,1251,1252,5, + 68,0,0,1252,1253,5,69,0,0,1253,1254,5,78,0,0,1254,1255,5,67,0,0, + 1255,1277,5,89,0,0,1256,1257,5,68,0,0,1257,1258,5,101,0,0,1258,1259, + 5,112,0,0,1259,1260,5,101,0,0,1260,1261,5,110,0,0,1261,1262,5,100, + 0,0,1262,1263,5,101,0,0,1263,1264,5,110,0,0,1264,1265,5,99,0,0,1265, + 1277,5,121,0,0,1266,1267,5,100,0,0,1267,1268,5,101,0,0,1268,1269, + 5,112,0,0,1269,1270,5,101,0,0,1270,1271,5,110,0,0,1271,1272,5,100, + 0,0,1272,1273,5,101,0,0,1273,1274,5,110,0,0,1274,1275,5,99,0,0,1275, + 1277,5,121,0,0,1276,1246,1,0,0,0,1276,1256,1,0,0,0,1276,1266,1,0, + 0,0,1277,78,1,0,0,0,1278,1279,5,83,0,0,1279,1280,5,72,0,0,1280,1281, + 5,69,0,0,1281,1282,5,76,0,0,1282,1294,5,76,0,0,1283,1284,5,83,0, + 0,1284,1285,5,104,0,0,1285,1286,5,101,0,0,1286,1287,5,108,0,0,1287, + 1294,5,108,0,0,1288,1289,5,115,0,0,1289,1290,5,104,0,0,1290,1291, + 5,101,0,0,1291,1292,5,108,0,0,1292,1294,5,108,0,0,1293,1278,1,0, + 0,0,1293,1283,1,0,0,0,1293,1288,1,0,0,0,1294,80,1,0,0,0,1295,1296, + 5,83,0,0,1296,1297,5,69,0,0,1297,1298,5,65,0,0,1298,1299,5,82,0, + 0,1299,1300,5,67,0,0,1300,1314,5,72,0,0,1301,1302,5,83,0,0,1302, + 1303,5,101,0,0,1303,1304,5,97,0,0,1304,1305,5,114,0,0,1305,1306, + 5,99,0,0,1306,1314,5,104,0,0,1307,1308,5,115,0,0,1308,1309,5,101, + 0,0,1309,1310,5,97,0,0,1310,1311,5,114,0,0,1311,1312,5,99,0,0,1312, + 1314,5,104,0,0,1313,1295,1,0,0,0,1313,1301,1,0,0,0,1313,1307,1,0, + 0,0,1314,82,1,0,0,0,1315,1316,5,77,0,0,1316,1317,5,69,0,0,1317,1318, + 5,84,0,0,1318,1319,5,65,0,0,1319,1320,5,68,0,0,1320,1321,5,65,0, + 0,1321,1322,5,84,0,0,1322,1340,5,65,0,0,1323,1324,5,77,0,0,1324, + 1325,5,101,0,0,1325,1326,5,116,0,0,1326,1327,5,97,0,0,1327,1328, + 5,68,0,0,1328,1329,5,97,0,0,1329,1330,5,116,0,0,1330,1340,5,97,0, + 0,1331,1332,5,109,0,0,1332,1333,5,101,0,0,1333,1334,5,116,0,0,1334, + 1335,5,97,0,0,1335,1336,5,100,0,0,1336,1337,5,97,0,0,1337,1338,5, + 116,0,0,1338,1340,5,97,0,0,1339,1315,1,0,0,0,1339,1323,1,0,0,0,1339, + 1331,1,0,0,0,1340,84,1,0,0,0,1341,1342,5,115,0,0,1342,1343,5,116, + 0,0,1343,1344,5,114,0,0,1344,1345,5,105,0,0,1345,1346,5,110,0,0, + 1346,1347,5,103,0,0,1347,86,1,0,0,0,1348,1349,5,118,0,0,1349,1350, + 5,101,0,0,1350,1351,5,99,0,0,1351,1352,5,116,0,0,1352,1353,5,111, + 0,0,1353,1354,5,114,0,0,1354,88,1,0,0,0,1355,1356,5,115,0,0,1356, + 1357,5,121,0,0,1357,1358,5,109,0,0,1358,1359,5,98,0,0,1359,1360, + 5,111,0,0,1360,1361,5,108,0,0,1361,90,1,0,0,0,1362,1363,5,37,0,0, + 1363,1364,5,123,0,0,1364,1368,1,0,0,0,1365,1367,9,0,0,0,1366,1365, + 1,0,0,0,1367,1370,1,0,0,0,1368,1369,1,0,0,0,1368,1366,1,0,0,0,1369, + 1371,1,0,0,0,1370,1368,1,0,0,0,1371,1372,5,37,0,0,1372,1373,5,125, + 0,0,1373,92,1,0,0,0,1374,1375,5,37,0,0,1375,1376,5,105,0,0,1376, + 1377,5,110,0,0,1377,1378,5,99,0,0,1378,1379,5,108,0,0,1379,1380, + 5,117,0,0,1380,1381,5,100,0,0,1381,1382,5,101,0,0,1382,94,1,0,0, + 0,1383,1384,5,78,0,0,1384,1385,5,85,0,0,1385,1386,5,76,0,0,1386, + 1387,5,76,0,0,1387,96,1,0,0,0,1388,1390,3,369,184,0,1389,1391,3, + 385,192,0,1390,1389,1,0,0,0,1390,1391,1,0,0,0,1391,1405,1,0,0,0, + 1392,1394,3,371,185,0,1393,1395,3,385,192,0,1394,1393,1,0,0,0,1394, + 1395,1,0,0,0,1395,1405,1,0,0,0,1396,1398,3,373,186,0,1397,1399,3, + 385,192,0,1398,1397,1,0,0,0,1398,1399,1,0,0,0,1399,1405,1,0,0,0, + 1400,1402,3,375,187,0,1401,1403,3,385,192,0,1402,1401,1,0,0,0,1402, + 1403,1,0,0,0,1403,1405,1,0,0,0,1404,1388,1,0,0,0,1404,1392,1,0,0, + 0,1404,1396,1,0,0,0,1404,1400,1,0,0,0,1405,98,1,0,0,0,1406,1408, + 7,0,0,0,1407,1406,1,0,0,0,1407,1408,1,0,0,0,1408,1409,1,0,0,0,1409, + 1411,5,39,0,0,1410,1412,3,393,196,0,1411,1410,1,0,0,0,1412,1413, + 1,0,0,0,1413,1411,1,0,0,0,1413,1414,1,0,0,0,1414,1415,1,0,0,0,1415, + 1416,5,39,0,0,1416,100,1,0,0,0,1417,1419,3,403,201,0,1418,1420,3, + 405,202,0,1419,1418,1,0,0,0,1419,1420,1,0,0,0,1420,1422,1,0,0,0, + 1421,1423,3,411,205,0,1422,1421,1,0,0,0,1422,1423,1,0,0,0,1423,1430, + 1,0,0,0,1424,1425,3,409,204,0,1425,1427,3,405,202,0,1426,1428,3, + 411,205,0,1427,1426,1,0,0,0,1427,1428,1,0,0,0,1428,1430,1,0,0,0, + 1429,1417,1,0,0,0,1429,1424,1,0,0,0,1430,102,1,0,0,0,1431,1433,3, + 413,206,0,1432,1431,1,0,0,0,1432,1433,1,0,0,0,1433,1443,1,0,0,0, + 1434,1444,3,417,208,0,1435,1439,5,34,0,0,1436,1438,3,415,207,0,1437, + 1436,1,0,0,0,1438,1441,1,0,0,0,1439,1437,1,0,0,0,1439,1440,1,0,0, + 0,1440,1442,1,0,0,0,1441,1439,1,0,0,0,1442,1444,5,34,0,0,1443,1434, + 1,0,0,0,1443,1435,1,0,0,0,1444,104,1,0,0,0,1445,1448,3,169,84,0, + 1446,1448,3,237,118,0,1447,1445,1,0,0,0,1447,1446,1,0,0,0,1448,106, + 1,0,0,0,1449,1450,3,197,98,0,1450,108,1,0,0,0,1451,1456,3,419,209, + 0,1452,1456,3,421,210,0,1453,1456,3,423,211,0,1454,1456,3,425,212, + 0,1455,1451,1,0,0,0,1455,1452,1,0,0,0,1455,1453,1,0,0,0,1455,1454, + 1,0,0,0,1456,110,1,0,0,0,1457,1469,5,35,0,0,1458,1460,8,1,0,0,1459, + 1458,1,0,0,0,1460,1463,1,0,0,0,1461,1462,1,0,0,0,1461,1459,1,0,0, + 0,1462,1464,1,0,0,0,1463,1461,1,0,0,0,1464,1466,5,92,0,0,1465,1467, + 5,13,0,0,1466,1465,1,0,0,0,1466,1467,1,0,0,0,1467,1468,1,0,0,0,1468, + 1470,5,10,0,0,1469,1461,1,0,0,0,1470,1471,1,0,0,0,1471,1469,1,0, + 0,0,1471,1472,1,0,0,0,1472,1474,1,0,0,0,1473,1475,8,1,0,0,1474,1473, + 1,0,0,0,1475,1476,1,0,0,0,1476,1474,1,0,0,0,1476,1477,1,0,0,0,1477, + 1478,1,0,0,0,1478,1479,6,55,0,0,1479,112,1,0,0,0,1480,1484,5,35, + 0,0,1481,1483,8,1,0,0,1482,1481,1,0,0,0,1483,1486,1,0,0,0,1484,1482, + 1,0,0,0,1484,1485,1,0,0,0,1485,1487,1,0,0,0,1486,1484,1,0,0,0,1487, + 1488,6,56,0,0,1488,114,1,0,0,0,1489,1490,5,97,0,0,1490,1491,5,108, + 0,0,1491,1492,5,105,0,0,1492,1493,5,103,0,0,1493,1494,5,110,0,0, + 1494,1495,5,97,0,0,1495,1496,5,115,0,0,1496,116,1,0,0,0,1497,1498, + 5,97,0,0,1498,1499,5,108,0,0,1499,1500,5,105,0,0,1500,1501,5,103, + 0,0,1501,1502,5,110,0,0,1502,1503,5,111,0,0,1503,1504,5,102,0,0, + 1504,118,1,0,0,0,1505,1506,5,97,0,0,1506,1507,5,115,0,0,1507,1508, + 5,109,0,0,1508,120,1,0,0,0,1509,1510,5,97,0,0,1510,1511,5,117,0, + 0,1511,1512,5,116,0,0,1512,1513,5,111,0,0,1513,122,1,0,0,0,1514, + 1515,5,98,0,0,1515,1516,5,111,0,0,1516,1517,5,111,0,0,1517,1518, + 5,108,0,0,1518,124,1,0,0,0,1519,1520,5,98,0,0,1520,1521,5,114,0, + 0,1521,1522,5,101,0,0,1522,1523,5,97,0,0,1523,1524,5,107,0,0,1524, + 126,1,0,0,0,1525,1526,5,99,0,0,1526,1527,5,97,0,0,1527,1528,5,115, + 0,0,1528,1529,5,101,0,0,1529,128,1,0,0,0,1530,1531,5,99,0,0,1531, + 1532,5,97,0,0,1532,1533,5,116,0,0,1533,1534,5,99,0,0,1534,1535,5, + 104,0,0,1535,130,1,0,0,0,1536,1537,5,99,0,0,1537,1538,5,104,0,0, + 1538,1539,5,97,0,0,1539,1540,5,114,0,0,1540,132,1,0,0,0,1541,1542, + 5,99,0,0,1542,1543,5,104,0,0,1543,1544,5,97,0,0,1544,1545,5,114, + 0,0,1545,1546,5,49,0,0,1546,1547,5,54,0,0,1547,1548,5,95,0,0,1548, + 1549,5,116,0,0,1549,134,1,0,0,0,1550,1551,5,99,0,0,1551,1552,5,104, + 0,0,1552,1553,5,97,0,0,1553,1554,5,114,0,0,1554,1555,5,51,0,0,1555, + 1556,5,50,0,0,1556,1557,5,95,0,0,1557,1558,5,116,0,0,1558,136,1, + 0,0,0,1559,1560,5,99,0,0,1560,1561,5,108,0,0,1561,1562,5,97,0,0, + 1562,1563,5,115,0,0,1563,1564,5,115,0,0,1564,138,1,0,0,0,1565,1566, + 5,99,0,0,1566,1567,5,111,0,0,1567,1568,5,110,0,0,1568,1569,5,115, + 0,0,1569,1570,5,116,0,0,1570,140,1,0,0,0,1571,1572,5,99,0,0,1572, + 1573,5,111,0,0,1573,1574,5,110,0,0,1574,1575,5,115,0,0,1575,1576, + 5,116,0,0,1576,1577,5,101,0,0,1577,1578,5,120,0,0,1578,1579,5,112, + 0,0,1579,1580,5,114,0,0,1580,142,1,0,0,0,1581,1582,5,99,0,0,1582, + 1583,5,111,0,0,1583,1584,5,110,0,0,1584,1585,5,115,0,0,1585,1586, + 5,116,0,0,1586,1587,5,95,0,0,1587,1588,5,99,0,0,1588,1589,5,97,0, + 0,1589,1590,5,115,0,0,1590,1591,5,116,0,0,1591,144,1,0,0,0,1592, + 1593,5,99,0,0,1593,1594,5,111,0,0,1594,1595,5,110,0,0,1595,1596, + 5,116,0,0,1596,1597,5,105,0,0,1597,1598,5,110,0,0,1598,1599,5,117, + 0,0,1599,1600,5,101,0,0,1600,146,1,0,0,0,1601,1602,5,100,0,0,1602, + 1603,5,101,0,0,1603,1604,5,99,0,0,1604,1605,5,108,0,0,1605,1606, + 5,116,0,0,1606,1607,5,121,0,0,1607,1608,5,112,0,0,1608,1609,5,101, + 0,0,1609,148,1,0,0,0,1610,1611,5,100,0,0,1611,1612,5,101,0,0,1612, + 1613,5,102,0,0,1613,1614,5,97,0,0,1614,1615,5,117,0,0,1615,1616, + 5,108,0,0,1616,1617,5,116,0,0,1617,150,1,0,0,0,1618,1619,5,100,0, + 0,1619,1620,5,101,0,0,1620,1621,5,108,0,0,1621,1622,5,101,0,0,1622, + 1623,5,116,0,0,1623,1624,5,101,0,0,1624,152,1,0,0,0,1625,1626,5, + 100,0,0,1626,1627,5,111,0,0,1627,154,1,0,0,0,1628,1629,5,100,0,0, + 1629,1630,5,111,0,0,1630,1631,5,117,0,0,1631,1632,5,98,0,0,1632, + 1633,5,108,0,0,1633,1634,5,101,0,0,1634,156,1,0,0,0,1635,1636,5, + 100,0,0,1636,1637,5,121,0,0,1637,1638,5,110,0,0,1638,1639,5,97,0, + 0,1639,1640,5,109,0,0,1640,1641,5,105,0,0,1641,1642,5,99,0,0,1642, + 1643,5,95,0,0,1643,1644,5,99,0,0,1644,1645,5,97,0,0,1645,1646,5, + 115,0,0,1646,1647,5,116,0,0,1647,158,1,0,0,0,1648,1649,5,101,0,0, + 1649,1650,5,108,0,0,1650,1651,5,115,0,0,1651,1652,5,101,0,0,1652, + 160,1,0,0,0,1653,1654,5,101,0,0,1654,1655,5,110,0,0,1655,1656,5, + 117,0,0,1656,1657,5,109,0,0,1657,162,1,0,0,0,1658,1659,5,101,0,0, + 1659,1660,5,120,0,0,1660,1661,5,112,0,0,1661,1662,5,108,0,0,1662, + 1663,5,105,0,0,1663,1664,5,99,0,0,1664,1665,5,105,0,0,1665,1666, + 5,116,0,0,1666,164,1,0,0,0,1667,1668,5,101,0,0,1668,1669,5,120,0, + 0,1669,1670,5,112,0,0,1670,1671,5,111,0,0,1671,1672,5,114,0,0,1672, + 1673,5,116,0,0,1673,166,1,0,0,0,1674,1675,5,101,0,0,1675,1676,5, + 120,0,0,1676,1677,5,116,0,0,1677,1678,5,101,0,0,1678,1679,5,114, + 0,0,1679,1680,5,110,0,0,1680,168,1,0,0,0,1681,1682,5,102,0,0,1682, + 1683,5,97,0,0,1683,1684,5,108,0,0,1684,1685,5,115,0,0,1685,1686, + 5,101,0,0,1686,170,1,0,0,0,1687,1688,5,102,0,0,1688,1689,5,105,0, + 0,1689,1690,5,110,0,0,1690,1691,5,97,0,0,1691,1692,5,108,0,0,1692, + 172,1,0,0,0,1693,1694,5,102,0,0,1694,1695,5,108,0,0,1695,1696,5, + 111,0,0,1696,1697,5,97,0,0,1697,1698,5,116,0,0,1698,174,1,0,0,0, + 1699,1700,5,102,0,0,1700,1701,5,111,0,0,1701,1702,5,114,0,0,1702, + 176,1,0,0,0,1703,1704,5,102,0,0,1704,1705,5,114,0,0,1705,1706,5, + 105,0,0,1706,1707,5,101,0,0,1707,1708,5,110,0,0,1708,1709,5,100, + 0,0,1709,178,1,0,0,0,1710,1711,5,103,0,0,1711,1712,5,111,0,0,1712, + 1713,5,116,0,0,1713,1714,5,111,0,0,1714,180,1,0,0,0,1715,1716,5, + 105,0,0,1716,1717,5,102,0,0,1717,182,1,0,0,0,1718,1719,5,105,0,0, + 1719,1720,5,110,0,0,1720,1721,5,108,0,0,1721,1722,5,105,0,0,1722, + 1723,5,110,0,0,1723,1724,5,101,0,0,1724,184,1,0,0,0,1725,1726,5, + 105,0,0,1726,1727,5,110,0,0,1727,1728,5,116,0,0,1728,186,1,0,0,0, + 1729,1730,5,108,0,0,1730,1731,5,111,0,0,1731,1732,5,110,0,0,1732, + 1733,5,103,0,0,1733,188,1,0,0,0,1734,1735,5,109,0,0,1735,1736,5, + 117,0,0,1736,1737,5,116,0,0,1737,1738,5,97,0,0,1738,1739,5,98,0, + 0,1739,1740,5,108,0,0,1740,1741,5,101,0,0,1741,190,1,0,0,0,1742, + 1743,5,110,0,0,1743,1744,5,97,0,0,1744,1745,5,109,0,0,1745,1746, + 5,101,0,0,1746,1747,5,115,0,0,1747,1748,5,112,0,0,1748,1749,5,97, + 0,0,1749,1750,5,99,0,0,1750,1751,5,101,0,0,1751,192,1,0,0,0,1752, + 1753,5,110,0,0,1753,1754,5,101,0,0,1754,1755,5,119,0,0,1755,194, + 1,0,0,0,1756,1757,5,110,0,0,1757,1758,5,111,0,0,1758,1759,5,101, + 0,0,1759,1760,5,120,0,0,1760,1761,5,99,0,0,1761,1762,5,101,0,0,1762, + 1763,5,112,0,0,1763,1764,5,116,0,0,1764,196,1,0,0,0,1765,1766,5, + 110,0,0,1766,1767,5,117,0,0,1767,1768,5,108,0,0,1768,1769,5,108, + 0,0,1769,1770,5,112,0,0,1770,1771,5,116,0,0,1771,1772,5,114,0,0, + 1772,198,1,0,0,0,1773,1774,5,111,0,0,1774,1775,5,112,0,0,1775,1776, + 5,101,0,0,1776,1777,5,114,0,0,1777,1778,5,97,0,0,1778,1779,5,116, + 0,0,1779,1780,5,111,0,0,1780,1781,5,114,0,0,1781,200,1,0,0,0,1782, + 1783,5,111,0,0,1783,1784,5,118,0,0,1784,1785,5,101,0,0,1785,1786, + 5,114,0,0,1786,1787,5,114,0,0,1787,1788,5,105,0,0,1788,1789,5,100, + 0,0,1789,1790,5,101,0,0,1790,202,1,0,0,0,1791,1792,5,112,0,0,1792, + 1793,5,114,0,0,1793,1794,5,111,0,0,1794,1795,5,116,0,0,1795,1796, + 5,101,0,0,1796,1797,5,99,0,0,1797,1798,5,116,0,0,1798,1799,5,101, + 0,0,1799,1800,5,100,0,0,1800,204,1,0,0,0,1801,1802,5,112,0,0,1802, + 1803,5,117,0,0,1803,1804,5,98,0,0,1804,1805,5,108,0,0,1805,1806, + 5,105,0,0,1806,1807,5,99,0,0,1807,206,1,0,0,0,1808,1809,5,114,0, + 0,1809,1810,5,101,0,0,1810,1811,5,103,0,0,1811,1812,5,105,0,0,1812, + 1813,5,115,0,0,1813,1814,5,116,0,0,1814,1815,5,101,0,0,1815,1816, + 5,114,0,0,1816,208,1,0,0,0,1817,1818,5,114,0,0,1818,1819,5,101,0, + 0,1819,1820,5,105,0,0,1820,1821,5,110,0,0,1821,1822,5,116,0,0,1822, + 1823,5,101,0,0,1823,1824,5,114,0,0,1824,1825,5,112,0,0,1825,1826, + 5,114,0,0,1826,1827,5,101,0,0,1827,1828,5,116,0,0,1828,1829,5,95, + 0,0,1829,1830,5,99,0,0,1830,1831,5,97,0,0,1831,1832,5,115,0,0,1832, + 1833,5,116,0,0,1833,210,1,0,0,0,1834,1835,5,114,0,0,1835,1836,5, + 101,0,0,1836,1837,5,116,0,0,1837,1838,5,117,0,0,1838,1839,5,114, + 0,0,1839,1840,5,110,0,0,1840,212,1,0,0,0,1841,1842,5,115,0,0,1842, + 1843,5,104,0,0,1843,1844,5,111,0,0,1844,1845,5,114,0,0,1845,1846, + 5,116,0,0,1846,214,1,0,0,0,1847,1848,5,115,0,0,1848,1849,5,105,0, + 0,1849,1850,5,103,0,0,1850,1851,5,110,0,0,1851,1852,5,101,0,0,1852, + 1853,5,100,0,0,1853,216,1,0,0,0,1854,1855,5,115,0,0,1855,1856,5, + 105,0,0,1856,1857,5,122,0,0,1857,1858,5,101,0,0,1858,1859,5,111, + 0,0,1859,1860,5,102,0,0,1860,218,1,0,0,0,1861,1862,5,115,0,0,1862, + 1863,5,116,0,0,1863,1864,5,97,0,0,1864,1865,5,116,0,0,1865,1866, + 5,105,0,0,1866,1867,5,99,0,0,1867,220,1,0,0,0,1868,1869,5,115,0, + 0,1869,1870,5,116,0,0,1870,1871,5,97,0,0,1871,1872,5,116,0,0,1872, + 1873,5,105,0,0,1873,1874,5,99,0,0,1874,1875,5,95,0,0,1875,1876,5, + 97,0,0,1876,1877,5,115,0,0,1877,1878,5,115,0,0,1878,1879,5,101,0, + 0,1879,1880,5,114,0,0,1880,1881,5,116,0,0,1881,222,1,0,0,0,1882, + 1883,5,115,0,0,1883,1884,5,116,0,0,1884,1885,5,97,0,0,1885,1886, + 5,116,0,0,1886,1887,5,105,0,0,1887,1888,5,99,0,0,1888,1889,5,95, + 0,0,1889,1890,5,99,0,0,1890,1891,5,97,0,0,1891,1892,5,115,0,0,1892, + 1893,5,116,0,0,1893,224,1,0,0,0,1894,1895,5,115,0,0,1895,1896,5, + 116,0,0,1896,1897,5,114,0,0,1897,1898,5,117,0,0,1898,1899,5,99,0, + 0,1899,1900,5,116,0,0,1900,226,1,0,0,0,1901,1902,5,115,0,0,1902, + 1903,5,119,0,0,1903,1904,5,105,0,0,1904,1905,5,116,0,0,1905,1906, + 5,99,0,0,1906,1907,5,104,0,0,1907,228,1,0,0,0,1908,1909,5,116,0, + 0,1909,1910,5,101,0,0,1910,1911,5,109,0,0,1911,1912,5,112,0,0,1912, + 1913,5,108,0,0,1913,1914,5,97,0,0,1914,1915,5,116,0,0,1915,1916, + 5,101,0,0,1916,230,1,0,0,0,1917,1918,5,116,0,0,1918,1919,5,104,0, + 0,1919,1920,5,105,0,0,1920,1921,5,115,0,0,1921,232,1,0,0,0,1922, + 1923,5,116,0,0,1923,1924,5,104,0,0,1924,1925,5,114,0,0,1925,1926, + 5,101,0,0,1926,1927,5,97,0,0,1927,1928,5,100,0,0,1928,1929,5,95, + 0,0,1929,1930,5,108,0,0,1930,1931,5,111,0,0,1931,1932,5,99,0,0,1932, + 1933,5,97,0,0,1933,1934,5,108,0,0,1934,234,1,0,0,0,1935,1936,5,116, + 0,0,1936,1937,5,104,0,0,1937,1938,5,114,0,0,1938,1939,5,111,0,0, + 1939,1940,5,119,0,0,1940,236,1,0,0,0,1941,1942,5,116,0,0,1942,1943, + 5,114,0,0,1943,1944,5,117,0,0,1944,1945,5,101,0,0,1945,238,1,0,0, + 0,1946,1947,5,116,0,0,1947,1948,5,114,0,0,1948,1949,5,121,0,0,1949, + 240,1,0,0,0,1950,1951,5,116,0,0,1951,1952,5,121,0,0,1952,1953,5, + 112,0,0,1953,1954,5,101,0,0,1954,1955,5,100,0,0,1955,1956,5,101, + 0,0,1956,1957,5,102,0,0,1957,242,1,0,0,0,1958,1959,5,116,0,0,1959, + 1960,5,121,0,0,1960,1961,5,112,0,0,1961,1962,5,101,0,0,1962,1963, + 5,105,0,0,1963,1964,5,100,0,0,1964,244,1,0,0,0,1965,1966,5,116,0, + 0,1966,1967,5,121,0,0,1967,1968,5,112,0,0,1968,1969,5,101,0,0,1969, + 1970,5,110,0,0,1970,1971,5,97,0,0,1971,1972,5,109,0,0,1972,1973, + 5,101,0,0,1973,246,1,0,0,0,1974,1975,5,117,0,0,1975,1976,5,110,0, + 0,1976,1977,5,105,0,0,1977,1978,5,111,0,0,1978,1979,5,110,0,0,1979, + 248,1,0,0,0,1980,1981,5,117,0,0,1981,1982,5,110,0,0,1982,1983,5, + 115,0,0,1983,1984,5,105,0,0,1984,1985,5,103,0,0,1985,1986,5,110, + 0,0,1986,1987,5,101,0,0,1987,1988,5,100,0,0,1988,250,1,0,0,0,1989, + 1990,5,117,0,0,1990,1991,5,115,0,0,1991,1992,5,105,0,0,1992,1993, + 5,110,0,0,1993,1994,5,103,0,0,1994,252,1,0,0,0,1995,1996,5,118,0, + 0,1996,1997,5,105,0,0,1997,1998,5,114,0,0,1998,1999,5,116,0,0,1999, + 2000,5,117,0,0,2000,2001,5,97,0,0,2001,2002,5,108,0,0,2002,254,1, + 0,0,0,2003,2004,5,118,0,0,2004,2005,5,111,0,0,2005,2006,5,105,0, + 0,2006,2007,5,100,0,0,2007,256,1,0,0,0,2008,2009,5,118,0,0,2009, + 2010,5,111,0,0,2010,2011,5,108,0,0,2011,2012,5,97,0,0,2012,2013, + 5,116,0,0,2013,2014,5,105,0,0,2014,2015,5,108,0,0,2015,2016,5,101, + 0,0,2016,258,1,0,0,0,2017,2018,5,119,0,0,2018,2019,5,99,0,0,2019, + 2020,5,104,0,0,2020,2021,5,97,0,0,2021,2022,5,114,0,0,2022,2023, + 5,95,0,0,2023,2024,5,116,0,0,2024,260,1,0,0,0,2025,2026,5,119,0, + 0,2026,2027,5,104,0,0,2027,2028,5,105,0,0,2028,2029,5,108,0,0,2029, + 2030,5,101,0,0,2030,262,1,0,0,0,2031,2032,5,40,0,0,2032,264,1,0, + 0,0,2033,2034,5,41,0,0,2034,266,1,0,0,0,2035,2036,5,91,0,0,2036, + 268,1,0,0,0,2037,2038,5,93,0,0,2038,270,1,0,0,0,2039,2040,5,123, + 0,0,2040,272,1,0,0,0,2041,2042,5,125,0,0,2042,274,1,0,0,0,2043,2044, + 5,43,0,0,2044,276,1,0,0,0,2045,2046,5,45,0,0,2046,278,1,0,0,0,2047, + 2048,5,42,0,0,2048,280,1,0,0,0,2049,2050,5,47,0,0,2050,282,1,0,0, + 0,2051,2052,5,37,0,0,2052,284,1,0,0,0,2053,2054,5,94,0,0,2054,286, + 1,0,0,0,2055,2056,5,38,0,0,2056,288,1,0,0,0,2057,2058,5,124,0,0, + 2058,290,1,0,0,0,2059,2060,5,126,0,0,2060,292,1,0,0,0,2061,2066, + 5,33,0,0,2062,2063,5,110,0,0,2063,2064,5,111,0,0,2064,2066,5,116, + 0,0,2065,2061,1,0,0,0,2065,2062,1,0,0,0,2066,294,1,0,0,0,2067,2068, + 5,61,0,0,2068,296,1,0,0,0,2069,2070,5,60,0,0,2070,298,1,0,0,0,2071, + 2072,5,62,0,0,2072,300,1,0,0,0,2073,2074,5,43,0,0,2074,2075,5,61, + 0,0,2075,302,1,0,0,0,2076,2077,5,45,0,0,2077,2078,5,61,0,0,2078, + 304,1,0,0,0,2079,2080,5,42,0,0,2080,2081,5,61,0,0,2081,306,1,0,0, + 0,2082,2083,5,47,0,0,2083,2084,5,61,0,0,2084,308,1,0,0,0,2085,2086, + 5,37,0,0,2086,2087,5,61,0,0,2087,310,1,0,0,0,2088,2089,5,94,0,0, + 2089,2090,5,61,0,0,2090,312,1,0,0,0,2091,2092,5,38,0,0,2092,2093, + 5,61,0,0,2093,314,1,0,0,0,2094,2095,5,124,0,0,2095,2096,5,61,0,0, + 2096,316,1,0,0,0,2097,2098,5,60,0,0,2098,2099,5,60,0,0,2099,2100, + 5,61,0,0,2100,318,1,0,0,0,2101,2102,5,62,0,0,2102,2103,5,62,0,0, + 2103,2104,5,61,0,0,2104,320,1,0,0,0,2105,2106,5,61,0,0,2106,2107, + 5,61,0,0,2107,322,1,0,0,0,2108,2109,5,33,0,0,2109,2110,5,61,0,0, + 2110,324,1,0,0,0,2111,2112,5,60,0,0,2112,2113,5,61,0,0,2113,326, + 1,0,0,0,2114,2115,5,62,0,0,2115,2116,5,61,0,0,2116,328,1,0,0,0,2117, + 2118,5,38,0,0,2118,2123,5,38,0,0,2119,2120,5,97,0,0,2120,2121,5, + 110,0,0,2121,2123,5,100,0,0,2122,2117,1,0,0,0,2122,2119,1,0,0,0, + 2123,330,1,0,0,0,2124,2125,5,124,0,0,2125,2129,5,124,0,0,2126,2127, + 5,111,0,0,2127,2129,5,114,0,0,2128,2124,1,0,0,0,2128,2126,1,0,0, + 0,2129,332,1,0,0,0,2130,2131,5,43,0,0,2131,2132,5,43,0,0,2132,334, + 1,0,0,0,2133,2134,5,45,0,0,2134,2135,5,45,0,0,2135,336,1,0,0,0,2136, + 2137,5,44,0,0,2137,338,1,0,0,0,2138,2139,5,45,0,0,2139,2140,5,62, + 0,0,2140,2141,5,42,0,0,2141,340,1,0,0,0,2142,2143,5,45,0,0,2143, + 2144,5,62,0,0,2144,342,1,0,0,0,2145,2146,5,63,0,0,2146,344,1,0,0, + 0,2147,2148,5,58,0,0,2148,346,1,0,0,0,2149,2150,5,58,0,0,2150,2151, + 5,58,0,0,2151,348,1,0,0,0,2152,2153,5,59,0,0,2153,350,1,0,0,0,2154, + 2155,5,46,0,0,2155,352,1,0,0,0,2156,2157,5,46,0,0,2157,2158,5,42, + 0,0,2158,354,1,0,0,0,2159,2160,5,46,0,0,2160,2161,5,46,0,0,2161, + 2162,5,46,0,0,2162,356,1,0,0,0,2163,2164,3,381,190,0,2164,2165,3, + 381,190,0,2165,2166,3,381,190,0,2166,2167,3,381,190,0,2167,358,1, + 0,0,0,2168,2169,5,92,0,0,2169,2170,5,117,0,0,2170,2171,1,0,0,0,2171, + 2179,3,357,178,0,2172,2173,5,92,0,0,2173,2174,5,85,0,0,2174,2175, + 1,0,0,0,2175,2176,3,357,178,0,2176,2177,3,357,178,0,2177,2179,1, + 0,0,0,2178,2168,1,0,0,0,2178,2172,1,0,0,0,2179,360,1,0,0,0,2180, + 2185,3,363,181,0,2181,2184,3,363,181,0,2182,2184,3,367,183,0,2183, + 2181,1,0,0,0,2183,2182,1,0,0,0,2184,2187,1,0,0,0,2185,2183,1,0,0, + 0,2185,2186,1,0,0,0,2186,362,1,0,0,0,2187,2185,1,0,0,0,2188,2191, + 3,365,182,0,2189,2191,3,359,179,0,2190,2188,1,0,0,0,2190,2189,1, + 0,0,0,2191,364,1,0,0,0,2192,2193,7,2,0,0,2193,366,1,0,0,0,2194,2195, + 7,3,0,0,2195,368,1,0,0,0,2196,2203,3,377,188,0,2197,2199,5,39,0, + 0,2198,2197,1,0,0,0,2198,2199,1,0,0,0,2199,2200,1,0,0,0,2200,2202, + 3,367,183,0,2201,2198,1,0,0,0,2202,2205,1,0,0,0,2203,2201,1,0,0, + 0,2203,2204,1,0,0,0,2204,370,1,0,0,0,2205,2203,1,0,0,0,2206,2213, + 5,48,0,0,2207,2209,5,39,0,0,2208,2207,1,0,0,0,2208,2209,1,0,0,0, + 2209,2210,1,0,0,0,2210,2212,3,379,189,0,2211,2208,1,0,0,0,2212,2215, + 1,0,0,0,2213,2211,1,0,0,0,2213,2214,1,0,0,0,2214,372,1,0,0,0,2215, + 2213,1,0,0,0,2216,2217,5,48,0,0,2217,2221,5,120,0,0,2218,2219,5, + 48,0,0,2219,2221,5,88,0,0,2220,2216,1,0,0,0,2220,2218,1,0,0,0,2221, + 2222,1,0,0,0,2222,2229,3,381,190,0,2223,2225,5,39,0,0,2224,2223, + 1,0,0,0,2224,2225,1,0,0,0,2225,2226,1,0,0,0,2226,2228,3,381,190, + 0,2227,2224,1,0,0,0,2228,2231,1,0,0,0,2229,2227,1,0,0,0,2229,2230, + 1,0,0,0,2230,374,1,0,0,0,2231,2229,1,0,0,0,2232,2233,5,48,0,0,2233, + 2237,5,98,0,0,2234,2235,5,48,0,0,2235,2237,5,66,0,0,2236,2232,1, + 0,0,0,2236,2234,1,0,0,0,2237,2238,1,0,0,0,2238,2245,3,383,191,0, + 2239,2241,5,39,0,0,2240,2239,1,0,0,0,2240,2241,1,0,0,0,2241,2242, + 1,0,0,0,2242,2244,3,383,191,0,2243,2240,1,0,0,0,2244,2247,1,0,0, + 0,2245,2243,1,0,0,0,2245,2246,1,0,0,0,2246,376,1,0,0,0,2247,2245, + 1,0,0,0,2248,2249,7,4,0,0,2249,378,1,0,0,0,2250,2251,7,5,0,0,2251, + 380,1,0,0,0,2252,2253,7,6,0,0,2253,382,1,0,0,0,2254,2255,7,7,0,0, + 2255,384,1,0,0,0,2256,2258,3,387,193,0,2257,2259,3,389,194,0,2258, + 2257,1,0,0,0,2258,2259,1,0,0,0,2259,2273,1,0,0,0,2260,2262,3,387, + 193,0,2261,2263,3,391,195,0,2262,2261,1,0,0,0,2262,2263,1,0,0,0, + 2263,2273,1,0,0,0,2264,2266,3,389,194,0,2265,2267,3,387,193,0,2266, + 2265,1,0,0,0,2266,2267,1,0,0,0,2267,2273,1,0,0,0,2268,2270,3,391, + 195,0,2269,2271,3,387,193,0,2270,2269,1,0,0,0,2270,2271,1,0,0,0, + 2271,2273,1,0,0,0,2272,2256,1,0,0,0,2272,2260,1,0,0,0,2272,2264, + 1,0,0,0,2272,2268,1,0,0,0,2273,386,1,0,0,0,2274,2275,7,8,0,0,2275, + 388,1,0,0,0,2276,2277,7,9,0,0,2277,390,1,0,0,0,2278,2279,5,108,0, + 0,2279,2283,5,108,0,0,2280,2281,5,76,0,0,2281,2283,5,76,0,0,2282, + 2278,1,0,0,0,2282,2280,1,0,0,0,2283,392,1,0,0,0,2284,2288,8,10,0, + 0,2285,2288,3,395,197,0,2286,2288,3,359,179,0,2287,2284,1,0,0,0, + 2287,2285,1,0,0,0,2287,2286,1,0,0,0,2288,394,1,0,0,0,2289,2293,3, + 397,198,0,2290,2293,3,399,199,0,2291,2293,3,401,200,0,2292,2289, + 1,0,0,0,2292,2290,1,0,0,0,2292,2291,1,0,0,0,2293,396,1,0,0,0,2294, + 2295,5,92,0,0,2295,2325,5,39,0,0,2296,2297,5,92,0,0,2297,2325,5, + 34,0,0,2298,2299,5,92,0,0,2299,2325,5,63,0,0,2300,2301,5,92,0,0, + 2301,2325,5,92,0,0,2302,2303,5,92,0,0,2303,2325,5,97,0,0,2304,2305, + 5,92,0,0,2305,2325,5,98,0,0,2306,2307,5,92,0,0,2307,2325,5,102,0, + 0,2308,2309,5,92,0,0,2309,2325,5,110,0,0,2310,2311,5,92,0,0,2311, + 2325,5,114,0,0,2312,2318,5,92,0,0,2313,2315,5,13,0,0,2314,2316,5, + 10,0,0,2315,2314,1,0,0,0,2315,2316,1,0,0,0,2316,2319,1,0,0,0,2317, + 2319,5,10,0,0,2318,2313,1,0,0,0,2318,2317,1,0,0,0,2319,2325,1,0, + 0,0,2320,2321,5,92,0,0,2321,2325,5,116,0,0,2322,2323,5,92,0,0,2323, + 2325,5,118,0,0,2324,2294,1,0,0,0,2324,2296,1,0,0,0,2324,2298,1,0, + 0,0,2324,2300,1,0,0,0,2324,2302,1,0,0,0,2324,2304,1,0,0,0,2324,2306, + 1,0,0,0,2324,2308,1,0,0,0,2324,2310,1,0,0,0,2324,2312,1,0,0,0,2324, + 2320,1,0,0,0,2324,2322,1,0,0,0,2325,398,1,0,0,0,2326,2327,5,92,0, + 0,2327,2338,3,379,189,0,2328,2329,5,92,0,0,2329,2330,3,379,189,0, + 2330,2331,3,379,189,0,2331,2338,1,0,0,0,2332,2333,5,92,0,0,2333, + 2334,3,379,189,0,2334,2335,3,379,189,0,2335,2336,3,379,189,0,2336, + 2338,1,0,0,0,2337,2326,1,0,0,0,2337,2328,1,0,0,0,2337,2332,1,0,0, + 0,2338,400,1,0,0,0,2339,2340,5,92,0,0,2340,2341,5,120,0,0,2341,2343, + 1,0,0,0,2342,2344,3,381,190,0,2343,2342,1,0,0,0,2344,2345,1,0,0, + 0,2345,2343,1,0,0,0,2345,2346,1,0,0,0,2346,402,1,0,0,0,2347,2349, + 3,409,204,0,2348,2347,1,0,0,0,2348,2349,1,0,0,0,2349,2350,1,0,0, + 0,2350,2351,5,46,0,0,2351,2356,3,409,204,0,2352,2353,3,409,204,0, + 2353,2354,5,46,0,0,2354,2356,1,0,0,0,2355,2348,1,0,0,0,2355,2352, + 1,0,0,0,2356,404,1,0,0,0,2357,2359,5,101,0,0,2358,2360,3,407,203, + 0,2359,2358,1,0,0,0,2359,2360,1,0,0,0,2360,2361,1,0,0,0,2361,2368, + 3,409,204,0,2362,2364,5,69,0,0,2363,2365,3,407,203,0,2364,2363,1, + 0,0,0,2364,2365,1,0,0,0,2365,2366,1,0,0,0,2366,2368,3,409,204,0, + 2367,2357,1,0,0,0,2367,2362,1,0,0,0,2368,406,1,0,0,0,2369,2370,7, + 11,0,0,2370,408,1,0,0,0,2371,2378,3,367,183,0,2372,2374,5,39,0,0, + 2373,2372,1,0,0,0,2373,2374,1,0,0,0,2374,2375,1,0,0,0,2375,2377, + 3,367,183,0,2376,2373,1,0,0,0,2377,2380,1,0,0,0,2378,2376,1,0,0, + 0,2378,2379,1,0,0,0,2379,410,1,0,0,0,2380,2378,1,0,0,0,2381,2382, + 7,12,0,0,2382,412,1,0,0,0,2383,2384,5,117,0,0,2384,2387,5,56,0,0, + 2385,2387,7,0,0,0,2386,2383,1,0,0,0,2386,2385,1,0,0,0,2387,414,1, + 0,0,0,2388,2392,8,13,0,0,2389,2392,3,395,197,0,2390,2392,3,359,179, + 0,2391,2388,1,0,0,0,2391,2389,1,0,0,0,2391,2390,1,0,0,0,2392,416, + 1,0,0,0,2393,2394,5,82,0,0,2394,2395,5,34,0,0,2395,2401,1,0,0,0, + 2396,2397,5,92,0,0,2397,2400,7,14,0,0,2398,2400,8,15,0,0,2399,2396, + 1,0,0,0,2399,2398,1,0,0,0,2400,2403,1,0,0,0,2401,2402,1,0,0,0,2401, + 2399,1,0,0,0,2402,2404,1,0,0,0,2403,2401,1,0,0,0,2404,2408,5,40, + 0,0,2405,2407,8,16,0,0,2406,2405,1,0,0,0,2407,2410,1,0,0,0,2408, + 2409,1,0,0,0,2408,2406,1,0,0,0,2409,2411,1,0,0,0,2410,2408,1,0,0, + 0,2411,2417,5,41,0,0,2412,2413,5,92,0,0,2413,2416,7,14,0,0,2414, + 2416,8,17,0,0,2415,2412,1,0,0,0,2415,2414,1,0,0,0,2416,2419,1,0, + 0,0,2417,2418,1,0,0,0,2417,2415,1,0,0,0,2418,2420,1,0,0,0,2419,2417, + 1,0,0,0,2420,2421,5,34,0,0,2421,418,1,0,0,0,2422,2423,3,369,184, + 0,2423,2424,3,427,213,0,2424,2435,1,0,0,0,2425,2426,3,371,185,0, + 2426,2427,3,427,213,0,2427,2435,1,0,0,0,2428,2429,3,373,186,0,2429, + 2430,3,427,213,0,2430,2435,1,0,0,0,2431,2432,3,375,187,0,2432,2433, + 3,427,213,0,2433,2435,1,0,0,0,2434,2422,1,0,0,0,2434,2425,1,0,0, + 0,2434,2428,1,0,0,0,2434,2431,1,0,0,0,2435,420,1,0,0,0,2436,2438, + 3,403,201,0,2437,2439,3,405,202,0,2438,2437,1,0,0,0,2438,2439,1, + 0,0,0,2439,2440,1,0,0,0,2440,2441,3,427,213,0,2441,2447,1,0,0,0, + 2442,2443,3,409,204,0,2443,2444,3,405,202,0,2444,2445,3,427,213, + 0,2445,2447,1,0,0,0,2446,2436,1,0,0,0,2446,2442,1,0,0,0,2447,422, + 1,0,0,0,2448,2449,3,103,51,0,2449,2450,3,427,213,0,2450,424,1,0, + 0,0,2451,2452,3,99,49,0,2452,2453,3,427,213,0,2453,426,1,0,0,0,2454, + 2455,3,361,180,0,2455,428,1,0,0,0,2456,2458,7,18,0,0,2457,2456,1, + 0,0,0,2458,2459,1,0,0,0,2459,2457,1,0,0,0,2459,2460,1,0,0,0,2460, + 2461,1,0,0,0,2461,2462,6,214,1,0,2462,430,1,0,0,0,2463,2465,5,13, + 0,0,2464,2466,5,10,0,0,2465,2464,1,0,0,0,2465,2466,1,0,0,0,2466, + 2469,1,0,0,0,2467,2469,5,10,0,0,2468,2463,1,0,0,0,2468,2467,1,0, + 0,0,2469,2470,1,0,0,0,2470,2471,6,215,1,0,2471,432,1,0,0,0,2472, + 2473,5,47,0,0,2473,2474,5,42,0,0,2474,2478,1,0,0,0,2475,2477,9,0, + 0,0,2476,2475,1,0,0,0,2477,2480,1,0,0,0,2478,2479,1,0,0,0,2478,2476, + 1,0,0,0,2479,2481,1,0,0,0,2480,2478,1,0,0,0,2481,2482,5,42,0,0,2482, + 2483,5,47,0,0,2483,2484,1,0,0,0,2484,2485,6,216,1,0,2485,434,1,0, + 0,0,2486,2487,5,47,0,0,2487,2488,5,47,0,0,2488,2492,1,0,0,0,2489, + 2491,8,19,0,0,2490,2489,1,0,0,0,2491,2494,1,0,0,0,2492,2490,1,0, + 0,0,2492,2493,1,0,0,0,2493,2495,1,0,0,0,2494,2492,1,0,0,0,2495,2496, + 6,217,1,0,2496,436,1,0,0,0,114,0,469,477,503,532,558,578,601,633, + 644,694,717,779,811,831,854,886,912,935,961,984,1001,1018,1038,1055, + 1069,1083,1097,1111,1134,1154,1168,1185,1214,1222,1244,1276,1293, + 1313,1339,1368,1390,1394,1398,1402,1404,1407,1413,1419,1422,1427, + 1429,1432,1439,1443,1447,1455,1461,1466,1471,1476,1484,2065,2122, + 2128,2178,2183,2185,2190,2198,2203,2208,2213,2220,2224,2229,2236, + 2240,2245,2258,2262,2266,2270,2272,2282,2287,2292,2315,2318,2324, + 2337,2345,2348,2355,2359,2364,2367,2373,2378,2386,2391,2399,2401, + 2408,2415,2417,2434,2438,2446,2459,2465,2468,2478,2492,2,0,1,0,6, + 0,0 ] class McCompLexer(Lexer): @@ -995,202 +1006,204 @@ class McCompLexer(Lexer): decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ] T__0 = 1 - Absolute = 2 - At = 3 - Category = 4 - Component = 5 - UserVars = 6 - Define = 7 - Declare = 8 - Definition = 9 - End = 10 - McDisplay = 11 - Finally = 12 - Initialize = 13 - Instrument = 14 - Output = 15 - Private = 16 - Parameters = 17 - Relative = 18 - Rotated = 19 - Previous = 20 - Setting = 21 - Trace = 22 - Share = 23 - Extend = 24 - Group = 25 - Save = 26 - Jump = 27 - When = 28 - Next = 29 - Iterate = 30 - Myself = 31 - Copy = 32 - Split = 33 - Removable = 34 - Cpu = 35 - NoAcc = 36 - Dependency = 37 - Shell = 38 - Search = 39 - MetaData = 40 - String = 41 - Vector = 42 - Symbol = 43 - UnparsedBlock = 44 - Include = 45 - Null = 46 - IntegerLiteral = 47 - CharacterLiteral = 48 - FloatingLiteral = 49 - StringLiteral = 50 - BooleanLitteral = 51 - PointerLiteral = 52 - UserDefinedLiteral = 53 - MultiLineMacro = 54 - Directive = 55 - Alignas = 56 - Alignof = 57 - Asm = 58 - Auto = 59 - Bool = 60 - Break = 61 - Case = 62 - Catch = 63 - Char = 64 - Char16 = 65 - Char32 = 66 - Class = 67 - Const = 68 - Constexpr = 69 - Const_cast = 70 - Continue = 71 - Decltype = 72 - Default = 73 - Delete = 74 - Do = 75 - Double = 76 - Dynamic_cast = 77 - Else = 78 - Enum = 79 - Explicit = 80 - Export = 81 - Extern = 82 - False_ = 83 - Final = 84 - Float = 85 - For = 86 - Friend = 87 - Goto = 88 - If = 89 - Inline = 90 - Int = 91 - Long = 92 - Mutable = 93 - Namespace = 94 - New = 95 - Noexcept = 96 - Nullptr = 97 - Operator = 98 - Override = 99 - Protected = 100 - Public = 101 - Register = 102 - Reinterpret_cast = 103 - Return = 104 - Short = 105 - Signed = 106 - Sizeof = 107 - Static = 108 - Static_assert = 109 - Static_cast = 110 - Struct = 111 - Switch = 112 - Template = 113 - This = 114 - Thread_local = 115 - Throw = 116 - True_ = 117 - Try = 118 - Typedef = 119 - Typeid_ = 120 - Typename_ = 121 - Union = 122 - Unsigned = 123 - Using = 124 - Virtual = 125 - Void = 126 - Volatile = 127 - Wchar = 128 - While = 129 - LeftParen = 130 - RightParen = 131 - LeftBracket = 132 - RightBracket = 133 - LeftBrace = 134 - RightBrace = 135 - Plus = 136 - Minus = 137 - Star = 138 - Div = 139 - Mod = 140 - Caret = 141 - And = 142 - Or = 143 - Tilde = 144 - Not = 145 - Assign = 146 - Less = 147 - Greater = 148 - PlusAssign = 149 - MinusAssign = 150 - StarAssign = 151 - DivAssign = 152 - ModAssign = 153 - XorAssign = 154 - AndAssign = 155 - OrAssign = 156 - LeftShiftAssign = 157 - RightShiftAssign = 158 - Equal = 159 - NotEqual = 160 - LessEqual = 161 - GreaterEqual = 162 - AndAnd = 163 - OrOr = 164 - PlusPlus = 165 - MinusMinus = 166 - Comma = 167 - ArrowStar = 168 - Arrow = 169 - Question = 170 - Colon = 171 - Doublecolon = 172 - Semi = 173 - Dot = 174 - DotStar = 175 - Ellipsis = 176 - Identifier = 177 - DecimalLiteral = 178 - OctalLiteral = 179 - HexadecimalLiteral = 180 - BinaryLiteral = 181 - IntegerSuffix = 182 - UserDefinedIntegerLiteral = 183 - UserDefinedFloatingLiteral = 184 - UserDefinedStringLiteral = 185 - UserDefinedCharacterLiteral = 186 - Whitespace = 187 - Newline = 188 - BlockComment = 189 - LineComment = 190 + T__1 = 2 + T__2 = 3 + Absolute = 4 + At = 5 + Category = 6 + Component = 7 + UserVars = 8 + Define = 9 + Declare = 10 + Definition = 11 + End = 12 + McDisplay = 13 + Finally = 14 + Initialize = 15 + Instrument = 16 + Output = 17 + Private = 18 + Parameters = 19 + Relative = 20 + Rotated = 21 + Previous = 22 + Setting = 23 + Trace = 24 + Share = 25 + Extend = 26 + Group = 27 + Save = 28 + Jump = 29 + When = 30 + Next = 31 + Iterate = 32 + Myself = 33 + Copy = 34 + Split = 35 + Removable = 36 + Cpu = 37 + NoAcc = 38 + Dependency = 39 + Shell = 40 + Search = 41 + MetaData = 42 + String = 43 + Vector = 44 + Symbol = 45 + UnparsedBlock = 46 + Include = 47 + Null = 48 + IntegerLiteral = 49 + CharacterLiteral = 50 + FloatingLiteral = 51 + StringLiteral = 52 + BooleanLitteral = 53 + PointerLiteral = 54 + UserDefinedLiteral = 55 + MultiLineMacro = 56 + Directive = 57 + Alignas = 58 + Alignof = 59 + Asm = 60 + Auto = 61 + Bool = 62 + Break = 63 + Case = 64 + Catch = 65 + Char = 66 + Char16 = 67 + Char32 = 68 + Class = 69 + Const = 70 + Constexpr = 71 + Const_cast = 72 + Continue = 73 + Decltype = 74 + Default = 75 + Delete = 76 + Do = 77 + Double = 78 + Dynamic_cast = 79 + Else = 80 + Enum = 81 + Explicit = 82 + Export = 83 + Extern = 84 + False_ = 85 + Final = 86 + Float = 87 + For = 88 + Friend = 89 + Goto = 90 + If = 91 + Inline = 92 + Int = 93 + Long = 94 + Mutable = 95 + Namespace = 96 + New = 97 + Noexcept = 98 + Nullptr = 99 + Operator = 100 + Override = 101 + Protected = 102 + Public = 103 + Register = 104 + Reinterpret_cast = 105 + Return = 106 + Short = 107 + Signed = 108 + Sizeof = 109 + Static = 110 + Static_assert = 111 + Static_cast = 112 + Struct = 113 + Switch = 114 + Template = 115 + This = 116 + Thread_local = 117 + Throw = 118 + True_ = 119 + Try = 120 + Typedef = 121 + Typeid_ = 122 + Typename_ = 123 + Union = 124 + Unsigned = 125 + Using = 126 + Virtual = 127 + Void = 128 + Volatile = 129 + Wchar = 130 + While = 131 + LeftParen = 132 + RightParen = 133 + LeftBracket = 134 + RightBracket = 135 + LeftBrace = 136 + RightBrace = 137 + Plus = 138 + Minus = 139 + Star = 140 + Div = 141 + Mod = 142 + Caret = 143 + And = 144 + Or = 145 + Tilde = 146 + Not = 147 + Assign = 148 + Less = 149 + Greater = 150 + PlusAssign = 151 + MinusAssign = 152 + StarAssign = 153 + DivAssign = 154 + ModAssign = 155 + XorAssign = 156 + AndAssign = 157 + OrAssign = 158 + LeftShiftAssign = 159 + RightShiftAssign = 160 + Equal = 161 + NotEqual = 162 + LessEqual = 163 + GreaterEqual = 164 + AndAnd = 165 + OrOr = 166 + PlusPlus = 167 + MinusMinus = 168 + Comma = 169 + ArrowStar = 170 + Arrow = 171 + Question = 172 + Colon = 173 + Doublecolon = 174 + Semi = 175 + Dot = 176 + DotStar = 177 + Ellipsis = 178 + Identifier = 179 + DecimalLiteral = 180 + OctalLiteral = 181 + HexadecimalLiteral = 182 + BinaryLiteral = 183 + IntegerSuffix = 184 + UserDefinedIntegerLiteral = 185 + UserDefinedFloatingLiteral = 186 + UserDefinedStringLiteral = 187 + UserDefinedCharacterLiteral = 188 + Whitespace = 189 + Newline = 190 + BlockComment = 191 + LineComment = 192 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] modeNames = [ "DEFAULT_MODE" ] literalNames = [ "", - "'0'", "'DECLARE'", "'string'", "'vector'", "'symbol'", "'%include'", + "'0'", "'>>'", "'<<'", "'string'", "'vector'", "'symbol'", "'%include'", "'NULL'", "'alignas'", "'alignof'", "'asm'", "'auto'", "'bool'", "'break'", "'case'", "'catch'", "'char'", "'char16_t'", "'char32_t'", "'class'", "'const'", "'constexpr'", "'const_cast'", "'continue'", @@ -1248,50 +1261,50 @@ class McCompLexer(Lexer): "UserDefinedCharacterLiteral", "Whitespace", "Newline", "BlockComment", "LineComment" ] - ruleNames = [ "T__0", "Absolute", "At", "Category", "Component", "UserVars", - "Define", "Declare", "Definition", "End", "McDisplay", - "Finally", "Initialize", "Instrument", "Output", "Private", - "Parameters", "Relative", "Rotated", "Previous", "Setting", - "Trace", "Share", "Extend", "Group", "Save", "Jump", "When", - "Next", "Iterate", "Myself", "Copy", "Split", "Removable", - "Cpu", "NoAcc", "Dependency", "Shell", "Search", "MetaData", - "String", "Vector", "Symbol", "UnparsedBlock", "Include", - "Null", "IntegerLiteral", "CharacterLiteral", "FloatingLiteral", - "StringLiteral", "BooleanLitteral", "PointerLiteral", - "UserDefinedLiteral", "MultiLineMacro", "Directive", "Alignas", - "Alignof", "Asm", "Auto", "Bool", "Break", "Case", "Catch", - "Char", "Char16", "Char32", "Class", "Const", "Constexpr", - "Const_cast", "Continue", "Decltype", "Default", "Delete", - "Do", "Double", "Dynamic_cast", "Else", "Enum", "Explicit", - "Export", "Extern", "False_", "Final", "Float", "For", - "Friend", "Goto", "If", "Inline", "Int", "Long", "Mutable", - "Namespace", "New", "Noexcept", "Nullptr", "Operator", - "Override", "Protected", "Public", "Register", "Reinterpret_cast", - "Return", "Short", "Signed", "Sizeof", "Static", "Static_assert", - "Static_cast", "Struct", "Switch", "Template", "This", - "Thread_local", "Throw", "True_", "Try", "Typedef", "Typeid_", - "Typename_", "Union", "Unsigned", "Using", "Virtual", - "Void", "Volatile", "Wchar", "While", "LeftParen", "RightParen", - "LeftBracket", "RightBracket", "LeftBrace", "RightBrace", - "Plus", "Minus", "Star", "Div", "Mod", "Caret", "And", - "Or", "Tilde", "Not", "Assign", "Less", "Greater", "PlusAssign", - "MinusAssign", "StarAssign", "DivAssign", "ModAssign", - "XorAssign", "AndAssign", "OrAssign", "LeftShiftAssign", - "RightShiftAssign", "Equal", "NotEqual", "LessEqual", - "GreaterEqual", "AndAnd", "OrOr", "PlusPlus", "MinusMinus", - "Comma", "ArrowStar", "Arrow", "Question", "Colon", "Doublecolon", - "Semi", "Dot", "DotStar", "Ellipsis", "Hexquad", "Universalcharactername", - "Identifier", "Identifiernondigit", "NONDIGIT", "DIGIT", - "DecimalLiteral", "OctalLiteral", "HexadecimalLiteral", - "BinaryLiteral", "NONZERODIGIT", "OCTALDIGIT", "HEXADECIMALDIGIT", - "BINARYDIGIT", "IntegerSuffix", "Unsignedsuffix", "Longsuffix", - "Longlongsuffix", "Cchar", "Escapesequence", "Simpleescapesequence", - "Octalescapesequence", "Hexadecimalescapesequence", "FractionalConstant", - "ExponentPart", "SIGN", "DigitSequence", "FloatingSuffix", - "EncodingPrefix", "Schar", "Rawstring", "UserDefinedIntegerLiteral", - "UserDefinedFloatingLiteral", "UserDefinedStringLiteral", - "UserDefinedCharacterLiteral", "Udsuffix", "Whitespace", - "Newline", "BlockComment", "LineComment" ] + ruleNames = [ "T__0", "T__1", "T__2", "Absolute", "At", "Category", + "Component", "UserVars", "Define", "Declare", "Definition", + "End", "McDisplay", "Finally", "Initialize", "Instrument", + "Output", "Private", "Parameters", "Relative", "Rotated", + "Previous", "Setting", "Trace", "Share", "Extend", "Group", + "Save", "Jump", "When", "Next", "Iterate", "Myself", "Copy", + "Split", "Removable", "Cpu", "NoAcc", "Dependency", "Shell", + "Search", "MetaData", "String", "Vector", "Symbol", "UnparsedBlock", + "Include", "Null", "IntegerLiteral", "CharacterLiteral", + "FloatingLiteral", "StringLiteral", "BooleanLitteral", + "PointerLiteral", "UserDefinedLiteral", "MultiLineMacro", + "Directive", "Alignas", "Alignof", "Asm", "Auto", "Bool", + "Break", "Case", "Catch", "Char", "Char16", "Char32", + "Class", "Const", "Constexpr", "Const_cast", "Continue", + "Decltype", "Default", "Delete", "Do", "Double", "Dynamic_cast", + "Else", "Enum", "Explicit", "Export", "Extern", "False_", + "Final", "Float", "For", "Friend", "Goto", "If", "Inline", + "Int", "Long", "Mutable", "Namespace", "New", "Noexcept", + "Nullptr", "Operator", "Override", "Protected", "Public", + "Register", "Reinterpret_cast", "Return", "Short", "Signed", + "Sizeof", "Static", "Static_assert", "Static_cast", "Struct", + "Switch", "Template", "This", "Thread_local", "Throw", + "True_", "Try", "Typedef", "Typeid_", "Typename_", "Union", + "Unsigned", "Using", "Virtual", "Void", "Volatile", "Wchar", + "While", "LeftParen", "RightParen", "LeftBracket", "RightBracket", + "LeftBrace", "RightBrace", "Plus", "Minus", "Star", "Div", + "Mod", "Caret", "And", "Or", "Tilde", "Not", "Assign", + "Less", "Greater", "PlusAssign", "MinusAssign", "StarAssign", + "DivAssign", "ModAssign", "XorAssign", "AndAssign", "OrAssign", + "LeftShiftAssign", "RightShiftAssign", "Equal", "NotEqual", + "LessEqual", "GreaterEqual", "AndAnd", "OrOr", "PlusPlus", + "MinusMinus", "Comma", "ArrowStar", "Arrow", "Question", + "Colon", "Doublecolon", "Semi", "Dot", "DotStar", "Ellipsis", + "Hexquad", "Universalcharactername", "Identifier", "Identifiernondigit", + "NONDIGIT", "DIGIT", "DecimalLiteral", "OctalLiteral", + "HexadecimalLiteral", "BinaryLiteral", "NONZERODIGIT", + "OCTALDIGIT", "HEXADECIMALDIGIT", "BINARYDIGIT", "IntegerSuffix", + "Unsignedsuffix", "Longsuffix", "Longlongsuffix", "Cchar", + "Escapesequence", "Simpleescapesequence", "Octalescapesequence", + "Hexadecimalescapesequence", "FractionalConstant", "ExponentPart", + "SIGN", "DigitSequence", "FloatingSuffix", "EncodingPrefix", + "Schar", "Rawstring", "UserDefinedIntegerLiteral", "UserDefinedFloatingLiteral", + "UserDefinedStringLiteral", "UserDefinedCharacterLiteral", + "Udsuffix", "Whitespace", "Newline", "BlockComment", "LineComment" ] grammarFileName = "McComp.g4" diff --git a/mccode_antlr/grammar/McCompListener.py b/mccode_antlr/grammar/McCompListener.py index 01281d7..f0a06f7 100644 --- a/mccode_antlr/grammar/McCompListener.py +++ b/mccode_antlr/grammar/McCompListener.py @@ -1,4 +1,4 @@ -# Generated from /home/g/Code/mccode_antlr-antlr/mccode_antlr/grammar/McComp.g4 by ANTLR 4.13.1 +# Generated from /home/gst/PycharmProjects/mccode4/mccode_antlr/grammar/McComp.g4 by ANTLR 4.13.1 from antlr4 import * if "." in __name__: from .McCompParser import McCompParser @@ -350,6 +350,15 @@ def exitAssignment(self, ctx:McCompParser.AssignmentContext): pass + # Enter a parse tree produced by McCompParser#ExpressionBinaryMod. + def enterExpressionBinaryMod(self, ctx:McCompParser.ExpressionBinaryModContext): + pass + + # Exit a parse tree produced by McCompParser#ExpressionBinaryMod. + def exitExpressionBinaryMod(self, ctx:McCompParser.ExpressionBinaryModContext): + pass + + # Enter a parse tree produced by McCompParser#ExpressionBinaryLess. def enterExpressionBinaryLess(self, ctx:McCompParser.ExpressionBinaryLessContext): pass @@ -368,15 +377,6 @@ def exitExpressionBinaryGreater(self, ctx:McCompParser.ExpressionBinaryGreaterCo pass - # Enter a parse tree produced by McCompParser#ExpressionGrouping. - def enterExpressionGrouping(self, ctx:McCompParser.ExpressionGroupingContext): - pass - - # Exit a parse tree produced by McCompParser#ExpressionGrouping. - def exitExpressionGrouping(self, ctx:McCompParser.ExpressionGroupingContext): - pass - - # Enter a parse tree produced by McCompParser#ExpressionBinaryLessEqual. def enterExpressionBinaryLessEqual(self, ctx:McCompParser.ExpressionBinaryLessEqualContext): pass @@ -413,6 +413,87 @@ def exitExpressionInteger(self, ctx:McCompParser.ExpressionIntegerContext): pass + # Enter a parse tree produced by McCompParser#ExpressionBinaryRightShift. + def enterExpressionBinaryRightShift(self, ctx:McCompParser.ExpressionBinaryRightShiftContext): + pass + + # Exit a parse tree produced by McCompParser#ExpressionBinaryRightShift. + def exitExpressionBinaryRightShift(self, ctx:McCompParser.ExpressionBinaryRightShiftContext): + pass + + + # Enter a parse tree produced by McCompParser#ExpressionMyself. + def enterExpressionMyself(self, ctx:McCompParser.ExpressionMyselfContext): + pass + + # Exit a parse tree produced by McCompParser#ExpressionMyself. + def exitExpressionMyself(self, ctx:McCompParser.ExpressionMyselfContext): + pass + + + # Enter a parse tree produced by McCompParser#ExpressionPrevious. + def enterExpressionPrevious(self, ctx:McCompParser.ExpressionPreviousContext): + pass + + # Exit a parse tree produced by McCompParser#ExpressionPrevious. + def exitExpressionPrevious(self, ctx:McCompParser.ExpressionPreviousContext): + pass + + + # Enter a parse tree produced by McCompParser#ExpressionIdentifier. + def enterExpressionIdentifier(self, ctx:McCompParser.ExpressionIdentifierContext): + pass + + # Exit a parse tree produced by McCompParser#ExpressionIdentifier. + def exitExpressionIdentifier(self, ctx:McCompParser.ExpressionIdentifierContext): + pass + + + # Enter a parse tree produced by McCompParser#ExpressionStructAccess. + def enterExpressionStructAccess(self, ctx:McCompParser.ExpressionStructAccessContext): + pass + + # Exit a parse tree produced by McCompParser#ExpressionStructAccess. + def exitExpressionStructAccess(self, ctx:McCompParser.ExpressionStructAccessContext): + pass + + + # Enter a parse tree produced by McCompParser#ExpressionFunctionCall. + def enterExpressionFunctionCall(self, ctx:McCompParser.ExpressionFunctionCallContext): + pass + + # Exit a parse tree produced by McCompParser#ExpressionFunctionCall. + def exitExpressionFunctionCall(self, ctx:McCompParser.ExpressionFunctionCallContext): + pass + + + # Enter a parse tree produced by McCompParser#ExpressionBinaryMD. + def enterExpressionBinaryMD(self, ctx:McCompParser.ExpressionBinaryMDContext): + pass + + # Exit a parse tree produced by McCompParser#ExpressionBinaryMD. + def exitExpressionBinaryMD(self, ctx:McCompParser.ExpressionBinaryMDContext): + pass + + + # Enter a parse tree produced by McCompParser#ExpressionString. + def enterExpressionString(self, ctx:McCompParser.ExpressionStringContext): + pass + + # Exit a parse tree produced by McCompParser#ExpressionString. + def exitExpressionString(self, ctx:McCompParser.ExpressionStringContext): + pass + + + # Enter a parse tree produced by McCompParser#ExpressionGrouping. + def enterExpressionGrouping(self, ctx:McCompParser.ExpressionGroupingContext): + pass + + # Exit a parse tree produced by McCompParser#ExpressionGrouping. + def exitExpressionGrouping(self, ctx:McCompParser.ExpressionGroupingContext): + pass + + # Enter a parse tree produced by McCompParser#ExpressionExponentiation. def enterExpressionExponentiation(self, ctx:McCompParser.ExpressionExponentiationContext): pass @@ -422,6 +503,15 @@ def exitExpressionExponentiation(self, ctx:McCompParser.ExpressionExponentiation pass + # Enter a parse tree produced by McCompParser#ExpressionBinaryLeftShift. + def enterExpressionBinaryLeftShift(self, ctx:McCompParser.ExpressionBinaryLeftShiftContext): + pass + + # Exit a parse tree produced by McCompParser#ExpressionBinaryLeftShift. + def exitExpressionBinaryLeftShift(self, ctx:McCompParser.ExpressionBinaryLeftShiftContext): + pass + + # Enter a parse tree produced by McCompParser#ExpressionBinaryGreaterEqual. def enterExpressionBinaryGreaterEqual(self, ctx:McCompParser.ExpressionBinaryGreaterEqualContext): pass @@ -440,15 +530,6 @@ def exitExpressionZero(self, ctx:McCompParser.ExpressionZeroContext): pass - # Enter a parse tree produced by McCompParser#ExpressionMyself. - def enterExpressionMyself(self, ctx:McCompParser.ExpressionMyselfContext): - pass - - # Exit a parse tree produced by McCompParser#ExpressionMyself. - def exitExpressionMyself(self, ctx:McCompParser.ExpressionMyselfContext): - pass - - # Enter a parse tree produced by McCompParser#ExpressionUnaryPM. def enterExpressionUnaryPM(self, ctx:McCompParser.ExpressionUnaryPMContext): pass @@ -458,15 +539,6 @@ def exitExpressionUnaryPM(self, ctx:McCompParser.ExpressionUnaryPMContext): pass - # Enter a parse tree produced by McCompParser#ExpressionPrevious. - def enterExpressionPrevious(self, ctx:McCompParser.ExpressionPreviousContext): - pass - - # Exit a parse tree produced by McCompParser#ExpressionPrevious. - def exitExpressionPrevious(self, ctx:McCompParser.ExpressionPreviousContext): - pass - - # Enter a parse tree produced by McCompParser#ExpressionTrinaryLogic. def enterExpressionTrinaryLogic(self, ctx:McCompParser.ExpressionTrinaryLogicContext): pass @@ -494,15 +566,6 @@ def exitExpressionPointerAccess(self, ctx:McCompParser.ExpressionPointerAccessCo pass - # Enter a parse tree produced by McCompParser#ExpressionIdentifier. - def enterExpressionIdentifier(self, ctx:McCompParser.ExpressionIdentifierContext): - pass - - # Exit a parse tree produced by McCompParser#ExpressionIdentifier. - def exitExpressionIdentifier(self, ctx:McCompParser.ExpressionIdentifierContext): - pass - - # Enter a parse tree produced by McCompParser#ExpressionBinaryEqual. def enterExpressionBinaryEqual(self, ctx:McCompParser.ExpressionBinaryEqualContext): pass @@ -530,42 +593,6 @@ def exitExpressionUnaryLogic(self, ctx:McCompParser.ExpressionUnaryLogicContext) pass - # Enter a parse tree produced by McCompParser#ExpressionStructAccess. - def enterExpressionStructAccess(self, ctx:McCompParser.ExpressionStructAccessContext): - pass - - # Exit a parse tree produced by McCompParser#ExpressionStructAccess. - def exitExpressionStructAccess(self, ctx:McCompParser.ExpressionStructAccessContext): - pass - - - # Enter a parse tree produced by McCompParser#ExpressionFunctionCall. - def enterExpressionFunctionCall(self, ctx:McCompParser.ExpressionFunctionCallContext): - pass - - # Exit a parse tree produced by McCompParser#ExpressionFunctionCall. - def exitExpressionFunctionCall(self, ctx:McCompParser.ExpressionFunctionCallContext): - pass - - - # Enter a parse tree produced by McCompParser#ExpressionBinaryMD. - def enterExpressionBinaryMD(self, ctx:McCompParser.ExpressionBinaryMDContext): - pass - - # Exit a parse tree produced by McCompParser#ExpressionBinaryMD. - def exitExpressionBinaryMD(self, ctx:McCompParser.ExpressionBinaryMDContext): - pass - - - # Enter a parse tree produced by McCompParser#ExpressionString. - def enterExpressionString(self, ctx:McCompParser.ExpressionStringContext): - pass - - # Exit a parse tree produced by McCompParser#ExpressionString. - def exitExpressionString(self, ctx:McCompParser.ExpressionStringContext): - pass - - # Enter a parse tree produced by McCompParser#shell. def enterShell(self, ctx:McCompParser.ShellContext): pass diff --git a/mccode_antlr/grammar/McCompParser.py b/mccode_antlr/grammar/McCompParser.py index addbab0..17f5d49 100644 --- a/mccode_antlr/grammar/McCompParser.py +++ b/mccode_antlr/grammar/McCompParser.py @@ -1,4 +1,4 @@ -# Generated from /home/g/Code/mccode_antlr-antlr/mccode_antlr/grammar/McComp.g4 by ANTLR 4.13.1 +# Generated from /home/gst/PycharmProjects/mccode4/mccode_antlr/grammar/McComp.g4 by ANTLR 4.13.1 # encoding: utf-8 from antlr4 import * from io import StringIO @@ -10,7 +10,7 @@ def serializedATN(): return [ - 4,1,190,492,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6, + 4,1,192,501,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6, 7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7, 13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2, 20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7, @@ -47,158 +47,162 @@ def serializedATN(): 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,3,24,440,8,24, 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,5,24,475,8,24,10,24,12,24,478, - 9,24,1,25,1,25,1,25,1,26,1,26,1,26,1,26,1,26,3,26,488,8,26,1,27, - 1,27,1,27,0,1,48,28,0,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,0,6,1,0,15,16,3,0,1,1,46,46,50, - 50,2,0,50,50,177,177,1,0,136,137,1,0,138,139,1,0,163,164,565,0,56, - 1,0,0,0,2,157,1,0,0,0,4,168,1,0,0,0,6,171,1,0,0,0,8,179,1,0,0,0, - 10,183,1,0,0,0,12,187,1,0,0,0,14,191,1,0,0,0,16,273,1,0,0,0,18,284, - 1,0,0,0,20,295,1,0,0,0,22,304,1,0,0,0,24,306,1,0,0,0,26,320,1,0, - 0,0,28,322,1,0,0,0,30,334,1,0,0,0,32,336,1,0,0,0,34,348,1,0,0,0, - 36,359,1,0,0,0,38,370,1,0,0,0,40,372,1,0,0,0,42,377,1,0,0,0,44,380, - 1,0,0,0,46,391,1,0,0,0,48,439,1,0,0,0,50,479,1,0,0,0,52,487,1,0, - 0,0,54,489,1,0,0,0,56,57,3,2,1,0,57,58,5,0,0,1,58,1,1,0,0,0,59,60, - 5,7,0,0,60,61,5,5,0,0,61,62,5,177,0,0,62,64,3,6,3,0,63,65,3,42,21, - 0,64,63,1,0,0,0,64,65,1,0,0,0,65,69,1,0,0,0,66,68,3,40,20,0,67,66, - 1,0,0,0,68,71,1,0,0,0,69,67,1,0,0,0,69,70,1,0,0,0,70,73,1,0,0,0, - 71,69,1,0,0,0,72,74,3,50,25,0,73,72,1,0,0,0,73,74,1,0,0,0,74,76, - 1,0,0,0,75,77,3,28,14,0,76,75,1,0,0,0,76,77,1,0,0,0,77,79,1,0,0, - 0,78,80,5,36,0,0,79,78,1,0,0,0,79,80,1,0,0,0,80,82,1,0,0,0,81,83, - 3,18,9,0,82,81,1,0,0,0,82,83,1,0,0,0,83,85,1,0,0,0,84,86,3,32,16, - 0,85,84,1,0,0,0,85,86,1,0,0,0,86,88,1,0,0,0,87,89,3,30,15,0,88,87, - 1,0,0,0,88,89,1,0,0,0,89,91,1,0,0,0,90,92,3,34,17,0,91,90,1,0,0, - 0,91,92,1,0,0,0,92,94,1,0,0,0,93,95,3,4,2,0,94,93,1,0,0,0,94,95, - 1,0,0,0,95,97,1,0,0,0,96,98,3,36,18,0,97,96,1,0,0,0,97,98,1,0,0, - 0,98,100,1,0,0,0,99,101,3,38,19,0,100,99,1,0,0,0,100,101,1,0,0,0, - 101,103,1,0,0,0,102,104,3,20,10,0,103,102,1,0,0,0,103,104,1,0,0, - 0,104,105,1,0,0,0,105,106,5,10,0,0,106,158,1,0,0,0,107,108,5,7,0, - 0,108,109,5,5,0,0,109,110,5,177,0,0,110,111,5,32,0,0,111,112,5,177, - 0,0,112,114,3,6,3,0,113,115,3,42,21,0,114,113,1,0,0,0,114,115,1, - 0,0,0,115,119,1,0,0,0,116,118,3,40,20,0,117,116,1,0,0,0,118,121, - 1,0,0,0,119,117,1,0,0,0,119,120,1,0,0,0,120,123,1,0,0,0,121,119, - 1,0,0,0,122,124,3,50,25,0,123,122,1,0,0,0,123,124,1,0,0,0,124,126, - 1,0,0,0,125,127,3,28,14,0,126,125,1,0,0,0,126,127,1,0,0,0,127,129, - 1,0,0,0,128,130,5,36,0,0,129,128,1,0,0,0,129,130,1,0,0,0,130,132, - 1,0,0,0,131,133,3,18,9,0,132,131,1,0,0,0,132,133,1,0,0,0,133,135, - 1,0,0,0,134,136,3,32,16,0,135,134,1,0,0,0,135,136,1,0,0,0,136,138, - 1,0,0,0,137,139,3,30,15,0,138,137,1,0,0,0,138,139,1,0,0,0,139,141, - 1,0,0,0,140,142,3,34,17,0,141,140,1,0,0,0,141,142,1,0,0,0,142,144, - 1,0,0,0,143,145,3,4,2,0,144,143,1,0,0,0,144,145,1,0,0,0,145,147, - 1,0,0,0,146,148,3,36,18,0,147,146,1,0,0,0,147,148,1,0,0,0,148,150, - 1,0,0,0,149,151,3,38,19,0,150,149,1,0,0,0,150,151,1,0,0,0,151,153, - 1,0,0,0,152,154,3,20,10,0,153,152,1,0,0,0,153,154,1,0,0,0,154,155, - 1,0,0,0,155,156,5,10,0,0,156,158,1,0,0,0,157,59,1,0,0,0,157,107, - 1,0,0,0,158,3,1,0,0,0,159,160,5,22,0,0,160,169,3,54,27,0,161,162, - 5,22,0,0,162,163,5,32,0,0,163,166,5,177,0,0,164,165,5,24,0,0,165, - 167,3,54,27,0,166,164,1,0,0,0,166,167,1,0,0,0,167,169,1,0,0,0,168, - 159,1,0,0,0,168,161,1,0,0,0,169,5,1,0,0,0,170,172,3,8,4,0,171,170, - 1,0,0,0,171,172,1,0,0,0,172,174,1,0,0,0,173,175,3,10,5,0,174,173, - 1,0,0,0,174,175,1,0,0,0,175,177,1,0,0,0,176,178,3,12,6,0,177,176, - 1,0,0,0,177,178,1,0,0,0,178,7,1,0,0,0,179,180,5,9,0,0,180,181,5, - 17,0,0,181,182,3,14,7,0,182,9,1,0,0,0,183,184,5,21,0,0,184,185,5, - 17,0,0,185,186,3,14,7,0,186,11,1,0,0,0,187,188,7,0,0,0,188,189,5, - 17,0,0,189,190,3,14,7,0,190,13,1,0,0,0,191,200,5,130,0,0,192,197, - 3,16,8,0,193,194,5,167,0,0,194,196,3,16,8,0,195,193,1,0,0,0,196, - 199,1,0,0,0,197,195,1,0,0,0,197,198,1,0,0,0,198,201,1,0,0,0,199, - 197,1,0,0,0,200,192,1,0,0,0,200,201,1,0,0,0,201,202,1,0,0,0,202, - 203,5,131,0,0,203,15,1,0,0,0,204,206,5,76,0,0,205,204,1,0,0,0,205, - 206,1,0,0,0,206,207,1,0,0,0,207,213,5,177,0,0,208,211,5,146,0,0, - 209,212,3,48,24,0,210,212,5,1,0,0,211,209,1,0,0,0,211,210,1,0,0, - 0,212,214,1,0,0,0,213,208,1,0,0,0,213,214,1,0,0,0,214,274,1,0,0, - 0,215,216,5,91,0,0,216,222,5,177,0,0,217,220,5,146,0,0,218,221,3, - 48,24,0,219,221,5,1,0,0,220,218,1,0,0,0,220,219,1,0,0,0,221,223, - 1,0,0,0,222,217,1,0,0,0,222,223,1,0,0,0,223,274,1,0,0,0,224,228, - 5,41,0,0,225,226,5,64,0,0,226,228,5,138,0,0,227,224,1,0,0,0,227, - 225,1,0,0,0,228,229,1,0,0,0,229,232,5,177,0,0,230,231,5,146,0,0, - 231,233,7,1,0,0,232,230,1,0,0,0,232,233,1,0,0,0,233,274,1,0,0,0, - 234,235,5,42,0,0,235,243,5,177,0,0,236,241,5,146,0,0,237,242,5,177, - 0,0,238,242,3,44,22,0,239,242,5,46,0,0,240,242,5,1,0,0,241,237,1, - 0,0,0,241,238,1,0,0,0,241,239,1,0,0,0,241,240,1,0,0,0,242,244,1, - 0,0,0,243,236,1,0,0,0,243,244,1,0,0,0,244,274,1,0,0,0,245,246,5, - 43,0,0,246,247,5,177,0,0,247,248,5,146,0,0,248,274,3,48,24,0,249, - 250,5,76,0,0,250,251,5,138,0,0,251,259,5,177,0,0,252,257,5,146,0, - 0,253,258,5,177,0,0,254,258,3,44,22,0,255,258,5,46,0,0,256,258,5, - 1,0,0,257,253,1,0,0,0,257,254,1,0,0,0,257,255,1,0,0,0,257,256,1, - 0,0,0,258,260,1,0,0,0,259,252,1,0,0,0,259,260,1,0,0,0,260,274,1, - 0,0,0,261,262,5,91,0,0,262,263,5,138,0,0,263,271,5,177,0,0,264,269, - 5,146,0,0,265,270,5,177,0,0,266,270,3,44,22,0,267,270,5,46,0,0,268, - 270,5,1,0,0,269,265,1,0,0,0,269,266,1,0,0,0,269,267,1,0,0,0,269, - 268,1,0,0,0,270,272,1,0,0,0,271,264,1,0,0,0,271,272,1,0,0,0,272, - 274,1,0,0,0,273,205,1,0,0,0,273,215,1,0,0,0,273,227,1,0,0,0,273, - 234,1,0,0,0,273,245,1,0,0,0,273,249,1,0,0,0,273,261,1,0,0,0,274, - 17,1,0,0,0,275,276,5,23,0,0,276,285,3,54,27,0,277,278,5,23,0,0,278, - 279,5,32,0,0,279,282,5,177,0,0,280,281,5,24,0,0,281,283,3,54,27, - 0,282,280,1,0,0,0,282,283,1,0,0,0,283,285,1,0,0,0,284,275,1,0,0, - 0,284,277,1,0,0,0,285,19,1,0,0,0,286,287,5,11,0,0,287,296,3,54,27, - 0,288,289,5,11,0,0,289,290,5,32,0,0,290,293,5,177,0,0,291,292,5, - 24,0,0,292,294,3,54,27,0,293,291,1,0,0,0,293,294,1,0,0,0,294,296, - 1,0,0,0,295,286,1,0,0,0,295,288,1,0,0,0,296,21,1,0,0,0,297,301,5, - 20,0,0,298,299,5,130,0,0,299,300,5,47,0,0,300,302,5,131,0,0,301, - 298,1,0,0,0,301,302,1,0,0,0,302,305,1,0,0,0,303,305,5,177,0,0,304, - 297,1,0,0,0,304,303,1,0,0,0,305,23,1,0,0,0,306,307,5,130,0,0,307, - 308,3,48,24,0,308,309,5,167,0,0,309,310,3,48,24,0,310,311,5,167, - 0,0,311,312,3,48,24,0,312,313,5,131,0,0,313,25,1,0,0,0,314,321,5, - 2,0,0,315,318,5,18,0,0,316,319,5,2,0,0,317,319,3,22,11,0,318,316, - 1,0,0,0,318,317,1,0,0,0,319,321,1,0,0,0,320,314,1,0,0,0,320,315, - 1,0,0,0,321,27,1,0,0,0,322,323,5,37,0,0,323,324,5,50,0,0,324,29, - 1,0,0,0,325,326,5,8,0,0,326,335,3,54,27,0,327,328,5,8,0,0,328,329, - 5,32,0,0,329,332,5,177,0,0,330,331,5,24,0,0,331,333,3,54,27,0,332, - 330,1,0,0,0,332,333,1,0,0,0,333,335,1,0,0,0,334,325,1,0,0,0,334, - 327,1,0,0,0,335,31,1,0,0,0,336,337,5,6,0,0,337,338,3,54,27,0,338, - 33,1,0,0,0,339,340,5,13,0,0,340,349,3,54,27,0,341,342,5,13,0,0,342, - 343,5,32,0,0,343,346,5,177,0,0,344,345,5,24,0,0,345,347,3,54,27, - 0,346,344,1,0,0,0,346,347,1,0,0,0,347,349,1,0,0,0,348,339,1,0,0, - 0,348,341,1,0,0,0,349,35,1,0,0,0,350,351,5,26,0,0,351,360,3,54,27, - 0,352,353,5,26,0,0,353,354,5,32,0,0,354,357,5,177,0,0,355,356,5, - 24,0,0,356,358,3,54,27,0,357,355,1,0,0,0,357,358,1,0,0,0,358,360, - 1,0,0,0,359,350,1,0,0,0,359,352,1,0,0,0,360,37,1,0,0,0,361,362,5, - 12,0,0,362,371,3,54,27,0,363,364,5,12,0,0,364,365,5,32,0,0,365,368, - 5,177,0,0,366,367,5,24,0,0,367,369,3,54,27,0,368,366,1,0,0,0,368, - 369,1,0,0,0,369,371,1,0,0,0,370,361,1,0,0,0,370,363,1,0,0,0,371, - 39,1,0,0,0,372,373,5,40,0,0,373,374,7,2,0,0,374,375,7,2,0,0,375, - 376,3,54,27,0,376,41,1,0,0,0,377,378,5,4,0,0,378,379,7,2,0,0,379, - 43,1,0,0,0,380,381,5,134,0,0,381,386,3,48,24,0,382,383,5,167,0,0, - 383,385,3,48,24,0,384,382,1,0,0,0,385,388,1,0,0,0,386,384,1,0,0, - 0,386,387,1,0,0,0,387,389,1,0,0,0,388,386,1,0,0,0,389,390,5,135, - 0,0,390,45,1,0,0,0,391,392,5,177,0,0,392,393,5,146,0,0,393,394,3, - 48,24,0,394,47,1,0,0,0,395,396,6,24,-1,0,396,440,5,1,0,0,397,440, - 5,47,0,0,398,440,5,49,0,0,399,401,5,50,0,0,400,399,1,0,0,0,401,404, - 1,0,0,0,402,400,1,0,0,0,402,403,1,0,0,0,403,440,1,0,0,0,404,402, - 1,0,0,0,405,406,5,177,0,0,406,407,5,169,0,0,407,440,3,48,24,20,408, - 409,5,177,0,0,409,410,5,174,0,0,410,440,3,48,24,19,411,412,5,177, - 0,0,412,413,5,132,0,0,413,414,3,48,24,0,414,415,5,133,0,0,415,440, - 1,0,0,0,416,417,5,177,0,0,417,418,5,130,0,0,418,423,3,48,24,0,419, - 420,5,167,0,0,420,422,3,48,24,0,421,419,1,0,0,0,422,425,1,0,0,0, - 423,421,1,0,0,0,423,424,1,0,0,0,424,426,1,0,0,0,425,423,1,0,0,0, - 426,427,5,131,0,0,427,440,1,0,0,0,428,429,5,130,0,0,429,430,3,48, - 24,0,430,431,5,131,0,0,431,440,1,0,0,0,432,433,7,3,0,0,433,440,3, - 48,24,15,434,440,5,177,0,0,435,436,5,145,0,0,436,440,3,48,24,5,437, - 440,5,20,0,0,438,440,5,31,0,0,439,395,1,0,0,0,439,397,1,0,0,0,439, - 398,1,0,0,0,439,402,1,0,0,0,439,405,1,0,0,0,439,408,1,0,0,0,439, - 411,1,0,0,0,439,416,1,0,0,0,439,428,1,0,0,0,439,432,1,0,0,0,439, - 434,1,0,0,0,439,435,1,0,0,0,439,437,1,0,0,0,439,438,1,0,0,0,440, - 476,1,0,0,0,441,442,10,14,0,0,442,443,5,141,0,0,443,475,3,48,24, - 14,444,445,10,13,0,0,445,446,7,4,0,0,446,475,3,48,24,14,447,448, - 10,12,0,0,448,449,7,3,0,0,449,475,3,48,24,13,450,451,10,10,0,0,451, - 452,5,159,0,0,452,475,3,48,24,11,453,454,10,9,0,0,454,455,5,161, - 0,0,455,475,3,48,24,10,456,457,10,8,0,0,457,458,5,162,0,0,458,475, - 3,48,24,9,459,460,10,7,0,0,460,461,5,147,0,0,461,475,3,48,24,8,462, - 463,10,6,0,0,463,464,5,148,0,0,464,475,3,48,24,7,465,466,10,4,0, - 0,466,467,7,5,0,0,467,475,3,48,24,5,468,469,10,3,0,0,469,470,5,170, - 0,0,470,471,3,48,24,0,471,472,5,171,0,0,472,473,3,48,24,4,473,475, - 1,0,0,0,474,441,1,0,0,0,474,444,1,0,0,0,474,447,1,0,0,0,474,450, - 1,0,0,0,474,453,1,0,0,0,474,456,1,0,0,0,474,459,1,0,0,0,474,462, - 1,0,0,0,474,465,1,0,0,0,474,468,1,0,0,0,475,478,1,0,0,0,476,474, - 1,0,0,0,476,477,1,0,0,0,477,49,1,0,0,0,478,476,1,0,0,0,479,480,5, - 38,0,0,480,481,5,50,0,0,481,51,1,0,0,0,482,483,5,39,0,0,483,488, - 5,50,0,0,484,485,5,39,0,0,485,486,5,38,0,0,486,488,5,50,0,0,487, - 482,1,0,0,0,487,484,1,0,0,0,488,53,1,0,0,0,489,490,5,44,0,0,490, - 55,1,0,0,0,71,64,69,73,76,79,82,85,88,91,94,97,100,103,114,119,123, - 126,129,132,135,138,141,144,147,150,153,157,166,168,171,174,177, - 197,200,205,211,213,220,222,227,232,241,243,257,259,269,271,273, - 282,284,293,295,301,304,318,320,332,334,346,348,357,359,368,370, - 386,402,423,439,474,476,487 + 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, + 1,24,1,24,1,24,5,24,484,8,24,10,24,12,24,487,9,24,1,25,1,25,1,25, + 1,26,1,26,1,26,1,26,1,26,3,26,497,8,26,1,27,1,27,1,27,0,1,48,28, + 0,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,0,6,1,0,17,18,3,0,1,1,48,48,52,52,2,0,52,52,179,179, + 1,0,138,139,1,0,140,141,1,0,165,166,577,0,56,1,0,0,0,2,157,1,0,0, + 0,4,168,1,0,0,0,6,171,1,0,0,0,8,179,1,0,0,0,10,183,1,0,0,0,12,187, + 1,0,0,0,14,191,1,0,0,0,16,273,1,0,0,0,18,284,1,0,0,0,20,295,1,0, + 0,0,22,304,1,0,0,0,24,306,1,0,0,0,26,320,1,0,0,0,28,322,1,0,0,0, + 30,334,1,0,0,0,32,336,1,0,0,0,34,348,1,0,0,0,36,359,1,0,0,0,38,370, + 1,0,0,0,40,372,1,0,0,0,42,377,1,0,0,0,44,380,1,0,0,0,46,391,1,0, + 0,0,48,439,1,0,0,0,50,488,1,0,0,0,52,496,1,0,0,0,54,498,1,0,0,0, + 56,57,3,2,1,0,57,58,5,0,0,1,58,1,1,0,0,0,59,60,5,9,0,0,60,61,5,7, + 0,0,61,62,5,179,0,0,62,64,3,6,3,0,63,65,3,42,21,0,64,63,1,0,0,0, + 64,65,1,0,0,0,65,69,1,0,0,0,66,68,3,40,20,0,67,66,1,0,0,0,68,71, + 1,0,0,0,69,67,1,0,0,0,69,70,1,0,0,0,70,73,1,0,0,0,71,69,1,0,0,0, + 72,74,3,50,25,0,73,72,1,0,0,0,73,74,1,0,0,0,74,76,1,0,0,0,75,77, + 3,28,14,0,76,75,1,0,0,0,76,77,1,0,0,0,77,79,1,0,0,0,78,80,5,38,0, + 0,79,78,1,0,0,0,79,80,1,0,0,0,80,82,1,0,0,0,81,83,3,18,9,0,82,81, + 1,0,0,0,82,83,1,0,0,0,83,85,1,0,0,0,84,86,3,32,16,0,85,84,1,0,0, + 0,85,86,1,0,0,0,86,88,1,0,0,0,87,89,3,30,15,0,88,87,1,0,0,0,88,89, + 1,0,0,0,89,91,1,0,0,0,90,92,3,34,17,0,91,90,1,0,0,0,91,92,1,0,0, + 0,92,94,1,0,0,0,93,95,3,4,2,0,94,93,1,0,0,0,94,95,1,0,0,0,95,97, + 1,0,0,0,96,98,3,36,18,0,97,96,1,0,0,0,97,98,1,0,0,0,98,100,1,0,0, + 0,99,101,3,38,19,0,100,99,1,0,0,0,100,101,1,0,0,0,101,103,1,0,0, + 0,102,104,3,20,10,0,103,102,1,0,0,0,103,104,1,0,0,0,104,105,1,0, + 0,0,105,106,5,12,0,0,106,158,1,0,0,0,107,108,5,9,0,0,108,109,5,7, + 0,0,109,110,5,179,0,0,110,111,5,34,0,0,111,112,5,179,0,0,112,114, + 3,6,3,0,113,115,3,42,21,0,114,113,1,0,0,0,114,115,1,0,0,0,115,119, + 1,0,0,0,116,118,3,40,20,0,117,116,1,0,0,0,118,121,1,0,0,0,119,117, + 1,0,0,0,119,120,1,0,0,0,120,123,1,0,0,0,121,119,1,0,0,0,122,124, + 3,50,25,0,123,122,1,0,0,0,123,124,1,0,0,0,124,126,1,0,0,0,125,127, + 3,28,14,0,126,125,1,0,0,0,126,127,1,0,0,0,127,129,1,0,0,0,128,130, + 5,38,0,0,129,128,1,0,0,0,129,130,1,0,0,0,130,132,1,0,0,0,131,133, + 3,18,9,0,132,131,1,0,0,0,132,133,1,0,0,0,133,135,1,0,0,0,134,136, + 3,32,16,0,135,134,1,0,0,0,135,136,1,0,0,0,136,138,1,0,0,0,137,139, + 3,30,15,0,138,137,1,0,0,0,138,139,1,0,0,0,139,141,1,0,0,0,140,142, + 3,34,17,0,141,140,1,0,0,0,141,142,1,0,0,0,142,144,1,0,0,0,143,145, + 3,4,2,0,144,143,1,0,0,0,144,145,1,0,0,0,145,147,1,0,0,0,146,148, + 3,36,18,0,147,146,1,0,0,0,147,148,1,0,0,0,148,150,1,0,0,0,149,151, + 3,38,19,0,150,149,1,0,0,0,150,151,1,0,0,0,151,153,1,0,0,0,152,154, + 3,20,10,0,153,152,1,0,0,0,153,154,1,0,0,0,154,155,1,0,0,0,155,156, + 5,12,0,0,156,158,1,0,0,0,157,59,1,0,0,0,157,107,1,0,0,0,158,3,1, + 0,0,0,159,160,5,24,0,0,160,169,3,54,27,0,161,162,5,24,0,0,162,163, + 5,34,0,0,163,166,5,179,0,0,164,165,5,26,0,0,165,167,3,54,27,0,166, + 164,1,0,0,0,166,167,1,0,0,0,167,169,1,0,0,0,168,159,1,0,0,0,168, + 161,1,0,0,0,169,5,1,0,0,0,170,172,3,8,4,0,171,170,1,0,0,0,171,172, + 1,0,0,0,172,174,1,0,0,0,173,175,3,10,5,0,174,173,1,0,0,0,174,175, + 1,0,0,0,175,177,1,0,0,0,176,178,3,12,6,0,177,176,1,0,0,0,177,178, + 1,0,0,0,178,7,1,0,0,0,179,180,5,11,0,0,180,181,5,19,0,0,181,182, + 3,14,7,0,182,9,1,0,0,0,183,184,5,23,0,0,184,185,5,19,0,0,185,186, + 3,14,7,0,186,11,1,0,0,0,187,188,7,0,0,0,188,189,5,19,0,0,189,190, + 3,14,7,0,190,13,1,0,0,0,191,200,5,132,0,0,192,197,3,16,8,0,193,194, + 5,169,0,0,194,196,3,16,8,0,195,193,1,0,0,0,196,199,1,0,0,0,197,195, + 1,0,0,0,197,198,1,0,0,0,198,201,1,0,0,0,199,197,1,0,0,0,200,192, + 1,0,0,0,200,201,1,0,0,0,201,202,1,0,0,0,202,203,5,133,0,0,203,15, + 1,0,0,0,204,206,5,78,0,0,205,204,1,0,0,0,205,206,1,0,0,0,206,207, + 1,0,0,0,207,213,5,179,0,0,208,211,5,148,0,0,209,212,3,48,24,0,210, + 212,5,1,0,0,211,209,1,0,0,0,211,210,1,0,0,0,212,214,1,0,0,0,213, + 208,1,0,0,0,213,214,1,0,0,0,214,274,1,0,0,0,215,216,5,93,0,0,216, + 222,5,179,0,0,217,220,5,148,0,0,218,221,3,48,24,0,219,221,5,1,0, + 0,220,218,1,0,0,0,220,219,1,0,0,0,221,223,1,0,0,0,222,217,1,0,0, + 0,222,223,1,0,0,0,223,274,1,0,0,0,224,228,5,43,0,0,225,226,5,66, + 0,0,226,228,5,140,0,0,227,224,1,0,0,0,227,225,1,0,0,0,228,229,1, + 0,0,0,229,232,5,179,0,0,230,231,5,148,0,0,231,233,7,1,0,0,232,230, + 1,0,0,0,232,233,1,0,0,0,233,274,1,0,0,0,234,235,5,44,0,0,235,243, + 5,179,0,0,236,241,5,148,0,0,237,242,5,179,0,0,238,242,3,44,22,0, + 239,242,5,48,0,0,240,242,5,1,0,0,241,237,1,0,0,0,241,238,1,0,0,0, + 241,239,1,0,0,0,241,240,1,0,0,0,242,244,1,0,0,0,243,236,1,0,0,0, + 243,244,1,0,0,0,244,274,1,0,0,0,245,246,5,45,0,0,246,247,5,179,0, + 0,247,248,5,148,0,0,248,274,3,48,24,0,249,250,5,78,0,0,250,251,5, + 140,0,0,251,259,5,179,0,0,252,257,5,148,0,0,253,258,5,179,0,0,254, + 258,3,44,22,0,255,258,5,48,0,0,256,258,5,1,0,0,257,253,1,0,0,0,257, + 254,1,0,0,0,257,255,1,0,0,0,257,256,1,0,0,0,258,260,1,0,0,0,259, + 252,1,0,0,0,259,260,1,0,0,0,260,274,1,0,0,0,261,262,5,93,0,0,262, + 263,5,140,0,0,263,271,5,179,0,0,264,269,5,148,0,0,265,270,5,179, + 0,0,266,270,3,44,22,0,267,270,5,48,0,0,268,270,5,1,0,0,269,265,1, + 0,0,0,269,266,1,0,0,0,269,267,1,0,0,0,269,268,1,0,0,0,270,272,1, + 0,0,0,271,264,1,0,0,0,271,272,1,0,0,0,272,274,1,0,0,0,273,205,1, + 0,0,0,273,215,1,0,0,0,273,227,1,0,0,0,273,234,1,0,0,0,273,245,1, + 0,0,0,273,249,1,0,0,0,273,261,1,0,0,0,274,17,1,0,0,0,275,276,5,25, + 0,0,276,285,3,54,27,0,277,278,5,25,0,0,278,279,5,34,0,0,279,282, + 5,179,0,0,280,281,5,26,0,0,281,283,3,54,27,0,282,280,1,0,0,0,282, + 283,1,0,0,0,283,285,1,0,0,0,284,275,1,0,0,0,284,277,1,0,0,0,285, + 19,1,0,0,0,286,287,5,13,0,0,287,296,3,54,27,0,288,289,5,13,0,0,289, + 290,5,34,0,0,290,293,5,179,0,0,291,292,5,26,0,0,292,294,3,54,27, + 0,293,291,1,0,0,0,293,294,1,0,0,0,294,296,1,0,0,0,295,286,1,0,0, + 0,295,288,1,0,0,0,296,21,1,0,0,0,297,301,5,22,0,0,298,299,5,132, + 0,0,299,300,5,49,0,0,300,302,5,133,0,0,301,298,1,0,0,0,301,302,1, + 0,0,0,302,305,1,0,0,0,303,305,5,179,0,0,304,297,1,0,0,0,304,303, + 1,0,0,0,305,23,1,0,0,0,306,307,5,132,0,0,307,308,3,48,24,0,308,309, + 5,169,0,0,309,310,3,48,24,0,310,311,5,169,0,0,311,312,3,48,24,0, + 312,313,5,133,0,0,313,25,1,0,0,0,314,321,5,4,0,0,315,318,5,20,0, + 0,316,319,5,4,0,0,317,319,3,22,11,0,318,316,1,0,0,0,318,317,1,0, + 0,0,319,321,1,0,0,0,320,314,1,0,0,0,320,315,1,0,0,0,321,27,1,0,0, + 0,322,323,5,39,0,0,323,324,5,52,0,0,324,29,1,0,0,0,325,326,5,10, + 0,0,326,335,3,54,27,0,327,328,5,10,0,0,328,329,5,34,0,0,329,332, + 5,179,0,0,330,331,5,26,0,0,331,333,3,54,27,0,332,330,1,0,0,0,332, + 333,1,0,0,0,333,335,1,0,0,0,334,325,1,0,0,0,334,327,1,0,0,0,335, + 31,1,0,0,0,336,337,5,8,0,0,337,338,3,54,27,0,338,33,1,0,0,0,339, + 340,5,15,0,0,340,349,3,54,27,0,341,342,5,15,0,0,342,343,5,34,0,0, + 343,346,5,179,0,0,344,345,5,26,0,0,345,347,3,54,27,0,346,344,1,0, + 0,0,346,347,1,0,0,0,347,349,1,0,0,0,348,339,1,0,0,0,348,341,1,0, + 0,0,349,35,1,0,0,0,350,351,5,28,0,0,351,360,3,54,27,0,352,353,5, + 28,0,0,353,354,5,34,0,0,354,357,5,179,0,0,355,356,5,26,0,0,356,358, + 3,54,27,0,357,355,1,0,0,0,357,358,1,0,0,0,358,360,1,0,0,0,359,350, + 1,0,0,0,359,352,1,0,0,0,360,37,1,0,0,0,361,362,5,14,0,0,362,371, + 3,54,27,0,363,364,5,14,0,0,364,365,5,34,0,0,365,368,5,179,0,0,366, + 367,5,26,0,0,367,369,3,54,27,0,368,366,1,0,0,0,368,369,1,0,0,0,369, + 371,1,0,0,0,370,361,1,0,0,0,370,363,1,0,0,0,371,39,1,0,0,0,372,373, + 5,42,0,0,373,374,7,2,0,0,374,375,7,2,0,0,375,376,3,54,27,0,376,41, + 1,0,0,0,377,378,5,6,0,0,378,379,7,2,0,0,379,43,1,0,0,0,380,381,5, + 136,0,0,381,386,3,48,24,0,382,383,5,169,0,0,383,385,3,48,24,0,384, + 382,1,0,0,0,385,388,1,0,0,0,386,384,1,0,0,0,386,387,1,0,0,0,387, + 389,1,0,0,0,388,386,1,0,0,0,389,390,5,137,0,0,390,45,1,0,0,0,391, + 392,5,179,0,0,392,393,5,148,0,0,393,394,3,48,24,0,394,47,1,0,0,0, + 395,396,6,24,-1,0,396,440,5,1,0,0,397,440,5,49,0,0,398,440,5,51, + 0,0,399,401,5,52,0,0,400,399,1,0,0,0,401,404,1,0,0,0,402,400,1,0, + 0,0,402,403,1,0,0,0,403,440,1,0,0,0,404,402,1,0,0,0,405,406,5,179, + 0,0,406,407,5,171,0,0,407,440,3,48,24,23,408,409,5,179,0,0,409,410, + 5,176,0,0,410,440,3,48,24,22,411,412,5,179,0,0,412,413,5,134,0,0, + 413,414,3,48,24,0,414,415,5,135,0,0,415,440,1,0,0,0,416,417,5,179, + 0,0,417,418,5,132,0,0,418,423,3,48,24,0,419,420,5,169,0,0,420,422, + 3,48,24,0,421,419,1,0,0,0,422,425,1,0,0,0,423,421,1,0,0,0,423,424, + 1,0,0,0,424,426,1,0,0,0,425,423,1,0,0,0,426,427,5,133,0,0,427,440, + 1,0,0,0,428,429,5,132,0,0,429,430,3,48,24,0,430,431,5,133,0,0,431, + 440,1,0,0,0,432,433,7,3,0,0,433,440,3,48,24,18,434,440,5,179,0,0, + 435,436,5,147,0,0,436,440,3,48,24,5,437,440,5,22,0,0,438,440,5,33, + 0,0,439,395,1,0,0,0,439,397,1,0,0,0,439,398,1,0,0,0,439,402,1,0, + 0,0,439,405,1,0,0,0,439,408,1,0,0,0,439,411,1,0,0,0,439,416,1,0, + 0,0,439,428,1,0,0,0,439,432,1,0,0,0,439,434,1,0,0,0,439,435,1,0, + 0,0,439,437,1,0,0,0,439,438,1,0,0,0,440,485,1,0,0,0,441,442,10,17, + 0,0,442,443,5,143,0,0,443,484,3,48,24,17,444,445,10,16,0,0,445,446, + 7,4,0,0,446,484,3,48,24,17,447,448,10,15,0,0,448,449,7,3,0,0,449, + 484,3,48,24,16,450,451,10,14,0,0,451,452,5,142,0,0,452,484,3,48, + 24,15,453,454,10,13,0,0,454,455,5,2,0,0,455,484,3,48,24,14,456,457, + 10,12,0,0,457,458,5,3,0,0,458,484,3,48,24,13,459,460,10,10,0,0,460, + 461,5,161,0,0,461,484,3,48,24,11,462,463,10,9,0,0,463,464,5,163, + 0,0,464,484,3,48,24,10,465,466,10,8,0,0,466,467,5,164,0,0,467,484, + 3,48,24,9,468,469,10,7,0,0,469,470,5,149,0,0,470,484,3,48,24,8,471, + 472,10,6,0,0,472,473,5,150,0,0,473,484,3,48,24,7,474,475,10,4,0, + 0,475,476,7,5,0,0,476,484,3,48,24,5,477,478,10,3,0,0,478,479,5,172, + 0,0,479,480,3,48,24,0,480,481,5,173,0,0,481,482,3,48,24,4,482,484, + 1,0,0,0,483,441,1,0,0,0,483,444,1,0,0,0,483,447,1,0,0,0,483,450, + 1,0,0,0,483,453,1,0,0,0,483,456,1,0,0,0,483,459,1,0,0,0,483,462, + 1,0,0,0,483,465,1,0,0,0,483,468,1,0,0,0,483,471,1,0,0,0,483,474, + 1,0,0,0,483,477,1,0,0,0,484,487,1,0,0,0,485,483,1,0,0,0,485,486, + 1,0,0,0,486,49,1,0,0,0,487,485,1,0,0,0,488,489,5,40,0,0,489,490, + 5,52,0,0,490,51,1,0,0,0,491,492,5,41,0,0,492,497,5,52,0,0,493,494, + 5,41,0,0,494,495,5,40,0,0,495,497,5,52,0,0,496,491,1,0,0,0,496,493, + 1,0,0,0,497,53,1,0,0,0,498,499,5,46,0,0,499,55,1,0,0,0,71,64,69, + 73,76,79,82,85,88,91,94,97,100,103,114,119,123,126,129,132,135,138, + 141,144,147,150,153,157,166,168,171,174,177,197,200,205,211,213, + 220,222,227,232,241,243,257,259,269,271,273,282,284,293,295,301, + 304,318,320,332,334,346,348,357,359,368,370,386,402,423,439,483, + 485,496 ] class McCompParser ( Parser ): @@ -211,8 +215,8 @@ class McCompParser ( Parser ): sharedContextCache = PredictionContextCache() - literalNames = [ "", "'0'", "", "", "", - "", "", "", "'DECLARE'", + literalNames = [ "", "'0'", "'>>'", "'<<'", "", "", + "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", @@ -221,17 +225,17 @@ class McCompParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "", "", - "'string'", "'vector'", "'symbol'", "", "'%include'", - "'NULL'", "", "", "", "", + "", "'string'", "'vector'", "'symbol'", "", + "'%include'", "'NULL'", "", "", "", "", "", "", "", - "", "'alignas'", "'alignof'", "'asm'", "'auto'", - "'bool'", "'break'", "'case'", "'catch'", "'char'", - "'char16_t'", "'char32_t'", "'class'", "'const'", "'constexpr'", - "'const_cast'", "'continue'", "'decltype'", "'default'", - "'delete'", "'do'", "'double'", "'dynamic_cast'", "'else'", - "'enum'", "'explicit'", "'export'", "'extern'", "'false'", - "'final'", "'float'", "'for'", "'friend'", "'goto'", - "'if'", "'inline'", "'int'", "'long'", "'mutable'", + "", "", "'alignas'", "'alignof'", + "'asm'", "'auto'", "'bool'", "'break'", "'case'", "'catch'", + "'char'", "'char16_t'", "'char32_t'", "'class'", "'const'", + "'constexpr'", "'const_cast'", "'continue'", "'decltype'", + "'default'", "'delete'", "'do'", "'double'", "'dynamic_cast'", + "'else'", "'enum'", "'explicit'", "'export'", "'extern'", + "'false'", "'final'", "'float'", "'for'", "'friend'", + "'goto'", "'if'", "'inline'", "'int'", "'long'", "'mutable'", "'namespace'", "'new'", "'noexcept'", "'nullptr'", "'operator'", "'override'", "'protected'", "'public'", "'register'", "'reinterpret_cast'", "'return'", "'short'", @@ -248,42 +252,43 @@ class McCompParser ( Parser ): "", "'++'", "'--'", "','", "'->*'", "'->'", "'?'", "':'", "'::'", "';'", "'.'", "'.*'", "'...'" ] - symbolicNames = [ "", "", "Absolute", "At", "Category", - "Component", "UserVars", "Define", "Declare", "Definition", - "End", "McDisplay", "Finally", "Initialize", "Instrument", - "Output", "Private", "Parameters", "Relative", "Rotated", - "Previous", "Setting", "Trace", "Share", "Extend", - "Group", "Save", "Jump", "When", "Next", "Iterate", - "Myself", "Copy", "Split", "Removable", "Cpu", "NoAcc", - "Dependency", "Shell", "Search", "MetaData", "String", - "Vector", "Symbol", "UnparsedBlock", "Include", "Null", - "IntegerLiteral", "CharacterLiteral", "FloatingLiteral", - "StringLiteral", "BooleanLitteral", "PointerLiteral", - "UserDefinedLiteral", "MultiLineMacro", "Directive", - "Alignas", "Alignof", "Asm", "Auto", "Bool", "Break", - "Case", "Catch", "Char", "Char16", "Char32", "Class", - "Const", "Constexpr", "Const_cast", "Continue", "Decltype", - "Default", "Delete", "Do", "Double", "Dynamic_cast", - "Else", "Enum", "Explicit", "Export", "Extern", "False_", - "Final", "Float", "For", "Friend", "Goto", "If", "Inline", - "Int", "Long", "Mutable", "Namespace", "New", "Noexcept", - "Nullptr", "Operator", "Override", "Protected", "Public", - "Register", "Reinterpret_cast", "Return", "Short", - "Signed", "Sizeof", "Static", "Static_assert", "Static_cast", - "Struct", "Switch", "Template", "This", "Thread_local", - "Throw", "True_", "Try", "Typedef", "Typeid_", "Typename_", - "Union", "Unsigned", "Using", "Virtual", "Void", "Volatile", - "Wchar", "While", "LeftParen", "RightParen", "LeftBracket", - "RightBracket", "LeftBrace", "RightBrace", "Plus", - "Minus", "Star", "Div", "Mod", "Caret", "And", "Or", - "Tilde", "Not", "Assign", "Less", "Greater", "PlusAssign", - "MinusAssign", "StarAssign", "DivAssign", "ModAssign", - "XorAssign", "AndAssign", "OrAssign", "LeftShiftAssign", - "RightShiftAssign", "Equal", "NotEqual", "LessEqual", - "GreaterEqual", "AndAnd", "OrOr", "PlusPlus", "MinusMinus", - "Comma", "ArrowStar", "Arrow", "Question", "Colon", - "Doublecolon", "Semi", "Dot", "DotStar", "Ellipsis", - "Identifier", "DecimalLiteral", "OctalLiteral", "HexadecimalLiteral", + symbolicNames = [ "", "", "", "", + "Absolute", "At", "Category", "Component", "UserVars", + "Define", "Declare", "Definition", "End", "McDisplay", + "Finally", "Initialize", "Instrument", "Output", "Private", + "Parameters", "Relative", "Rotated", "Previous", "Setting", + "Trace", "Share", "Extend", "Group", "Save", "Jump", + "When", "Next", "Iterate", "Myself", "Copy", "Split", + "Removable", "Cpu", "NoAcc", "Dependency", "Shell", + "Search", "MetaData", "String", "Vector", "Symbol", + "UnparsedBlock", "Include", "Null", "IntegerLiteral", + "CharacterLiteral", "FloatingLiteral", "StringLiteral", + "BooleanLitteral", "PointerLiteral", "UserDefinedLiteral", + "MultiLineMacro", "Directive", "Alignas", "Alignof", + "Asm", "Auto", "Bool", "Break", "Case", "Catch", "Char", + "Char16", "Char32", "Class", "Const", "Constexpr", + "Const_cast", "Continue", "Decltype", "Default", "Delete", + "Do", "Double", "Dynamic_cast", "Else", "Enum", "Explicit", + "Export", "Extern", "False_", "Final", "Float", "For", + "Friend", "Goto", "If", "Inline", "Int", "Long", "Mutable", + "Namespace", "New", "Noexcept", "Nullptr", "Operator", + "Override", "Protected", "Public", "Register", "Reinterpret_cast", + "Return", "Short", "Signed", "Sizeof", "Static", "Static_assert", + "Static_cast", "Struct", "Switch", "Template", "This", + "Thread_local", "Throw", "True_", "Try", "Typedef", + "Typeid_", "Typename_", "Union", "Unsigned", "Using", + "Virtual", "Void", "Volatile", "Wchar", "While", "LeftParen", + "RightParen", "LeftBracket", "RightBracket", "LeftBrace", + "RightBrace", "Plus", "Minus", "Star", "Div", "Mod", + "Caret", "And", "Or", "Tilde", "Not", "Assign", "Less", + "Greater", "PlusAssign", "MinusAssign", "StarAssign", + "DivAssign", "ModAssign", "XorAssign", "AndAssign", + "OrAssign", "LeftShiftAssign", "RightShiftAssign", + "Equal", "NotEqual", "LessEqual", "GreaterEqual", + "AndAnd", "OrOr", "PlusPlus", "MinusMinus", "Comma", + "ArrowStar", "Arrow", "Question", "Colon", "Doublecolon", + "Semi", "Dot", "DotStar", "Ellipsis", "Identifier", + "DecimalLiteral", "OctalLiteral", "HexadecimalLiteral", "BinaryLiteral", "IntegerSuffix", "UserDefinedIntegerLiteral", "UserDefinedFloatingLiteral", "UserDefinedStringLiteral", "UserDefinedCharacterLiteral", "Whitespace", "Newline", @@ -328,195 +333,197 @@ class McCompParser ( Parser ): EOF = Token.EOF T__0=1 - Absolute=2 - At=3 - Category=4 - Component=5 - UserVars=6 - Define=7 - Declare=8 - Definition=9 - End=10 - McDisplay=11 - Finally=12 - Initialize=13 - Instrument=14 - Output=15 - Private=16 - Parameters=17 - Relative=18 - Rotated=19 - Previous=20 - Setting=21 - Trace=22 - Share=23 - Extend=24 - Group=25 - Save=26 - Jump=27 - When=28 - Next=29 - Iterate=30 - Myself=31 - Copy=32 - Split=33 - Removable=34 - Cpu=35 - NoAcc=36 - Dependency=37 - Shell=38 - Search=39 - MetaData=40 - String=41 - Vector=42 - Symbol=43 - UnparsedBlock=44 - Include=45 - Null=46 - IntegerLiteral=47 - CharacterLiteral=48 - FloatingLiteral=49 - StringLiteral=50 - BooleanLitteral=51 - PointerLiteral=52 - UserDefinedLiteral=53 - MultiLineMacro=54 - Directive=55 - Alignas=56 - Alignof=57 - Asm=58 - Auto=59 - Bool=60 - Break=61 - Case=62 - Catch=63 - Char=64 - Char16=65 - Char32=66 - Class=67 - Const=68 - Constexpr=69 - Const_cast=70 - Continue=71 - Decltype=72 - Default=73 - Delete=74 - Do=75 - Double=76 - Dynamic_cast=77 - Else=78 - Enum=79 - Explicit=80 - Export=81 - Extern=82 - False_=83 - Final=84 - Float=85 - For=86 - Friend=87 - Goto=88 - If=89 - Inline=90 - Int=91 - Long=92 - Mutable=93 - Namespace=94 - New=95 - Noexcept=96 - Nullptr=97 - Operator=98 - Override=99 - Protected=100 - Public=101 - Register=102 - Reinterpret_cast=103 - Return=104 - Short=105 - Signed=106 - Sizeof=107 - Static=108 - Static_assert=109 - Static_cast=110 - Struct=111 - Switch=112 - Template=113 - This=114 - Thread_local=115 - Throw=116 - True_=117 - Try=118 - Typedef=119 - Typeid_=120 - Typename_=121 - Union=122 - Unsigned=123 - Using=124 - Virtual=125 - Void=126 - Volatile=127 - Wchar=128 - While=129 - LeftParen=130 - RightParen=131 - LeftBracket=132 - RightBracket=133 - LeftBrace=134 - RightBrace=135 - Plus=136 - Minus=137 - Star=138 - Div=139 - Mod=140 - Caret=141 - And=142 - Or=143 - Tilde=144 - Not=145 - Assign=146 - Less=147 - Greater=148 - PlusAssign=149 - MinusAssign=150 - StarAssign=151 - DivAssign=152 - ModAssign=153 - XorAssign=154 - AndAssign=155 - OrAssign=156 - LeftShiftAssign=157 - RightShiftAssign=158 - Equal=159 - NotEqual=160 - LessEqual=161 - GreaterEqual=162 - AndAnd=163 - OrOr=164 - PlusPlus=165 - MinusMinus=166 - Comma=167 - ArrowStar=168 - Arrow=169 - Question=170 - Colon=171 - Doublecolon=172 - Semi=173 - Dot=174 - DotStar=175 - Ellipsis=176 - Identifier=177 - DecimalLiteral=178 - OctalLiteral=179 - HexadecimalLiteral=180 - BinaryLiteral=181 - IntegerSuffix=182 - UserDefinedIntegerLiteral=183 - UserDefinedFloatingLiteral=184 - UserDefinedStringLiteral=185 - UserDefinedCharacterLiteral=186 - Whitespace=187 - Newline=188 - BlockComment=189 - LineComment=190 + T__1=2 + T__2=3 + Absolute=4 + At=5 + Category=6 + Component=7 + UserVars=8 + Define=9 + Declare=10 + Definition=11 + End=12 + McDisplay=13 + Finally=14 + Initialize=15 + Instrument=16 + Output=17 + Private=18 + Parameters=19 + Relative=20 + Rotated=21 + Previous=22 + Setting=23 + Trace=24 + Share=25 + Extend=26 + Group=27 + Save=28 + Jump=29 + When=30 + Next=31 + Iterate=32 + Myself=33 + Copy=34 + Split=35 + Removable=36 + Cpu=37 + NoAcc=38 + Dependency=39 + Shell=40 + Search=41 + MetaData=42 + String=43 + Vector=44 + Symbol=45 + UnparsedBlock=46 + Include=47 + Null=48 + IntegerLiteral=49 + CharacterLiteral=50 + FloatingLiteral=51 + StringLiteral=52 + BooleanLitteral=53 + PointerLiteral=54 + UserDefinedLiteral=55 + MultiLineMacro=56 + Directive=57 + Alignas=58 + Alignof=59 + Asm=60 + Auto=61 + Bool=62 + Break=63 + Case=64 + Catch=65 + Char=66 + Char16=67 + Char32=68 + Class=69 + Const=70 + Constexpr=71 + Const_cast=72 + Continue=73 + Decltype=74 + Default=75 + Delete=76 + Do=77 + Double=78 + Dynamic_cast=79 + Else=80 + Enum=81 + Explicit=82 + Export=83 + Extern=84 + False_=85 + Final=86 + Float=87 + For=88 + Friend=89 + Goto=90 + If=91 + Inline=92 + Int=93 + Long=94 + Mutable=95 + Namespace=96 + New=97 + Noexcept=98 + Nullptr=99 + Operator=100 + Override=101 + Protected=102 + Public=103 + Register=104 + Reinterpret_cast=105 + Return=106 + Short=107 + Signed=108 + Sizeof=109 + Static=110 + Static_assert=111 + Static_cast=112 + Struct=113 + Switch=114 + Template=115 + This=116 + Thread_local=117 + Throw=118 + True_=119 + Try=120 + Typedef=121 + Typeid_=122 + Typename_=123 + Union=124 + Unsigned=125 + Using=126 + Virtual=127 + Void=128 + Volatile=129 + Wchar=130 + While=131 + LeftParen=132 + RightParen=133 + LeftBracket=134 + RightBracket=135 + LeftBrace=136 + RightBrace=137 + Plus=138 + Minus=139 + Star=140 + Div=141 + Mod=142 + Caret=143 + And=144 + Or=145 + Tilde=146 + Not=147 + Assign=148 + Less=149 + Greater=150 + PlusAssign=151 + MinusAssign=152 + StarAssign=153 + DivAssign=154 + ModAssign=155 + XorAssign=156 + AndAssign=157 + OrAssign=158 + LeftShiftAssign=159 + RightShiftAssign=160 + Equal=161 + NotEqual=162 + LessEqual=163 + GreaterEqual=164 + AndAnd=165 + OrOr=166 + PlusPlus=167 + MinusMinus=168 + Comma=169 + ArrowStar=170 + Arrow=171 + Question=172 + Colon=173 + Doublecolon=174 + Semi=175 + Dot=176 + DotStar=177 + Ellipsis=178 + Identifier=179 + DecimalLiteral=180 + OctalLiteral=181 + HexadecimalLiteral=182 + BinaryLiteral=183 + IntegerSuffix=184 + UserDefinedIntegerLiteral=185 + UserDefinedFloatingLiteral=186 + UserDefinedStringLiteral=187 + UserDefinedCharacterLiteral=188 + Whitespace=189 + Newline=190 + BlockComment=191 + LineComment=192 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -774,7 +781,7 @@ def component_definition(self): self.state = 64 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==4: + if _la==6: self.state = 63 self.category() @@ -782,7 +789,7 @@ def component_definition(self): self.state = 69 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==40: + while _la==42: self.state = 66 self.metadata() self.state = 71 @@ -792,7 +799,7 @@ def component_definition(self): self.state = 73 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==38: + if _la==40: self.state = 72 self.shell() @@ -800,7 +807,7 @@ def component_definition(self): self.state = 76 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==37: + if _la==39: self.state = 75 self.dependency() @@ -808,7 +815,7 @@ def component_definition(self): self.state = 79 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==36: + if _la==38: self.state = 78 self.match(McCompParser.NoAcc) @@ -816,7 +823,7 @@ def component_definition(self): self.state = 82 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==23: + if _la==25: self.state = 81 self.share() @@ -824,7 +831,7 @@ def component_definition(self): self.state = 85 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==6: + if _la==8: self.state = 84 self.uservars() @@ -832,7 +839,7 @@ def component_definition(self): self.state = 88 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==8: + if _la==10: self.state = 87 self.declare() @@ -840,7 +847,7 @@ def component_definition(self): self.state = 91 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==13: + if _la==15: self.state = 90 self.initialize() @@ -848,7 +855,7 @@ def component_definition(self): self.state = 94 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==22: + if _la==24: self.state = 93 self.component_trace() @@ -856,7 +863,7 @@ def component_definition(self): self.state = 97 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==26: + if _la==28: self.state = 96 self.save() @@ -864,7 +871,7 @@ def component_definition(self): self.state = 100 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==12: + if _la==14: self.state = 99 self.finally_() @@ -872,7 +879,7 @@ def component_definition(self): self.state = 103 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==11: + if _la==13: self.state = 102 self.display() @@ -899,7 +906,7 @@ def component_definition(self): self.state = 114 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==4: + if _la==6: self.state = 113 self.category() @@ -907,7 +914,7 @@ def component_definition(self): self.state = 119 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==40: + while _la==42: self.state = 116 self.metadata() self.state = 121 @@ -917,7 +924,7 @@ def component_definition(self): self.state = 123 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==38: + if _la==40: self.state = 122 self.shell() @@ -925,7 +932,7 @@ def component_definition(self): self.state = 126 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==37: + if _la==39: self.state = 125 self.dependency() @@ -933,7 +940,7 @@ def component_definition(self): self.state = 129 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==36: + if _la==38: self.state = 128 self.match(McCompParser.NoAcc) @@ -941,7 +948,7 @@ def component_definition(self): self.state = 132 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==23: + if _la==25: self.state = 131 self.share() @@ -949,7 +956,7 @@ def component_definition(self): self.state = 135 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==6: + if _la==8: self.state = 134 self.uservars() @@ -957,7 +964,7 @@ def component_definition(self): self.state = 138 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==8: + if _la==10: self.state = 137 self.declare() @@ -965,7 +972,7 @@ def component_definition(self): self.state = 141 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==13: + if _la==15: self.state = 140 self.initialize() @@ -973,7 +980,7 @@ def component_definition(self): self.state = 144 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==22: + if _la==24: self.state = 143 self.component_trace() @@ -981,7 +988,7 @@ def component_definition(self): self.state = 147 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==26: + if _la==28: self.state = 146 self.save() @@ -989,7 +996,7 @@ def component_definition(self): self.state = 150 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==12: + if _la==14: self.state = 149 self.finally_() @@ -997,7 +1004,7 @@ def component_definition(self): self.state = 153 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==11: + if _la==13: self.state = 152 self.display() @@ -1124,7 +1131,7 @@ def component_trace(self): self.state = 166 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==24: + if _la==26: self.state = 164 self.match(McCompParser.Extend) self.state = 165 @@ -1192,7 +1199,7 @@ def component_parameter_set(self): self.state = 171 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==9: + if _la==11: self.state = 170 self.component_define_parameters() @@ -1200,7 +1207,7 @@ def component_parameter_set(self): self.state = 174 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==21: + if _la==23: self.state = 173 self.component_set_parameters() @@ -1208,7 +1215,7 @@ def component_parameter_set(self): self.state = 177 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==15 or _la==16: + if _la==17 or _la==18: self.state = 176 self.component_out_parameters() @@ -1387,7 +1394,7 @@ def component_out_parameters(self): self.enterOuterAlt(localctx, 1) self.state = 187 _la = self._input.LA(1) - if not(_la==15 or _la==16): + if not(_la==17 or _la==18): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -1463,13 +1470,13 @@ def component_parameters(self): self.state = 200 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 41)) & ~0x3f) == 0 and ((1 << (_la - 41)) & 1125934274969607) != 0) or _la==177: + if ((((_la - 43)) & ~0x3f) == 0 and ((1 << (_la - 43)) & 1125934274969607) != 0) or _la==179: self.state = 192 self.component_parameter() self.state = 197 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==167: + while _la==169: self.state = 193 self.match(McCompParser.Comma) self.state = 194 @@ -1765,7 +1772,7 @@ def component_parameter(self): self.state = 205 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==76: + if _la==78: self.state = 204 self.match(McCompParser.Double) @@ -1775,7 +1782,7 @@ def component_parameter(self): self.state = 213 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==146: + if _la==148: self.state = 208 self.match(McCompParser.Assign) self.state = 211 @@ -1806,7 +1813,7 @@ def component_parameter(self): self.state = 222 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==146: + if _la==148: self.state = 217 self.match(McCompParser.Assign) self.state = 220 @@ -1833,11 +1840,11 @@ def component_parameter(self): self.state = 227 self._errHandler.sync(self) token = self._input.LA(1) - if token in [41]: + if token in [43]: self.state = 224 self.match(McCompParser.String) pass - elif token in [64]: + elif token in [66]: self.state = 225 self.match(McCompParser.Char) self.state = 226 @@ -1851,12 +1858,12 @@ def component_parameter(self): self.state = 232 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==146: + if _la==148: self.state = 230 self.match(McCompParser.Assign) self.state = 231 _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 1196268651020290) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 4785074604081154) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -1875,21 +1882,21 @@ def component_parameter(self): self.state = 243 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==146: + if _la==148: self.state = 236 self.match(McCompParser.Assign) self.state = 241 self._errHandler.sync(self) token = self._input.LA(1) - if token in [177]: + if token in [179]: self.state = 237 self.match(McCompParser.Identifier) pass - elif token in [134]: + elif token in [136]: self.state = 238 self.initializerlist() pass - elif token in [46]: + elif token in [48]: self.state = 239 self.match(McCompParser.Null) pass @@ -1930,21 +1937,21 @@ def component_parameter(self): self.state = 259 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==146: + if _la==148: self.state = 252 self.match(McCompParser.Assign) self.state = 257 self._errHandler.sync(self) token = self._input.LA(1) - if token in [177]: + if token in [179]: self.state = 253 self.match(McCompParser.Identifier) pass - elif token in [134]: + elif token in [136]: self.state = 254 self.initializerlist() pass - elif token in [46]: + elif token in [48]: self.state = 255 self.match(McCompParser.Null) pass @@ -1971,21 +1978,21 @@ def component_parameter(self): self.state = 271 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==146: + if _la==148: self.state = 264 self.match(McCompParser.Assign) self.state = 269 self._errHandler.sync(self) token = self._input.LA(1) - if token in [177]: + if token in [179]: self.state = 265 self.match(McCompParser.Identifier) pass - elif token in [134]: + elif token in [136]: self.state = 266 self.initializerlist() pass - elif token in [46]: + elif token in [48]: self.state = 267 self.match(McCompParser.Null) pass @@ -2118,7 +2125,7 @@ def share(self): self.state = 282 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==24: + if _la==26: self.state = 280 self.match(McCompParser.Extend) self.state = 281 @@ -2245,7 +2252,7 @@ def display(self): self.state = 293 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==24: + if _la==26: self.state = 291 self.match(McCompParser.Extend) self.state = 292 @@ -2315,14 +2322,14 @@ def component_ref(self): self.state = 304 self._errHandler.sync(self) token = self._input.LA(1) - if token in [20]: + if token in [22]: self.enterOuterAlt(localctx, 1) self.state = 297 self.match(McCompParser.Previous) self.state = 301 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==130: + if _la==132: self.state = 298 self.match(McCompParser.LeftParen) self.state = 299 @@ -2332,7 +2339,7 @@ def component_ref(self): pass - elif token in [177]: + elif token in [179]: self.enterOuterAlt(localctx, 2) self.state = 303 self.match(McCompParser.Identifier) @@ -2469,23 +2476,23 @@ def reference(self): self.state = 320 self._errHandler.sync(self) token = self._input.LA(1) - if token in [2]: + if token in [4]: self.enterOuterAlt(localctx, 1) self.state = 314 self.match(McCompParser.Absolute) pass - elif token in [18]: + elif token in [20]: self.enterOuterAlt(localctx, 2) self.state = 315 self.match(McCompParser.Relative) self.state = 318 self._errHandler.sync(self) token = self._input.LA(1) - if token in [2]: + if token in [4]: self.state = 316 self.match(McCompParser.Absolute) pass - elif token in [20, 177]: + elif token in [22, 179]: self.state = 317 self.component_ref() pass @@ -2665,7 +2672,7 @@ def declare(self): self.state = 332 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==24: + if _la==26: self.state = 330 self.match(McCompParser.Extend) self.state = 331 @@ -2845,7 +2852,7 @@ def initialize(self): self.state = 346 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==24: + if _la==26: self.state = 344 self.match(McCompParser.Extend) self.state = 345 @@ -2972,7 +2979,7 @@ def save(self): self.state = 357 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==24: + if _la==26: self.state = 355 self.match(McCompParser.Extend) self.state = 356 @@ -3099,7 +3106,7 @@ def finally_(self): self.state = 368 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==24: + if _la==26: self.state = 366 self.match(McCompParser.Extend) self.state = 367 @@ -3178,7 +3185,7 @@ def metadata(self): self.state = 373 localctx.mime = self._input.LT(1) _la = self._input.LA(1) - if not(_la==50 or _la==177): + if not(_la==52 or _la==179): localctx.mime = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -3186,7 +3193,7 @@ def metadata(self): self.state = 374 localctx.name = self._input.LT(1) _la = self._input.LA(1) - if not(_la==50 or _la==177): + if not(_la==52 or _la==179): localctx.name = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -3249,7 +3256,7 @@ def category(self): self.match(McCompParser.Category) self.state = 378 _la = self._input.LA(1) - if not(_la==50 or _la==177): + if not(_la==52 or _la==179): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -3326,7 +3333,7 @@ def initializerlist(self): self.state = 386 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==167: + while _la==169: self.state = 382 self.match(McCompParser.Comma) self.state = 383 @@ -3421,6 +3428,38 @@ def copyFrom(self, ctx:ParserRuleContext): super().copyFrom(ctx) + class ExpressionBinaryModContext(ExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a McCompParser.ExprContext + super().__init__(parser) + self.left = None # ExprContext + self.right = None # ExprContext + self.copyFrom(ctx) + + def Mod(self): + return self.getToken(McCompParser.Mod, 0) + def expr(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(McCompParser.ExprContext) + else: + return self.getTypedRuleContext(McCompParser.ExprContext,i) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterExpressionBinaryMod" ): + listener.enterExpressionBinaryMod(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitExpressionBinaryMod" ): + listener.exitExpressionBinaryMod(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExpressionBinaryMod" ): + return visitor.visitExpressionBinaryMod(self) + else: + return visitor.visitChildren(self) + + class ExpressionBinaryLessContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McCompParser.ExprContext @@ -3485,35 +3524,6 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) - class ExpressionGroupingContext(ExprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a McCompParser.ExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def LeftParen(self): - return self.getToken(McCompParser.LeftParen, 0) - def expr(self): - return self.getTypedRuleContext(McCompParser.ExprContext,0) - - def RightParen(self): - return self.getToken(McCompParser.RightParen, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionGrouping" ): - listener.enterExpressionGrouping(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionGrouping" ): - listener.exitExpressionGrouping(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionGrouping" ): - return visitor.visitExpressionGrouping(self) - else: - return visitor.visitChildren(self) - - class ExpressionBinaryLessEqualContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McCompParser.ExprContext @@ -3635,16 +3645,14 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) - class ExpressionExponentiationContext(ExprContext): + class ExpressionBinaryRightShiftContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McCompParser.ExprContext super().__init__(parser) - self.base = None # ExprContext - self.exponent = None # ExprContext + self.left = None # ExprContext + self.right = None # ExprContext self.copyFrom(ctx) - def Caret(self): - return self.getToken(McCompParser.Caret, 0) def expr(self, i:int=None): if i is None: return self.getTypedRuleContexts(McCompParser.ExprContext) @@ -3653,264 +3661,287 @@ def expr(self, i:int=None): def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionExponentiation" ): - listener.enterExpressionExponentiation(self) + if hasattr( listener, "enterExpressionBinaryRightShift" ): + listener.enterExpressionBinaryRightShift(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionExponentiation" ): - listener.exitExpressionExponentiation(self) + if hasattr( listener, "exitExpressionBinaryRightShift" ): + listener.exitExpressionBinaryRightShift(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionExponentiation" ): - return visitor.visitExpressionExponentiation(self) + if hasattr( visitor, "visitExpressionBinaryRightShift" ): + return visitor.visitExpressionBinaryRightShift(self) else: return visitor.visitChildren(self) - class ExpressionBinaryGreaterEqualContext(ExprContext): + class ExpressionMyselfContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McCompParser.ExprContext super().__init__(parser) - self.left = None # ExprContext - self.right = None # ExprContext self.copyFrom(ctx) - def GreaterEqual(self): - return self.getToken(McCompParser.GreaterEqual, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(McCompParser.ExprContext) - else: - return self.getTypedRuleContext(McCompParser.ExprContext,i) - + def Myself(self): + return self.getToken(McCompParser.Myself, 0) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionBinaryGreaterEqual" ): - listener.enterExpressionBinaryGreaterEqual(self) + if hasattr( listener, "enterExpressionMyself" ): + listener.enterExpressionMyself(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionBinaryGreaterEqual" ): - listener.exitExpressionBinaryGreaterEqual(self) + if hasattr( listener, "exitExpressionMyself" ): + listener.exitExpressionMyself(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionBinaryGreaterEqual" ): - return visitor.visitExpressionBinaryGreaterEqual(self) + if hasattr( visitor, "visitExpressionMyself" ): + return visitor.visitExpressionMyself(self) else: return visitor.visitChildren(self) - class ExpressionZeroContext(ExprContext): + class ExpressionPreviousContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McCompParser.ExprContext super().__init__(parser) self.copyFrom(ctx) + def Previous(self): + return self.getToken(McCompParser.Previous, 0) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionZero" ): - listener.enterExpressionZero(self) + if hasattr( listener, "enterExpressionPrevious" ): + listener.enterExpressionPrevious(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionZero" ): - listener.exitExpressionZero(self) + if hasattr( listener, "exitExpressionPrevious" ): + listener.exitExpressionPrevious(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionZero" ): - return visitor.visitExpressionZero(self) + if hasattr( visitor, "visitExpressionPrevious" ): + return visitor.visitExpressionPrevious(self) else: return visitor.visitChildren(self) - class ExpressionMyselfContext(ExprContext): + class ExpressionIdentifierContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McCompParser.ExprContext super().__init__(parser) self.copyFrom(ctx) - def Myself(self): - return self.getToken(McCompParser.Myself, 0) + def Identifier(self): + return self.getToken(McCompParser.Identifier, 0) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionMyself" ): - listener.enterExpressionMyself(self) + if hasattr( listener, "enterExpressionIdentifier" ): + listener.enterExpressionIdentifier(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionMyself" ): - listener.exitExpressionMyself(self) + if hasattr( listener, "exitExpressionIdentifier" ): + listener.exitExpressionIdentifier(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionMyself" ): - return visitor.visitExpressionMyself(self) + if hasattr( visitor, "visitExpressionIdentifier" ): + return visitor.visitExpressionIdentifier(self) else: return visitor.visitChildren(self) - class ExpressionUnaryPMContext(ExprContext): + class ExpressionStructAccessContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McCompParser.ExprContext super().__init__(parser) self.copyFrom(ctx) + def Identifier(self): + return self.getToken(McCompParser.Identifier, 0) + def Dot(self): + return self.getToken(McCompParser.Dot, 0) def expr(self): return self.getTypedRuleContext(McCompParser.ExprContext,0) - def Plus(self): - return self.getToken(McCompParser.Plus, 0) - def Minus(self): - return self.getToken(McCompParser.Minus, 0) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionUnaryPM" ): - listener.enterExpressionUnaryPM(self) + if hasattr( listener, "enterExpressionStructAccess" ): + listener.enterExpressionStructAccess(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionUnaryPM" ): - listener.exitExpressionUnaryPM(self) + if hasattr( listener, "exitExpressionStructAccess" ): + listener.exitExpressionStructAccess(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionUnaryPM" ): - return visitor.visitExpressionUnaryPM(self) + if hasattr( visitor, "visitExpressionStructAccess" ): + return visitor.visitExpressionStructAccess(self) else: return visitor.visitChildren(self) - class ExpressionPreviousContext(ExprContext): + class ExpressionFunctionCallContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McCompParser.ExprContext super().__init__(parser) + self._expr = None # ExprContext + self.args = list() # of ExprContexts self.copyFrom(ctx) - def Previous(self): - return self.getToken(McCompParser.Previous, 0) + def Identifier(self): + return self.getToken(McCompParser.Identifier, 0) + def LeftParen(self): + return self.getToken(McCompParser.LeftParen, 0) + def RightParen(self): + return self.getToken(McCompParser.RightParen, 0) + def expr(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(McCompParser.ExprContext) + else: + return self.getTypedRuleContext(McCompParser.ExprContext,i) + + def Comma(self, i:int=None): + if i is None: + return self.getTokens(McCompParser.Comma) + else: + return self.getToken(McCompParser.Comma, i) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionPrevious" ): - listener.enterExpressionPrevious(self) + if hasattr( listener, "enterExpressionFunctionCall" ): + listener.enterExpressionFunctionCall(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionPrevious" ): - listener.exitExpressionPrevious(self) + if hasattr( listener, "exitExpressionFunctionCall" ): + listener.exitExpressionFunctionCall(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionPrevious" ): - return visitor.visitExpressionPrevious(self) + if hasattr( visitor, "visitExpressionFunctionCall" ): + return visitor.visitExpressionFunctionCall(self) else: return visitor.visitChildren(self) - class ExpressionTrinaryLogicContext(ExprContext): + class ExpressionBinaryMDContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McCompParser.ExprContext super().__init__(parser) - self.test = None # ExprContext - self.true = None # ExprContext - self.false = None # ExprContext + self.left = None # ExprContext + self.right = None # ExprContext self.copyFrom(ctx) - def Question(self): - return self.getToken(McCompParser.Question, 0) - def Colon(self): - return self.getToken(McCompParser.Colon, 0) def expr(self, i:int=None): if i is None: return self.getTypedRuleContexts(McCompParser.ExprContext) else: return self.getTypedRuleContext(McCompParser.ExprContext,i) + def Star(self): + return self.getToken(McCompParser.Star, 0) + def Div(self): + return self.getToken(McCompParser.Div, 0) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionTrinaryLogic" ): - listener.enterExpressionTrinaryLogic(self) + if hasattr( listener, "enterExpressionBinaryMD" ): + listener.enterExpressionBinaryMD(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionTrinaryLogic" ): - listener.exitExpressionTrinaryLogic(self) + if hasattr( listener, "exitExpressionBinaryMD" ): + listener.exitExpressionBinaryMD(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionTrinaryLogic" ): - return visitor.visitExpressionTrinaryLogic(self) + if hasattr( visitor, "visitExpressionBinaryMD" ): + return visitor.visitExpressionBinaryMD(self) else: return visitor.visitChildren(self) - class ExpressionFloatContext(ExprContext): + class ExpressionStringContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McCompParser.ExprContext super().__init__(parser) + self._StringLiteral = None # Token + self.args = list() # of Tokens self.copyFrom(ctx) - def FloatingLiteral(self): - return self.getToken(McCompParser.FloatingLiteral, 0) + def StringLiteral(self, i:int=None): + if i is None: + return self.getTokens(McCompParser.StringLiteral) + else: + return self.getToken(McCompParser.StringLiteral, i) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionFloat" ): - listener.enterExpressionFloat(self) + if hasattr( listener, "enterExpressionString" ): + listener.enterExpressionString(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionFloat" ): - listener.exitExpressionFloat(self) + if hasattr( listener, "exitExpressionString" ): + listener.exitExpressionString(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionFloat" ): - return visitor.visitExpressionFloat(self) + if hasattr( visitor, "visitExpressionString" ): + return visitor.visitExpressionString(self) else: return visitor.visitChildren(self) - class ExpressionPointerAccessContext(ExprContext): + class ExpressionGroupingContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McCompParser.ExprContext super().__init__(parser) self.copyFrom(ctx) - def Identifier(self): - return self.getToken(McCompParser.Identifier, 0) - def Arrow(self): - return self.getToken(McCompParser.Arrow, 0) + def LeftParen(self): + return self.getToken(McCompParser.LeftParen, 0) def expr(self): return self.getTypedRuleContext(McCompParser.ExprContext,0) + def RightParen(self): + return self.getToken(McCompParser.RightParen, 0) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionPointerAccess" ): - listener.enterExpressionPointerAccess(self) + if hasattr( listener, "enterExpressionGrouping" ): + listener.enterExpressionGrouping(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionPointerAccess" ): - listener.exitExpressionPointerAccess(self) + if hasattr( listener, "exitExpressionGrouping" ): + listener.exitExpressionGrouping(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionPointerAccess" ): - return visitor.visitExpressionPointerAccess(self) + if hasattr( visitor, "visitExpressionGrouping" ): + return visitor.visitExpressionGrouping(self) else: return visitor.visitChildren(self) - class ExpressionIdentifierContext(ExprContext): + class ExpressionExponentiationContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McCompParser.ExprContext super().__init__(parser) + self.base = None # ExprContext + self.exponent = None # ExprContext self.copyFrom(ctx) - def Identifier(self): - return self.getToken(McCompParser.Identifier, 0) + def Caret(self): + return self.getToken(McCompParser.Caret, 0) + def expr(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(McCompParser.ExprContext) + else: + return self.getTypedRuleContext(McCompParser.ExprContext,i) + def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionIdentifier" ): - listener.enterExpressionIdentifier(self) + if hasattr( listener, "enterExpressionExponentiation" ): + listener.enterExpressionExponentiation(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionIdentifier" ): - listener.exitExpressionIdentifier(self) + if hasattr( listener, "exitExpressionExponentiation" ): + listener.exitExpressionExponentiation(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionIdentifier" ): - return visitor.visitExpressionIdentifier(self) + if hasattr( visitor, "visitExpressionExponentiation" ): + return visitor.visitExpressionExponentiation(self) else: return visitor.visitChildren(self) - class ExpressionBinaryEqualContext(ExprContext): + class ExpressionBinaryLeftShiftContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McCompParser.ExprContext super().__init__(parser) @@ -3918,8 +3949,6 @@ def __init__(self, parser, ctx:ParserRuleContext): # actually a McCompParser.Exp self.right = None # ExprContext self.copyFrom(ctx) - def Equal(self): - return self.getToken(McCompParser.Equal, 0) def expr(self, i:int=None): if i is None: return self.getTypedRuleContexts(McCompParser.ExprContext) @@ -3928,21 +3957,21 @@ def expr(self, i:int=None): def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionBinaryEqual" ): - listener.enterExpressionBinaryEqual(self) + if hasattr( listener, "enterExpressionBinaryLeftShift" ): + listener.enterExpressionBinaryLeftShift(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionBinaryEqual" ): - listener.exitExpressionBinaryEqual(self) + if hasattr( listener, "exitExpressionBinaryLeftShift" ): + listener.exitExpressionBinaryLeftShift(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionBinaryEqual" ): - return visitor.visitExpressionBinaryEqual(self) + if hasattr( visitor, "visitExpressionBinaryLeftShift" ): + return visitor.visitExpressionBinaryLeftShift(self) else: return visitor.visitChildren(self) - class ExpressionBinaryPMContext(ExprContext): + class ExpressionBinaryGreaterEqualContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McCompParser.ExprContext super().__init__(parser) @@ -3950,60 +3979,141 @@ def __init__(self, parser, ctx:ParserRuleContext): # actually a McCompParser.Exp self.right = None # ExprContext self.copyFrom(ctx) + def GreaterEqual(self): + return self.getToken(McCompParser.GreaterEqual, 0) def expr(self, i:int=None): if i is None: return self.getTypedRuleContexts(McCompParser.ExprContext) else: return self.getTypedRuleContext(McCompParser.ExprContext,i) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterExpressionBinaryGreaterEqual" ): + listener.enterExpressionBinaryGreaterEqual(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitExpressionBinaryGreaterEqual" ): + listener.exitExpressionBinaryGreaterEqual(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExpressionBinaryGreaterEqual" ): + return visitor.visitExpressionBinaryGreaterEqual(self) + else: + return visitor.visitChildren(self) + + + class ExpressionZeroContext(ExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a McCompParser.ExprContext + super().__init__(parser) + self.copyFrom(ctx) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterExpressionZero" ): + listener.enterExpressionZero(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitExpressionZero" ): + listener.exitExpressionZero(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExpressionZero" ): + return visitor.visitExpressionZero(self) + else: + return visitor.visitChildren(self) + + + class ExpressionUnaryPMContext(ExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a McCompParser.ExprContext + super().__init__(parser) + self.copyFrom(ctx) + + def expr(self): + return self.getTypedRuleContext(McCompParser.ExprContext,0) + def Plus(self): return self.getToken(McCompParser.Plus, 0) def Minus(self): return self.getToken(McCompParser.Minus, 0) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionBinaryPM" ): - listener.enterExpressionBinaryPM(self) + if hasattr( listener, "enterExpressionUnaryPM" ): + listener.enterExpressionUnaryPM(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionBinaryPM" ): - listener.exitExpressionBinaryPM(self) + if hasattr( listener, "exitExpressionUnaryPM" ): + listener.exitExpressionUnaryPM(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionBinaryPM" ): - return visitor.visitExpressionBinaryPM(self) + if hasattr( visitor, "visitExpressionUnaryPM" ): + return visitor.visitExpressionUnaryPM(self) else: return visitor.visitChildren(self) - class ExpressionUnaryLogicContext(ExprContext): + class ExpressionTrinaryLogicContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McCompParser.ExprContext super().__init__(parser) + self.test = None # ExprContext + self.true = None # ExprContext + self.false = None # ExprContext self.copyFrom(ctx) - def Not(self): - return self.getToken(McCompParser.Not, 0) - def expr(self): - return self.getTypedRuleContext(McCompParser.ExprContext,0) + def Question(self): + return self.getToken(McCompParser.Question, 0) + def Colon(self): + return self.getToken(McCompParser.Colon, 0) + def expr(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(McCompParser.ExprContext) + else: + return self.getTypedRuleContext(McCompParser.ExprContext,i) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionUnaryLogic" ): - listener.enterExpressionUnaryLogic(self) + if hasattr( listener, "enterExpressionTrinaryLogic" ): + listener.enterExpressionTrinaryLogic(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionUnaryLogic" ): - listener.exitExpressionUnaryLogic(self) + if hasattr( listener, "exitExpressionTrinaryLogic" ): + listener.exitExpressionTrinaryLogic(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionUnaryLogic" ): - return visitor.visitExpressionUnaryLogic(self) + if hasattr( visitor, "visitExpressionTrinaryLogic" ): + return visitor.visitExpressionTrinaryLogic(self) else: return visitor.visitChildren(self) - class ExpressionStructAccessContext(ExprContext): + class ExpressionFloatContext(ExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a McCompParser.ExprContext + super().__init__(parser) + self.copyFrom(ctx) + + def FloatingLiteral(self): + return self.getToken(McCompParser.FloatingLiteral, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterExpressionFloat" ): + listener.enterExpressionFloat(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitExpressionFloat" ): + listener.exitExpressionFloat(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExpressionFloat" ): + return visitor.visitExpressionFloat(self) + else: + return visitor.visitChildren(self) + + + class ExpressionPointerAccessContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McCompParser.ExprContext super().__init__(parser) @@ -4011,69 +4121,60 @@ def __init__(self, parser, ctx:ParserRuleContext): # actually a McCompParser.Exp def Identifier(self): return self.getToken(McCompParser.Identifier, 0) - def Dot(self): - return self.getToken(McCompParser.Dot, 0) + def Arrow(self): + return self.getToken(McCompParser.Arrow, 0) def expr(self): return self.getTypedRuleContext(McCompParser.ExprContext,0) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionStructAccess" ): - listener.enterExpressionStructAccess(self) + if hasattr( listener, "enterExpressionPointerAccess" ): + listener.enterExpressionPointerAccess(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionStructAccess" ): - listener.exitExpressionStructAccess(self) + if hasattr( listener, "exitExpressionPointerAccess" ): + listener.exitExpressionPointerAccess(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionStructAccess" ): - return visitor.visitExpressionStructAccess(self) + if hasattr( visitor, "visitExpressionPointerAccess" ): + return visitor.visitExpressionPointerAccess(self) else: return visitor.visitChildren(self) - class ExpressionFunctionCallContext(ExprContext): + class ExpressionBinaryEqualContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McCompParser.ExprContext super().__init__(parser) - self._expr = None # ExprContext - self.args = list() # of ExprContexts + self.left = None # ExprContext + self.right = None # ExprContext self.copyFrom(ctx) - def Identifier(self): - return self.getToken(McCompParser.Identifier, 0) - def LeftParen(self): - return self.getToken(McCompParser.LeftParen, 0) - def RightParen(self): - return self.getToken(McCompParser.RightParen, 0) + def Equal(self): + return self.getToken(McCompParser.Equal, 0) def expr(self, i:int=None): if i is None: return self.getTypedRuleContexts(McCompParser.ExprContext) else: return self.getTypedRuleContext(McCompParser.ExprContext,i) - def Comma(self, i:int=None): - if i is None: - return self.getTokens(McCompParser.Comma) - else: - return self.getToken(McCompParser.Comma, i) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionFunctionCall" ): - listener.enterExpressionFunctionCall(self) + if hasattr( listener, "enterExpressionBinaryEqual" ): + listener.enterExpressionBinaryEqual(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionFunctionCall" ): - listener.exitExpressionFunctionCall(self) + if hasattr( listener, "exitExpressionBinaryEqual" ): + listener.exitExpressionBinaryEqual(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionFunctionCall" ): - return visitor.visitExpressionFunctionCall(self) + if hasattr( visitor, "visitExpressionBinaryEqual" ): + return visitor.visitExpressionBinaryEqual(self) else: return visitor.visitChildren(self) - class ExpressionBinaryMDContext(ExprContext): + class ExpressionBinaryPMContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McCompParser.ExprContext super().__init__(parser) @@ -4087,51 +4188,49 @@ def expr(self, i:int=None): else: return self.getTypedRuleContext(McCompParser.ExprContext,i) - def Star(self): - return self.getToken(McCompParser.Star, 0) - def Div(self): - return self.getToken(McCompParser.Div, 0) + def Plus(self): + return self.getToken(McCompParser.Plus, 0) + def Minus(self): + return self.getToken(McCompParser.Minus, 0) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionBinaryMD" ): - listener.enterExpressionBinaryMD(self) + if hasattr( listener, "enterExpressionBinaryPM" ): + listener.enterExpressionBinaryPM(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionBinaryMD" ): - listener.exitExpressionBinaryMD(self) + if hasattr( listener, "exitExpressionBinaryPM" ): + listener.exitExpressionBinaryPM(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionBinaryMD" ): - return visitor.visitExpressionBinaryMD(self) + if hasattr( visitor, "visitExpressionBinaryPM" ): + return visitor.visitExpressionBinaryPM(self) else: return visitor.visitChildren(self) - class ExpressionStringContext(ExprContext): + class ExpressionUnaryLogicContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McCompParser.ExprContext super().__init__(parser) - self._StringLiteral = None # Token - self.args = list() # of Tokens self.copyFrom(ctx) - def StringLiteral(self, i:int=None): - if i is None: - return self.getTokens(McCompParser.StringLiteral) - else: - return self.getToken(McCompParser.StringLiteral, i) + def Not(self): + return self.getToken(McCompParser.Not, 0) + def expr(self): + return self.getTypedRuleContext(McCompParser.ExprContext,0) + def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionString" ): - listener.enterExpressionString(self) + if hasattr( listener, "enterExpressionUnaryLogic" ): + listener.enterExpressionUnaryLogic(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionString" ): - listener.exitExpressionString(self) + if hasattr( listener, "exitExpressionUnaryLogic" ): + listener.exitExpressionUnaryLogic(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionString" ): - return visitor.visitExpressionString(self) + if hasattr( visitor, "visitExpressionUnaryLogic" ): + return visitor.visitExpressionUnaryLogic(self) else: return visitor.visitChildren(self) @@ -4202,7 +4301,7 @@ def expr(self, _p:int=0): self.state = 406 self.match(McCompParser.Arrow) self.state = 407 - self.expr(20) + self.expr(23) pass elif la_ == 6: @@ -4214,7 +4313,7 @@ def expr(self, _p:int=0): self.state = 409 self.match(McCompParser.Dot) self.state = 410 - self.expr(19) + self.expr(22) pass elif la_ == 7: @@ -4245,7 +4344,7 @@ def expr(self, _p:int=0): self.state = 423 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==167: + while _la==169: self.state = 419 self.match(McCompParser.Comma) self.state = 420 @@ -4277,13 +4376,13 @@ def expr(self, _p:int=0): _prevctx = localctx self.state = 432 _la = self._input.LA(1) - if not(_la==136 or _la==137): + if not(_la==138 or _la==139): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() self.state = 433 - self.expr(15) + self.expr(18) pass elif la_ == 11: @@ -4322,7 +4421,7 @@ def expr(self, _p:int=0): self._ctx.stop = self._input.LT(-1) - self.state = 476 + self.state = 485 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,69,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: @@ -4330,7 +4429,7 @@ def expr(self, _p:int=0): if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 474 + self.state = 483 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,68,self._ctx) if la_ == 1: @@ -4338,13 +4437,13 @@ def expr(self, _p:int=0): localctx.base = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 441 - if not self.precpred(self._ctx, 14): + if not self.precpred(self._ctx, 17): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 17)") self.state = 442 self.match(McCompParser.Caret) self.state = 443 - localctx.exponent = self.expr(14) + localctx.exponent = self.expr(17) pass elif la_ == 2: @@ -4352,18 +4451,18 @@ def expr(self, _p:int=0): localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 444 - if not self.precpred(self._ctx, 13): + if not self.precpred(self._ctx, 16): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 16)") self.state = 445 _la = self._input.LA(1) - if not(_la==138 or _la==139): + if not(_la==140 or _la==141): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() self.state = 446 - localctx.right = self.expr(14) + localctx.right = self.expr(17) pass elif la_ == 3: @@ -4371,129 +4470,171 @@ def expr(self, _p:int=0): localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 447 - if not self.precpred(self._ctx, 12): + if not self.precpred(self._ctx, 15): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 15)") self.state = 448 _la = self._input.LA(1) - if not(_la==136 or _la==137): + if not(_la==138 or _la==139): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() self.state = 449 - localctx.right = self.expr(13) + localctx.right = self.expr(16) pass elif la_ == 4: - localctx = McCompParser.ExpressionBinaryEqualContext(self, McCompParser.ExprContext(self, _parentctx, _parentState)) + localctx = McCompParser.ExpressionBinaryModContext(self, McCompParser.ExprContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 450 + if not self.precpred(self._ctx, 14): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") + self.state = 451 + self.match(McCompParser.Mod) + self.state = 452 + localctx.right = self.expr(15) + pass + + elif la_ == 5: + localctx = McCompParser.ExpressionBinaryRightShiftContext(self, McCompParser.ExprContext(self, _parentctx, _parentState)) + localctx.left = _prevctx + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 453 + if not self.precpred(self._ctx, 13): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") + self.state = 454 + self.match(McCompParser.T__1) + self.state = 455 + localctx.right = self.expr(14) + pass + + elif la_ == 6: + localctx = McCompParser.ExpressionBinaryLeftShiftContext(self, McCompParser.ExprContext(self, _parentctx, _parentState)) + localctx.left = _prevctx + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 456 + if not self.precpred(self._ctx, 12): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") + self.state = 457 + self.match(McCompParser.T__2) + self.state = 458 + localctx.right = self.expr(13) + pass + + elif la_ == 7: + localctx = McCompParser.ExpressionBinaryEqualContext(self, McCompParser.ExprContext(self, _parentctx, _parentState)) + localctx.left = _prevctx + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 459 if not self.precpred(self._ctx, 10): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") - self.state = 451 + self.state = 460 self.match(McCompParser.Equal) - self.state = 452 + self.state = 461 localctx.right = self.expr(11) pass - elif la_ == 5: + elif la_ == 8: localctx = McCompParser.ExpressionBinaryLessEqualContext(self, McCompParser.ExprContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 453 + self.state = 462 if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") - self.state = 454 + self.state = 463 self.match(McCompParser.LessEqual) - self.state = 455 + self.state = 464 localctx.right = self.expr(10) pass - elif la_ == 6: + elif la_ == 9: localctx = McCompParser.ExpressionBinaryGreaterEqualContext(self, McCompParser.ExprContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 456 + self.state = 465 if not self.precpred(self._ctx, 8): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") - self.state = 457 + self.state = 466 self.match(McCompParser.GreaterEqual) - self.state = 458 + self.state = 467 localctx.right = self.expr(9) pass - elif la_ == 7: + elif la_ == 10: localctx = McCompParser.ExpressionBinaryLessContext(self, McCompParser.ExprContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 459 + self.state = 468 if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") - self.state = 460 + self.state = 469 self.match(McCompParser.Less) - self.state = 461 + self.state = 470 localctx.right = self.expr(8) pass - elif la_ == 8: + elif la_ == 11: localctx = McCompParser.ExpressionBinaryGreaterContext(self, McCompParser.ExprContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 462 + self.state = 471 if not self.precpred(self._ctx, 6): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") - self.state = 463 + self.state = 472 self.match(McCompParser.Greater) - self.state = 464 + self.state = 473 localctx.right = self.expr(7) pass - elif la_ == 9: + elif la_ == 12: localctx = McCompParser.ExpressionBinaryLogicContext(self, McCompParser.ExprContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 465 + self.state = 474 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 466 + self.state = 475 _la = self._input.LA(1) - if not(_la==163 or _la==164): + if not(_la==165 or _la==166): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 467 + self.state = 476 localctx.right = self.expr(5) pass - elif la_ == 10: + elif la_ == 13: localctx = McCompParser.ExpressionTrinaryLogicContext(self, McCompParser.ExprContext(self, _parentctx, _parentState)) localctx.test = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 468 + self.state = 477 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 469 + self.state = 478 self.match(McCompParser.Question) - self.state = 470 + self.state = 479 localctx.true = self.expr(0) - self.state = 471 + self.state = 480 self.match(McCompParser.Colon) - self.state = 472 + self.state = 481 localctx.false = self.expr(4) pass - self.state = 478 + self.state = 487 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,69,self._ctx) @@ -4545,9 +4686,9 @@ def shell(self): self.enterRule(localctx, 50, self.RULE_shell) try: self.enterOuterAlt(localctx, 1) - self.state = 479 + self.state = 488 self.match(McCompParser.Shell) - self.state = 480 + self.state = 489 self.match(McCompParser.StringLiteral) except RecognitionException as re: localctx.exception = re @@ -4635,26 +4776,26 @@ def search(self): localctx = McCompParser.SearchContext(self, self._ctx, self.state) self.enterRule(localctx, 52, self.RULE_search) try: - self.state = 487 + self.state = 496 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,70,self._ctx) if la_ == 1: localctx = McCompParser.SearchPathContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 482 + self.state = 491 self.match(McCompParser.Search) - self.state = 483 + self.state = 492 self.match(McCompParser.StringLiteral) pass elif la_ == 2: localctx = McCompParser.SearchShellContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 484 + self.state = 493 self.match(McCompParser.Search) - self.state = 485 + self.state = 494 self.match(McCompParser.Shell) - self.state = 486 + self.state = 495 self.match(McCompParser.StringLiteral) pass @@ -4704,7 +4845,7 @@ def unparsed_block(self): self.enterRule(localctx, 54, self.RULE_unparsed_block) try: self.enterOuterAlt(localctx, 1) - self.state = 489 + self.state = 498 self.match(McCompParser.UnparsedBlock) except RecognitionException as re: localctx.exception = re @@ -4728,42 +4869,54 @@ def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): def expr_sempred(self, localctx:ExprContext, predIndex:int): if predIndex == 0: - return self.precpred(self._ctx, 14) + return self.precpred(self._ctx, 17) if predIndex == 1: - return self.precpred(self._ctx, 13) + return self.precpred(self._ctx, 16) if predIndex == 2: - return self.precpred(self._ctx, 12) + return self.precpred(self._ctx, 15) if predIndex == 3: - return self.precpred(self._ctx, 10) + return self.precpred(self._ctx, 14) if predIndex == 4: - return self.precpred(self._ctx, 9) + return self.precpred(self._ctx, 13) if predIndex == 5: - return self.precpred(self._ctx, 8) + return self.precpred(self._ctx, 12) if predIndex == 6: - return self.precpred(self._ctx, 7) + return self.precpred(self._ctx, 10) if predIndex == 7: - return self.precpred(self._ctx, 6) + return self.precpred(self._ctx, 9) if predIndex == 8: - return self.precpred(self._ctx, 4) + return self.precpred(self._ctx, 8) if predIndex == 9: + return self.precpred(self._ctx, 7) + + + if predIndex == 10: + return self.precpred(self._ctx, 6) + + + if predIndex == 11: + return self.precpred(self._ctx, 4) + + + if predIndex == 12: return self.precpred(self._ctx, 3) diff --git a/mccode_antlr/grammar/McCompVisitor.py b/mccode_antlr/grammar/McCompVisitor.py index a4638b0..56e79b9 100644 --- a/mccode_antlr/grammar/McCompVisitor.py +++ b/mccode_antlr/grammar/McCompVisitor.py @@ -1,4 +1,4 @@ -# Generated from /home/g/Code/mccode_antlr-antlr/mccode_antlr/grammar/McComp.g4 by ANTLR 4.13.1 +# Generated from /home/gst/PycharmProjects/mccode4/mccode_antlr/grammar/McComp.g4 by ANTLR 4.13.1 from antlr4 import * if "." in __name__: from .McCompParser import McCompParser @@ -199,6 +199,11 @@ def visitAssignment(self, ctx:McCompParser.AssignmentContext): return self.visitChildren(ctx) + # Visit a parse tree produced by McCompParser#ExpressionBinaryMod. + def visitExpressionBinaryMod(self, ctx:McCompParser.ExpressionBinaryModContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by McCompParser#ExpressionBinaryLess. def visitExpressionBinaryLess(self, ctx:McCompParser.ExpressionBinaryLessContext): return self.visitChildren(ctx) @@ -209,11 +214,6 @@ def visitExpressionBinaryGreater(self, ctx:McCompParser.ExpressionBinaryGreaterC return self.visitChildren(ctx) - # Visit a parse tree produced by McCompParser#ExpressionGrouping. - def visitExpressionGrouping(self, ctx:McCompParser.ExpressionGroupingContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by McCompParser#ExpressionBinaryLessEqual. def visitExpressionBinaryLessEqual(self, ctx:McCompParser.ExpressionBinaryLessEqualContext): return self.visitChildren(ctx) @@ -234,88 +234,103 @@ def visitExpressionInteger(self, ctx:McCompParser.ExpressionIntegerContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McCompParser#ExpressionExponentiation. - def visitExpressionExponentiation(self, ctx:McCompParser.ExpressionExponentiationContext): + # Visit a parse tree produced by McCompParser#ExpressionBinaryRightShift. + def visitExpressionBinaryRightShift(self, ctx:McCompParser.ExpressionBinaryRightShiftContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McCompParser#ExpressionBinaryGreaterEqual. - def visitExpressionBinaryGreaterEqual(self, ctx:McCompParser.ExpressionBinaryGreaterEqualContext): + # Visit a parse tree produced by McCompParser#ExpressionMyself. + def visitExpressionMyself(self, ctx:McCompParser.ExpressionMyselfContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McCompParser#ExpressionZero. - def visitExpressionZero(self, ctx:McCompParser.ExpressionZeroContext): + # Visit a parse tree produced by McCompParser#ExpressionPrevious. + def visitExpressionPrevious(self, ctx:McCompParser.ExpressionPreviousContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McCompParser#ExpressionMyself. - def visitExpressionMyself(self, ctx:McCompParser.ExpressionMyselfContext): + # Visit a parse tree produced by McCompParser#ExpressionIdentifier. + def visitExpressionIdentifier(self, ctx:McCompParser.ExpressionIdentifierContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McCompParser#ExpressionUnaryPM. - def visitExpressionUnaryPM(self, ctx:McCompParser.ExpressionUnaryPMContext): + # Visit a parse tree produced by McCompParser#ExpressionStructAccess. + def visitExpressionStructAccess(self, ctx:McCompParser.ExpressionStructAccessContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McCompParser#ExpressionPrevious. - def visitExpressionPrevious(self, ctx:McCompParser.ExpressionPreviousContext): + # Visit a parse tree produced by McCompParser#ExpressionFunctionCall. + def visitExpressionFunctionCall(self, ctx:McCompParser.ExpressionFunctionCallContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McCompParser#ExpressionTrinaryLogic. - def visitExpressionTrinaryLogic(self, ctx:McCompParser.ExpressionTrinaryLogicContext): + # Visit a parse tree produced by McCompParser#ExpressionBinaryMD. + def visitExpressionBinaryMD(self, ctx:McCompParser.ExpressionBinaryMDContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McCompParser#ExpressionFloat. - def visitExpressionFloat(self, ctx:McCompParser.ExpressionFloatContext): + # Visit a parse tree produced by McCompParser#ExpressionString. + def visitExpressionString(self, ctx:McCompParser.ExpressionStringContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McCompParser#ExpressionPointerAccess. - def visitExpressionPointerAccess(self, ctx:McCompParser.ExpressionPointerAccessContext): + # Visit a parse tree produced by McCompParser#ExpressionGrouping. + def visitExpressionGrouping(self, ctx:McCompParser.ExpressionGroupingContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McCompParser#ExpressionIdentifier. - def visitExpressionIdentifier(self, ctx:McCompParser.ExpressionIdentifierContext): + # Visit a parse tree produced by McCompParser#ExpressionExponentiation. + def visitExpressionExponentiation(self, ctx:McCompParser.ExpressionExponentiationContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McCompParser#ExpressionBinaryEqual. - def visitExpressionBinaryEqual(self, ctx:McCompParser.ExpressionBinaryEqualContext): + # Visit a parse tree produced by McCompParser#ExpressionBinaryLeftShift. + def visitExpressionBinaryLeftShift(self, ctx:McCompParser.ExpressionBinaryLeftShiftContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McCompParser#ExpressionBinaryPM. - def visitExpressionBinaryPM(self, ctx:McCompParser.ExpressionBinaryPMContext): + # Visit a parse tree produced by McCompParser#ExpressionBinaryGreaterEqual. + def visitExpressionBinaryGreaterEqual(self, ctx:McCompParser.ExpressionBinaryGreaterEqualContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McCompParser#ExpressionUnaryLogic. - def visitExpressionUnaryLogic(self, ctx:McCompParser.ExpressionUnaryLogicContext): + # Visit a parse tree produced by McCompParser#ExpressionZero. + def visitExpressionZero(self, ctx:McCompParser.ExpressionZeroContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McCompParser#ExpressionStructAccess. - def visitExpressionStructAccess(self, ctx:McCompParser.ExpressionStructAccessContext): + # Visit a parse tree produced by McCompParser#ExpressionUnaryPM. + def visitExpressionUnaryPM(self, ctx:McCompParser.ExpressionUnaryPMContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McCompParser#ExpressionFunctionCall. - def visitExpressionFunctionCall(self, ctx:McCompParser.ExpressionFunctionCallContext): + # Visit a parse tree produced by McCompParser#ExpressionTrinaryLogic. + def visitExpressionTrinaryLogic(self, ctx:McCompParser.ExpressionTrinaryLogicContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McCompParser#ExpressionBinaryMD. - def visitExpressionBinaryMD(self, ctx:McCompParser.ExpressionBinaryMDContext): + # Visit a parse tree produced by McCompParser#ExpressionFloat. + def visitExpressionFloat(self, ctx:McCompParser.ExpressionFloatContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McCompParser#ExpressionString. - def visitExpressionString(self, ctx:McCompParser.ExpressionStringContext): + # Visit a parse tree produced by McCompParser#ExpressionPointerAccess. + def visitExpressionPointerAccess(self, ctx:McCompParser.ExpressionPointerAccessContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by McCompParser#ExpressionBinaryEqual. + def visitExpressionBinaryEqual(self, ctx:McCompParser.ExpressionBinaryEqualContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by McCompParser#ExpressionBinaryPM. + def visitExpressionBinaryPM(self, ctx:McCompParser.ExpressionBinaryPMContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by McCompParser#ExpressionUnaryLogic. + def visitExpressionUnaryLogic(self, ctx:McCompParser.ExpressionUnaryLogicContext): return self.visitChildren(ctx) diff --git a/mccode_antlr/grammar/McInstrLexer.py b/mccode_antlr/grammar/McInstrLexer.py index 943eaf5..c454beb 100644 --- a/mccode_antlr/grammar/McInstrLexer.py +++ b/mccode_antlr/grammar/McInstrLexer.py @@ -1,4 +1,4 @@ -# Generated from /home/g/Code/mccode_antlr-antlr/mccode_antlr/grammar/McInstr.g4 by ANTLR 4.13.1 +# Generated from /home/gst/PycharmProjects/mccode4/mccode_antlr/grammar/McInstr.g4 by ANTLR 4.13.1 from antlr4 import * from io import StringIO import sys @@ -10,7 +10,7 @@ def serializedATN(): return [ - 4,0,190,2472,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7, + 4,0,192,2497,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7, 5,2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12, 2,13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19, 7,19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25, @@ -46,946 +46,957 @@ def serializedATN(): 2,197,7,197,2,198,7,198,2,199,7,199,2,200,7,200,2,201,7,201,2,202, 7,202,2,203,7,203,2,204,7,204,2,205,7,205,2,206,7,206,2,207,7,207, 2,208,7,208,2,209,7,209,2,210,7,210,2,211,7,211,2,212,7,212,2,213, - 7,213,2,214,7,214,2,215,7,215,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,3,1,460,8,1,1,2,1,2,1,2,1,2,1,2,1,2,3,2,468,8,2,1,3,1,3,1, - 3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1, - 3,1,3,1,3,1,3,1,3,1,3,3,3,494,8,3,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1, - 4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1, - 4,1,4,1,4,1,4,3,4,523,8,4,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1, - 5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,3,5,549, - 8,5,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6, - 1,6,1,6,1,6,3,6,569,8,6,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,8,1,8, - 1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8, - 1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,3,8,609,8,8,1,9, - 1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,3,9,620,8,9,1,10,1,10,1,10,1,10, - 1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10, - 1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10, - 1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10, - 1,10,1,10,1,10,1,10,1,10,3,10,670,8,10,1,11,1,11,1,11,1,11,1,11, - 1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11, - 1,11,1,11,1,11,3,11,693,8,11,1,12,1,12,1,12,1,12,1,12,1,12,1,12, + 7,213,2,214,7,214,2,215,7,215,2,216,7,216,2,217,7,217,1,0,1,0,1, + 1,1,1,1,1,1,2,1,2,1,2,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1, + 3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,470,8, + 3,1,4,1,4,1,4,1,4,1,4,1,4,3,4,478,8,4,1,5,1,5,1,5,1,5,1,5,1,5,1, + 5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1, + 5,1,5,3,5,504,8,5,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1, + 6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,3, + 6,533,8,6,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1, + 7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,3,7,559,8,7,1,8,1,8,1, + 8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,3, + 8,579,8,8,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1, + 9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,3,9,602,8,9,1,10,1,10,1,10,1,10,1, + 10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1, + 10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,3, + 10,634,8,10,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,3,11,645, + 8,11,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12, 1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12, 1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12, - 1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12, - 1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12, - 1,12,3,12,755,8,12,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13, + 1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,3,12,695,8,12, 1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13, - 1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,3,13,787,8,13,1,14,1,14, + 1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,3,13,718,8,13,1,14,1,14, + 1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14, + 1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14, 1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14, - 1,14,1,14,1,14,3,14,807,8,14,1,15,1,15,1,15,1,15,1,15,1,15,1,15, + 1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14, + 1,14,1,14,1,14,1,14,1,14,1,14,3,14,780,8,14,1,15,1,15,1,15,1,15, + 1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15, 1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15, - 1,15,3,15,830,8,15,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16, - 1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16, - 1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,3,16,862,8,16,1,17,1,17, + 3,15,812,8,15,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16, + 1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,3,16,832,8,16,1,17,1,17, 1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17, - 1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,3,17,888,8,17,1,18, + 1,17,1,17,1,17,1,17,1,17,1,17,3,17,855,8,17,1,18,1,18,1,18,1,18, + 1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18, 1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18, - 1,18,1,18,1,18,1,18,1,18,1,18,1,18,3,18,911,8,18,1,19,1,19,1,19, + 3,18,887,8,18,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19, 1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19, - 1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,3,19,937,8,19,1,20,1,20, - 1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20, - 1,20,1,20,1,20,1,20,1,20,1,20,3,20,960,8,20,1,21,1,21,1,21,1,21, - 1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,3,21,977, - 8,21,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22, - 1,22,1,22,1,22,3,22,994,8,22,1,23,1,23,1,23,1,23,1,23,1,23,1,23, - 1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,3,23,1014, - 8,23,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,3,24,1031,8,24,1,25,1,25,1,25,1,25,1,25,1,25,1,25, - 1,25,1,25,1,25,1,25,1,25,3,25,1045,8,25,1,26,1,26,1,26,1,26,1,26, - 1,26,1,26,1,26,1,26,1,26,1,26,1,26,3,26,1059,8,26,1,27,1,27,1,27, - 1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,3,27,1073,8,27,1,28, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,3,28,1087, - 8,28,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29, - 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,3,29,1110,8,29,1,30, - 1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30, - 1,30,1,30,1,30,1,30,3,30,1130,8,30,1,31,1,31,1,31,1,31,1,31,1,31, - 1,31,1,31,1,31,1,31,1,31,1,31,3,31,1144,8,31,1,32,1,32,1,32,1,32, - 1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,3,32,1161, - 8,32,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33, - 1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33, - 1,33,1,33,3,33,1190,8,33,1,34,1,34,1,34,1,34,1,34,1,34,3,34,1198, - 8,34,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35, - 1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,3,35,1220,8,35,1,36,1,36, - 1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36, - 1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36, - 1,36,1,36,3,36,1252,8,36,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, - 1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,1269,8,37,1,38,1,38,1,38, + 1,19,3,19,913,8,19,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20, + 1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,3,20, + 936,8,20,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21, + 1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21, + 3,21,962,8,21,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22, + 1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,3,22,985, + 8,22,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23, + 1,23,1,23,1,23,3,23,1002,8,23,1,24,1,24,1,24,1,24,1,24,1,24,1,24, + 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,3,24,1019,8,24,1,25,1,25, + 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25, + 1,25,1,25,1,25,3,25,1039,8,25,1,26,1,26,1,26,1,26,1,26,1,26,1,26, + 1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,3,26,1056,8,26,1,27,1,27, + 1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,3,27,1070,8,27, + 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,3,28, + 1084,8,28,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29, + 1,29,3,29,1098,8,29,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30, + 1,30,1,30,1,30,3,30,1112,8,30,1,31,1,31,1,31,1,31,1,31,1,31,1,31, + 1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31, + 1,31,3,31,1135,8,31,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32, + 1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,3,32,1155,8,32,1,33, + 1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,3,33,1169, + 8,33,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34, + 1,34,1,34,1,34,3,34,1186,8,34,1,35,1,35,1,35,1,35,1,35,1,35,1,35, + 1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35, + 1,35,1,35,1,35,1,35,1,35,1,35,1,35,3,35,1215,8,35,1,36,1,36,1,36, + 1,36,1,36,1,36,3,36,1223,8,36,1,37,1,37,1,37,1,37,1,37,1,37,1,37, + 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, + 3,37,1245,8,37,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38, 1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38, - 1,38,1,38,3,38,1289,8,38,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39, - 1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39, - 1,39,1,39,1,39,3,39,1315,8,39,1,40,1,40,1,40,1,40,1,40,1,40,1,40, - 1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,42,1,42,1,42,1,42,1,42,1,42, - 1,42,1,43,1,43,1,43,1,43,5,43,1342,8,43,10,43,12,43,1345,9,43,1, - 43,1,43,1,43,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,45,1, - 45,1,45,1,45,1,45,1,46,1,46,3,46,1366,8,46,1,46,1,46,3,46,1370,8, - 46,1,46,1,46,3,46,1374,8,46,1,46,1,46,3,46,1378,8,46,3,46,1380,8, - 46,1,47,3,47,1383,8,47,1,47,1,47,4,47,1387,8,47,11,47,12,47,1388, - 1,47,1,47,1,48,1,48,3,48,1395,8,48,1,48,3,48,1398,8,48,1,48,1,48, - 1,48,3,48,1403,8,48,3,48,1405,8,48,1,49,3,49,1408,8,49,1,49,1,49, - 1,49,5,49,1413,8,49,10,49,12,49,1416,9,49,1,49,3,49,1419,8,49,1, - 50,1,50,3,50,1423,8,50,1,51,1,51,1,52,1,52,1,52,1,52,3,52,1431,8, - 52,1,53,1,53,5,53,1435,8,53,10,53,12,53,1438,9,53,1,53,1,53,3,53, - 1442,8,53,1,53,4,53,1445,8,53,11,53,12,53,1446,1,53,4,53,1450,8, - 53,11,53,12,53,1451,1,53,1,53,1,54,1,54,5,54,1458,8,54,10,54,12, - 54,1461,9,54,1,54,1,54,1,55,1,55,1,55,1,55,1,55,1,55,1,55,1,55,1, - 56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,57,1,57,1,57,1,57,1,58,1, - 58,1,58,1,58,1,58,1,59,1,59,1,59,1,59,1,59,1,60,1,60,1,60,1,60,1, - 60,1,60,1,61,1,61,1,61,1,61,1,61,1,62,1,62,1,62,1,62,1,62,1,62,1, - 63,1,63,1,63,1,63,1,63,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1, - 64,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1, - 66,1,66,1,66,1,67,1,67,1,67,1,67,1,67,1,67,1,68,1,68,1,68,1,68,1, - 68,1,68,1,68,1,68,1,68,1,68,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1, - 69,1,69,1,69,1,69,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1, - 71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,72,1,72,1,72,1,72,1, - 72,1,72,1,72,1,72,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,74,1,74,1, - 74,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,76,1,76,1,76,1,76,1,76,1, - 76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,77,1,77,1,77,1,77,1,77,1, - 78,1,78,1,78,1,78,1,78,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1, - 79,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,81,1,81,1,81,1,81,1,81,1, - 81,1,81,1,82,1,82,1,82,1,82,1,82,1,82,1,83,1,83,1,83,1,83,1,83,1, - 83,1,84,1,84,1,84,1,84,1,84,1,84,1,85,1,85,1,85,1,85,1,86,1,86,1, - 86,1,86,1,86,1,86,1,86,1,87,1,87,1,87,1,87,1,87,1,88,1,88,1,88,1, - 89,1,89,1,89,1,89,1,89,1,89,1,89,1,90,1,90,1,90,1,90,1,91,1,91,1, - 91,1,91,1,91,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,93,1,93,1, - 93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,94,1,94,1,94,1,94,1,95,1, - 95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,96,1,96,1,96,1,96,1,96,1, - 96,1,96,1,96,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,98,1, - 98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,99,1,99,1,99,1,99,1,99,1, - 99,1,99,1,99,1,99,1,99,1,100,1,100,1,100,1,100,1,100,1,100,1,100, - 1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,102,1,102, - 1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,102, - 1,102,1,102,1,102,1,102,1,103,1,103,1,103,1,103,1,103,1,103,1,103, - 1,104,1,104,1,104,1,104,1,104,1,104,1,105,1,105,1,105,1,105,1,105, - 1,105,1,105,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,107,1,107, - 1,107,1,107,1,107,1,107,1,107,1,108,1,108,1,108,1,108,1,108,1,108, - 1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,109,1,109,1,109, - 1,109,1,109,1,109,1,109,1,109,1,109,1,109,1,109,1,109,1,110,1,110, - 1,110,1,110,1,110,1,110,1,110,1,111,1,111,1,111,1,111,1,111,1,111, - 1,111,1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,113, - 1,113,1,113,1,113,1,113,1,114,1,114,1,114,1,114,1,114,1,114,1,114, - 1,114,1,114,1,114,1,114,1,114,1,114,1,115,1,115,1,115,1,115,1,115, - 1,115,1,116,1,116,1,116,1,116,1,116,1,117,1,117,1,117,1,117,1,118, - 1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,119,1,119,1,119,1,119, - 1,119,1,119,1,119,1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,120, - 1,120,1,121,1,121,1,121,1,121,1,121,1,121,1,122,1,122,1,122,1,122, - 1,122,1,122,1,122,1,122,1,122,1,123,1,123,1,123,1,123,1,123,1,123, - 1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,125,1,125,1,125, - 1,125,1,125,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126, - 1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,128,1,128,1,128, - 1,128,1,128,1,128,1,129,1,129,1,130,1,130,1,131,1,131,1,132,1,132, - 1,133,1,133,1,134,1,134,1,135,1,135,1,136,1,136,1,137,1,137,1,138, - 1,138,1,139,1,139,1,140,1,140,1,141,1,141,1,142,1,142,1,143,1,143, - 1,144,1,144,1,144,1,144,3,144,2041,8,144,1,145,1,145,1,146,1,146, - 1,147,1,147,1,148,1,148,1,148,1,149,1,149,1,149,1,150,1,150,1,150, + 1,38,1,38,1,38,1,38,1,38,1,38,1,38,3,38,1277,8,38,1,39,1,39,1,39, + 1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,3,39, + 1294,8,39,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40, + 1,40,1,40,1,40,1,40,1,40,1,40,1,40,3,40,1314,8,40,1,41,1,41,1,41, + 1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41, + 1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,3,41,1340,8,41,1,42,1,42, + 1,42,1,42,1,42,1,42,1,42,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,44, + 1,44,1,44,1,44,1,44,1,44,1,44,1,45,1,45,1,45,1,45,5,45,1367,8,45, + 10,45,12,45,1370,9,45,1,45,1,45,1,45,1,46,1,46,1,46,1,46,1,46,1, + 46,1,46,1,46,1,46,1,47,1,47,1,47,1,47,1,47,1,48,1,48,3,48,1391,8, + 48,1,48,1,48,3,48,1395,8,48,1,48,1,48,3,48,1399,8,48,1,48,1,48,3, + 48,1403,8,48,3,48,1405,8,48,1,49,3,49,1408,8,49,1,49,1,49,4,49,1412, + 8,49,11,49,12,49,1413,1,49,1,49,1,50,1,50,3,50,1420,8,50,1,50,3, + 50,1423,8,50,1,50,1,50,1,50,3,50,1428,8,50,3,50,1430,8,50,1,51,3, + 51,1433,8,51,1,51,1,51,1,51,5,51,1438,8,51,10,51,12,51,1441,9,51, + 1,51,3,51,1444,8,51,1,52,1,52,3,52,1448,8,52,1,53,1,53,1,54,1,54, + 1,54,1,54,3,54,1456,8,54,1,55,1,55,5,55,1460,8,55,10,55,12,55,1463, + 9,55,1,55,1,55,3,55,1467,8,55,1,55,4,55,1470,8,55,11,55,12,55,1471, + 1,55,4,55,1475,8,55,11,55,12,55,1476,1,55,1,55,1,56,1,56,5,56,1483, + 8,56,10,56,12,56,1486,9,56,1,56,1,56,1,57,1,57,1,57,1,57,1,57,1, + 57,1,57,1,57,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,59,1,59,1, + 59,1,59,1,60,1,60,1,60,1,60,1,60,1,61,1,61,1,61,1,61,1,61,1,62,1, + 62,1,62,1,62,1,62,1,62,1,63,1,63,1,63,1,63,1,63,1,64,1,64,1,64,1, + 64,1,64,1,64,1,65,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,66,1,66,1, + 66,1,66,1,66,1,66,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1, + 68,1,68,1,68,1,68,1,68,1,68,1,69,1,69,1,69,1,69,1,69,1,69,1,70,1, + 70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,71,1,71,1,71,1,71,1, + 71,1,71,1,71,1,71,1,71,1,71,1,71,1,72,1,72,1,72,1,72,1,72,1,72,1, + 72,1,72,1,72,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,74,1, + 74,1,74,1,74,1,74,1,74,1,74,1,74,1,75,1,75,1,75,1,75,1,75,1,75,1, + 75,1,76,1,76,1,76,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,78,1,78,1, + 78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,79,1,79,1, + 79,1,79,1,79,1,80,1,80,1,80,1,80,1,80,1,81,1,81,1,81,1,81,1,81,1, + 81,1,81,1,81,1,81,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,83,1,83,1, + 83,1,83,1,83,1,83,1,83,1,84,1,84,1,84,1,84,1,84,1,84,1,85,1,85,1, + 85,1,85,1,85,1,85,1,86,1,86,1,86,1,86,1,86,1,86,1,87,1,87,1,87,1, + 87,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,89,1,89,1,89,1,89,1,89,1, + 90,1,90,1,90,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,92,1,92,1,92,1, + 92,1,93,1,93,1,93,1,93,1,93,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1, + 94,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,96,1,96,1, + 96,1,96,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,98,1,98,1, + 98,1,98,1,98,1,98,1,98,1,98,1,99,1,99,1,99,1,99,1,99,1,99,1,99,1, + 99,1,99,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1, + 101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,102, + 1,102,1,102,1,102,1,102,1,102,1,102,1,103,1,103,1,103,1,103,1,103, + 1,103,1,103,1,103,1,103,1,104,1,104,1,104,1,104,1,104,1,104,1,104, + 1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,105, + 1,105,1,105,1,105,1,105,1,105,1,105,1,106,1,106,1,106,1,106,1,106, + 1,106,1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,108,1,108,1,108, + 1,108,1,108,1,108,1,108,1,109,1,109,1,109,1,109,1,109,1,109,1,109, + 1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110, + 1,110,1,110,1,110,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111, + 1,111,1,111,1,111,1,111,1,112,1,112,1,112,1,112,1,112,1,112,1,112, + 1,113,1,113,1,113,1,113,1,113,1,113,1,113,1,114,1,114,1,114,1,114, + 1,114,1,114,1,114,1,114,1,114,1,115,1,115,1,115,1,115,1,115,1,116, + 1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116, + 1,116,1,117,1,117,1,117,1,117,1,117,1,117,1,118,1,118,1,118,1,118, + 1,118,1,119,1,119,1,119,1,119,1,120,1,120,1,120,1,120,1,120,1,120, + 1,120,1,120,1,121,1,121,1,121,1,121,1,121,1,121,1,121,1,122,1,122, + 1,122,1,122,1,122,1,122,1,122,1,122,1,122,1,123,1,123,1,123,1,123, + 1,123,1,123,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124, + 1,125,1,125,1,125,1,125,1,125,1,125,1,126,1,126,1,126,1,126,1,126, + 1,126,1,126,1,126,1,127,1,127,1,127,1,127,1,127,1,128,1,128,1,128, + 1,128,1,128,1,128,1,128,1,128,1,128,1,129,1,129,1,129,1,129,1,129, + 1,129,1,129,1,129,1,130,1,130,1,130,1,130,1,130,1,130,1,131,1,131, + 1,132,1,132,1,133,1,133,1,134,1,134,1,135,1,135,1,136,1,136,1,137, + 1,137,1,138,1,138,1,139,1,139,1,140,1,140,1,141,1,141,1,142,1,142, + 1,143,1,143,1,144,1,144,1,145,1,145,1,146,1,146,1,146,1,146,3,146, + 2066,8,146,1,147,1,147,1,148,1,148,1,149,1,149,1,150,1,150,1,150, 1,151,1,151,1,151,1,152,1,152,1,152,1,153,1,153,1,153,1,154,1,154, - 1,154,1,155,1,155,1,155,1,156,1,156,1,156,1,156,1,157,1,157,1,157, - 1,157,1,158,1,158,1,158,1,159,1,159,1,159,1,160,1,160,1,160,1,161, - 1,161,1,161,1,162,1,162,1,162,1,162,1,162,3,162,2098,8,162,1,163, - 1,163,1,163,1,163,3,163,2104,8,163,1,164,1,164,1,164,1,165,1,165, - 1,165,1,166,1,166,1,167,1,167,1,167,1,167,1,168,1,168,1,168,1,169, - 1,169,1,170,1,170,1,171,1,171,1,171,1,172,1,172,1,173,1,173,1,174, - 1,174,1,174,1,175,1,175,1,175,1,175,1,176,1,176,1,176,1,176,1,176, - 1,177,1,177,1,177,1,177,1,177,1,177,1,177,1,177,1,177,1,177,3,177, - 2154,8,177,1,178,1,178,1,178,5,178,2159,8,178,10,178,12,178,2162, - 9,178,1,179,1,179,3,179,2166,8,179,1,180,1,180,1,181,1,181,1,182, - 1,182,3,182,2174,8,182,1,182,5,182,2177,8,182,10,182,12,182,2180, - 9,182,1,183,1,183,3,183,2184,8,183,1,183,5,183,2187,8,183,10,183, - 12,183,2190,9,183,1,184,1,184,1,184,1,184,3,184,2196,8,184,1,184, - 1,184,3,184,2200,8,184,1,184,5,184,2203,8,184,10,184,12,184,2206, - 9,184,1,185,1,185,1,185,1,185,3,185,2212,8,185,1,185,1,185,3,185, - 2216,8,185,1,185,5,185,2219,8,185,10,185,12,185,2222,9,185,1,186, - 1,186,1,187,1,187,1,188,1,188,1,189,1,189,1,190,1,190,3,190,2234, - 8,190,1,190,1,190,3,190,2238,8,190,1,190,1,190,3,190,2242,8,190, - 1,190,1,190,3,190,2246,8,190,3,190,2248,8,190,1,191,1,191,1,192, - 1,192,1,193,1,193,1,193,1,193,3,193,2258,8,193,1,194,1,194,1,194, - 3,194,2263,8,194,1,195,1,195,1,195,3,195,2268,8,195,1,196,1,196, - 1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196, - 1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196,3,196,2291,8,196, - 1,196,3,196,2294,8,196,1,196,1,196,1,196,1,196,3,196,2300,8,196, - 1,197,1,197,1,197,1,197,1,197,1,197,1,197,1,197,1,197,1,197,1,197, - 3,197,2313,8,197,1,198,1,198,1,198,1,198,4,198,2319,8,198,11,198, - 12,198,2320,1,199,3,199,2324,8,199,1,199,1,199,1,199,1,199,1,199, - 3,199,2331,8,199,1,200,1,200,3,200,2335,8,200,1,200,1,200,1,200, - 3,200,2340,8,200,1,200,3,200,2343,8,200,1,201,1,201,1,202,1,202, - 3,202,2349,8,202,1,202,5,202,2352,8,202,10,202,12,202,2355,9,202, - 1,203,1,203,1,204,1,204,1,204,3,204,2362,8,204,1,205,1,205,1,205, - 3,205,2367,8,205,1,206,1,206,1,206,1,206,1,206,1,206,5,206,2375, - 8,206,10,206,12,206,2378,9,206,1,206,1,206,5,206,2382,8,206,10,206, - 12,206,2385,9,206,1,206,1,206,1,206,1,206,5,206,2391,8,206,10,206, - 12,206,2394,9,206,1,206,1,206,1,207,1,207,1,207,1,207,1,207,1,207, - 1,207,1,207,1,207,1,207,1,207,1,207,3,207,2410,8,207,1,208,1,208, - 3,208,2414,8,208,1,208,1,208,1,208,1,208,1,208,1,208,3,208,2422, - 8,208,1,209,1,209,1,209,1,210,1,210,1,210,1,211,1,211,1,212,4,212, - 2433,8,212,11,212,12,212,2434,1,212,1,212,1,213,1,213,3,213,2441, - 8,213,1,213,3,213,2444,8,213,1,213,1,213,1,214,1,214,1,214,1,214, - 5,214,2452,8,214,10,214,12,214,2455,9,214,1,214,1,214,1,214,1,214, - 1,214,1,215,1,215,1,215,1,215,5,215,2466,8,215,10,215,12,215,2469, - 9,215,1,215,1,215,6,1343,1436,2376,2383,2392,2453,0,216,1,1,3,2, - 5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,10,21,11,23,12,25,13,27,14,29, - 15,31,16,33,17,35,18,37,19,39,20,41,21,43,22,45,23,47,24,49,25,51, - 26,53,27,55,28,57,29,59,30,61,31,63,32,65,33,67,34,69,35,71,36,73, - 37,75,38,77,39,79,40,81,41,83,42,85,43,87,44,89,45,91,46,93,47,95, - 48,97,49,99,50,101,51,103,52,105,53,107,54,109,55,111,56,113,57, - 115,58,117,59,119,60,121,61,123,62,125,63,127,64,129,65,131,66,133, - 67,135,68,137,69,139,70,141,71,143,72,145,73,147,74,149,75,151,76, - 153,77,155,78,157,79,159,80,161,81,163,82,165,83,167,84,169,85,171, - 86,173,87,175,88,177,89,179,90,181,91,183,92,185,93,187,94,189,95, - 191,96,193,97,195,98,197,99,199,100,201,101,203,102,205,103,207, - 104,209,105,211,106,213,107,215,108,217,109,219,110,221,111,223, - 112,225,113,227,114,229,115,231,116,233,117,235,118,237,119,239, - 120,241,121,243,122,245,123,247,124,249,125,251,126,253,127,255, - 128,257,129,259,130,261,131,263,132,265,133,267,134,269,135,271, - 136,273,137,275,138,277,139,279,140,281,141,283,142,285,143,287, - 144,289,145,291,146,293,147,295,148,297,149,299,150,301,151,303, - 152,305,153,307,154,309,155,311,156,313,157,315,158,317,159,319, - 160,321,161,323,162,325,163,327,164,329,165,331,166,333,167,335, - 168,337,169,339,170,341,171,343,172,345,173,347,174,349,175,351, - 176,353,0,355,0,357,177,359,0,361,0,363,0,365,178,367,179,369,180, - 371,181,373,0,375,0,377,0,379,0,381,182,383,0,385,0,387,0,389,0, - 391,0,393,0,395,0,397,0,399,0,401,0,403,0,405,0,407,0,409,0,411, - 0,413,0,415,183,417,184,419,185,421,186,423,0,425,187,427,188,429, - 189,431,190,1,0,20,3,0,76,76,85,85,117,117,1,0,10,10,3,0,65,90,95, - 95,97,122,1,0,48,57,1,0,49,57,1,0,48,55,3,0,48,57,65,70,97,102,1, - 0,48,49,2,0,85,85,117,117,2,0,76,76,108,108,4,0,10,10,13,13,39,39, - 92,92,2,0,43,43,45,45,4,0,70,70,76,76,102,102,108,108,4,0,10,10, - 13,13,34,34,92,92,2,0,34,34,40,41,4,0,10,10,13,13,32,32,40,40,1, - 0,41,41,4,0,10,10,13,13,32,32,34,34,2,0,9,9,32,32,2,0,10,10,13,13, - 2623,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0, - 0,11,1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0, - 0,21,1,0,0,0,0,23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0, - 0,31,1,0,0,0,0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,39,1,0,0,0, - 0,41,1,0,0,0,0,43,1,0,0,0,0,45,1,0,0,0,0,47,1,0,0,0,0,49,1,0,0,0, - 0,51,1,0,0,0,0,53,1,0,0,0,0,55,1,0,0,0,0,57,1,0,0,0,0,59,1,0,0,0, - 0,61,1,0,0,0,0,63,1,0,0,0,0,65,1,0,0,0,0,67,1,0,0,0,0,69,1,0,0,0, - 0,71,1,0,0,0,0,73,1,0,0,0,0,75,1,0,0,0,0,77,1,0,0,0,0,79,1,0,0,0, - 0,81,1,0,0,0,0,83,1,0,0,0,0,85,1,0,0,0,0,87,1,0,0,0,0,89,1,0,0,0, - 0,91,1,0,0,0,0,93,1,0,0,0,0,95,1,0,0,0,0,97,1,0,0,0,0,99,1,0,0,0, - 0,101,1,0,0,0,0,103,1,0,0,0,0,105,1,0,0,0,0,107,1,0,0,0,0,109,1, - 0,0,0,0,111,1,0,0,0,0,113,1,0,0,0,0,115,1,0,0,0,0,117,1,0,0,0,0, - 119,1,0,0,0,0,121,1,0,0,0,0,123,1,0,0,0,0,125,1,0,0,0,0,127,1,0, - 0,0,0,129,1,0,0,0,0,131,1,0,0,0,0,133,1,0,0,0,0,135,1,0,0,0,0,137, - 1,0,0,0,0,139,1,0,0,0,0,141,1,0,0,0,0,143,1,0,0,0,0,145,1,0,0,0, - 0,147,1,0,0,0,0,149,1,0,0,0,0,151,1,0,0,0,0,153,1,0,0,0,0,155,1, - 0,0,0,0,157,1,0,0,0,0,159,1,0,0,0,0,161,1,0,0,0,0,163,1,0,0,0,0, - 165,1,0,0,0,0,167,1,0,0,0,0,169,1,0,0,0,0,171,1,0,0,0,0,173,1,0, - 0,0,0,175,1,0,0,0,0,177,1,0,0,0,0,179,1,0,0,0,0,181,1,0,0,0,0,183, - 1,0,0,0,0,185,1,0,0,0,0,187,1,0,0,0,0,189,1,0,0,0,0,191,1,0,0,0, - 0,193,1,0,0,0,0,195,1,0,0,0,0,197,1,0,0,0,0,199,1,0,0,0,0,201,1, - 0,0,0,0,203,1,0,0,0,0,205,1,0,0,0,0,207,1,0,0,0,0,209,1,0,0,0,0, - 211,1,0,0,0,0,213,1,0,0,0,0,215,1,0,0,0,0,217,1,0,0,0,0,219,1,0, - 0,0,0,221,1,0,0,0,0,223,1,0,0,0,0,225,1,0,0,0,0,227,1,0,0,0,0,229, - 1,0,0,0,0,231,1,0,0,0,0,233,1,0,0,0,0,235,1,0,0,0,0,237,1,0,0,0, - 0,239,1,0,0,0,0,241,1,0,0,0,0,243,1,0,0,0,0,245,1,0,0,0,0,247,1, - 0,0,0,0,249,1,0,0,0,0,251,1,0,0,0,0,253,1,0,0,0,0,255,1,0,0,0,0, - 257,1,0,0,0,0,259,1,0,0,0,0,261,1,0,0,0,0,263,1,0,0,0,0,265,1,0, - 0,0,0,267,1,0,0,0,0,269,1,0,0,0,0,271,1,0,0,0,0,273,1,0,0,0,0,275, - 1,0,0,0,0,277,1,0,0,0,0,279,1,0,0,0,0,281,1,0,0,0,0,283,1,0,0,0, - 0,285,1,0,0,0,0,287,1,0,0,0,0,289,1,0,0,0,0,291,1,0,0,0,0,293,1, - 0,0,0,0,295,1,0,0,0,0,297,1,0,0,0,0,299,1,0,0,0,0,301,1,0,0,0,0, - 303,1,0,0,0,0,305,1,0,0,0,0,307,1,0,0,0,0,309,1,0,0,0,0,311,1,0, - 0,0,0,313,1,0,0,0,0,315,1,0,0,0,0,317,1,0,0,0,0,319,1,0,0,0,0,321, - 1,0,0,0,0,323,1,0,0,0,0,325,1,0,0,0,0,327,1,0,0,0,0,329,1,0,0,0, - 0,331,1,0,0,0,0,333,1,0,0,0,0,335,1,0,0,0,0,337,1,0,0,0,0,339,1, - 0,0,0,0,341,1,0,0,0,0,343,1,0,0,0,0,345,1,0,0,0,0,347,1,0,0,0,0, - 349,1,0,0,0,0,351,1,0,0,0,0,357,1,0,0,0,0,365,1,0,0,0,0,367,1,0, - 0,0,0,369,1,0,0,0,0,371,1,0,0,0,0,381,1,0,0,0,0,415,1,0,0,0,0,417, - 1,0,0,0,0,419,1,0,0,0,0,421,1,0,0,0,0,425,1,0,0,0,0,427,1,0,0,0, - 0,429,1,0,0,0,0,431,1,0,0,0,1,433,1,0,0,0,3,459,1,0,0,0,5,467,1, - 0,0,0,7,493,1,0,0,0,9,522,1,0,0,0,11,548,1,0,0,0,13,568,1,0,0,0, - 15,570,1,0,0,0,17,608,1,0,0,0,19,619,1,0,0,0,21,669,1,0,0,0,23,692, - 1,0,0,0,25,754,1,0,0,0,27,786,1,0,0,0,29,806,1,0,0,0,31,829,1,0, - 0,0,33,861,1,0,0,0,35,887,1,0,0,0,37,910,1,0,0,0,39,936,1,0,0,0, - 41,959,1,0,0,0,43,976,1,0,0,0,45,993,1,0,0,0,47,1013,1,0,0,0,49, - 1030,1,0,0,0,51,1044,1,0,0,0,53,1058,1,0,0,0,55,1072,1,0,0,0,57, - 1086,1,0,0,0,59,1109,1,0,0,0,61,1129,1,0,0,0,63,1143,1,0,0,0,65, - 1160,1,0,0,0,67,1189,1,0,0,0,69,1197,1,0,0,0,71,1219,1,0,0,0,73, - 1251,1,0,0,0,75,1268,1,0,0,0,77,1288,1,0,0,0,79,1314,1,0,0,0,81, - 1316,1,0,0,0,83,1323,1,0,0,0,85,1330,1,0,0,0,87,1337,1,0,0,0,89, - 1349,1,0,0,0,91,1358,1,0,0,0,93,1379,1,0,0,0,95,1382,1,0,0,0,97, - 1404,1,0,0,0,99,1407,1,0,0,0,101,1422,1,0,0,0,103,1424,1,0,0,0,105, - 1430,1,0,0,0,107,1432,1,0,0,0,109,1455,1,0,0,0,111,1464,1,0,0,0, - 113,1472,1,0,0,0,115,1480,1,0,0,0,117,1484,1,0,0,0,119,1489,1,0, - 0,0,121,1494,1,0,0,0,123,1500,1,0,0,0,125,1505,1,0,0,0,127,1511, - 1,0,0,0,129,1516,1,0,0,0,131,1525,1,0,0,0,133,1534,1,0,0,0,135,1540, - 1,0,0,0,137,1546,1,0,0,0,139,1556,1,0,0,0,141,1567,1,0,0,0,143,1576, - 1,0,0,0,145,1585,1,0,0,0,147,1593,1,0,0,0,149,1600,1,0,0,0,151,1603, - 1,0,0,0,153,1610,1,0,0,0,155,1623,1,0,0,0,157,1628,1,0,0,0,159,1633, - 1,0,0,0,161,1642,1,0,0,0,163,1649,1,0,0,0,165,1656,1,0,0,0,167,1662, - 1,0,0,0,169,1668,1,0,0,0,171,1674,1,0,0,0,173,1678,1,0,0,0,175,1685, - 1,0,0,0,177,1690,1,0,0,0,179,1693,1,0,0,0,181,1700,1,0,0,0,183,1704, - 1,0,0,0,185,1709,1,0,0,0,187,1717,1,0,0,0,189,1727,1,0,0,0,191,1731, - 1,0,0,0,193,1740,1,0,0,0,195,1748,1,0,0,0,197,1757,1,0,0,0,199,1766, - 1,0,0,0,201,1776,1,0,0,0,203,1783,1,0,0,0,205,1792,1,0,0,0,207,1809, - 1,0,0,0,209,1816,1,0,0,0,211,1822,1,0,0,0,213,1829,1,0,0,0,215,1836, - 1,0,0,0,217,1843,1,0,0,0,219,1857,1,0,0,0,221,1869,1,0,0,0,223,1876, - 1,0,0,0,225,1883,1,0,0,0,227,1892,1,0,0,0,229,1897,1,0,0,0,231,1910, - 1,0,0,0,233,1916,1,0,0,0,235,1921,1,0,0,0,237,1925,1,0,0,0,239,1933, - 1,0,0,0,241,1940,1,0,0,0,243,1949,1,0,0,0,245,1955,1,0,0,0,247,1964, - 1,0,0,0,249,1970,1,0,0,0,251,1978,1,0,0,0,253,1983,1,0,0,0,255,1992, - 1,0,0,0,257,2000,1,0,0,0,259,2006,1,0,0,0,261,2008,1,0,0,0,263,2010, - 1,0,0,0,265,2012,1,0,0,0,267,2014,1,0,0,0,269,2016,1,0,0,0,271,2018, - 1,0,0,0,273,2020,1,0,0,0,275,2022,1,0,0,0,277,2024,1,0,0,0,279,2026, - 1,0,0,0,281,2028,1,0,0,0,283,2030,1,0,0,0,285,2032,1,0,0,0,287,2034, - 1,0,0,0,289,2040,1,0,0,0,291,2042,1,0,0,0,293,2044,1,0,0,0,295,2046, - 1,0,0,0,297,2048,1,0,0,0,299,2051,1,0,0,0,301,2054,1,0,0,0,303,2057, - 1,0,0,0,305,2060,1,0,0,0,307,2063,1,0,0,0,309,2066,1,0,0,0,311,2069, - 1,0,0,0,313,2072,1,0,0,0,315,2076,1,0,0,0,317,2080,1,0,0,0,319,2083, - 1,0,0,0,321,2086,1,0,0,0,323,2089,1,0,0,0,325,2097,1,0,0,0,327,2103, - 1,0,0,0,329,2105,1,0,0,0,331,2108,1,0,0,0,333,2111,1,0,0,0,335,2113, - 1,0,0,0,337,2117,1,0,0,0,339,2120,1,0,0,0,341,2122,1,0,0,0,343,2124, - 1,0,0,0,345,2127,1,0,0,0,347,2129,1,0,0,0,349,2131,1,0,0,0,351,2134, - 1,0,0,0,353,2138,1,0,0,0,355,2153,1,0,0,0,357,2155,1,0,0,0,359,2165, - 1,0,0,0,361,2167,1,0,0,0,363,2169,1,0,0,0,365,2171,1,0,0,0,367,2181, - 1,0,0,0,369,2195,1,0,0,0,371,2211,1,0,0,0,373,2223,1,0,0,0,375,2225, - 1,0,0,0,377,2227,1,0,0,0,379,2229,1,0,0,0,381,2247,1,0,0,0,383,2249, - 1,0,0,0,385,2251,1,0,0,0,387,2257,1,0,0,0,389,2262,1,0,0,0,391,2267, - 1,0,0,0,393,2299,1,0,0,0,395,2312,1,0,0,0,397,2314,1,0,0,0,399,2330, - 1,0,0,0,401,2342,1,0,0,0,403,2344,1,0,0,0,405,2346,1,0,0,0,407,2356, - 1,0,0,0,409,2361,1,0,0,0,411,2366,1,0,0,0,413,2368,1,0,0,0,415,2409, - 1,0,0,0,417,2421,1,0,0,0,419,2423,1,0,0,0,421,2426,1,0,0,0,423,2429, - 1,0,0,0,425,2432,1,0,0,0,427,2443,1,0,0,0,429,2447,1,0,0,0,431,2461, - 1,0,0,0,433,434,5,48,0,0,434,2,1,0,0,0,435,436,5,65,0,0,436,437, - 5,66,0,0,437,438,5,83,0,0,438,439,5,79,0,0,439,440,5,76,0,0,440, - 441,5,85,0,0,441,442,5,84,0,0,442,460,5,69,0,0,443,444,5,65,0,0, - 444,445,5,98,0,0,445,446,5,115,0,0,446,447,5,111,0,0,447,448,5,108, - 0,0,448,449,5,117,0,0,449,450,5,116,0,0,450,460,5,101,0,0,451,452, - 5,97,0,0,452,453,5,98,0,0,453,454,5,115,0,0,454,455,5,111,0,0,455, - 456,5,108,0,0,456,457,5,117,0,0,457,458,5,116,0,0,458,460,5,101, - 0,0,459,435,1,0,0,0,459,443,1,0,0,0,459,451,1,0,0,0,460,4,1,0,0, - 0,461,462,5,65,0,0,462,468,5,84,0,0,463,464,5,65,0,0,464,468,5,116, - 0,0,465,466,5,97,0,0,466,468,5,116,0,0,467,461,1,0,0,0,467,463,1, - 0,0,0,467,465,1,0,0,0,468,6,1,0,0,0,469,470,5,67,0,0,470,471,5,65, - 0,0,471,472,5,84,0,0,472,473,5,69,0,0,473,474,5,71,0,0,474,475,5, - 79,0,0,475,476,5,82,0,0,476,494,5,89,0,0,477,478,5,67,0,0,478,479, - 5,97,0,0,479,480,5,116,0,0,480,481,5,101,0,0,481,482,5,103,0,0,482, - 483,5,111,0,0,483,484,5,114,0,0,484,494,5,121,0,0,485,486,5,99,0, - 0,486,487,5,97,0,0,487,488,5,116,0,0,488,489,5,101,0,0,489,490,5, - 103,0,0,490,491,5,111,0,0,491,492,5,114,0,0,492,494,5,121,0,0,493, - 469,1,0,0,0,493,477,1,0,0,0,493,485,1,0,0,0,494,8,1,0,0,0,495,496, - 5,67,0,0,496,497,5,79,0,0,497,498,5,77,0,0,498,499,5,80,0,0,499, - 500,5,79,0,0,500,501,5,78,0,0,501,502,5,69,0,0,502,503,5,78,0,0, - 503,523,5,84,0,0,504,505,5,67,0,0,505,506,5,111,0,0,506,507,5,109, - 0,0,507,508,5,112,0,0,508,509,5,111,0,0,509,510,5,110,0,0,510,511, - 5,101,0,0,511,512,5,110,0,0,512,523,5,116,0,0,513,514,5,99,0,0,514, - 515,5,111,0,0,515,516,5,109,0,0,516,517,5,112,0,0,517,518,5,111, - 0,0,518,519,5,110,0,0,519,520,5,101,0,0,520,521,5,110,0,0,521,523, - 5,116,0,0,522,495,1,0,0,0,522,504,1,0,0,0,522,513,1,0,0,0,523,10, - 1,0,0,0,524,525,5,85,0,0,525,526,5,83,0,0,526,527,5,69,0,0,527,528, - 5,82,0,0,528,529,5,86,0,0,529,530,5,65,0,0,530,531,5,82,0,0,531, - 549,5,83,0,0,532,533,5,85,0,0,533,534,5,115,0,0,534,535,5,101,0, - 0,535,536,5,114,0,0,536,537,5,86,0,0,537,538,5,97,0,0,538,539,5, - 114,0,0,539,549,5,115,0,0,540,541,5,117,0,0,541,542,5,115,0,0,542, - 543,5,101,0,0,543,544,5,114,0,0,544,545,5,118,0,0,545,546,5,97,0, - 0,546,547,5,114,0,0,547,549,5,115,0,0,548,524,1,0,0,0,548,532,1, - 0,0,0,548,540,1,0,0,0,549,12,1,0,0,0,550,551,5,68,0,0,551,552,5, - 69,0,0,552,553,5,70,0,0,553,554,5,73,0,0,554,555,5,78,0,0,555,569, - 5,69,0,0,556,557,5,68,0,0,557,558,5,101,0,0,558,559,5,102,0,0,559, - 560,5,105,0,0,560,561,5,110,0,0,561,569,5,101,0,0,562,563,5,100, - 0,0,563,564,5,101,0,0,564,565,5,102,0,0,565,566,5,105,0,0,566,567, - 5,110,0,0,567,569,5,101,0,0,568,550,1,0,0,0,568,556,1,0,0,0,568, - 562,1,0,0,0,569,14,1,0,0,0,570,571,5,68,0,0,571,572,5,69,0,0,572, - 573,5,67,0,0,573,574,5,76,0,0,574,575,5,65,0,0,575,576,5,82,0,0, - 576,577,5,69,0,0,577,16,1,0,0,0,578,579,5,68,0,0,579,580,5,69,0, - 0,580,581,5,70,0,0,581,582,5,73,0,0,582,583,5,78,0,0,583,584,5,73, - 0,0,584,585,5,84,0,0,585,586,5,73,0,0,586,587,5,79,0,0,587,609,5, - 78,0,0,588,589,5,68,0,0,589,590,5,101,0,0,590,591,5,102,0,0,591, - 592,5,105,0,0,592,593,5,110,0,0,593,594,5,105,0,0,594,595,5,116, - 0,0,595,596,5,105,0,0,596,597,5,111,0,0,597,609,5,110,0,0,598,599, - 5,100,0,0,599,600,5,101,0,0,600,601,5,102,0,0,601,602,5,105,0,0, - 602,603,5,110,0,0,603,604,5,105,0,0,604,605,5,116,0,0,605,606,5, - 105,0,0,606,607,5,111,0,0,607,609,5,110,0,0,608,578,1,0,0,0,608, - 588,1,0,0,0,608,598,1,0,0,0,609,18,1,0,0,0,610,611,5,69,0,0,611, - 612,5,78,0,0,612,620,5,68,0,0,613,614,5,69,0,0,614,615,5,110,0,0, - 615,620,5,100,0,0,616,617,5,101,0,0,617,618,5,110,0,0,618,620,5, - 100,0,0,619,610,1,0,0,0,619,613,1,0,0,0,619,616,1,0,0,0,620,20,1, - 0,0,0,621,622,5,77,0,0,622,623,5,67,0,0,623,624,5,68,0,0,624,625, - 5,73,0,0,625,626,5,83,0,0,626,627,5,80,0,0,627,628,5,76,0,0,628, - 629,5,65,0,0,629,670,5,89,0,0,630,631,5,68,0,0,631,632,5,73,0,0, - 632,633,5,83,0,0,633,634,5,80,0,0,634,635,5,76,0,0,635,636,5,65, - 0,0,636,670,5,89,0,0,637,638,5,77,0,0,638,639,5,99,0,0,639,640,5, - 68,0,0,640,641,5,105,0,0,641,642,5,115,0,0,642,643,5,112,0,0,643, - 644,5,108,0,0,644,645,5,97,0,0,645,670,5,121,0,0,646,647,5,109,0, - 0,647,648,5,99,0,0,648,649,5,100,0,0,649,650,5,105,0,0,650,651,5, - 115,0,0,651,652,5,112,0,0,652,653,5,108,0,0,653,654,5,97,0,0,654, - 670,5,121,0,0,655,656,5,68,0,0,656,657,5,105,0,0,657,658,5,115,0, - 0,658,659,5,112,0,0,659,660,5,108,0,0,660,661,5,97,0,0,661,670,5, - 121,0,0,662,663,5,100,0,0,663,664,5,105,0,0,664,665,5,115,0,0,665, - 666,5,112,0,0,666,667,5,108,0,0,667,668,5,97,0,0,668,670,5,121,0, - 0,669,621,1,0,0,0,669,630,1,0,0,0,669,637,1,0,0,0,669,646,1,0,0, - 0,669,655,1,0,0,0,669,662,1,0,0,0,670,22,1,0,0,0,671,672,5,70,0, - 0,672,673,5,73,0,0,673,674,5,78,0,0,674,675,5,65,0,0,675,676,5,76, - 0,0,676,677,5,76,0,0,677,693,5,89,0,0,678,679,5,70,0,0,679,680,5, - 105,0,0,680,681,5,110,0,0,681,682,5,97,0,0,682,683,5,108,0,0,683, - 684,5,108,0,0,684,693,5,121,0,0,685,686,5,102,0,0,686,687,5,105, - 0,0,687,688,5,110,0,0,688,689,5,97,0,0,689,690,5,108,0,0,690,691, - 5,108,0,0,691,693,5,121,0,0,692,671,1,0,0,0,692,678,1,0,0,0,692, - 685,1,0,0,0,693,24,1,0,0,0,694,695,5,73,0,0,695,696,5,78,0,0,696, - 697,5,73,0,0,697,698,5,84,0,0,698,699,5,73,0,0,699,700,5,65,0,0, - 700,701,5,76,0,0,701,702,5,73,0,0,702,703,5,90,0,0,703,755,5,69, - 0,0,704,705,5,73,0,0,705,706,5,78,0,0,706,707,5,73,0,0,707,708,5, - 84,0,0,708,709,5,73,0,0,709,710,5,65,0,0,710,711,5,76,0,0,711,712, - 5,73,0,0,712,713,5,83,0,0,713,755,5,69,0,0,714,715,5,73,0,0,715, - 716,5,110,0,0,716,717,5,105,0,0,717,718,5,116,0,0,718,719,5,105, - 0,0,719,720,5,97,0,0,720,721,5,108,0,0,721,722,5,105,0,0,722,723, - 5,122,0,0,723,755,5,101,0,0,724,725,5,105,0,0,725,726,5,110,0,0, - 726,727,5,105,0,0,727,728,5,116,0,0,728,729,5,105,0,0,729,730,5, - 97,0,0,730,731,5,108,0,0,731,732,5,105,0,0,732,733,5,122,0,0,733, - 755,5,101,0,0,734,735,5,73,0,0,735,736,5,110,0,0,736,737,5,105,0, - 0,737,738,5,116,0,0,738,739,5,105,0,0,739,740,5,97,0,0,740,741,5, - 108,0,0,741,742,5,105,0,0,742,743,5,115,0,0,743,755,5,101,0,0,744, - 745,5,105,0,0,745,746,5,110,0,0,746,747,5,105,0,0,747,748,5,116, - 0,0,748,749,5,105,0,0,749,750,5,97,0,0,750,751,5,108,0,0,751,752, - 5,105,0,0,752,753,5,115,0,0,753,755,5,101,0,0,754,694,1,0,0,0,754, - 704,1,0,0,0,754,714,1,0,0,0,754,724,1,0,0,0,754,734,1,0,0,0,754, - 744,1,0,0,0,755,26,1,0,0,0,756,757,5,73,0,0,757,758,5,78,0,0,758, - 759,5,83,0,0,759,760,5,84,0,0,760,761,5,82,0,0,761,762,5,85,0,0, - 762,763,5,77,0,0,763,764,5,69,0,0,764,765,5,78,0,0,765,787,5,84, - 0,0,766,767,5,73,0,0,767,768,5,110,0,0,768,769,5,115,0,0,769,770, - 5,116,0,0,770,771,5,114,0,0,771,772,5,117,0,0,772,773,5,109,0,0, - 773,774,5,101,0,0,774,775,5,110,0,0,775,787,5,116,0,0,776,777,5, - 105,0,0,777,778,5,110,0,0,778,779,5,115,0,0,779,780,5,116,0,0,780, - 781,5,114,0,0,781,782,5,117,0,0,782,783,5,109,0,0,783,784,5,101, - 0,0,784,785,5,110,0,0,785,787,5,116,0,0,786,756,1,0,0,0,786,766, - 1,0,0,0,786,776,1,0,0,0,787,28,1,0,0,0,788,789,5,79,0,0,789,790, - 5,85,0,0,790,791,5,84,0,0,791,792,5,80,0,0,792,793,5,85,0,0,793, - 807,5,84,0,0,794,795,5,79,0,0,795,796,5,117,0,0,796,797,5,116,0, - 0,797,798,5,112,0,0,798,799,5,117,0,0,799,807,5,116,0,0,800,801, - 5,111,0,0,801,802,5,117,0,0,802,803,5,116,0,0,803,804,5,112,0,0, - 804,805,5,117,0,0,805,807,5,116,0,0,806,788,1,0,0,0,806,794,1,0, - 0,0,806,800,1,0,0,0,807,30,1,0,0,0,808,809,5,80,0,0,809,810,5,82, - 0,0,810,811,5,73,0,0,811,812,5,86,0,0,812,813,5,65,0,0,813,814,5, - 84,0,0,814,830,5,69,0,0,815,816,5,80,0,0,816,817,5,114,0,0,817,818, - 5,105,0,0,818,819,5,118,0,0,819,820,5,97,0,0,820,821,5,116,0,0,821, - 830,5,101,0,0,822,823,5,112,0,0,823,824,5,114,0,0,824,825,5,105, - 0,0,825,826,5,118,0,0,826,827,5,97,0,0,827,828,5,116,0,0,828,830, - 5,101,0,0,829,808,1,0,0,0,829,815,1,0,0,0,829,822,1,0,0,0,830,32, - 1,0,0,0,831,832,5,80,0,0,832,833,5,65,0,0,833,834,5,82,0,0,834,835, - 5,65,0,0,835,836,5,77,0,0,836,837,5,69,0,0,837,838,5,84,0,0,838, - 839,5,69,0,0,839,840,5,82,0,0,840,862,5,83,0,0,841,842,5,80,0,0, - 842,843,5,97,0,0,843,844,5,114,0,0,844,845,5,97,0,0,845,846,5,109, - 0,0,846,847,5,101,0,0,847,848,5,116,0,0,848,849,5,101,0,0,849,850, - 5,114,0,0,850,862,5,115,0,0,851,852,5,112,0,0,852,853,5,97,0,0,853, - 854,5,114,0,0,854,855,5,97,0,0,855,856,5,109,0,0,856,857,5,101,0, - 0,857,858,5,116,0,0,858,859,5,101,0,0,859,860,5,114,0,0,860,862, - 5,115,0,0,861,831,1,0,0,0,861,841,1,0,0,0,861,851,1,0,0,0,862,34, - 1,0,0,0,863,864,5,82,0,0,864,865,5,69,0,0,865,866,5,76,0,0,866,867, - 5,65,0,0,867,868,5,84,0,0,868,869,5,73,0,0,869,870,5,86,0,0,870, - 888,5,69,0,0,871,872,5,82,0,0,872,873,5,101,0,0,873,874,5,108,0, - 0,874,875,5,97,0,0,875,876,5,116,0,0,876,877,5,105,0,0,877,878,5, - 118,0,0,878,888,5,101,0,0,879,880,5,114,0,0,880,881,5,101,0,0,881, - 882,5,108,0,0,882,883,5,97,0,0,883,884,5,116,0,0,884,885,5,105,0, - 0,885,886,5,118,0,0,886,888,5,101,0,0,887,863,1,0,0,0,887,871,1, - 0,0,0,887,879,1,0,0,0,888,36,1,0,0,0,889,890,5,82,0,0,890,891,5, - 79,0,0,891,892,5,84,0,0,892,893,5,65,0,0,893,894,5,84,0,0,894,895, - 5,69,0,0,895,911,5,68,0,0,896,897,5,82,0,0,897,898,5,111,0,0,898, - 899,5,116,0,0,899,900,5,97,0,0,900,901,5,116,0,0,901,902,5,101,0, - 0,902,911,5,100,0,0,903,904,5,114,0,0,904,905,5,111,0,0,905,906, - 5,116,0,0,906,907,5,97,0,0,907,908,5,116,0,0,908,909,5,101,0,0,909, - 911,5,100,0,0,910,889,1,0,0,0,910,896,1,0,0,0,910,903,1,0,0,0,911, - 38,1,0,0,0,912,913,5,80,0,0,913,914,5,82,0,0,914,915,5,69,0,0,915, - 916,5,86,0,0,916,917,5,73,0,0,917,918,5,79,0,0,918,919,5,85,0,0, - 919,937,5,83,0,0,920,921,5,80,0,0,921,922,5,114,0,0,922,923,5,101, - 0,0,923,924,5,118,0,0,924,925,5,105,0,0,925,926,5,111,0,0,926,927, - 5,117,0,0,927,937,5,115,0,0,928,929,5,112,0,0,929,930,5,114,0,0, - 930,931,5,101,0,0,931,932,5,118,0,0,932,933,5,105,0,0,933,934,5, - 111,0,0,934,935,5,117,0,0,935,937,5,115,0,0,936,912,1,0,0,0,936, - 920,1,0,0,0,936,928,1,0,0,0,937,40,1,0,0,0,938,939,5,83,0,0,939, - 940,5,69,0,0,940,941,5,84,0,0,941,942,5,84,0,0,942,943,5,73,0,0, - 943,944,5,78,0,0,944,960,5,71,0,0,945,946,5,83,0,0,946,947,5,101, - 0,0,947,948,5,116,0,0,948,949,5,116,0,0,949,950,5,105,0,0,950,951, - 5,110,0,0,951,960,5,103,0,0,952,953,5,115,0,0,953,954,5,101,0,0, - 954,955,5,116,0,0,955,956,5,116,0,0,956,957,5,105,0,0,957,958,5, - 110,0,0,958,960,5,103,0,0,959,938,1,0,0,0,959,945,1,0,0,0,959,952, - 1,0,0,0,960,42,1,0,0,0,961,962,5,84,0,0,962,963,5,82,0,0,963,964, - 5,65,0,0,964,965,5,67,0,0,965,977,5,69,0,0,966,967,5,84,0,0,967, - 968,5,114,0,0,968,969,5,97,0,0,969,970,5,99,0,0,970,977,5,101,0, - 0,971,972,5,116,0,0,972,973,5,114,0,0,973,974,5,97,0,0,974,975,5, - 99,0,0,975,977,5,101,0,0,976,961,1,0,0,0,976,966,1,0,0,0,976,971, - 1,0,0,0,977,44,1,0,0,0,978,979,5,83,0,0,979,980,5,72,0,0,980,981, - 5,65,0,0,981,982,5,82,0,0,982,994,5,69,0,0,983,984,5,83,0,0,984, - 985,5,104,0,0,985,986,5,97,0,0,986,987,5,114,0,0,987,994,5,101,0, - 0,988,989,5,115,0,0,989,990,5,104,0,0,990,991,5,97,0,0,991,992,5, - 114,0,0,992,994,5,101,0,0,993,978,1,0,0,0,993,983,1,0,0,0,993,988, - 1,0,0,0,994,46,1,0,0,0,995,996,5,69,0,0,996,997,5,88,0,0,997,998, - 5,84,0,0,998,999,5,69,0,0,999,1000,5,78,0,0,1000,1014,5,68,0,0,1001, - 1002,5,69,0,0,1002,1003,5,120,0,0,1003,1004,5,116,0,0,1004,1005, - 5,101,0,0,1005,1006,5,110,0,0,1006,1014,5,100,0,0,1007,1008,5,101, - 0,0,1008,1009,5,120,0,0,1009,1010,5,116,0,0,1010,1011,5,101,0,0, - 1011,1012,5,110,0,0,1012,1014,5,100,0,0,1013,995,1,0,0,0,1013,1001, - 1,0,0,0,1013,1007,1,0,0,0,1014,48,1,0,0,0,1015,1016,5,71,0,0,1016, - 1017,5,82,0,0,1017,1018,5,79,0,0,1018,1019,5,85,0,0,1019,1031,5, - 80,0,0,1020,1021,5,71,0,0,1021,1022,5,114,0,0,1022,1023,5,111,0, - 0,1023,1024,5,117,0,0,1024,1031,5,112,0,0,1025,1026,5,103,0,0,1026, - 1027,5,114,0,0,1027,1028,5,111,0,0,1028,1029,5,117,0,0,1029,1031, - 5,112,0,0,1030,1015,1,0,0,0,1030,1020,1,0,0,0,1030,1025,1,0,0,0, - 1031,50,1,0,0,0,1032,1033,5,83,0,0,1033,1034,5,65,0,0,1034,1035, - 5,86,0,0,1035,1045,5,69,0,0,1036,1037,5,83,0,0,1037,1038,5,97,0, - 0,1038,1039,5,118,0,0,1039,1045,5,101,0,0,1040,1041,5,115,0,0,1041, - 1042,5,97,0,0,1042,1043,5,118,0,0,1043,1045,5,101,0,0,1044,1032, - 1,0,0,0,1044,1036,1,0,0,0,1044,1040,1,0,0,0,1045,52,1,0,0,0,1046, - 1047,5,74,0,0,1047,1048,5,85,0,0,1048,1049,5,77,0,0,1049,1059,5, - 80,0,0,1050,1051,5,74,0,0,1051,1052,5,117,0,0,1052,1053,5,109,0, - 0,1053,1059,5,112,0,0,1054,1055,5,106,0,0,1055,1056,5,117,0,0,1056, - 1057,5,109,0,0,1057,1059,5,112,0,0,1058,1046,1,0,0,0,1058,1050,1, - 0,0,0,1058,1054,1,0,0,0,1059,54,1,0,0,0,1060,1061,5,87,0,0,1061, - 1062,5,72,0,0,1062,1063,5,69,0,0,1063,1073,5,78,0,0,1064,1065,5, - 87,0,0,1065,1066,5,104,0,0,1066,1067,5,101,0,0,1067,1073,5,110,0, - 0,1068,1069,5,119,0,0,1069,1070,5,104,0,0,1070,1071,5,101,0,0,1071, - 1073,5,110,0,0,1072,1060,1,0,0,0,1072,1064,1,0,0,0,1072,1068,1,0, - 0,0,1073,56,1,0,0,0,1074,1075,5,78,0,0,1075,1076,5,69,0,0,1076,1077, - 5,88,0,0,1077,1087,5,84,0,0,1078,1079,5,78,0,0,1079,1080,5,101,0, - 0,1080,1081,5,120,0,0,1081,1087,5,116,0,0,1082,1083,5,110,0,0,1083, - 1084,5,101,0,0,1084,1085,5,120,0,0,1085,1087,5,116,0,0,1086,1074, - 1,0,0,0,1086,1078,1,0,0,0,1086,1082,1,0,0,0,1087,58,1,0,0,0,1088, - 1089,5,73,0,0,1089,1090,5,84,0,0,1090,1091,5,69,0,0,1091,1092,5, - 82,0,0,1092,1093,5,65,0,0,1093,1094,5,84,0,0,1094,1110,5,69,0,0, - 1095,1096,5,73,0,0,1096,1097,5,116,0,0,1097,1098,5,101,0,0,1098, - 1099,5,114,0,0,1099,1100,5,97,0,0,1100,1101,5,116,0,0,1101,1110, - 5,101,0,0,1102,1103,5,105,0,0,1103,1104,5,116,0,0,1104,1105,5,101, - 0,0,1105,1106,5,114,0,0,1106,1107,5,97,0,0,1107,1108,5,116,0,0,1108, - 1110,5,101,0,0,1109,1088,1,0,0,0,1109,1095,1,0,0,0,1109,1102,1,0, - 0,0,1110,60,1,0,0,0,1111,1112,5,77,0,0,1112,1113,5,89,0,0,1113,1114, - 5,83,0,0,1114,1115,5,69,0,0,1115,1116,5,76,0,0,1116,1130,5,70,0, - 0,1117,1118,5,77,0,0,1118,1119,5,121,0,0,1119,1120,5,115,0,0,1120, - 1121,5,101,0,0,1121,1122,5,108,0,0,1122,1130,5,102,0,0,1123,1124, - 5,109,0,0,1124,1125,5,121,0,0,1125,1126,5,115,0,0,1126,1127,5,101, - 0,0,1127,1128,5,108,0,0,1128,1130,5,102,0,0,1129,1111,1,0,0,0,1129, - 1117,1,0,0,0,1129,1123,1,0,0,0,1130,62,1,0,0,0,1131,1132,5,67,0, - 0,1132,1133,5,79,0,0,1133,1134,5,80,0,0,1134,1144,5,89,0,0,1135, - 1136,5,67,0,0,1136,1137,5,111,0,0,1137,1138,5,112,0,0,1138,1144, - 5,121,0,0,1139,1140,5,99,0,0,1140,1141,5,111,0,0,1141,1142,5,112, - 0,0,1142,1144,5,121,0,0,1143,1131,1,0,0,0,1143,1135,1,0,0,0,1143, - 1139,1,0,0,0,1144,64,1,0,0,0,1145,1146,5,83,0,0,1146,1147,5,80,0, - 0,1147,1148,5,76,0,0,1148,1149,5,73,0,0,1149,1161,5,84,0,0,1150, - 1151,5,83,0,0,1151,1152,5,112,0,0,1152,1153,5,108,0,0,1153,1154, - 5,105,0,0,1154,1161,5,116,0,0,1155,1156,5,115,0,0,1156,1157,5,112, - 0,0,1157,1158,5,108,0,0,1158,1159,5,105,0,0,1159,1161,5,116,0,0, - 1160,1145,1,0,0,0,1160,1150,1,0,0,0,1160,1155,1,0,0,0,1161,66,1, - 0,0,0,1162,1163,5,82,0,0,1163,1164,5,69,0,0,1164,1165,5,77,0,0,1165, - 1166,5,79,0,0,1166,1167,5,86,0,0,1167,1168,5,65,0,0,1168,1169,5, - 66,0,0,1169,1170,5,76,0,0,1170,1190,5,69,0,0,1171,1172,5,82,0,0, - 1172,1173,5,101,0,0,1173,1174,5,109,0,0,1174,1175,5,111,0,0,1175, - 1176,5,118,0,0,1176,1177,5,97,0,0,1177,1178,5,98,0,0,1178,1179,5, - 101,0,0,1179,1190,5,108,0,0,1180,1181,5,114,0,0,1181,1182,5,101, - 0,0,1182,1183,5,109,0,0,1183,1184,5,111,0,0,1184,1185,5,118,0,0, - 1185,1186,5,97,0,0,1186,1187,5,98,0,0,1187,1188,5,108,0,0,1188,1190, - 5,101,0,0,1189,1162,1,0,0,0,1189,1171,1,0,0,0,1189,1180,1,0,0,0, - 1190,68,1,0,0,0,1191,1192,5,67,0,0,1192,1193,5,80,0,0,1193,1198, - 5,85,0,0,1194,1195,5,99,0,0,1195,1196,5,112,0,0,1196,1198,5,117, - 0,0,1197,1191,1,0,0,0,1197,1194,1,0,0,0,1198,70,1,0,0,0,1199,1200, - 5,78,0,0,1200,1201,5,79,0,0,1201,1202,5,65,0,0,1202,1203,5,67,0, - 0,1203,1220,5,67,0,0,1204,1205,5,78,0,0,1205,1206,5,111,0,0,1206, - 1207,5,65,0,0,1207,1208,5,67,0,0,1208,1220,5,67,0,0,1209,1210,5, - 78,0,0,1210,1211,5,111,0,0,1211,1212,5,65,0,0,1212,1213,5,99,0,0, - 1213,1220,5,99,0,0,1214,1215,5,110,0,0,1215,1216,5,111,0,0,1216, - 1217,5,97,0,0,1217,1218,5,99,0,0,1218,1220,5,99,0,0,1219,1199,1, - 0,0,0,1219,1204,1,0,0,0,1219,1209,1,0,0,0,1219,1214,1,0,0,0,1220, - 72,1,0,0,0,1221,1222,5,68,0,0,1222,1223,5,69,0,0,1223,1224,5,80, - 0,0,1224,1225,5,69,0,0,1225,1226,5,78,0,0,1226,1227,5,68,0,0,1227, - 1228,5,69,0,0,1228,1229,5,78,0,0,1229,1230,5,67,0,0,1230,1252,5, - 89,0,0,1231,1232,5,68,0,0,1232,1233,5,101,0,0,1233,1234,5,112,0, - 0,1234,1235,5,101,0,0,1235,1236,5,110,0,0,1236,1237,5,100,0,0,1237, - 1238,5,101,0,0,1238,1239,5,110,0,0,1239,1240,5,99,0,0,1240,1252, - 5,121,0,0,1241,1242,5,100,0,0,1242,1243,5,101,0,0,1243,1244,5,112, - 0,0,1244,1245,5,101,0,0,1245,1246,5,110,0,0,1246,1247,5,100,0,0, - 1247,1248,5,101,0,0,1248,1249,5,110,0,0,1249,1250,5,99,0,0,1250, - 1252,5,121,0,0,1251,1221,1,0,0,0,1251,1231,1,0,0,0,1251,1241,1,0, - 0,0,1252,74,1,0,0,0,1253,1254,5,83,0,0,1254,1255,5,72,0,0,1255,1256, - 5,69,0,0,1256,1257,5,76,0,0,1257,1269,5,76,0,0,1258,1259,5,83,0, - 0,1259,1260,5,104,0,0,1260,1261,5,101,0,0,1261,1262,5,108,0,0,1262, - 1269,5,108,0,0,1263,1264,5,115,0,0,1264,1265,5,104,0,0,1265,1266, - 5,101,0,0,1266,1267,5,108,0,0,1267,1269,5,108,0,0,1268,1253,1,0, - 0,0,1268,1258,1,0,0,0,1268,1263,1,0,0,0,1269,76,1,0,0,0,1270,1271, - 5,83,0,0,1271,1272,5,69,0,0,1272,1273,5,65,0,0,1273,1274,5,82,0, - 0,1274,1275,5,67,0,0,1275,1289,5,72,0,0,1276,1277,5,83,0,0,1277, - 1278,5,101,0,0,1278,1279,5,97,0,0,1279,1280,5,114,0,0,1280,1281, - 5,99,0,0,1281,1289,5,104,0,0,1282,1283,5,115,0,0,1283,1284,5,101, - 0,0,1284,1285,5,97,0,0,1285,1286,5,114,0,0,1286,1287,5,99,0,0,1287, - 1289,5,104,0,0,1288,1270,1,0,0,0,1288,1276,1,0,0,0,1288,1282,1,0, - 0,0,1289,78,1,0,0,0,1290,1291,5,77,0,0,1291,1292,5,69,0,0,1292,1293, - 5,84,0,0,1293,1294,5,65,0,0,1294,1295,5,68,0,0,1295,1296,5,65,0, - 0,1296,1297,5,84,0,0,1297,1315,5,65,0,0,1298,1299,5,77,0,0,1299, - 1300,5,101,0,0,1300,1301,5,116,0,0,1301,1302,5,97,0,0,1302,1303, - 5,68,0,0,1303,1304,5,97,0,0,1304,1305,5,116,0,0,1305,1315,5,97,0, - 0,1306,1307,5,109,0,0,1307,1308,5,101,0,0,1308,1309,5,116,0,0,1309, - 1310,5,97,0,0,1310,1311,5,100,0,0,1311,1312,5,97,0,0,1312,1313,5, - 116,0,0,1313,1315,5,97,0,0,1314,1290,1,0,0,0,1314,1298,1,0,0,0,1314, - 1306,1,0,0,0,1315,80,1,0,0,0,1316,1317,5,115,0,0,1317,1318,5,116, - 0,0,1318,1319,5,114,0,0,1319,1320,5,105,0,0,1320,1321,5,110,0,0, - 1321,1322,5,103,0,0,1322,82,1,0,0,0,1323,1324,5,118,0,0,1324,1325, - 5,101,0,0,1325,1326,5,99,0,0,1326,1327,5,116,0,0,1327,1328,5,111, - 0,0,1328,1329,5,114,0,0,1329,84,1,0,0,0,1330,1331,5,115,0,0,1331, - 1332,5,121,0,0,1332,1333,5,109,0,0,1333,1334,5,98,0,0,1334,1335, - 5,111,0,0,1335,1336,5,108,0,0,1336,86,1,0,0,0,1337,1338,5,37,0,0, - 1338,1339,5,123,0,0,1339,1343,1,0,0,0,1340,1342,9,0,0,0,1341,1340, - 1,0,0,0,1342,1345,1,0,0,0,1343,1344,1,0,0,0,1343,1341,1,0,0,0,1344, - 1346,1,0,0,0,1345,1343,1,0,0,0,1346,1347,5,37,0,0,1347,1348,5,125, - 0,0,1348,88,1,0,0,0,1349,1350,5,37,0,0,1350,1351,5,105,0,0,1351, - 1352,5,110,0,0,1352,1353,5,99,0,0,1353,1354,5,108,0,0,1354,1355, - 5,117,0,0,1355,1356,5,100,0,0,1356,1357,5,101,0,0,1357,90,1,0,0, - 0,1358,1359,5,78,0,0,1359,1360,5,85,0,0,1360,1361,5,76,0,0,1361, - 1362,5,76,0,0,1362,92,1,0,0,0,1363,1365,3,365,182,0,1364,1366,3, - 381,190,0,1365,1364,1,0,0,0,1365,1366,1,0,0,0,1366,1380,1,0,0,0, - 1367,1369,3,367,183,0,1368,1370,3,381,190,0,1369,1368,1,0,0,0,1369, - 1370,1,0,0,0,1370,1380,1,0,0,0,1371,1373,3,369,184,0,1372,1374,3, - 381,190,0,1373,1372,1,0,0,0,1373,1374,1,0,0,0,1374,1380,1,0,0,0, - 1375,1377,3,371,185,0,1376,1378,3,381,190,0,1377,1376,1,0,0,0,1377, - 1378,1,0,0,0,1378,1380,1,0,0,0,1379,1363,1,0,0,0,1379,1367,1,0,0, - 0,1379,1371,1,0,0,0,1379,1375,1,0,0,0,1380,94,1,0,0,0,1381,1383, - 7,0,0,0,1382,1381,1,0,0,0,1382,1383,1,0,0,0,1383,1384,1,0,0,0,1384, - 1386,5,39,0,0,1385,1387,3,389,194,0,1386,1385,1,0,0,0,1387,1388, - 1,0,0,0,1388,1386,1,0,0,0,1388,1389,1,0,0,0,1389,1390,1,0,0,0,1390, - 1391,5,39,0,0,1391,96,1,0,0,0,1392,1394,3,399,199,0,1393,1395,3, - 401,200,0,1394,1393,1,0,0,0,1394,1395,1,0,0,0,1395,1397,1,0,0,0, - 1396,1398,3,407,203,0,1397,1396,1,0,0,0,1397,1398,1,0,0,0,1398,1405, - 1,0,0,0,1399,1400,3,405,202,0,1400,1402,3,401,200,0,1401,1403,3, - 407,203,0,1402,1401,1,0,0,0,1402,1403,1,0,0,0,1403,1405,1,0,0,0, - 1404,1392,1,0,0,0,1404,1399,1,0,0,0,1405,98,1,0,0,0,1406,1408,3, - 409,204,0,1407,1406,1,0,0,0,1407,1408,1,0,0,0,1408,1418,1,0,0,0, - 1409,1419,3,413,206,0,1410,1414,5,34,0,0,1411,1413,3,411,205,0,1412, - 1411,1,0,0,0,1413,1416,1,0,0,0,1414,1412,1,0,0,0,1414,1415,1,0,0, - 0,1415,1417,1,0,0,0,1416,1414,1,0,0,0,1417,1419,5,34,0,0,1418,1409, - 1,0,0,0,1418,1410,1,0,0,0,1419,100,1,0,0,0,1420,1423,3,165,82,0, - 1421,1423,3,233,116,0,1422,1420,1,0,0,0,1422,1421,1,0,0,0,1423,102, - 1,0,0,0,1424,1425,3,193,96,0,1425,104,1,0,0,0,1426,1431,3,415,207, - 0,1427,1431,3,417,208,0,1428,1431,3,419,209,0,1429,1431,3,421,210, - 0,1430,1426,1,0,0,0,1430,1427,1,0,0,0,1430,1428,1,0,0,0,1430,1429, - 1,0,0,0,1431,106,1,0,0,0,1432,1444,5,35,0,0,1433,1435,8,1,0,0,1434, - 1433,1,0,0,0,1435,1438,1,0,0,0,1436,1437,1,0,0,0,1436,1434,1,0,0, - 0,1437,1439,1,0,0,0,1438,1436,1,0,0,0,1439,1441,5,92,0,0,1440,1442, - 5,13,0,0,1441,1440,1,0,0,0,1441,1442,1,0,0,0,1442,1443,1,0,0,0,1443, - 1445,5,10,0,0,1444,1436,1,0,0,0,1445,1446,1,0,0,0,1446,1444,1,0, - 0,0,1446,1447,1,0,0,0,1447,1449,1,0,0,0,1448,1450,8,1,0,0,1449,1448, - 1,0,0,0,1450,1451,1,0,0,0,1451,1449,1,0,0,0,1451,1452,1,0,0,0,1452, - 1453,1,0,0,0,1453,1454,6,53,0,0,1454,108,1,0,0,0,1455,1459,5,35, - 0,0,1456,1458,8,1,0,0,1457,1456,1,0,0,0,1458,1461,1,0,0,0,1459,1457, - 1,0,0,0,1459,1460,1,0,0,0,1460,1462,1,0,0,0,1461,1459,1,0,0,0,1462, - 1463,6,54,0,0,1463,110,1,0,0,0,1464,1465,5,97,0,0,1465,1466,5,108, - 0,0,1466,1467,5,105,0,0,1467,1468,5,103,0,0,1468,1469,5,110,0,0, - 1469,1470,5,97,0,0,1470,1471,5,115,0,0,1471,112,1,0,0,0,1472,1473, - 5,97,0,0,1473,1474,5,108,0,0,1474,1475,5,105,0,0,1475,1476,5,103, - 0,0,1476,1477,5,110,0,0,1477,1478,5,111,0,0,1478,1479,5,102,0,0, - 1479,114,1,0,0,0,1480,1481,5,97,0,0,1481,1482,5,115,0,0,1482,1483, - 5,109,0,0,1483,116,1,0,0,0,1484,1485,5,97,0,0,1485,1486,5,117,0, - 0,1486,1487,5,116,0,0,1487,1488,5,111,0,0,1488,118,1,0,0,0,1489, - 1490,5,98,0,0,1490,1491,5,111,0,0,1491,1492,5,111,0,0,1492,1493, - 5,108,0,0,1493,120,1,0,0,0,1494,1495,5,98,0,0,1495,1496,5,114,0, - 0,1496,1497,5,101,0,0,1497,1498,5,97,0,0,1498,1499,5,107,0,0,1499, - 122,1,0,0,0,1500,1501,5,99,0,0,1501,1502,5,97,0,0,1502,1503,5,115, - 0,0,1503,1504,5,101,0,0,1504,124,1,0,0,0,1505,1506,5,99,0,0,1506, - 1507,5,97,0,0,1507,1508,5,116,0,0,1508,1509,5,99,0,0,1509,1510,5, - 104,0,0,1510,126,1,0,0,0,1511,1512,5,99,0,0,1512,1513,5,104,0,0, - 1513,1514,5,97,0,0,1514,1515,5,114,0,0,1515,128,1,0,0,0,1516,1517, - 5,99,0,0,1517,1518,5,104,0,0,1518,1519,5,97,0,0,1519,1520,5,114, - 0,0,1520,1521,5,49,0,0,1521,1522,5,54,0,0,1522,1523,5,95,0,0,1523, - 1524,5,116,0,0,1524,130,1,0,0,0,1525,1526,5,99,0,0,1526,1527,5,104, - 0,0,1527,1528,5,97,0,0,1528,1529,5,114,0,0,1529,1530,5,51,0,0,1530, - 1531,5,50,0,0,1531,1532,5,95,0,0,1532,1533,5,116,0,0,1533,132,1, - 0,0,0,1534,1535,5,99,0,0,1535,1536,5,108,0,0,1536,1537,5,97,0,0, - 1537,1538,5,115,0,0,1538,1539,5,115,0,0,1539,134,1,0,0,0,1540,1541, - 5,99,0,0,1541,1542,5,111,0,0,1542,1543,5,110,0,0,1543,1544,5,115, - 0,0,1544,1545,5,116,0,0,1545,136,1,0,0,0,1546,1547,5,99,0,0,1547, - 1548,5,111,0,0,1548,1549,5,110,0,0,1549,1550,5,115,0,0,1550,1551, - 5,116,0,0,1551,1552,5,101,0,0,1552,1553,5,120,0,0,1553,1554,5,112, - 0,0,1554,1555,5,114,0,0,1555,138,1,0,0,0,1556,1557,5,99,0,0,1557, - 1558,5,111,0,0,1558,1559,5,110,0,0,1559,1560,5,115,0,0,1560,1561, - 5,116,0,0,1561,1562,5,95,0,0,1562,1563,5,99,0,0,1563,1564,5,97,0, - 0,1564,1565,5,115,0,0,1565,1566,5,116,0,0,1566,140,1,0,0,0,1567, - 1568,5,99,0,0,1568,1569,5,111,0,0,1569,1570,5,110,0,0,1570,1571, - 5,116,0,0,1571,1572,5,105,0,0,1572,1573,5,110,0,0,1573,1574,5,117, - 0,0,1574,1575,5,101,0,0,1575,142,1,0,0,0,1576,1577,5,100,0,0,1577, - 1578,5,101,0,0,1578,1579,5,99,0,0,1579,1580,5,108,0,0,1580,1581, - 5,116,0,0,1581,1582,5,121,0,0,1582,1583,5,112,0,0,1583,1584,5,101, - 0,0,1584,144,1,0,0,0,1585,1586,5,100,0,0,1586,1587,5,101,0,0,1587, - 1588,5,102,0,0,1588,1589,5,97,0,0,1589,1590,5,117,0,0,1590,1591, - 5,108,0,0,1591,1592,5,116,0,0,1592,146,1,0,0,0,1593,1594,5,100,0, - 0,1594,1595,5,101,0,0,1595,1596,5,108,0,0,1596,1597,5,101,0,0,1597, - 1598,5,116,0,0,1598,1599,5,101,0,0,1599,148,1,0,0,0,1600,1601,5, - 100,0,0,1601,1602,5,111,0,0,1602,150,1,0,0,0,1603,1604,5,100,0,0, - 1604,1605,5,111,0,0,1605,1606,5,117,0,0,1606,1607,5,98,0,0,1607, - 1608,5,108,0,0,1608,1609,5,101,0,0,1609,152,1,0,0,0,1610,1611,5, - 100,0,0,1611,1612,5,121,0,0,1612,1613,5,110,0,0,1613,1614,5,97,0, - 0,1614,1615,5,109,0,0,1615,1616,5,105,0,0,1616,1617,5,99,0,0,1617, - 1618,5,95,0,0,1618,1619,5,99,0,0,1619,1620,5,97,0,0,1620,1621,5, - 115,0,0,1621,1622,5,116,0,0,1622,154,1,0,0,0,1623,1624,5,101,0,0, - 1624,1625,5,108,0,0,1625,1626,5,115,0,0,1626,1627,5,101,0,0,1627, - 156,1,0,0,0,1628,1629,5,101,0,0,1629,1630,5,110,0,0,1630,1631,5, - 117,0,0,1631,1632,5,109,0,0,1632,158,1,0,0,0,1633,1634,5,101,0,0, - 1634,1635,5,120,0,0,1635,1636,5,112,0,0,1636,1637,5,108,0,0,1637, - 1638,5,105,0,0,1638,1639,5,99,0,0,1639,1640,5,105,0,0,1640,1641, - 5,116,0,0,1641,160,1,0,0,0,1642,1643,5,101,0,0,1643,1644,5,120,0, - 0,1644,1645,5,112,0,0,1645,1646,5,111,0,0,1646,1647,5,114,0,0,1647, - 1648,5,116,0,0,1648,162,1,0,0,0,1649,1650,5,101,0,0,1650,1651,5, - 120,0,0,1651,1652,5,116,0,0,1652,1653,5,101,0,0,1653,1654,5,114, - 0,0,1654,1655,5,110,0,0,1655,164,1,0,0,0,1656,1657,5,102,0,0,1657, - 1658,5,97,0,0,1658,1659,5,108,0,0,1659,1660,5,115,0,0,1660,1661, - 5,101,0,0,1661,166,1,0,0,0,1662,1663,5,102,0,0,1663,1664,5,105,0, - 0,1664,1665,5,110,0,0,1665,1666,5,97,0,0,1666,1667,5,108,0,0,1667, - 168,1,0,0,0,1668,1669,5,102,0,0,1669,1670,5,108,0,0,1670,1671,5, - 111,0,0,1671,1672,5,97,0,0,1672,1673,5,116,0,0,1673,170,1,0,0,0, - 1674,1675,5,102,0,0,1675,1676,5,111,0,0,1676,1677,5,114,0,0,1677, - 172,1,0,0,0,1678,1679,5,102,0,0,1679,1680,5,114,0,0,1680,1681,5, - 105,0,0,1681,1682,5,101,0,0,1682,1683,5,110,0,0,1683,1684,5,100, - 0,0,1684,174,1,0,0,0,1685,1686,5,103,0,0,1686,1687,5,111,0,0,1687, - 1688,5,116,0,0,1688,1689,5,111,0,0,1689,176,1,0,0,0,1690,1691,5, - 105,0,0,1691,1692,5,102,0,0,1692,178,1,0,0,0,1693,1694,5,105,0,0, - 1694,1695,5,110,0,0,1695,1696,5,108,0,0,1696,1697,5,105,0,0,1697, - 1698,5,110,0,0,1698,1699,5,101,0,0,1699,180,1,0,0,0,1700,1701,5, - 105,0,0,1701,1702,5,110,0,0,1702,1703,5,116,0,0,1703,182,1,0,0,0, - 1704,1705,5,108,0,0,1705,1706,5,111,0,0,1706,1707,5,110,0,0,1707, - 1708,5,103,0,0,1708,184,1,0,0,0,1709,1710,5,109,0,0,1710,1711,5, - 117,0,0,1711,1712,5,116,0,0,1712,1713,5,97,0,0,1713,1714,5,98,0, - 0,1714,1715,5,108,0,0,1715,1716,5,101,0,0,1716,186,1,0,0,0,1717, - 1718,5,110,0,0,1718,1719,5,97,0,0,1719,1720,5,109,0,0,1720,1721, - 5,101,0,0,1721,1722,5,115,0,0,1722,1723,5,112,0,0,1723,1724,5,97, - 0,0,1724,1725,5,99,0,0,1725,1726,5,101,0,0,1726,188,1,0,0,0,1727, - 1728,5,110,0,0,1728,1729,5,101,0,0,1729,1730,5,119,0,0,1730,190, - 1,0,0,0,1731,1732,5,110,0,0,1732,1733,5,111,0,0,1733,1734,5,101, - 0,0,1734,1735,5,120,0,0,1735,1736,5,99,0,0,1736,1737,5,101,0,0,1737, - 1738,5,112,0,0,1738,1739,5,116,0,0,1739,192,1,0,0,0,1740,1741,5, - 110,0,0,1741,1742,5,117,0,0,1742,1743,5,108,0,0,1743,1744,5,108, - 0,0,1744,1745,5,112,0,0,1745,1746,5,116,0,0,1746,1747,5,114,0,0, - 1747,194,1,0,0,0,1748,1749,5,111,0,0,1749,1750,5,112,0,0,1750,1751, - 5,101,0,0,1751,1752,5,114,0,0,1752,1753,5,97,0,0,1753,1754,5,116, - 0,0,1754,1755,5,111,0,0,1755,1756,5,114,0,0,1756,196,1,0,0,0,1757, - 1758,5,111,0,0,1758,1759,5,118,0,0,1759,1760,5,101,0,0,1760,1761, - 5,114,0,0,1761,1762,5,114,0,0,1762,1763,5,105,0,0,1763,1764,5,100, - 0,0,1764,1765,5,101,0,0,1765,198,1,0,0,0,1766,1767,5,112,0,0,1767, - 1768,5,114,0,0,1768,1769,5,111,0,0,1769,1770,5,116,0,0,1770,1771, - 5,101,0,0,1771,1772,5,99,0,0,1772,1773,5,116,0,0,1773,1774,5,101, - 0,0,1774,1775,5,100,0,0,1775,200,1,0,0,0,1776,1777,5,112,0,0,1777, - 1778,5,117,0,0,1778,1779,5,98,0,0,1779,1780,5,108,0,0,1780,1781, - 5,105,0,0,1781,1782,5,99,0,0,1782,202,1,0,0,0,1783,1784,5,114,0, - 0,1784,1785,5,101,0,0,1785,1786,5,103,0,0,1786,1787,5,105,0,0,1787, - 1788,5,115,0,0,1788,1789,5,116,0,0,1789,1790,5,101,0,0,1790,1791, - 5,114,0,0,1791,204,1,0,0,0,1792,1793,5,114,0,0,1793,1794,5,101,0, - 0,1794,1795,5,105,0,0,1795,1796,5,110,0,0,1796,1797,5,116,0,0,1797, - 1798,5,101,0,0,1798,1799,5,114,0,0,1799,1800,5,112,0,0,1800,1801, - 5,114,0,0,1801,1802,5,101,0,0,1802,1803,5,116,0,0,1803,1804,5,95, - 0,0,1804,1805,5,99,0,0,1805,1806,5,97,0,0,1806,1807,5,115,0,0,1807, - 1808,5,116,0,0,1808,206,1,0,0,0,1809,1810,5,114,0,0,1810,1811,5, - 101,0,0,1811,1812,5,116,0,0,1812,1813,5,117,0,0,1813,1814,5,114, - 0,0,1814,1815,5,110,0,0,1815,208,1,0,0,0,1816,1817,5,115,0,0,1817, - 1818,5,104,0,0,1818,1819,5,111,0,0,1819,1820,5,114,0,0,1820,1821, - 5,116,0,0,1821,210,1,0,0,0,1822,1823,5,115,0,0,1823,1824,5,105,0, - 0,1824,1825,5,103,0,0,1825,1826,5,110,0,0,1826,1827,5,101,0,0,1827, - 1828,5,100,0,0,1828,212,1,0,0,0,1829,1830,5,115,0,0,1830,1831,5, - 105,0,0,1831,1832,5,122,0,0,1832,1833,5,101,0,0,1833,1834,5,111, - 0,0,1834,1835,5,102,0,0,1835,214,1,0,0,0,1836,1837,5,115,0,0,1837, - 1838,5,116,0,0,1838,1839,5,97,0,0,1839,1840,5,116,0,0,1840,1841, - 5,105,0,0,1841,1842,5,99,0,0,1842,216,1,0,0,0,1843,1844,5,115,0, - 0,1844,1845,5,116,0,0,1845,1846,5,97,0,0,1846,1847,5,116,0,0,1847, - 1848,5,105,0,0,1848,1849,5,99,0,0,1849,1850,5,95,0,0,1850,1851,5, - 97,0,0,1851,1852,5,115,0,0,1852,1853,5,115,0,0,1853,1854,5,101,0, - 0,1854,1855,5,114,0,0,1855,1856,5,116,0,0,1856,218,1,0,0,0,1857, - 1858,5,115,0,0,1858,1859,5,116,0,0,1859,1860,5,97,0,0,1860,1861, - 5,116,0,0,1861,1862,5,105,0,0,1862,1863,5,99,0,0,1863,1864,5,95, - 0,0,1864,1865,5,99,0,0,1865,1866,5,97,0,0,1866,1867,5,115,0,0,1867, - 1868,5,116,0,0,1868,220,1,0,0,0,1869,1870,5,115,0,0,1870,1871,5, - 116,0,0,1871,1872,5,114,0,0,1872,1873,5,117,0,0,1873,1874,5,99,0, - 0,1874,1875,5,116,0,0,1875,222,1,0,0,0,1876,1877,5,115,0,0,1877, - 1878,5,119,0,0,1878,1879,5,105,0,0,1879,1880,5,116,0,0,1880,1881, - 5,99,0,0,1881,1882,5,104,0,0,1882,224,1,0,0,0,1883,1884,5,116,0, - 0,1884,1885,5,101,0,0,1885,1886,5,109,0,0,1886,1887,5,112,0,0,1887, - 1888,5,108,0,0,1888,1889,5,97,0,0,1889,1890,5,116,0,0,1890,1891, - 5,101,0,0,1891,226,1,0,0,0,1892,1893,5,116,0,0,1893,1894,5,104,0, - 0,1894,1895,5,105,0,0,1895,1896,5,115,0,0,1896,228,1,0,0,0,1897, - 1898,5,116,0,0,1898,1899,5,104,0,0,1899,1900,5,114,0,0,1900,1901, - 5,101,0,0,1901,1902,5,97,0,0,1902,1903,5,100,0,0,1903,1904,5,95, - 0,0,1904,1905,5,108,0,0,1905,1906,5,111,0,0,1906,1907,5,99,0,0,1907, - 1908,5,97,0,0,1908,1909,5,108,0,0,1909,230,1,0,0,0,1910,1911,5,116, - 0,0,1911,1912,5,104,0,0,1912,1913,5,114,0,0,1913,1914,5,111,0,0, - 1914,1915,5,119,0,0,1915,232,1,0,0,0,1916,1917,5,116,0,0,1917,1918, - 5,114,0,0,1918,1919,5,117,0,0,1919,1920,5,101,0,0,1920,234,1,0,0, - 0,1921,1922,5,116,0,0,1922,1923,5,114,0,0,1923,1924,5,121,0,0,1924, - 236,1,0,0,0,1925,1926,5,116,0,0,1926,1927,5,121,0,0,1927,1928,5, - 112,0,0,1928,1929,5,101,0,0,1929,1930,5,100,0,0,1930,1931,5,101, - 0,0,1931,1932,5,102,0,0,1932,238,1,0,0,0,1933,1934,5,116,0,0,1934, - 1935,5,121,0,0,1935,1936,5,112,0,0,1936,1937,5,101,0,0,1937,1938, - 5,105,0,0,1938,1939,5,100,0,0,1939,240,1,0,0,0,1940,1941,5,116,0, - 0,1941,1942,5,121,0,0,1942,1943,5,112,0,0,1943,1944,5,101,0,0,1944, - 1945,5,110,0,0,1945,1946,5,97,0,0,1946,1947,5,109,0,0,1947,1948, - 5,101,0,0,1948,242,1,0,0,0,1949,1950,5,117,0,0,1950,1951,5,110,0, - 0,1951,1952,5,105,0,0,1952,1953,5,111,0,0,1953,1954,5,110,0,0,1954, - 244,1,0,0,0,1955,1956,5,117,0,0,1956,1957,5,110,0,0,1957,1958,5, - 115,0,0,1958,1959,5,105,0,0,1959,1960,5,103,0,0,1960,1961,5,110, - 0,0,1961,1962,5,101,0,0,1962,1963,5,100,0,0,1963,246,1,0,0,0,1964, - 1965,5,117,0,0,1965,1966,5,115,0,0,1966,1967,5,105,0,0,1967,1968, - 5,110,0,0,1968,1969,5,103,0,0,1969,248,1,0,0,0,1970,1971,5,118,0, - 0,1971,1972,5,105,0,0,1972,1973,5,114,0,0,1973,1974,5,116,0,0,1974, - 1975,5,117,0,0,1975,1976,5,97,0,0,1976,1977,5,108,0,0,1977,250,1, - 0,0,0,1978,1979,5,118,0,0,1979,1980,5,111,0,0,1980,1981,5,105,0, - 0,1981,1982,5,100,0,0,1982,252,1,0,0,0,1983,1984,5,118,0,0,1984, - 1985,5,111,0,0,1985,1986,5,108,0,0,1986,1987,5,97,0,0,1987,1988, - 5,116,0,0,1988,1989,5,105,0,0,1989,1990,5,108,0,0,1990,1991,5,101, - 0,0,1991,254,1,0,0,0,1992,1993,5,119,0,0,1993,1994,5,99,0,0,1994, - 1995,5,104,0,0,1995,1996,5,97,0,0,1996,1997,5,114,0,0,1997,1998, - 5,95,0,0,1998,1999,5,116,0,0,1999,256,1,0,0,0,2000,2001,5,119,0, - 0,2001,2002,5,104,0,0,2002,2003,5,105,0,0,2003,2004,5,108,0,0,2004, - 2005,5,101,0,0,2005,258,1,0,0,0,2006,2007,5,40,0,0,2007,260,1,0, - 0,0,2008,2009,5,41,0,0,2009,262,1,0,0,0,2010,2011,5,91,0,0,2011, - 264,1,0,0,0,2012,2013,5,93,0,0,2013,266,1,0,0,0,2014,2015,5,123, - 0,0,2015,268,1,0,0,0,2016,2017,5,125,0,0,2017,270,1,0,0,0,2018,2019, - 5,43,0,0,2019,272,1,0,0,0,2020,2021,5,45,0,0,2021,274,1,0,0,0,2022, - 2023,5,42,0,0,2023,276,1,0,0,0,2024,2025,5,47,0,0,2025,278,1,0,0, - 0,2026,2027,5,37,0,0,2027,280,1,0,0,0,2028,2029,5,94,0,0,2029,282, - 1,0,0,0,2030,2031,5,38,0,0,2031,284,1,0,0,0,2032,2033,5,124,0,0, - 2033,286,1,0,0,0,2034,2035,5,126,0,0,2035,288,1,0,0,0,2036,2041, - 5,33,0,0,2037,2038,5,110,0,0,2038,2039,5,111,0,0,2039,2041,5,116, - 0,0,2040,2036,1,0,0,0,2040,2037,1,0,0,0,2041,290,1,0,0,0,2042,2043, - 5,61,0,0,2043,292,1,0,0,0,2044,2045,5,60,0,0,2045,294,1,0,0,0,2046, - 2047,5,62,0,0,2047,296,1,0,0,0,2048,2049,5,43,0,0,2049,2050,5,61, - 0,0,2050,298,1,0,0,0,2051,2052,5,45,0,0,2052,2053,5,61,0,0,2053, - 300,1,0,0,0,2054,2055,5,42,0,0,2055,2056,5,61,0,0,2056,302,1,0,0, - 0,2057,2058,5,47,0,0,2058,2059,5,61,0,0,2059,304,1,0,0,0,2060,2061, - 5,37,0,0,2061,2062,5,61,0,0,2062,306,1,0,0,0,2063,2064,5,94,0,0, - 2064,2065,5,61,0,0,2065,308,1,0,0,0,2066,2067,5,38,0,0,2067,2068, - 5,61,0,0,2068,310,1,0,0,0,2069,2070,5,124,0,0,2070,2071,5,61,0,0, - 2071,312,1,0,0,0,2072,2073,5,60,0,0,2073,2074,5,60,0,0,2074,2075, - 5,61,0,0,2075,314,1,0,0,0,2076,2077,5,62,0,0,2077,2078,5,62,0,0, - 2078,2079,5,61,0,0,2079,316,1,0,0,0,2080,2081,5,61,0,0,2081,2082, - 5,61,0,0,2082,318,1,0,0,0,2083,2084,5,33,0,0,2084,2085,5,61,0,0, - 2085,320,1,0,0,0,2086,2087,5,60,0,0,2087,2088,5,61,0,0,2088,322, - 1,0,0,0,2089,2090,5,62,0,0,2090,2091,5,61,0,0,2091,324,1,0,0,0,2092, - 2093,5,38,0,0,2093,2098,5,38,0,0,2094,2095,5,97,0,0,2095,2096,5, - 110,0,0,2096,2098,5,100,0,0,2097,2092,1,0,0,0,2097,2094,1,0,0,0, - 2098,326,1,0,0,0,2099,2100,5,124,0,0,2100,2104,5,124,0,0,2101,2102, - 5,111,0,0,2102,2104,5,114,0,0,2103,2099,1,0,0,0,2103,2101,1,0,0, - 0,2104,328,1,0,0,0,2105,2106,5,43,0,0,2106,2107,5,43,0,0,2107,330, - 1,0,0,0,2108,2109,5,45,0,0,2109,2110,5,45,0,0,2110,332,1,0,0,0,2111, - 2112,5,44,0,0,2112,334,1,0,0,0,2113,2114,5,45,0,0,2114,2115,5,62, - 0,0,2115,2116,5,42,0,0,2116,336,1,0,0,0,2117,2118,5,45,0,0,2118, - 2119,5,62,0,0,2119,338,1,0,0,0,2120,2121,5,63,0,0,2121,340,1,0,0, - 0,2122,2123,5,58,0,0,2123,342,1,0,0,0,2124,2125,5,58,0,0,2125,2126, - 5,58,0,0,2126,344,1,0,0,0,2127,2128,5,59,0,0,2128,346,1,0,0,0,2129, - 2130,5,46,0,0,2130,348,1,0,0,0,2131,2132,5,46,0,0,2132,2133,5,42, - 0,0,2133,350,1,0,0,0,2134,2135,5,46,0,0,2135,2136,5,46,0,0,2136, - 2137,5,46,0,0,2137,352,1,0,0,0,2138,2139,3,377,188,0,2139,2140,3, - 377,188,0,2140,2141,3,377,188,0,2141,2142,3,377,188,0,2142,354,1, - 0,0,0,2143,2144,5,92,0,0,2144,2145,5,117,0,0,2145,2146,1,0,0,0,2146, - 2154,3,353,176,0,2147,2148,5,92,0,0,2148,2149,5,85,0,0,2149,2150, - 1,0,0,0,2150,2151,3,353,176,0,2151,2152,3,353,176,0,2152,2154,1, - 0,0,0,2153,2143,1,0,0,0,2153,2147,1,0,0,0,2154,356,1,0,0,0,2155, - 2160,3,359,179,0,2156,2159,3,359,179,0,2157,2159,3,363,181,0,2158, - 2156,1,0,0,0,2158,2157,1,0,0,0,2159,2162,1,0,0,0,2160,2158,1,0,0, - 0,2160,2161,1,0,0,0,2161,358,1,0,0,0,2162,2160,1,0,0,0,2163,2166, - 3,361,180,0,2164,2166,3,355,177,0,2165,2163,1,0,0,0,2165,2164,1, - 0,0,0,2166,360,1,0,0,0,2167,2168,7,2,0,0,2168,362,1,0,0,0,2169,2170, - 7,3,0,0,2170,364,1,0,0,0,2171,2178,3,373,186,0,2172,2174,5,39,0, - 0,2173,2172,1,0,0,0,2173,2174,1,0,0,0,2174,2175,1,0,0,0,2175,2177, - 3,363,181,0,2176,2173,1,0,0,0,2177,2180,1,0,0,0,2178,2176,1,0,0, - 0,2178,2179,1,0,0,0,2179,366,1,0,0,0,2180,2178,1,0,0,0,2181,2188, - 5,48,0,0,2182,2184,5,39,0,0,2183,2182,1,0,0,0,2183,2184,1,0,0,0, - 2184,2185,1,0,0,0,2185,2187,3,375,187,0,2186,2183,1,0,0,0,2187,2190, - 1,0,0,0,2188,2186,1,0,0,0,2188,2189,1,0,0,0,2189,368,1,0,0,0,2190, - 2188,1,0,0,0,2191,2192,5,48,0,0,2192,2196,5,120,0,0,2193,2194,5, - 48,0,0,2194,2196,5,88,0,0,2195,2191,1,0,0,0,2195,2193,1,0,0,0,2196, - 2197,1,0,0,0,2197,2204,3,377,188,0,2198,2200,5,39,0,0,2199,2198, - 1,0,0,0,2199,2200,1,0,0,0,2200,2201,1,0,0,0,2201,2203,3,377,188, - 0,2202,2199,1,0,0,0,2203,2206,1,0,0,0,2204,2202,1,0,0,0,2204,2205, - 1,0,0,0,2205,370,1,0,0,0,2206,2204,1,0,0,0,2207,2208,5,48,0,0,2208, - 2212,5,98,0,0,2209,2210,5,48,0,0,2210,2212,5,66,0,0,2211,2207,1, - 0,0,0,2211,2209,1,0,0,0,2212,2213,1,0,0,0,2213,2220,3,379,189,0, - 2214,2216,5,39,0,0,2215,2214,1,0,0,0,2215,2216,1,0,0,0,2216,2217, - 1,0,0,0,2217,2219,3,379,189,0,2218,2215,1,0,0,0,2219,2222,1,0,0, - 0,2220,2218,1,0,0,0,2220,2221,1,0,0,0,2221,372,1,0,0,0,2222,2220, - 1,0,0,0,2223,2224,7,4,0,0,2224,374,1,0,0,0,2225,2226,7,5,0,0,2226, - 376,1,0,0,0,2227,2228,7,6,0,0,2228,378,1,0,0,0,2229,2230,7,7,0,0, - 2230,380,1,0,0,0,2231,2233,3,383,191,0,2232,2234,3,385,192,0,2233, - 2232,1,0,0,0,2233,2234,1,0,0,0,2234,2248,1,0,0,0,2235,2237,3,383, - 191,0,2236,2238,3,387,193,0,2237,2236,1,0,0,0,2237,2238,1,0,0,0, - 2238,2248,1,0,0,0,2239,2241,3,385,192,0,2240,2242,3,383,191,0,2241, - 2240,1,0,0,0,2241,2242,1,0,0,0,2242,2248,1,0,0,0,2243,2245,3,387, - 193,0,2244,2246,3,383,191,0,2245,2244,1,0,0,0,2245,2246,1,0,0,0, - 2246,2248,1,0,0,0,2247,2231,1,0,0,0,2247,2235,1,0,0,0,2247,2239, - 1,0,0,0,2247,2243,1,0,0,0,2248,382,1,0,0,0,2249,2250,7,8,0,0,2250, - 384,1,0,0,0,2251,2252,7,9,0,0,2252,386,1,0,0,0,2253,2254,5,108,0, - 0,2254,2258,5,108,0,0,2255,2256,5,76,0,0,2256,2258,5,76,0,0,2257, - 2253,1,0,0,0,2257,2255,1,0,0,0,2258,388,1,0,0,0,2259,2263,8,10,0, - 0,2260,2263,3,391,195,0,2261,2263,3,355,177,0,2262,2259,1,0,0,0, - 2262,2260,1,0,0,0,2262,2261,1,0,0,0,2263,390,1,0,0,0,2264,2268,3, - 393,196,0,2265,2268,3,395,197,0,2266,2268,3,397,198,0,2267,2264, - 1,0,0,0,2267,2265,1,0,0,0,2267,2266,1,0,0,0,2268,392,1,0,0,0,2269, - 2270,5,92,0,0,2270,2300,5,39,0,0,2271,2272,5,92,0,0,2272,2300,5, - 34,0,0,2273,2274,5,92,0,0,2274,2300,5,63,0,0,2275,2276,5,92,0,0, - 2276,2300,5,92,0,0,2277,2278,5,92,0,0,2278,2300,5,97,0,0,2279,2280, - 5,92,0,0,2280,2300,5,98,0,0,2281,2282,5,92,0,0,2282,2300,5,102,0, - 0,2283,2284,5,92,0,0,2284,2300,5,110,0,0,2285,2286,5,92,0,0,2286, - 2300,5,114,0,0,2287,2293,5,92,0,0,2288,2290,5,13,0,0,2289,2291,5, - 10,0,0,2290,2289,1,0,0,0,2290,2291,1,0,0,0,2291,2294,1,0,0,0,2292, - 2294,5,10,0,0,2293,2288,1,0,0,0,2293,2292,1,0,0,0,2294,2300,1,0, - 0,0,2295,2296,5,92,0,0,2296,2300,5,116,0,0,2297,2298,5,92,0,0,2298, - 2300,5,118,0,0,2299,2269,1,0,0,0,2299,2271,1,0,0,0,2299,2273,1,0, - 0,0,2299,2275,1,0,0,0,2299,2277,1,0,0,0,2299,2279,1,0,0,0,2299,2281, - 1,0,0,0,2299,2283,1,0,0,0,2299,2285,1,0,0,0,2299,2287,1,0,0,0,2299, - 2295,1,0,0,0,2299,2297,1,0,0,0,2300,394,1,0,0,0,2301,2302,5,92,0, - 0,2302,2313,3,375,187,0,2303,2304,5,92,0,0,2304,2305,3,375,187,0, - 2305,2306,3,375,187,0,2306,2313,1,0,0,0,2307,2308,5,92,0,0,2308, - 2309,3,375,187,0,2309,2310,3,375,187,0,2310,2311,3,375,187,0,2311, - 2313,1,0,0,0,2312,2301,1,0,0,0,2312,2303,1,0,0,0,2312,2307,1,0,0, - 0,2313,396,1,0,0,0,2314,2315,5,92,0,0,2315,2316,5,120,0,0,2316,2318, - 1,0,0,0,2317,2319,3,377,188,0,2318,2317,1,0,0,0,2319,2320,1,0,0, - 0,2320,2318,1,0,0,0,2320,2321,1,0,0,0,2321,398,1,0,0,0,2322,2324, - 3,405,202,0,2323,2322,1,0,0,0,2323,2324,1,0,0,0,2324,2325,1,0,0, - 0,2325,2326,5,46,0,0,2326,2331,3,405,202,0,2327,2328,3,405,202,0, - 2328,2329,5,46,0,0,2329,2331,1,0,0,0,2330,2323,1,0,0,0,2330,2327, - 1,0,0,0,2331,400,1,0,0,0,2332,2334,5,101,0,0,2333,2335,3,403,201, - 0,2334,2333,1,0,0,0,2334,2335,1,0,0,0,2335,2336,1,0,0,0,2336,2343, - 3,405,202,0,2337,2339,5,69,0,0,2338,2340,3,403,201,0,2339,2338,1, - 0,0,0,2339,2340,1,0,0,0,2340,2341,1,0,0,0,2341,2343,3,405,202,0, - 2342,2332,1,0,0,0,2342,2337,1,0,0,0,2343,402,1,0,0,0,2344,2345,7, - 11,0,0,2345,404,1,0,0,0,2346,2353,3,363,181,0,2347,2349,5,39,0,0, - 2348,2347,1,0,0,0,2348,2349,1,0,0,0,2349,2350,1,0,0,0,2350,2352, - 3,363,181,0,2351,2348,1,0,0,0,2352,2355,1,0,0,0,2353,2351,1,0,0, - 0,2353,2354,1,0,0,0,2354,406,1,0,0,0,2355,2353,1,0,0,0,2356,2357, - 7,12,0,0,2357,408,1,0,0,0,2358,2359,5,117,0,0,2359,2362,5,56,0,0, - 2360,2362,7,0,0,0,2361,2358,1,0,0,0,2361,2360,1,0,0,0,2362,410,1, - 0,0,0,2363,2367,8,13,0,0,2364,2367,3,391,195,0,2365,2367,3,355,177, - 0,2366,2363,1,0,0,0,2366,2364,1,0,0,0,2366,2365,1,0,0,0,2367,412, - 1,0,0,0,2368,2369,5,82,0,0,2369,2370,5,34,0,0,2370,2376,1,0,0,0, - 2371,2372,5,92,0,0,2372,2375,7,14,0,0,2373,2375,8,15,0,0,2374,2371, - 1,0,0,0,2374,2373,1,0,0,0,2375,2378,1,0,0,0,2376,2377,1,0,0,0,2376, - 2374,1,0,0,0,2377,2379,1,0,0,0,2378,2376,1,0,0,0,2379,2383,5,40, - 0,0,2380,2382,8,16,0,0,2381,2380,1,0,0,0,2382,2385,1,0,0,0,2383, - 2384,1,0,0,0,2383,2381,1,0,0,0,2384,2386,1,0,0,0,2385,2383,1,0,0, - 0,2386,2392,5,41,0,0,2387,2388,5,92,0,0,2388,2391,7,14,0,0,2389, - 2391,8,17,0,0,2390,2387,1,0,0,0,2390,2389,1,0,0,0,2391,2394,1,0, - 0,0,2392,2393,1,0,0,0,2392,2390,1,0,0,0,2393,2395,1,0,0,0,2394,2392, - 1,0,0,0,2395,2396,5,34,0,0,2396,414,1,0,0,0,2397,2398,3,365,182, - 0,2398,2399,3,423,211,0,2399,2410,1,0,0,0,2400,2401,3,367,183,0, - 2401,2402,3,423,211,0,2402,2410,1,0,0,0,2403,2404,3,369,184,0,2404, - 2405,3,423,211,0,2405,2410,1,0,0,0,2406,2407,3,371,185,0,2407,2408, - 3,423,211,0,2408,2410,1,0,0,0,2409,2397,1,0,0,0,2409,2400,1,0,0, - 0,2409,2403,1,0,0,0,2409,2406,1,0,0,0,2410,416,1,0,0,0,2411,2413, - 3,399,199,0,2412,2414,3,401,200,0,2413,2412,1,0,0,0,2413,2414,1, - 0,0,0,2414,2415,1,0,0,0,2415,2416,3,423,211,0,2416,2422,1,0,0,0, - 2417,2418,3,405,202,0,2418,2419,3,401,200,0,2419,2420,3,423,211, - 0,2420,2422,1,0,0,0,2421,2411,1,0,0,0,2421,2417,1,0,0,0,2422,418, - 1,0,0,0,2423,2424,3,99,49,0,2424,2425,3,423,211,0,2425,420,1,0,0, - 0,2426,2427,3,95,47,0,2427,2428,3,423,211,0,2428,422,1,0,0,0,2429, - 2430,3,357,178,0,2430,424,1,0,0,0,2431,2433,7,18,0,0,2432,2431,1, - 0,0,0,2433,2434,1,0,0,0,2434,2432,1,0,0,0,2434,2435,1,0,0,0,2435, - 2436,1,0,0,0,2436,2437,6,212,1,0,2437,426,1,0,0,0,2438,2440,5,13, - 0,0,2439,2441,5,10,0,0,2440,2439,1,0,0,0,2440,2441,1,0,0,0,2441, - 2444,1,0,0,0,2442,2444,5,10,0,0,2443,2438,1,0,0,0,2443,2442,1,0, - 0,0,2444,2445,1,0,0,0,2445,2446,6,213,1,0,2446,428,1,0,0,0,2447, - 2448,5,47,0,0,2448,2449,5,42,0,0,2449,2453,1,0,0,0,2450,2452,9,0, - 0,0,2451,2450,1,0,0,0,2452,2455,1,0,0,0,2453,2454,1,0,0,0,2453,2451, - 1,0,0,0,2454,2456,1,0,0,0,2455,2453,1,0,0,0,2456,2457,5,42,0,0,2457, - 2458,5,47,0,0,2458,2459,1,0,0,0,2459,2460,6,214,1,0,2460,430,1,0, - 0,0,2461,2462,5,47,0,0,2462,2463,5,47,0,0,2463,2467,1,0,0,0,2464, - 2466,8,19,0,0,2465,2464,1,0,0,0,2466,2469,1,0,0,0,2467,2465,1,0, - 0,0,2467,2468,1,0,0,0,2468,2470,1,0,0,0,2469,2467,1,0,0,0,2470,2471, - 6,215,1,0,2471,432,1,0,0,0,113,0,459,467,493,522,548,568,608,619, - 669,692,754,786,806,829,861,887,910,936,959,976,993,1013,1030,1044, - 1058,1072,1086,1109,1129,1143,1160,1189,1197,1219,1251,1268,1288, - 1314,1343,1365,1369,1373,1377,1379,1382,1388,1394,1397,1402,1404, - 1407,1414,1418,1422,1430,1436,1441,1446,1451,1459,2040,2097,2103, - 2153,2158,2160,2165,2173,2178,2183,2188,2195,2199,2204,2211,2215, - 2220,2233,2237,2241,2245,2247,2257,2262,2267,2290,2293,2299,2312, - 2320,2323,2330,2334,2339,2342,2348,2353,2361,2366,2374,2376,2383, - 2390,2392,2409,2413,2421,2434,2440,2443,2453,2467,2,0,1,0,6,0,0 + 1,154,1,155,1,155,1,155,1,156,1,156,1,156,1,157,1,157,1,157,1,158, + 1,158,1,158,1,158,1,159,1,159,1,159,1,159,1,160,1,160,1,160,1,161, + 1,161,1,161,1,162,1,162,1,162,1,163,1,163,1,163,1,164,1,164,1,164, + 1,164,1,164,3,164,2123,8,164,1,165,1,165,1,165,1,165,3,165,2129, + 8,165,1,166,1,166,1,166,1,167,1,167,1,167,1,168,1,168,1,169,1,169, + 1,169,1,169,1,170,1,170,1,170,1,171,1,171,1,172,1,172,1,173,1,173, + 1,173,1,174,1,174,1,175,1,175,1,176,1,176,1,176,1,177,1,177,1,177, + 1,177,1,178,1,178,1,178,1,178,1,178,1,179,1,179,1,179,1,179,1,179, + 1,179,1,179,1,179,1,179,1,179,3,179,2179,8,179,1,180,1,180,1,180, + 5,180,2184,8,180,10,180,12,180,2187,9,180,1,181,1,181,3,181,2191, + 8,181,1,182,1,182,1,183,1,183,1,184,1,184,3,184,2199,8,184,1,184, + 5,184,2202,8,184,10,184,12,184,2205,9,184,1,185,1,185,3,185,2209, + 8,185,1,185,5,185,2212,8,185,10,185,12,185,2215,9,185,1,186,1,186, + 1,186,1,186,3,186,2221,8,186,1,186,1,186,3,186,2225,8,186,1,186, + 5,186,2228,8,186,10,186,12,186,2231,9,186,1,187,1,187,1,187,1,187, + 3,187,2237,8,187,1,187,1,187,3,187,2241,8,187,1,187,5,187,2244,8, + 187,10,187,12,187,2247,9,187,1,188,1,188,1,189,1,189,1,190,1,190, + 1,191,1,191,1,192,1,192,3,192,2259,8,192,1,192,1,192,3,192,2263, + 8,192,1,192,1,192,3,192,2267,8,192,1,192,1,192,3,192,2271,8,192, + 3,192,2273,8,192,1,193,1,193,1,194,1,194,1,195,1,195,1,195,1,195, + 3,195,2283,8,195,1,196,1,196,1,196,3,196,2288,8,196,1,197,1,197, + 1,197,3,197,2293,8,197,1,198,1,198,1,198,1,198,1,198,1,198,1,198, + 1,198,1,198,1,198,1,198,1,198,1,198,1,198,1,198,1,198,1,198,1,198, + 1,198,1,198,1,198,3,198,2316,8,198,1,198,3,198,2319,8,198,1,198, + 1,198,1,198,1,198,3,198,2325,8,198,1,199,1,199,1,199,1,199,1,199, + 1,199,1,199,1,199,1,199,1,199,1,199,3,199,2338,8,199,1,200,1,200, + 1,200,1,200,4,200,2344,8,200,11,200,12,200,2345,1,201,3,201,2349, + 8,201,1,201,1,201,1,201,1,201,1,201,3,201,2356,8,201,1,202,1,202, + 3,202,2360,8,202,1,202,1,202,1,202,3,202,2365,8,202,1,202,3,202, + 2368,8,202,1,203,1,203,1,204,1,204,3,204,2374,8,204,1,204,5,204, + 2377,8,204,10,204,12,204,2380,9,204,1,205,1,205,1,206,1,206,1,206, + 3,206,2387,8,206,1,207,1,207,1,207,3,207,2392,8,207,1,208,1,208, + 1,208,1,208,1,208,1,208,5,208,2400,8,208,10,208,12,208,2403,9,208, + 1,208,1,208,5,208,2407,8,208,10,208,12,208,2410,9,208,1,208,1,208, + 1,208,1,208,5,208,2416,8,208,10,208,12,208,2419,9,208,1,208,1,208, + 1,209,1,209,1,209,1,209,1,209,1,209,1,209,1,209,1,209,1,209,1,209, + 1,209,3,209,2435,8,209,1,210,1,210,3,210,2439,8,210,1,210,1,210, + 1,210,1,210,1,210,1,210,3,210,2447,8,210,1,211,1,211,1,211,1,212, + 1,212,1,212,1,213,1,213,1,214,4,214,2458,8,214,11,214,12,214,2459, + 1,214,1,214,1,215,1,215,3,215,2466,8,215,1,215,3,215,2469,8,215, + 1,215,1,215,1,216,1,216,1,216,1,216,5,216,2477,8,216,10,216,12,216, + 2480,9,216,1,216,1,216,1,216,1,216,1,216,1,217,1,217,1,217,1,217, + 5,217,2491,8,217,10,217,12,217,2494,9,217,1,217,1,217,6,1368,1461, + 2401,2408,2417,2478,0,218,1,1,3,2,5,3,7,4,9,5,11,6,13,7,15,8,17, + 9,19,10,21,11,23,12,25,13,27,14,29,15,31,16,33,17,35,18,37,19,39, + 20,41,21,43,22,45,23,47,24,49,25,51,26,53,27,55,28,57,29,59,30,61, + 31,63,32,65,33,67,34,69,35,71,36,73,37,75,38,77,39,79,40,81,41,83, + 42,85,43,87,44,89,45,91,46,93,47,95,48,97,49,99,50,101,51,103,52, + 105,53,107,54,109,55,111,56,113,57,115,58,117,59,119,60,121,61,123, + 62,125,63,127,64,129,65,131,66,133,67,135,68,137,69,139,70,141,71, + 143,72,145,73,147,74,149,75,151,76,153,77,155,78,157,79,159,80,161, + 81,163,82,165,83,167,84,169,85,171,86,173,87,175,88,177,89,179,90, + 181,91,183,92,185,93,187,94,189,95,191,96,193,97,195,98,197,99,199, + 100,201,101,203,102,205,103,207,104,209,105,211,106,213,107,215, + 108,217,109,219,110,221,111,223,112,225,113,227,114,229,115,231, + 116,233,117,235,118,237,119,239,120,241,121,243,122,245,123,247, + 124,249,125,251,126,253,127,255,128,257,129,259,130,261,131,263, + 132,265,133,267,134,269,135,271,136,273,137,275,138,277,139,279, + 140,281,141,283,142,285,143,287,144,289,145,291,146,293,147,295, + 148,297,149,299,150,301,151,303,152,305,153,307,154,309,155,311, + 156,313,157,315,158,317,159,319,160,321,161,323,162,325,163,327, + 164,329,165,331,166,333,167,335,168,337,169,339,170,341,171,343, + 172,345,173,347,174,349,175,351,176,353,177,355,178,357,0,359,0, + 361,179,363,0,365,0,367,0,369,180,371,181,373,182,375,183,377,0, + 379,0,381,0,383,0,385,184,387,0,389,0,391,0,393,0,395,0,397,0,399, + 0,401,0,403,0,405,0,407,0,409,0,411,0,413,0,415,0,417,0,419,185, + 421,186,423,187,425,188,427,0,429,189,431,190,433,191,435,192,1, + 0,20,3,0,76,76,85,85,117,117,1,0,10,10,3,0,65,90,95,95,97,122,1, + 0,48,57,1,0,49,57,1,0,48,55,3,0,48,57,65,70,97,102,1,0,48,49,2,0, + 85,85,117,117,2,0,76,76,108,108,4,0,10,10,13,13,39,39,92,92,2,0, + 43,43,45,45,4,0,70,70,76,76,102,102,108,108,4,0,10,10,13,13,34,34, + 92,92,2,0,34,34,40,41,4,0,10,10,13,13,32,32,40,40,1,0,41,41,4,0, + 10,10,13,13,32,32,34,34,2,0,9,9,32,32,2,0,10,10,13,13,2650,0,1,1, + 0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11,1,0,0, + 0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,0,21,1,0,0, + 0,0,23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0,0,31,1,0,0, + 0,0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,39,1,0,0,0,0,41,1,0,0, + 0,0,43,1,0,0,0,0,45,1,0,0,0,0,47,1,0,0,0,0,49,1,0,0,0,0,51,1,0,0, + 0,0,53,1,0,0,0,0,55,1,0,0,0,0,57,1,0,0,0,0,59,1,0,0,0,0,61,1,0,0, + 0,0,63,1,0,0,0,0,65,1,0,0,0,0,67,1,0,0,0,0,69,1,0,0,0,0,71,1,0,0, + 0,0,73,1,0,0,0,0,75,1,0,0,0,0,77,1,0,0,0,0,79,1,0,0,0,0,81,1,0,0, + 0,0,83,1,0,0,0,0,85,1,0,0,0,0,87,1,0,0,0,0,89,1,0,0,0,0,91,1,0,0, + 0,0,93,1,0,0,0,0,95,1,0,0,0,0,97,1,0,0,0,0,99,1,0,0,0,0,101,1,0, + 0,0,0,103,1,0,0,0,0,105,1,0,0,0,0,107,1,0,0,0,0,109,1,0,0,0,0,111, + 1,0,0,0,0,113,1,0,0,0,0,115,1,0,0,0,0,117,1,0,0,0,0,119,1,0,0,0, + 0,121,1,0,0,0,0,123,1,0,0,0,0,125,1,0,0,0,0,127,1,0,0,0,0,129,1, + 0,0,0,0,131,1,0,0,0,0,133,1,0,0,0,0,135,1,0,0,0,0,137,1,0,0,0,0, + 139,1,0,0,0,0,141,1,0,0,0,0,143,1,0,0,0,0,145,1,0,0,0,0,147,1,0, + 0,0,0,149,1,0,0,0,0,151,1,0,0,0,0,153,1,0,0,0,0,155,1,0,0,0,0,157, + 1,0,0,0,0,159,1,0,0,0,0,161,1,0,0,0,0,163,1,0,0,0,0,165,1,0,0,0, + 0,167,1,0,0,0,0,169,1,0,0,0,0,171,1,0,0,0,0,173,1,0,0,0,0,175,1, + 0,0,0,0,177,1,0,0,0,0,179,1,0,0,0,0,181,1,0,0,0,0,183,1,0,0,0,0, + 185,1,0,0,0,0,187,1,0,0,0,0,189,1,0,0,0,0,191,1,0,0,0,0,193,1,0, + 0,0,0,195,1,0,0,0,0,197,1,0,0,0,0,199,1,0,0,0,0,201,1,0,0,0,0,203, + 1,0,0,0,0,205,1,0,0,0,0,207,1,0,0,0,0,209,1,0,0,0,0,211,1,0,0,0, + 0,213,1,0,0,0,0,215,1,0,0,0,0,217,1,0,0,0,0,219,1,0,0,0,0,221,1, + 0,0,0,0,223,1,0,0,0,0,225,1,0,0,0,0,227,1,0,0,0,0,229,1,0,0,0,0, + 231,1,0,0,0,0,233,1,0,0,0,0,235,1,0,0,0,0,237,1,0,0,0,0,239,1,0, + 0,0,0,241,1,0,0,0,0,243,1,0,0,0,0,245,1,0,0,0,0,247,1,0,0,0,0,249, + 1,0,0,0,0,251,1,0,0,0,0,253,1,0,0,0,0,255,1,0,0,0,0,257,1,0,0,0, + 0,259,1,0,0,0,0,261,1,0,0,0,0,263,1,0,0,0,0,265,1,0,0,0,0,267,1, + 0,0,0,0,269,1,0,0,0,0,271,1,0,0,0,0,273,1,0,0,0,0,275,1,0,0,0,0, + 277,1,0,0,0,0,279,1,0,0,0,0,281,1,0,0,0,0,283,1,0,0,0,0,285,1,0, + 0,0,0,287,1,0,0,0,0,289,1,0,0,0,0,291,1,0,0,0,0,293,1,0,0,0,0,295, + 1,0,0,0,0,297,1,0,0,0,0,299,1,0,0,0,0,301,1,0,0,0,0,303,1,0,0,0, + 0,305,1,0,0,0,0,307,1,0,0,0,0,309,1,0,0,0,0,311,1,0,0,0,0,313,1, + 0,0,0,0,315,1,0,0,0,0,317,1,0,0,0,0,319,1,0,0,0,0,321,1,0,0,0,0, + 323,1,0,0,0,0,325,1,0,0,0,0,327,1,0,0,0,0,329,1,0,0,0,0,331,1,0, + 0,0,0,333,1,0,0,0,0,335,1,0,0,0,0,337,1,0,0,0,0,339,1,0,0,0,0,341, + 1,0,0,0,0,343,1,0,0,0,0,345,1,0,0,0,0,347,1,0,0,0,0,349,1,0,0,0, + 0,351,1,0,0,0,0,353,1,0,0,0,0,355,1,0,0,0,0,361,1,0,0,0,0,369,1, + 0,0,0,0,371,1,0,0,0,0,373,1,0,0,0,0,375,1,0,0,0,0,385,1,0,0,0,0, + 419,1,0,0,0,0,421,1,0,0,0,0,423,1,0,0,0,0,425,1,0,0,0,0,429,1,0, + 0,0,0,431,1,0,0,0,0,433,1,0,0,0,0,435,1,0,0,0,1,437,1,0,0,0,3,439, + 1,0,0,0,5,442,1,0,0,0,7,469,1,0,0,0,9,477,1,0,0,0,11,503,1,0,0,0, + 13,532,1,0,0,0,15,558,1,0,0,0,17,578,1,0,0,0,19,601,1,0,0,0,21,633, + 1,0,0,0,23,644,1,0,0,0,25,694,1,0,0,0,27,717,1,0,0,0,29,779,1,0, + 0,0,31,811,1,0,0,0,33,831,1,0,0,0,35,854,1,0,0,0,37,886,1,0,0,0, + 39,912,1,0,0,0,41,935,1,0,0,0,43,961,1,0,0,0,45,984,1,0,0,0,47,1001, + 1,0,0,0,49,1018,1,0,0,0,51,1038,1,0,0,0,53,1055,1,0,0,0,55,1069, + 1,0,0,0,57,1083,1,0,0,0,59,1097,1,0,0,0,61,1111,1,0,0,0,63,1134, + 1,0,0,0,65,1154,1,0,0,0,67,1168,1,0,0,0,69,1185,1,0,0,0,71,1214, + 1,0,0,0,73,1222,1,0,0,0,75,1244,1,0,0,0,77,1276,1,0,0,0,79,1293, + 1,0,0,0,81,1313,1,0,0,0,83,1339,1,0,0,0,85,1341,1,0,0,0,87,1348, + 1,0,0,0,89,1355,1,0,0,0,91,1362,1,0,0,0,93,1374,1,0,0,0,95,1383, + 1,0,0,0,97,1404,1,0,0,0,99,1407,1,0,0,0,101,1429,1,0,0,0,103,1432, + 1,0,0,0,105,1447,1,0,0,0,107,1449,1,0,0,0,109,1455,1,0,0,0,111,1457, + 1,0,0,0,113,1480,1,0,0,0,115,1489,1,0,0,0,117,1497,1,0,0,0,119,1505, + 1,0,0,0,121,1509,1,0,0,0,123,1514,1,0,0,0,125,1519,1,0,0,0,127,1525, + 1,0,0,0,129,1530,1,0,0,0,131,1536,1,0,0,0,133,1541,1,0,0,0,135,1550, + 1,0,0,0,137,1559,1,0,0,0,139,1565,1,0,0,0,141,1571,1,0,0,0,143,1581, + 1,0,0,0,145,1592,1,0,0,0,147,1601,1,0,0,0,149,1610,1,0,0,0,151,1618, + 1,0,0,0,153,1625,1,0,0,0,155,1628,1,0,0,0,157,1635,1,0,0,0,159,1648, + 1,0,0,0,161,1653,1,0,0,0,163,1658,1,0,0,0,165,1667,1,0,0,0,167,1674, + 1,0,0,0,169,1681,1,0,0,0,171,1687,1,0,0,0,173,1693,1,0,0,0,175,1699, + 1,0,0,0,177,1703,1,0,0,0,179,1710,1,0,0,0,181,1715,1,0,0,0,183,1718, + 1,0,0,0,185,1725,1,0,0,0,187,1729,1,0,0,0,189,1734,1,0,0,0,191,1742, + 1,0,0,0,193,1752,1,0,0,0,195,1756,1,0,0,0,197,1765,1,0,0,0,199,1773, + 1,0,0,0,201,1782,1,0,0,0,203,1791,1,0,0,0,205,1801,1,0,0,0,207,1808, + 1,0,0,0,209,1817,1,0,0,0,211,1834,1,0,0,0,213,1841,1,0,0,0,215,1847, + 1,0,0,0,217,1854,1,0,0,0,219,1861,1,0,0,0,221,1868,1,0,0,0,223,1882, + 1,0,0,0,225,1894,1,0,0,0,227,1901,1,0,0,0,229,1908,1,0,0,0,231,1917, + 1,0,0,0,233,1922,1,0,0,0,235,1935,1,0,0,0,237,1941,1,0,0,0,239,1946, + 1,0,0,0,241,1950,1,0,0,0,243,1958,1,0,0,0,245,1965,1,0,0,0,247,1974, + 1,0,0,0,249,1980,1,0,0,0,251,1989,1,0,0,0,253,1995,1,0,0,0,255,2003, + 1,0,0,0,257,2008,1,0,0,0,259,2017,1,0,0,0,261,2025,1,0,0,0,263,2031, + 1,0,0,0,265,2033,1,0,0,0,267,2035,1,0,0,0,269,2037,1,0,0,0,271,2039, + 1,0,0,0,273,2041,1,0,0,0,275,2043,1,0,0,0,277,2045,1,0,0,0,279,2047, + 1,0,0,0,281,2049,1,0,0,0,283,2051,1,0,0,0,285,2053,1,0,0,0,287,2055, + 1,0,0,0,289,2057,1,0,0,0,291,2059,1,0,0,0,293,2065,1,0,0,0,295,2067, + 1,0,0,0,297,2069,1,0,0,0,299,2071,1,0,0,0,301,2073,1,0,0,0,303,2076, + 1,0,0,0,305,2079,1,0,0,0,307,2082,1,0,0,0,309,2085,1,0,0,0,311,2088, + 1,0,0,0,313,2091,1,0,0,0,315,2094,1,0,0,0,317,2097,1,0,0,0,319,2101, + 1,0,0,0,321,2105,1,0,0,0,323,2108,1,0,0,0,325,2111,1,0,0,0,327,2114, + 1,0,0,0,329,2122,1,0,0,0,331,2128,1,0,0,0,333,2130,1,0,0,0,335,2133, + 1,0,0,0,337,2136,1,0,0,0,339,2138,1,0,0,0,341,2142,1,0,0,0,343,2145, + 1,0,0,0,345,2147,1,0,0,0,347,2149,1,0,0,0,349,2152,1,0,0,0,351,2154, + 1,0,0,0,353,2156,1,0,0,0,355,2159,1,0,0,0,357,2163,1,0,0,0,359,2178, + 1,0,0,0,361,2180,1,0,0,0,363,2190,1,0,0,0,365,2192,1,0,0,0,367,2194, + 1,0,0,0,369,2196,1,0,0,0,371,2206,1,0,0,0,373,2220,1,0,0,0,375,2236, + 1,0,0,0,377,2248,1,0,0,0,379,2250,1,0,0,0,381,2252,1,0,0,0,383,2254, + 1,0,0,0,385,2272,1,0,0,0,387,2274,1,0,0,0,389,2276,1,0,0,0,391,2282, + 1,0,0,0,393,2287,1,0,0,0,395,2292,1,0,0,0,397,2324,1,0,0,0,399,2337, + 1,0,0,0,401,2339,1,0,0,0,403,2355,1,0,0,0,405,2367,1,0,0,0,407,2369, + 1,0,0,0,409,2371,1,0,0,0,411,2381,1,0,0,0,413,2386,1,0,0,0,415,2391, + 1,0,0,0,417,2393,1,0,0,0,419,2434,1,0,0,0,421,2446,1,0,0,0,423,2448, + 1,0,0,0,425,2451,1,0,0,0,427,2454,1,0,0,0,429,2457,1,0,0,0,431,2468, + 1,0,0,0,433,2472,1,0,0,0,435,2486,1,0,0,0,437,438,5,48,0,0,438,2, + 1,0,0,0,439,440,5,62,0,0,440,441,5,62,0,0,441,4,1,0,0,0,442,443, + 5,60,0,0,443,444,5,60,0,0,444,6,1,0,0,0,445,446,5,65,0,0,446,447, + 5,66,0,0,447,448,5,83,0,0,448,449,5,79,0,0,449,450,5,76,0,0,450, + 451,5,85,0,0,451,452,5,84,0,0,452,470,5,69,0,0,453,454,5,65,0,0, + 454,455,5,98,0,0,455,456,5,115,0,0,456,457,5,111,0,0,457,458,5,108, + 0,0,458,459,5,117,0,0,459,460,5,116,0,0,460,470,5,101,0,0,461,462, + 5,97,0,0,462,463,5,98,0,0,463,464,5,115,0,0,464,465,5,111,0,0,465, + 466,5,108,0,0,466,467,5,117,0,0,467,468,5,116,0,0,468,470,5,101, + 0,0,469,445,1,0,0,0,469,453,1,0,0,0,469,461,1,0,0,0,470,8,1,0,0, + 0,471,472,5,65,0,0,472,478,5,84,0,0,473,474,5,65,0,0,474,478,5,116, + 0,0,475,476,5,97,0,0,476,478,5,116,0,0,477,471,1,0,0,0,477,473,1, + 0,0,0,477,475,1,0,0,0,478,10,1,0,0,0,479,480,5,67,0,0,480,481,5, + 65,0,0,481,482,5,84,0,0,482,483,5,69,0,0,483,484,5,71,0,0,484,485, + 5,79,0,0,485,486,5,82,0,0,486,504,5,89,0,0,487,488,5,67,0,0,488, + 489,5,97,0,0,489,490,5,116,0,0,490,491,5,101,0,0,491,492,5,103,0, + 0,492,493,5,111,0,0,493,494,5,114,0,0,494,504,5,121,0,0,495,496, + 5,99,0,0,496,497,5,97,0,0,497,498,5,116,0,0,498,499,5,101,0,0,499, + 500,5,103,0,0,500,501,5,111,0,0,501,502,5,114,0,0,502,504,5,121, + 0,0,503,479,1,0,0,0,503,487,1,0,0,0,503,495,1,0,0,0,504,12,1,0,0, + 0,505,506,5,67,0,0,506,507,5,79,0,0,507,508,5,77,0,0,508,509,5,80, + 0,0,509,510,5,79,0,0,510,511,5,78,0,0,511,512,5,69,0,0,512,513,5, + 78,0,0,513,533,5,84,0,0,514,515,5,67,0,0,515,516,5,111,0,0,516,517, + 5,109,0,0,517,518,5,112,0,0,518,519,5,111,0,0,519,520,5,110,0,0, + 520,521,5,101,0,0,521,522,5,110,0,0,522,533,5,116,0,0,523,524,5, + 99,0,0,524,525,5,111,0,0,525,526,5,109,0,0,526,527,5,112,0,0,527, + 528,5,111,0,0,528,529,5,110,0,0,529,530,5,101,0,0,530,531,5,110, + 0,0,531,533,5,116,0,0,532,505,1,0,0,0,532,514,1,0,0,0,532,523,1, + 0,0,0,533,14,1,0,0,0,534,535,5,85,0,0,535,536,5,83,0,0,536,537,5, + 69,0,0,537,538,5,82,0,0,538,539,5,86,0,0,539,540,5,65,0,0,540,541, + 5,82,0,0,541,559,5,83,0,0,542,543,5,85,0,0,543,544,5,115,0,0,544, + 545,5,101,0,0,545,546,5,114,0,0,546,547,5,86,0,0,547,548,5,97,0, + 0,548,549,5,114,0,0,549,559,5,115,0,0,550,551,5,117,0,0,551,552, + 5,115,0,0,552,553,5,101,0,0,553,554,5,114,0,0,554,555,5,118,0,0, + 555,556,5,97,0,0,556,557,5,114,0,0,557,559,5,115,0,0,558,534,1,0, + 0,0,558,542,1,0,0,0,558,550,1,0,0,0,559,16,1,0,0,0,560,561,5,68, + 0,0,561,562,5,69,0,0,562,563,5,70,0,0,563,564,5,73,0,0,564,565,5, + 78,0,0,565,579,5,69,0,0,566,567,5,68,0,0,567,568,5,101,0,0,568,569, + 5,102,0,0,569,570,5,105,0,0,570,571,5,110,0,0,571,579,5,101,0,0, + 572,573,5,100,0,0,573,574,5,101,0,0,574,575,5,102,0,0,575,576,5, + 105,0,0,576,577,5,110,0,0,577,579,5,101,0,0,578,560,1,0,0,0,578, + 566,1,0,0,0,578,572,1,0,0,0,579,18,1,0,0,0,580,581,5,68,0,0,581, + 582,5,69,0,0,582,583,5,67,0,0,583,584,5,76,0,0,584,585,5,65,0,0, + 585,586,5,82,0,0,586,602,5,69,0,0,587,588,5,68,0,0,588,589,5,101, + 0,0,589,590,5,99,0,0,590,591,5,108,0,0,591,592,5,97,0,0,592,593, + 5,114,0,0,593,602,5,101,0,0,594,595,5,100,0,0,595,596,5,101,0,0, + 596,597,5,99,0,0,597,598,5,108,0,0,598,599,5,97,0,0,599,600,5,114, + 0,0,600,602,5,101,0,0,601,580,1,0,0,0,601,587,1,0,0,0,601,594,1, + 0,0,0,602,20,1,0,0,0,603,604,5,68,0,0,604,605,5,69,0,0,605,606,5, + 70,0,0,606,607,5,73,0,0,607,608,5,78,0,0,608,609,5,73,0,0,609,610, + 5,84,0,0,610,611,5,73,0,0,611,612,5,79,0,0,612,634,5,78,0,0,613, + 614,5,68,0,0,614,615,5,101,0,0,615,616,5,102,0,0,616,617,5,105,0, + 0,617,618,5,110,0,0,618,619,5,105,0,0,619,620,5,116,0,0,620,621, + 5,105,0,0,621,622,5,111,0,0,622,634,5,110,0,0,623,624,5,100,0,0, + 624,625,5,101,0,0,625,626,5,102,0,0,626,627,5,105,0,0,627,628,5, + 110,0,0,628,629,5,105,0,0,629,630,5,116,0,0,630,631,5,105,0,0,631, + 632,5,111,0,0,632,634,5,110,0,0,633,603,1,0,0,0,633,613,1,0,0,0, + 633,623,1,0,0,0,634,22,1,0,0,0,635,636,5,69,0,0,636,637,5,78,0,0, + 637,645,5,68,0,0,638,639,5,69,0,0,639,640,5,110,0,0,640,645,5,100, + 0,0,641,642,5,101,0,0,642,643,5,110,0,0,643,645,5,100,0,0,644,635, + 1,0,0,0,644,638,1,0,0,0,644,641,1,0,0,0,645,24,1,0,0,0,646,647,5, + 77,0,0,647,648,5,67,0,0,648,649,5,68,0,0,649,650,5,73,0,0,650,651, + 5,83,0,0,651,652,5,80,0,0,652,653,5,76,0,0,653,654,5,65,0,0,654, + 695,5,89,0,0,655,656,5,68,0,0,656,657,5,73,0,0,657,658,5,83,0,0, + 658,659,5,80,0,0,659,660,5,76,0,0,660,661,5,65,0,0,661,695,5,89, + 0,0,662,663,5,77,0,0,663,664,5,99,0,0,664,665,5,68,0,0,665,666,5, + 105,0,0,666,667,5,115,0,0,667,668,5,112,0,0,668,669,5,108,0,0,669, + 670,5,97,0,0,670,695,5,121,0,0,671,672,5,109,0,0,672,673,5,99,0, + 0,673,674,5,100,0,0,674,675,5,105,0,0,675,676,5,115,0,0,676,677, + 5,112,0,0,677,678,5,108,0,0,678,679,5,97,0,0,679,695,5,121,0,0,680, + 681,5,68,0,0,681,682,5,105,0,0,682,683,5,115,0,0,683,684,5,112,0, + 0,684,685,5,108,0,0,685,686,5,97,0,0,686,695,5,121,0,0,687,688,5, + 100,0,0,688,689,5,105,0,0,689,690,5,115,0,0,690,691,5,112,0,0,691, + 692,5,108,0,0,692,693,5,97,0,0,693,695,5,121,0,0,694,646,1,0,0,0, + 694,655,1,0,0,0,694,662,1,0,0,0,694,671,1,0,0,0,694,680,1,0,0,0, + 694,687,1,0,0,0,695,26,1,0,0,0,696,697,5,70,0,0,697,698,5,73,0,0, + 698,699,5,78,0,0,699,700,5,65,0,0,700,701,5,76,0,0,701,702,5,76, + 0,0,702,718,5,89,0,0,703,704,5,70,0,0,704,705,5,105,0,0,705,706, + 5,110,0,0,706,707,5,97,0,0,707,708,5,108,0,0,708,709,5,108,0,0,709, + 718,5,121,0,0,710,711,5,102,0,0,711,712,5,105,0,0,712,713,5,110, + 0,0,713,714,5,97,0,0,714,715,5,108,0,0,715,716,5,108,0,0,716,718, + 5,121,0,0,717,696,1,0,0,0,717,703,1,0,0,0,717,710,1,0,0,0,718,28, + 1,0,0,0,719,720,5,73,0,0,720,721,5,78,0,0,721,722,5,73,0,0,722,723, + 5,84,0,0,723,724,5,73,0,0,724,725,5,65,0,0,725,726,5,76,0,0,726, + 727,5,73,0,0,727,728,5,90,0,0,728,780,5,69,0,0,729,730,5,73,0,0, + 730,731,5,78,0,0,731,732,5,73,0,0,732,733,5,84,0,0,733,734,5,73, + 0,0,734,735,5,65,0,0,735,736,5,76,0,0,736,737,5,73,0,0,737,738,5, + 83,0,0,738,780,5,69,0,0,739,740,5,73,0,0,740,741,5,110,0,0,741,742, + 5,105,0,0,742,743,5,116,0,0,743,744,5,105,0,0,744,745,5,97,0,0,745, + 746,5,108,0,0,746,747,5,105,0,0,747,748,5,122,0,0,748,780,5,101, + 0,0,749,750,5,105,0,0,750,751,5,110,0,0,751,752,5,105,0,0,752,753, + 5,116,0,0,753,754,5,105,0,0,754,755,5,97,0,0,755,756,5,108,0,0,756, + 757,5,105,0,0,757,758,5,122,0,0,758,780,5,101,0,0,759,760,5,73,0, + 0,760,761,5,110,0,0,761,762,5,105,0,0,762,763,5,116,0,0,763,764, + 5,105,0,0,764,765,5,97,0,0,765,766,5,108,0,0,766,767,5,105,0,0,767, + 768,5,115,0,0,768,780,5,101,0,0,769,770,5,105,0,0,770,771,5,110, + 0,0,771,772,5,105,0,0,772,773,5,116,0,0,773,774,5,105,0,0,774,775, + 5,97,0,0,775,776,5,108,0,0,776,777,5,105,0,0,777,778,5,115,0,0,778, + 780,5,101,0,0,779,719,1,0,0,0,779,729,1,0,0,0,779,739,1,0,0,0,779, + 749,1,0,0,0,779,759,1,0,0,0,779,769,1,0,0,0,780,30,1,0,0,0,781,782, + 5,73,0,0,782,783,5,78,0,0,783,784,5,83,0,0,784,785,5,84,0,0,785, + 786,5,82,0,0,786,787,5,85,0,0,787,788,5,77,0,0,788,789,5,69,0,0, + 789,790,5,78,0,0,790,812,5,84,0,0,791,792,5,73,0,0,792,793,5,110, + 0,0,793,794,5,115,0,0,794,795,5,116,0,0,795,796,5,114,0,0,796,797, + 5,117,0,0,797,798,5,109,0,0,798,799,5,101,0,0,799,800,5,110,0,0, + 800,812,5,116,0,0,801,802,5,105,0,0,802,803,5,110,0,0,803,804,5, + 115,0,0,804,805,5,116,0,0,805,806,5,114,0,0,806,807,5,117,0,0,807, + 808,5,109,0,0,808,809,5,101,0,0,809,810,5,110,0,0,810,812,5,116, + 0,0,811,781,1,0,0,0,811,791,1,0,0,0,811,801,1,0,0,0,812,32,1,0,0, + 0,813,814,5,79,0,0,814,815,5,85,0,0,815,816,5,84,0,0,816,817,5,80, + 0,0,817,818,5,85,0,0,818,832,5,84,0,0,819,820,5,79,0,0,820,821,5, + 117,0,0,821,822,5,116,0,0,822,823,5,112,0,0,823,824,5,117,0,0,824, + 832,5,116,0,0,825,826,5,111,0,0,826,827,5,117,0,0,827,828,5,116, + 0,0,828,829,5,112,0,0,829,830,5,117,0,0,830,832,5,116,0,0,831,813, + 1,0,0,0,831,819,1,0,0,0,831,825,1,0,0,0,832,34,1,0,0,0,833,834,5, + 80,0,0,834,835,5,82,0,0,835,836,5,73,0,0,836,837,5,86,0,0,837,838, + 5,65,0,0,838,839,5,84,0,0,839,855,5,69,0,0,840,841,5,80,0,0,841, + 842,5,114,0,0,842,843,5,105,0,0,843,844,5,118,0,0,844,845,5,97,0, + 0,845,846,5,116,0,0,846,855,5,101,0,0,847,848,5,112,0,0,848,849, + 5,114,0,0,849,850,5,105,0,0,850,851,5,118,0,0,851,852,5,97,0,0,852, + 853,5,116,0,0,853,855,5,101,0,0,854,833,1,0,0,0,854,840,1,0,0,0, + 854,847,1,0,0,0,855,36,1,0,0,0,856,857,5,80,0,0,857,858,5,65,0,0, + 858,859,5,82,0,0,859,860,5,65,0,0,860,861,5,77,0,0,861,862,5,69, + 0,0,862,863,5,84,0,0,863,864,5,69,0,0,864,865,5,82,0,0,865,887,5, + 83,0,0,866,867,5,80,0,0,867,868,5,97,0,0,868,869,5,114,0,0,869,870, + 5,97,0,0,870,871,5,109,0,0,871,872,5,101,0,0,872,873,5,116,0,0,873, + 874,5,101,0,0,874,875,5,114,0,0,875,887,5,115,0,0,876,877,5,112, + 0,0,877,878,5,97,0,0,878,879,5,114,0,0,879,880,5,97,0,0,880,881, + 5,109,0,0,881,882,5,101,0,0,882,883,5,116,0,0,883,884,5,101,0,0, + 884,885,5,114,0,0,885,887,5,115,0,0,886,856,1,0,0,0,886,866,1,0, + 0,0,886,876,1,0,0,0,887,38,1,0,0,0,888,889,5,82,0,0,889,890,5,69, + 0,0,890,891,5,76,0,0,891,892,5,65,0,0,892,893,5,84,0,0,893,894,5, + 73,0,0,894,895,5,86,0,0,895,913,5,69,0,0,896,897,5,82,0,0,897,898, + 5,101,0,0,898,899,5,108,0,0,899,900,5,97,0,0,900,901,5,116,0,0,901, + 902,5,105,0,0,902,903,5,118,0,0,903,913,5,101,0,0,904,905,5,114, + 0,0,905,906,5,101,0,0,906,907,5,108,0,0,907,908,5,97,0,0,908,909, + 5,116,0,0,909,910,5,105,0,0,910,911,5,118,0,0,911,913,5,101,0,0, + 912,888,1,0,0,0,912,896,1,0,0,0,912,904,1,0,0,0,913,40,1,0,0,0,914, + 915,5,82,0,0,915,916,5,79,0,0,916,917,5,84,0,0,917,918,5,65,0,0, + 918,919,5,84,0,0,919,920,5,69,0,0,920,936,5,68,0,0,921,922,5,82, + 0,0,922,923,5,111,0,0,923,924,5,116,0,0,924,925,5,97,0,0,925,926, + 5,116,0,0,926,927,5,101,0,0,927,936,5,100,0,0,928,929,5,114,0,0, + 929,930,5,111,0,0,930,931,5,116,0,0,931,932,5,97,0,0,932,933,5,116, + 0,0,933,934,5,101,0,0,934,936,5,100,0,0,935,914,1,0,0,0,935,921, + 1,0,0,0,935,928,1,0,0,0,936,42,1,0,0,0,937,938,5,80,0,0,938,939, + 5,82,0,0,939,940,5,69,0,0,940,941,5,86,0,0,941,942,5,73,0,0,942, + 943,5,79,0,0,943,944,5,85,0,0,944,962,5,83,0,0,945,946,5,80,0,0, + 946,947,5,114,0,0,947,948,5,101,0,0,948,949,5,118,0,0,949,950,5, + 105,0,0,950,951,5,111,0,0,951,952,5,117,0,0,952,962,5,115,0,0,953, + 954,5,112,0,0,954,955,5,114,0,0,955,956,5,101,0,0,956,957,5,118, + 0,0,957,958,5,105,0,0,958,959,5,111,0,0,959,960,5,117,0,0,960,962, + 5,115,0,0,961,937,1,0,0,0,961,945,1,0,0,0,961,953,1,0,0,0,962,44, + 1,0,0,0,963,964,5,83,0,0,964,965,5,69,0,0,965,966,5,84,0,0,966,967, + 5,84,0,0,967,968,5,73,0,0,968,969,5,78,0,0,969,985,5,71,0,0,970, + 971,5,83,0,0,971,972,5,101,0,0,972,973,5,116,0,0,973,974,5,116,0, + 0,974,975,5,105,0,0,975,976,5,110,0,0,976,985,5,103,0,0,977,978, + 5,115,0,0,978,979,5,101,0,0,979,980,5,116,0,0,980,981,5,116,0,0, + 981,982,5,105,0,0,982,983,5,110,0,0,983,985,5,103,0,0,984,963,1, + 0,0,0,984,970,1,0,0,0,984,977,1,0,0,0,985,46,1,0,0,0,986,987,5,84, + 0,0,987,988,5,82,0,0,988,989,5,65,0,0,989,990,5,67,0,0,990,1002, + 5,69,0,0,991,992,5,84,0,0,992,993,5,114,0,0,993,994,5,97,0,0,994, + 995,5,99,0,0,995,1002,5,101,0,0,996,997,5,116,0,0,997,998,5,114, + 0,0,998,999,5,97,0,0,999,1000,5,99,0,0,1000,1002,5,101,0,0,1001, + 986,1,0,0,0,1001,991,1,0,0,0,1001,996,1,0,0,0,1002,48,1,0,0,0,1003, + 1004,5,83,0,0,1004,1005,5,72,0,0,1005,1006,5,65,0,0,1006,1007,5, + 82,0,0,1007,1019,5,69,0,0,1008,1009,5,83,0,0,1009,1010,5,104,0,0, + 1010,1011,5,97,0,0,1011,1012,5,114,0,0,1012,1019,5,101,0,0,1013, + 1014,5,115,0,0,1014,1015,5,104,0,0,1015,1016,5,97,0,0,1016,1017, + 5,114,0,0,1017,1019,5,101,0,0,1018,1003,1,0,0,0,1018,1008,1,0,0, + 0,1018,1013,1,0,0,0,1019,50,1,0,0,0,1020,1021,5,69,0,0,1021,1022, + 5,88,0,0,1022,1023,5,84,0,0,1023,1024,5,69,0,0,1024,1025,5,78,0, + 0,1025,1039,5,68,0,0,1026,1027,5,69,0,0,1027,1028,5,120,0,0,1028, + 1029,5,116,0,0,1029,1030,5,101,0,0,1030,1031,5,110,0,0,1031,1039, + 5,100,0,0,1032,1033,5,101,0,0,1033,1034,5,120,0,0,1034,1035,5,116, + 0,0,1035,1036,5,101,0,0,1036,1037,5,110,0,0,1037,1039,5,100,0,0, + 1038,1020,1,0,0,0,1038,1026,1,0,0,0,1038,1032,1,0,0,0,1039,52,1, + 0,0,0,1040,1041,5,71,0,0,1041,1042,5,82,0,0,1042,1043,5,79,0,0,1043, + 1044,5,85,0,0,1044,1056,5,80,0,0,1045,1046,5,71,0,0,1046,1047,5, + 114,0,0,1047,1048,5,111,0,0,1048,1049,5,117,0,0,1049,1056,5,112, + 0,0,1050,1051,5,103,0,0,1051,1052,5,114,0,0,1052,1053,5,111,0,0, + 1053,1054,5,117,0,0,1054,1056,5,112,0,0,1055,1040,1,0,0,0,1055,1045, + 1,0,0,0,1055,1050,1,0,0,0,1056,54,1,0,0,0,1057,1058,5,83,0,0,1058, + 1059,5,65,0,0,1059,1060,5,86,0,0,1060,1070,5,69,0,0,1061,1062,5, + 83,0,0,1062,1063,5,97,0,0,1063,1064,5,118,0,0,1064,1070,5,101,0, + 0,1065,1066,5,115,0,0,1066,1067,5,97,0,0,1067,1068,5,118,0,0,1068, + 1070,5,101,0,0,1069,1057,1,0,0,0,1069,1061,1,0,0,0,1069,1065,1,0, + 0,0,1070,56,1,0,0,0,1071,1072,5,74,0,0,1072,1073,5,85,0,0,1073,1074, + 5,77,0,0,1074,1084,5,80,0,0,1075,1076,5,74,0,0,1076,1077,5,117,0, + 0,1077,1078,5,109,0,0,1078,1084,5,112,0,0,1079,1080,5,106,0,0,1080, + 1081,5,117,0,0,1081,1082,5,109,0,0,1082,1084,5,112,0,0,1083,1071, + 1,0,0,0,1083,1075,1,0,0,0,1083,1079,1,0,0,0,1084,58,1,0,0,0,1085, + 1086,5,87,0,0,1086,1087,5,72,0,0,1087,1088,5,69,0,0,1088,1098,5, + 78,0,0,1089,1090,5,87,0,0,1090,1091,5,104,0,0,1091,1092,5,101,0, + 0,1092,1098,5,110,0,0,1093,1094,5,119,0,0,1094,1095,5,104,0,0,1095, + 1096,5,101,0,0,1096,1098,5,110,0,0,1097,1085,1,0,0,0,1097,1089,1, + 0,0,0,1097,1093,1,0,0,0,1098,60,1,0,0,0,1099,1100,5,78,0,0,1100, + 1101,5,69,0,0,1101,1102,5,88,0,0,1102,1112,5,84,0,0,1103,1104,5, + 78,0,0,1104,1105,5,101,0,0,1105,1106,5,120,0,0,1106,1112,5,116,0, + 0,1107,1108,5,110,0,0,1108,1109,5,101,0,0,1109,1110,5,120,0,0,1110, + 1112,5,116,0,0,1111,1099,1,0,0,0,1111,1103,1,0,0,0,1111,1107,1,0, + 0,0,1112,62,1,0,0,0,1113,1114,5,73,0,0,1114,1115,5,84,0,0,1115,1116, + 5,69,0,0,1116,1117,5,82,0,0,1117,1118,5,65,0,0,1118,1119,5,84,0, + 0,1119,1135,5,69,0,0,1120,1121,5,73,0,0,1121,1122,5,116,0,0,1122, + 1123,5,101,0,0,1123,1124,5,114,0,0,1124,1125,5,97,0,0,1125,1126, + 5,116,0,0,1126,1135,5,101,0,0,1127,1128,5,105,0,0,1128,1129,5,116, + 0,0,1129,1130,5,101,0,0,1130,1131,5,114,0,0,1131,1132,5,97,0,0,1132, + 1133,5,116,0,0,1133,1135,5,101,0,0,1134,1113,1,0,0,0,1134,1120,1, + 0,0,0,1134,1127,1,0,0,0,1135,64,1,0,0,0,1136,1137,5,77,0,0,1137, + 1138,5,89,0,0,1138,1139,5,83,0,0,1139,1140,5,69,0,0,1140,1141,5, + 76,0,0,1141,1155,5,70,0,0,1142,1143,5,77,0,0,1143,1144,5,121,0,0, + 1144,1145,5,115,0,0,1145,1146,5,101,0,0,1146,1147,5,108,0,0,1147, + 1155,5,102,0,0,1148,1149,5,109,0,0,1149,1150,5,121,0,0,1150,1151, + 5,115,0,0,1151,1152,5,101,0,0,1152,1153,5,108,0,0,1153,1155,5,102, + 0,0,1154,1136,1,0,0,0,1154,1142,1,0,0,0,1154,1148,1,0,0,0,1155,66, + 1,0,0,0,1156,1157,5,67,0,0,1157,1158,5,79,0,0,1158,1159,5,80,0,0, + 1159,1169,5,89,0,0,1160,1161,5,67,0,0,1161,1162,5,111,0,0,1162,1163, + 5,112,0,0,1163,1169,5,121,0,0,1164,1165,5,99,0,0,1165,1166,5,111, + 0,0,1166,1167,5,112,0,0,1167,1169,5,121,0,0,1168,1156,1,0,0,0,1168, + 1160,1,0,0,0,1168,1164,1,0,0,0,1169,68,1,0,0,0,1170,1171,5,83,0, + 0,1171,1172,5,80,0,0,1172,1173,5,76,0,0,1173,1174,5,73,0,0,1174, + 1186,5,84,0,0,1175,1176,5,83,0,0,1176,1177,5,112,0,0,1177,1178,5, + 108,0,0,1178,1179,5,105,0,0,1179,1186,5,116,0,0,1180,1181,5,115, + 0,0,1181,1182,5,112,0,0,1182,1183,5,108,0,0,1183,1184,5,105,0,0, + 1184,1186,5,116,0,0,1185,1170,1,0,0,0,1185,1175,1,0,0,0,1185,1180, + 1,0,0,0,1186,70,1,0,0,0,1187,1188,5,82,0,0,1188,1189,5,69,0,0,1189, + 1190,5,77,0,0,1190,1191,5,79,0,0,1191,1192,5,86,0,0,1192,1193,5, + 65,0,0,1193,1194,5,66,0,0,1194,1195,5,76,0,0,1195,1215,5,69,0,0, + 1196,1197,5,82,0,0,1197,1198,5,101,0,0,1198,1199,5,109,0,0,1199, + 1200,5,111,0,0,1200,1201,5,118,0,0,1201,1202,5,97,0,0,1202,1203, + 5,98,0,0,1203,1204,5,101,0,0,1204,1215,5,108,0,0,1205,1206,5,114, + 0,0,1206,1207,5,101,0,0,1207,1208,5,109,0,0,1208,1209,5,111,0,0, + 1209,1210,5,118,0,0,1210,1211,5,97,0,0,1211,1212,5,98,0,0,1212,1213, + 5,108,0,0,1213,1215,5,101,0,0,1214,1187,1,0,0,0,1214,1196,1,0,0, + 0,1214,1205,1,0,0,0,1215,72,1,0,0,0,1216,1217,5,67,0,0,1217,1218, + 5,80,0,0,1218,1223,5,85,0,0,1219,1220,5,99,0,0,1220,1221,5,112,0, + 0,1221,1223,5,117,0,0,1222,1216,1,0,0,0,1222,1219,1,0,0,0,1223,74, + 1,0,0,0,1224,1225,5,78,0,0,1225,1226,5,79,0,0,1226,1227,5,65,0,0, + 1227,1228,5,67,0,0,1228,1245,5,67,0,0,1229,1230,5,78,0,0,1230,1231, + 5,111,0,0,1231,1232,5,65,0,0,1232,1233,5,67,0,0,1233,1245,5,67,0, + 0,1234,1235,5,78,0,0,1235,1236,5,111,0,0,1236,1237,5,65,0,0,1237, + 1238,5,99,0,0,1238,1245,5,99,0,0,1239,1240,5,110,0,0,1240,1241,5, + 111,0,0,1241,1242,5,97,0,0,1242,1243,5,99,0,0,1243,1245,5,99,0,0, + 1244,1224,1,0,0,0,1244,1229,1,0,0,0,1244,1234,1,0,0,0,1244,1239, + 1,0,0,0,1245,76,1,0,0,0,1246,1247,5,68,0,0,1247,1248,5,69,0,0,1248, + 1249,5,80,0,0,1249,1250,5,69,0,0,1250,1251,5,78,0,0,1251,1252,5, + 68,0,0,1252,1253,5,69,0,0,1253,1254,5,78,0,0,1254,1255,5,67,0,0, + 1255,1277,5,89,0,0,1256,1257,5,68,0,0,1257,1258,5,101,0,0,1258,1259, + 5,112,0,0,1259,1260,5,101,0,0,1260,1261,5,110,0,0,1261,1262,5,100, + 0,0,1262,1263,5,101,0,0,1263,1264,5,110,0,0,1264,1265,5,99,0,0,1265, + 1277,5,121,0,0,1266,1267,5,100,0,0,1267,1268,5,101,0,0,1268,1269, + 5,112,0,0,1269,1270,5,101,0,0,1270,1271,5,110,0,0,1271,1272,5,100, + 0,0,1272,1273,5,101,0,0,1273,1274,5,110,0,0,1274,1275,5,99,0,0,1275, + 1277,5,121,0,0,1276,1246,1,0,0,0,1276,1256,1,0,0,0,1276,1266,1,0, + 0,0,1277,78,1,0,0,0,1278,1279,5,83,0,0,1279,1280,5,72,0,0,1280,1281, + 5,69,0,0,1281,1282,5,76,0,0,1282,1294,5,76,0,0,1283,1284,5,83,0, + 0,1284,1285,5,104,0,0,1285,1286,5,101,0,0,1286,1287,5,108,0,0,1287, + 1294,5,108,0,0,1288,1289,5,115,0,0,1289,1290,5,104,0,0,1290,1291, + 5,101,0,0,1291,1292,5,108,0,0,1292,1294,5,108,0,0,1293,1278,1,0, + 0,0,1293,1283,1,0,0,0,1293,1288,1,0,0,0,1294,80,1,0,0,0,1295,1296, + 5,83,0,0,1296,1297,5,69,0,0,1297,1298,5,65,0,0,1298,1299,5,82,0, + 0,1299,1300,5,67,0,0,1300,1314,5,72,0,0,1301,1302,5,83,0,0,1302, + 1303,5,101,0,0,1303,1304,5,97,0,0,1304,1305,5,114,0,0,1305,1306, + 5,99,0,0,1306,1314,5,104,0,0,1307,1308,5,115,0,0,1308,1309,5,101, + 0,0,1309,1310,5,97,0,0,1310,1311,5,114,0,0,1311,1312,5,99,0,0,1312, + 1314,5,104,0,0,1313,1295,1,0,0,0,1313,1301,1,0,0,0,1313,1307,1,0, + 0,0,1314,82,1,0,0,0,1315,1316,5,77,0,0,1316,1317,5,69,0,0,1317,1318, + 5,84,0,0,1318,1319,5,65,0,0,1319,1320,5,68,0,0,1320,1321,5,65,0, + 0,1321,1322,5,84,0,0,1322,1340,5,65,0,0,1323,1324,5,77,0,0,1324, + 1325,5,101,0,0,1325,1326,5,116,0,0,1326,1327,5,97,0,0,1327,1328, + 5,68,0,0,1328,1329,5,97,0,0,1329,1330,5,116,0,0,1330,1340,5,97,0, + 0,1331,1332,5,109,0,0,1332,1333,5,101,0,0,1333,1334,5,116,0,0,1334, + 1335,5,97,0,0,1335,1336,5,100,0,0,1336,1337,5,97,0,0,1337,1338,5, + 116,0,0,1338,1340,5,97,0,0,1339,1315,1,0,0,0,1339,1323,1,0,0,0,1339, + 1331,1,0,0,0,1340,84,1,0,0,0,1341,1342,5,115,0,0,1342,1343,5,116, + 0,0,1343,1344,5,114,0,0,1344,1345,5,105,0,0,1345,1346,5,110,0,0, + 1346,1347,5,103,0,0,1347,86,1,0,0,0,1348,1349,5,118,0,0,1349,1350, + 5,101,0,0,1350,1351,5,99,0,0,1351,1352,5,116,0,0,1352,1353,5,111, + 0,0,1353,1354,5,114,0,0,1354,88,1,0,0,0,1355,1356,5,115,0,0,1356, + 1357,5,121,0,0,1357,1358,5,109,0,0,1358,1359,5,98,0,0,1359,1360, + 5,111,0,0,1360,1361,5,108,0,0,1361,90,1,0,0,0,1362,1363,5,37,0,0, + 1363,1364,5,123,0,0,1364,1368,1,0,0,0,1365,1367,9,0,0,0,1366,1365, + 1,0,0,0,1367,1370,1,0,0,0,1368,1369,1,0,0,0,1368,1366,1,0,0,0,1369, + 1371,1,0,0,0,1370,1368,1,0,0,0,1371,1372,5,37,0,0,1372,1373,5,125, + 0,0,1373,92,1,0,0,0,1374,1375,5,37,0,0,1375,1376,5,105,0,0,1376, + 1377,5,110,0,0,1377,1378,5,99,0,0,1378,1379,5,108,0,0,1379,1380, + 5,117,0,0,1380,1381,5,100,0,0,1381,1382,5,101,0,0,1382,94,1,0,0, + 0,1383,1384,5,78,0,0,1384,1385,5,85,0,0,1385,1386,5,76,0,0,1386, + 1387,5,76,0,0,1387,96,1,0,0,0,1388,1390,3,369,184,0,1389,1391,3, + 385,192,0,1390,1389,1,0,0,0,1390,1391,1,0,0,0,1391,1405,1,0,0,0, + 1392,1394,3,371,185,0,1393,1395,3,385,192,0,1394,1393,1,0,0,0,1394, + 1395,1,0,0,0,1395,1405,1,0,0,0,1396,1398,3,373,186,0,1397,1399,3, + 385,192,0,1398,1397,1,0,0,0,1398,1399,1,0,0,0,1399,1405,1,0,0,0, + 1400,1402,3,375,187,0,1401,1403,3,385,192,0,1402,1401,1,0,0,0,1402, + 1403,1,0,0,0,1403,1405,1,0,0,0,1404,1388,1,0,0,0,1404,1392,1,0,0, + 0,1404,1396,1,0,0,0,1404,1400,1,0,0,0,1405,98,1,0,0,0,1406,1408, + 7,0,0,0,1407,1406,1,0,0,0,1407,1408,1,0,0,0,1408,1409,1,0,0,0,1409, + 1411,5,39,0,0,1410,1412,3,393,196,0,1411,1410,1,0,0,0,1412,1413, + 1,0,0,0,1413,1411,1,0,0,0,1413,1414,1,0,0,0,1414,1415,1,0,0,0,1415, + 1416,5,39,0,0,1416,100,1,0,0,0,1417,1419,3,403,201,0,1418,1420,3, + 405,202,0,1419,1418,1,0,0,0,1419,1420,1,0,0,0,1420,1422,1,0,0,0, + 1421,1423,3,411,205,0,1422,1421,1,0,0,0,1422,1423,1,0,0,0,1423,1430, + 1,0,0,0,1424,1425,3,409,204,0,1425,1427,3,405,202,0,1426,1428,3, + 411,205,0,1427,1426,1,0,0,0,1427,1428,1,0,0,0,1428,1430,1,0,0,0, + 1429,1417,1,0,0,0,1429,1424,1,0,0,0,1430,102,1,0,0,0,1431,1433,3, + 413,206,0,1432,1431,1,0,0,0,1432,1433,1,0,0,0,1433,1443,1,0,0,0, + 1434,1444,3,417,208,0,1435,1439,5,34,0,0,1436,1438,3,415,207,0,1437, + 1436,1,0,0,0,1438,1441,1,0,0,0,1439,1437,1,0,0,0,1439,1440,1,0,0, + 0,1440,1442,1,0,0,0,1441,1439,1,0,0,0,1442,1444,5,34,0,0,1443,1434, + 1,0,0,0,1443,1435,1,0,0,0,1444,104,1,0,0,0,1445,1448,3,169,84,0, + 1446,1448,3,237,118,0,1447,1445,1,0,0,0,1447,1446,1,0,0,0,1448,106, + 1,0,0,0,1449,1450,3,197,98,0,1450,108,1,0,0,0,1451,1456,3,419,209, + 0,1452,1456,3,421,210,0,1453,1456,3,423,211,0,1454,1456,3,425,212, + 0,1455,1451,1,0,0,0,1455,1452,1,0,0,0,1455,1453,1,0,0,0,1455,1454, + 1,0,0,0,1456,110,1,0,0,0,1457,1469,5,35,0,0,1458,1460,8,1,0,0,1459, + 1458,1,0,0,0,1460,1463,1,0,0,0,1461,1462,1,0,0,0,1461,1459,1,0,0, + 0,1462,1464,1,0,0,0,1463,1461,1,0,0,0,1464,1466,5,92,0,0,1465,1467, + 5,13,0,0,1466,1465,1,0,0,0,1466,1467,1,0,0,0,1467,1468,1,0,0,0,1468, + 1470,5,10,0,0,1469,1461,1,0,0,0,1470,1471,1,0,0,0,1471,1469,1,0, + 0,0,1471,1472,1,0,0,0,1472,1474,1,0,0,0,1473,1475,8,1,0,0,1474,1473, + 1,0,0,0,1475,1476,1,0,0,0,1476,1474,1,0,0,0,1476,1477,1,0,0,0,1477, + 1478,1,0,0,0,1478,1479,6,55,0,0,1479,112,1,0,0,0,1480,1484,5,35, + 0,0,1481,1483,8,1,0,0,1482,1481,1,0,0,0,1483,1486,1,0,0,0,1484,1482, + 1,0,0,0,1484,1485,1,0,0,0,1485,1487,1,0,0,0,1486,1484,1,0,0,0,1487, + 1488,6,56,0,0,1488,114,1,0,0,0,1489,1490,5,97,0,0,1490,1491,5,108, + 0,0,1491,1492,5,105,0,0,1492,1493,5,103,0,0,1493,1494,5,110,0,0, + 1494,1495,5,97,0,0,1495,1496,5,115,0,0,1496,116,1,0,0,0,1497,1498, + 5,97,0,0,1498,1499,5,108,0,0,1499,1500,5,105,0,0,1500,1501,5,103, + 0,0,1501,1502,5,110,0,0,1502,1503,5,111,0,0,1503,1504,5,102,0,0, + 1504,118,1,0,0,0,1505,1506,5,97,0,0,1506,1507,5,115,0,0,1507,1508, + 5,109,0,0,1508,120,1,0,0,0,1509,1510,5,97,0,0,1510,1511,5,117,0, + 0,1511,1512,5,116,0,0,1512,1513,5,111,0,0,1513,122,1,0,0,0,1514, + 1515,5,98,0,0,1515,1516,5,111,0,0,1516,1517,5,111,0,0,1517,1518, + 5,108,0,0,1518,124,1,0,0,0,1519,1520,5,98,0,0,1520,1521,5,114,0, + 0,1521,1522,5,101,0,0,1522,1523,5,97,0,0,1523,1524,5,107,0,0,1524, + 126,1,0,0,0,1525,1526,5,99,0,0,1526,1527,5,97,0,0,1527,1528,5,115, + 0,0,1528,1529,5,101,0,0,1529,128,1,0,0,0,1530,1531,5,99,0,0,1531, + 1532,5,97,0,0,1532,1533,5,116,0,0,1533,1534,5,99,0,0,1534,1535,5, + 104,0,0,1535,130,1,0,0,0,1536,1537,5,99,0,0,1537,1538,5,104,0,0, + 1538,1539,5,97,0,0,1539,1540,5,114,0,0,1540,132,1,0,0,0,1541,1542, + 5,99,0,0,1542,1543,5,104,0,0,1543,1544,5,97,0,0,1544,1545,5,114, + 0,0,1545,1546,5,49,0,0,1546,1547,5,54,0,0,1547,1548,5,95,0,0,1548, + 1549,5,116,0,0,1549,134,1,0,0,0,1550,1551,5,99,0,0,1551,1552,5,104, + 0,0,1552,1553,5,97,0,0,1553,1554,5,114,0,0,1554,1555,5,51,0,0,1555, + 1556,5,50,0,0,1556,1557,5,95,0,0,1557,1558,5,116,0,0,1558,136,1, + 0,0,0,1559,1560,5,99,0,0,1560,1561,5,108,0,0,1561,1562,5,97,0,0, + 1562,1563,5,115,0,0,1563,1564,5,115,0,0,1564,138,1,0,0,0,1565,1566, + 5,99,0,0,1566,1567,5,111,0,0,1567,1568,5,110,0,0,1568,1569,5,115, + 0,0,1569,1570,5,116,0,0,1570,140,1,0,0,0,1571,1572,5,99,0,0,1572, + 1573,5,111,0,0,1573,1574,5,110,0,0,1574,1575,5,115,0,0,1575,1576, + 5,116,0,0,1576,1577,5,101,0,0,1577,1578,5,120,0,0,1578,1579,5,112, + 0,0,1579,1580,5,114,0,0,1580,142,1,0,0,0,1581,1582,5,99,0,0,1582, + 1583,5,111,0,0,1583,1584,5,110,0,0,1584,1585,5,115,0,0,1585,1586, + 5,116,0,0,1586,1587,5,95,0,0,1587,1588,5,99,0,0,1588,1589,5,97,0, + 0,1589,1590,5,115,0,0,1590,1591,5,116,0,0,1591,144,1,0,0,0,1592, + 1593,5,99,0,0,1593,1594,5,111,0,0,1594,1595,5,110,0,0,1595,1596, + 5,116,0,0,1596,1597,5,105,0,0,1597,1598,5,110,0,0,1598,1599,5,117, + 0,0,1599,1600,5,101,0,0,1600,146,1,0,0,0,1601,1602,5,100,0,0,1602, + 1603,5,101,0,0,1603,1604,5,99,0,0,1604,1605,5,108,0,0,1605,1606, + 5,116,0,0,1606,1607,5,121,0,0,1607,1608,5,112,0,0,1608,1609,5,101, + 0,0,1609,148,1,0,0,0,1610,1611,5,100,0,0,1611,1612,5,101,0,0,1612, + 1613,5,102,0,0,1613,1614,5,97,0,0,1614,1615,5,117,0,0,1615,1616, + 5,108,0,0,1616,1617,5,116,0,0,1617,150,1,0,0,0,1618,1619,5,100,0, + 0,1619,1620,5,101,0,0,1620,1621,5,108,0,0,1621,1622,5,101,0,0,1622, + 1623,5,116,0,0,1623,1624,5,101,0,0,1624,152,1,0,0,0,1625,1626,5, + 100,0,0,1626,1627,5,111,0,0,1627,154,1,0,0,0,1628,1629,5,100,0,0, + 1629,1630,5,111,0,0,1630,1631,5,117,0,0,1631,1632,5,98,0,0,1632, + 1633,5,108,0,0,1633,1634,5,101,0,0,1634,156,1,0,0,0,1635,1636,5, + 100,0,0,1636,1637,5,121,0,0,1637,1638,5,110,0,0,1638,1639,5,97,0, + 0,1639,1640,5,109,0,0,1640,1641,5,105,0,0,1641,1642,5,99,0,0,1642, + 1643,5,95,0,0,1643,1644,5,99,0,0,1644,1645,5,97,0,0,1645,1646,5, + 115,0,0,1646,1647,5,116,0,0,1647,158,1,0,0,0,1648,1649,5,101,0,0, + 1649,1650,5,108,0,0,1650,1651,5,115,0,0,1651,1652,5,101,0,0,1652, + 160,1,0,0,0,1653,1654,5,101,0,0,1654,1655,5,110,0,0,1655,1656,5, + 117,0,0,1656,1657,5,109,0,0,1657,162,1,0,0,0,1658,1659,5,101,0,0, + 1659,1660,5,120,0,0,1660,1661,5,112,0,0,1661,1662,5,108,0,0,1662, + 1663,5,105,0,0,1663,1664,5,99,0,0,1664,1665,5,105,0,0,1665,1666, + 5,116,0,0,1666,164,1,0,0,0,1667,1668,5,101,0,0,1668,1669,5,120,0, + 0,1669,1670,5,112,0,0,1670,1671,5,111,0,0,1671,1672,5,114,0,0,1672, + 1673,5,116,0,0,1673,166,1,0,0,0,1674,1675,5,101,0,0,1675,1676,5, + 120,0,0,1676,1677,5,116,0,0,1677,1678,5,101,0,0,1678,1679,5,114, + 0,0,1679,1680,5,110,0,0,1680,168,1,0,0,0,1681,1682,5,102,0,0,1682, + 1683,5,97,0,0,1683,1684,5,108,0,0,1684,1685,5,115,0,0,1685,1686, + 5,101,0,0,1686,170,1,0,0,0,1687,1688,5,102,0,0,1688,1689,5,105,0, + 0,1689,1690,5,110,0,0,1690,1691,5,97,0,0,1691,1692,5,108,0,0,1692, + 172,1,0,0,0,1693,1694,5,102,0,0,1694,1695,5,108,0,0,1695,1696,5, + 111,0,0,1696,1697,5,97,0,0,1697,1698,5,116,0,0,1698,174,1,0,0,0, + 1699,1700,5,102,0,0,1700,1701,5,111,0,0,1701,1702,5,114,0,0,1702, + 176,1,0,0,0,1703,1704,5,102,0,0,1704,1705,5,114,0,0,1705,1706,5, + 105,0,0,1706,1707,5,101,0,0,1707,1708,5,110,0,0,1708,1709,5,100, + 0,0,1709,178,1,0,0,0,1710,1711,5,103,0,0,1711,1712,5,111,0,0,1712, + 1713,5,116,0,0,1713,1714,5,111,0,0,1714,180,1,0,0,0,1715,1716,5, + 105,0,0,1716,1717,5,102,0,0,1717,182,1,0,0,0,1718,1719,5,105,0,0, + 1719,1720,5,110,0,0,1720,1721,5,108,0,0,1721,1722,5,105,0,0,1722, + 1723,5,110,0,0,1723,1724,5,101,0,0,1724,184,1,0,0,0,1725,1726,5, + 105,0,0,1726,1727,5,110,0,0,1727,1728,5,116,0,0,1728,186,1,0,0,0, + 1729,1730,5,108,0,0,1730,1731,5,111,0,0,1731,1732,5,110,0,0,1732, + 1733,5,103,0,0,1733,188,1,0,0,0,1734,1735,5,109,0,0,1735,1736,5, + 117,0,0,1736,1737,5,116,0,0,1737,1738,5,97,0,0,1738,1739,5,98,0, + 0,1739,1740,5,108,0,0,1740,1741,5,101,0,0,1741,190,1,0,0,0,1742, + 1743,5,110,0,0,1743,1744,5,97,0,0,1744,1745,5,109,0,0,1745,1746, + 5,101,0,0,1746,1747,5,115,0,0,1747,1748,5,112,0,0,1748,1749,5,97, + 0,0,1749,1750,5,99,0,0,1750,1751,5,101,0,0,1751,192,1,0,0,0,1752, + 1753,5,110,0,0,1753,1754,5,101,0,0,1754,1755,5,119,0,0,1755,194, + 1,0,0,0,1756,1757,5,110,0,0,1757,1758,5,111,0,0,1758,1759,5,101, + 0,0,1759,1760,5,120,0,0,1760,1761,5,99,0,0,1761,1762,5,101,0,0,1762, + 1763,5,112,0,0,1763,1764,5,116,0,0,1764,196,1,0,0,0,1765,1766,5, + 110,0,0,1766,1767,5,117,0,0,1767,1768,5,108,0,0,1768,1769,5,108, + 0,0,1769,1770,5,112,0,0,1770,1771,5,116,0,0,1771,1772,5,114,0,0, + 1772,198,1,0,0,0,1773,1774,5,111,0,0,1774,1775,5,112,0,0,1775,1776, + 5,101,0,0,1776,1777,5,114,0,0,1777,1778,5,97,0,0,1778,1779,5,116, + 0,0,1779,1780,5,111,0,0,1780,1781,5,114,0,0,1781,200,1,0,0,0,1782, + 1783,5,111,0,0,1783,1784,5,118,0,0,1784,1785,5,101,0,0,1785,1786, + 5,114,0,0,1786,1787,5,114,0,0,1787,1788,5,105,0,0,1788,1789,5,100, + 0,0,1789,1790,5,101,0,0,1790,202,1,0,0,0,1791,1792,5,112,0,0,1792, + 1793,5,114,0,0,1793,1794,5,111,0,0,1794,1795,5,116,0,0,1795,1796, + 5,101,0,0,1796,1797,5,99,0,0,1797,1798,5,116,0,0,1798,1799,5,101, + 0,0,1799,1800,5,100,0,0,1800,204,1,0,0,0,1801,1802,5,112,0,0,1802, + 1803,5,117,0,0,1803,1804,5,98,0,0,1804,1805,5,108,0,0,1805,1806, + 5,105,0,0,1806,1807,5,99,0,0,1807,206,1,0,0,0,1808,1809,5,114,0, + 0,1809,1810,5,101,0,0,1810,1811,5,103,0,0,1811,1812,5,105,0,0,1812, + 1813,5,115,0,0,1813,1814,5,116,0,0,1814,1815,5,101,0,0,1815,1816, + 5,114,0,0,1816,208,1,0,0,0,1817,1818,5,114,0,0,1818,1819,5,101,0, + 0,1819,1820,5,105,0,0,1820,1821,5,110,0,0,1821,1822,5,116,0,0,1822, + 1823,5,101,0,0,1823,1824,5,114,0,0,1824,1825,5,112,0,0,1825,1826, + 5,114,0,0,1826,1827,5,101,0,0,1827,1828,5,116,0,0,1828,1829,5,95, + 0,0,1829,1830,5,99,0,0,1830,1831,5,97,0,0,1831,1832,5,115,0,0,1832, + 1833,5,116,0,0,1833,210,1,0,0,0,1834,1835,5,114,0,0,1835,1836,5, + 101,0,0,1836,1837,5,116,0,0,1837,1838,5,117,0,0,1838,1839,5,114, + 0,0,1839,1840,5,110,0,0,1840,212,1,0,0,0,1841,1842,5,115,0,0,1842, + 1843,5,104,0,0,1843,1844,5,111,0,0,1844,1845,5,114,0,0,1845,1846, + 5,116,0,0,1846,214,1,0,0,0,1847,1848,5,115,0,0,1848,1849,5,105,0, + 0,1849,1850,5,103,0,0,1850,1851,5,110,0,0,1851,1852,5,101,0,0,1852, + 1853,5,100,0,0,1853,216,1,0,0,0,1854,1855,5,115,0,0,1855,1856,5, + 105,0,0,1856,1857,5,122,0,0,1857,1858,5,101,0,0,1858,1859,5,111, + 0,0,1859,1860,5,102,0,0,1860,218,1,0,0,0,1861,1862,5,115,0,0,1862, + 1863,5,116,0,0,1863,1864,5,97,0,0,1864,1865,5,116,0,0,1865,1866, + 5,105,0,0,1866,1867,5,99,0,0,1867,220,1,0,0,0,1868,1869,5,115,0, + 0,1869,1870,5,116,0,0,1870,1871,5,97,0,0,1871,1872,5,116,0,0,1872, + 1873,5,105,0,0,1873,1874,5,99,0,0,1874,1875,5,95,0,0,1875,1876,5, + 97,0,0,1876,1877,5,115,0,0,1877,1878,5,115,0,0,1878,1879,5,101,0, + 0,1879,1880,5,114,0,0,1880,1881,5,116,0,0,1881,222,1,0,0,0,1882, + 1883,5,115,0,0,1883,1884,5,116,0,0,1884,1885,5,97,0,0,1885,1886, + 5,116,0,0,1886,1887,5,105,0,0,1887,1888,5,99,0,0,1888,1889,5,95, + 0,0,1889,1890,5,99,0,0,1890,1891,5,97,0,0,1891,1892,5,115,0,0,1892, + 1893,5,116,0,0,1893,224,1,0,0,0,1894,1895,5,115,0,0,1895,1896,5, + 116,0,0,1896,1897,5,114,0,0,1897,1898,5,117,0,0,1898,1899,5,99,0, + 0,1899,1900,5,116,0,0,1900,226,1,0,0,0,1901,1902,5,115,0,0,1902, + 1903,5,119,0,0,1903,1904,5,105,0,0,1904,1905,5,116,0,0,1905,1906, + 5,99,0,0,1906,1907,5,104,0,0,1907,228,1,0,0,0,1908,1909,5,116,0, + 0,1909,1910,5,101,0,0,1910,1911,5,109,0,0,1911,1912,5,112,0,0,1912, + 1913,5,108,0,0,1913,1914,5,97,0,0,1914,1915,5,116,0,0,1915,1916, + 5,101,0,0,1916,230,1,0,0,0,1917,1918,5,116,0,0,1918,1919,5,104,0, + 0,1919,1920,5,105,0,0,1920,1921,5,115,0,0,1921,232,1,0,0,0,1922, + 1923,5,116,0,0,1923,1924,5,104,0,0,1924,1925,5,114,0,0,1925,1926, + 5,101,0,0,1926,1927,5,97,0,0,1927,1928,5,100,0,0,1928,1929,5,95, + 0,0,1929,1930,5,108,0,0,1930,1931,5,111,0,0,1931,1932,5,99,0,0,1932, + 1933,5,97,0,0,1933,1934,5,108,0,0,1934,234,1,0,0,0,1935,1936,5,116, + 0,0,1936,1937,5,104,0,0,1937,1938,5,114,0,0,1938,1939,5,111,0,0, + 1939,1940,5,119,0,0,1940,236,1,0,0,0,1941,1942,5,116,0,0,1942,1943, + 5,114,0,0,1943,1944,5,117,0,0,1944,1945,5,101,0,0,1945,238,1,0,0, + 0,1946,1947,5,116,0,0,1947,1948,5,114,0,0,1948,1949,5,121,0,0,1949, + 240,1,0,0,0,1950,1951,5,116,0,0,1951,1952,5,121,0,0,1952,1953,5, + 112,0,0,1953,1954,5,101,0,0,1954,1955,5,100,0,0,1955,1956,5,101, + 0,0,1956,1957,5,102,0,0,1957,242,1,0,0,0,1958,1959,5,116,0,0,1959, + 1960,5,121,0,0,1960,1961,5,112,0,0,1961,1962,5,101,0,0,1962,1963, + 5,105,0,0,1963,1964,5,100,0,0,1964,244,1,0,0,0,1965,1966,5,116,0, + 0,1966,1967,5,121,0,0,1967,1968,5,112,0,0,1968,1969,5,101,0,0,1969, + 1970,5,110,0,0,1970,1971,5,97,0,0,1971,1972,5,109,0,0,1972,1973, + 5,101,0,0,1973,246,1,0,0,0,1974,1975,5,117,0,0,1975,1976,5,110,0, + 0,1976,1977,5,105,0,0,1977,1978,5,111,0,0,1978,1979,5,110,0,0,1979, + 248,1,0,0,0,1980,1981,5,117,0,0,1981,1982,5,110,0,0,1982,1983,5, + 115,0,0,1983,1984,5,105,0,0,1984,1985,5,103,0,0,1985,1986,5,110, + 0,0,1986,1987,5,101,0,0,1987,1988,5,100,0,0,1988,250,1,0,0,0,1989, + 1990,5,117,0,0,1990,1991,5,115,0,0,1991,1992,5,105,0,0,1992,1993, + 5,110,0,0,1993,1994,5,103,0,0,1994,252,1,0,0,0,1995,1996,5,118,0, + 0,1996,1997,5,105,0,0,1997,1998,5,114,0,0,1998,1999,5,116,0,0,1999, + 2000,5,117,0,0,2000,2001,5,97,0,0,2001,2002,5,108,0,0,2002,254,1, + 0,0,0,2003,2004,5,118,0,0,2004,2005,5,111,0,0,2005,2006,5,105,0, + 0,2006,2007,5,100,0,0,2007,256,1,0,0,0,2008,2009,5,118,0,0,2009, + 2010,5,111,0,0,2010,2011,5,108,0,0,2011,2012,5,97,0,0,2012,2013, + 5,116,0,0,2013,2014,5,105,0,0,2014,2015,5,108,0,0,2015,2016,5,101, + 0,0,2016,258,1,0,0,0,2017,2018,5,119,0,0,2018,2019,5,99,0,0,2019, + 2020,5,104,0,0,2020,2021,5,97,0,0,2021,2022,5,114,0,0,2022,2023, + 5,95,0,0,2023,2024,5,116,0,0,2024,260,1,0,0,0,2025,2026,5,119,0, + 0,2026,2027,5,104,0,0,2027,2028,5,105,0,0,2028,2029,5,108,0,0,2029, + 2030,5,101,0,0,2030,262,1,0,0,0,2031,2032,5,40,0,0,2032,264,1,0, + 0,0,2033,2034,5,41,0,0,2034,266,1,0,0,0,2035,2036,5,91,0,0,2036, + 268,1,0,0,0,2037,2038,5,93,0,0,2038,270,1,0,0,0,2039,2040,5,123, + 0,0,2040,272,1,0,0,0,2041,2042,5,125,0,0,2042,274,1,0,0,0,2043,2044, + 5,43,0,0,2044,276,1,0,0,0,2045,2046,5,45,0,0,2046,278,1,0,0,0,2047, + 2048,5,42,0,0,2048,280,1,0,0,0,2049,2050,5,47,0,0,2050,282,1,0,0, + 0,2051,2052,5,37,0,0,2052,284,1,0,0,0,2053,2054,5,94,0,0,2054,286, + 1,0,0,0,2055,2056,5,38,0,0,2056,288,1,0,0,0,2057,2058,5,124,0,0, + 2058,290,1,0,0,0,2059,2060,5,126,0,0,2060,292,1,0,0,0,2061,2066, + 5,33,0,0,2062,2063,5,110,0,0,2063,2064,5,111,0,0,2064,2066,5,116, + 0,0,2065,2061,1,0,0,0,2065,2062,1,0,0,0,2066,294,1,0,0,0,2067,2068, + 5,61,0,0,2068,296,1,0,0,0,2069,2070,5,60,0,0,2070,298,1,0,0,0,2071, + 2072,5,62,0,0,2072,300,1,0,0,0,2073,2074,5,43,0,0,2074,2075,5,61, + 0,0,2075,302,1,0,0,0,2076,2077,5,45,0,0,2077,2078,5,61,0,0,2078, + 304,1,0,0,0,2079,2080,5,42,0,0,2080,2081,5,61,0,0,2081,306,1,0,0, + 0,2082,2083,5,47,0,0,2083,2084,5,61,0,0,2084,308,1,0,0,0,2085,2086, + 5,37,0,0,2086,2087,5,61,0,0,2087,310,1,0,0,0,2088,2089,5,94,0,0, + 2089,2090,5,61,0,0,2090,312,1,0,0,0,2091,2092,5,38,0,0,2092,2093, + 5,61,0,0,2093,314,1,0,0,0,2094,2095,5,124,0,0,2095,2096,5,61,0,0, + 2096,316,1,0,0,0,2097,2098,5,60,0,0,2098,2099,5,60,0,0,2099,2100, + 5,61,0,0,2100,318,1,0,0,0,2101,2102,5,62,0,0,2102,2103,5,62,0,0, + 2103,2104,5,61,0,0,2104,320,1,0,0,0,2105,2106,5,61,0,0,2106,2107, + 5,61,0,0,2107,322,1,0,0,0,2108,2109,5,33,0,0,2109,2110,5,61,0,0, + 2110,324,1,0,0,0,2111,2112,5,60,0,0,2112,2113,5,61,0,0,2113,326, + 1,0,0,0,2114,2115,5,62,0,0,2115,2116,5,61,0,0,2116,328,1,0,0,0,2117, + 2118,5,38,0,0,2118,2123,5,38,0,0,2119,2120,5,97,0,0,2120,2121,5, + 110,0,0,2121,2123,5,100,0,0,2122,2117,1,0,0,0,2122,2119,1,0,0,0, + 2123,330,1,0,0,0,2124,2125,5,124,0,0,2125,2129,5,124,0,0,2126,2127, + 5,111,0,0,2127,2129,5,114,0,0,2128,2124,1,0,0,0,2128,2126,1,0,0, + 0,2129,332,1,0,0,0,2130,2131,5,43,0,0,2131,2132,5,43,0,0,2132,334, + 1,0,0,0,2133,2134,5,45,0,0,2134,2135,5,45,0,0,2135,336,1,0,0,0,2136, + 2137,5,44,0,0,2137,338,1,0,0,0,2138,2139,5,45,0,0,2139,2140,5,62, + 0,0,2140,2141,5,42,0,0,2141,340,1,0,0,0,2142,2143,5,45,0,0,2143, + 2144,5,62,0,0,2144,342,1,0,0,0,2145,2146,5,63,0,0,2146,344,1,0,0, + 0,2147,2148,5,58,0,0,2148,346,1,0,0,0,2149,2150,5,58,0,0,2150,2151, + 5,58,0,0,2151,348,1,0,0,0,2152,2153,5,59,0,0,2153,350,1,0,0,0,2154, + 2155,5,46,0,0,2155,352,1,0,0,0,2156,2157,5,46,0,0,2157,2158,5,42, + 0,0,2158,354,1,0,0,0,2159,2160,5,46,0,0,2160,2161,5,46,0,0,2161, + 2162,5,46,0,0,2162,356,1,0,0,0,2163,2164,3,381,190,0,2164,2165,3, + 381,190,0,2165,2166,3,381,190,0,2166,2167,3,381,190,0,2167,358,1, + 0,0,0,2168,2169,5,92,0,0,2169,2170,5,117,0,0,2170,2171,1,0,0,0,2171, + 2179,3,357,178,0,2172,2173,5,92,0,0,2173,2174,5,85,0,0,2174,2175, + 1,0,0,0,2175,2176,3,357,178,0,2176,2177,3,357,178,0,2177,2179,1, + 0,0,0,2178,2168,1,0,0,0,2178,2172,1,0,0,0,2179,360,1,0,0,0,2180, + 2185,3,363,181,0,2181,2184,3,363,181,0,2182,2184,3,367,183,0,2183, + 2181,1,0,0,0,2183,2182,1,0,0,0,2184,2187,1,0,0,0,2185,2183,1,0,0, + 0,2185,2186,1,0,0,0,2186,362,1,0,0,0,2187,2185,1,0,0,0,2188,2191, + 3,365,182,0,2189,2191,3,359,179,0,2190,2188,1,0,0,0,2190,2189,1, + 0,0,0,2191,364,1,0,0,0,2192,2193,7,2,0,0,2193,366,1,0,0,0,2194,2195, + 7,3,0,0,2195,368,1,0,0,0,2196,2203,3,377,188,0,2197,2199,5,39,0, + 0,2198,2197,1,0,0,0,2198,2199,1,0,0,0,2199,2200,1,0,0,0,2200,2202, + 3,367,183,0,2201,2198,1,0,0,0,2202,2205,1,0,0,0,2203,2201,1,0,0, + 0,2203,2204,1,0,0,0,2204,370,1,0,0,0,2205,2203,1,0,0,0,2206,2213, + 5,48,0,0,2207,2209,5,39,0,0,2208,2207,1,0,0,0,2208,2209,1,0,0,0, + 2209,2210,1,0,0,0,2210,2212,3,379,189,0,2211,2208,1,0,0,0,2212,2215, + 1,0,0,0,2213,2211,1,0,0,0,2213,2214,1,0,0,0,2214,372,1,0,0,0,2215, + 2213,1,0,0,0,2216,2217,5,48,0,0,2217,2221,5,120,0,0,2218,2219,5, + 48,0,0,2219,2221,5,88,0,0,2220,2216,1,0,0,0,2220,2218,1,0,0,0,2221, + 2222,1,0,0,0,2222,2229,3,381,190,0,2223,2225,5,39,0,0,2224,2223, + 1,0,0,0,2224,2225,1,0,0,0,2225,2226,1,0,0,0,2226,2228,3,381,190, + 0,2227,2224,1,0,0,0,2228,2231,1,0,0,0,2229,2227,1,0,0,0,2229,2230, + 1,0,0,0,2230,374,1,0,0,0,2231,2229,1,0,0,0,2232,2233,5,48,0,0,2233, + 2237,5,98,0,0,2234,2235,5,48,0,0,2235,2237,5,66,0,0,2236,2232,1, + 0,0,0,2236,2234,1,0,0,0,2237,2238,1,0,0,0,2238,2245,3,383,191,0, + 2239,2241,5,39,0,0,2240,2239,1,0,0,0,2240,2241,1,0,0,0,2241,2242, + 1,0,0,0,2242,2244,3,383,191,0,2243,2240,1,0,0,0,2244,2247,1,0,0, + 0,2245,2243,1,0,0,0,2245,2246,1,0,0,0,2246,376,1,0,0,0,2247,2245, + 1,0,0,0,2248,2249,7,4,0,0,2249,378,1,0,0,0,2250,2251,7,5,0,0,2251, + 380,1,0,0,0,2252,2253,7,6,0,0,2253,382,1,0,0,0,2254,2255,7,7,0,0, + 2255,384,1,0,0,0,2256,2258,3,387,193,0,2257,2259,3,389,194,0,2258, + 2257,1,0,0,0,2258,2259,1,0,0,0,2259,2273,1,0,0,0,2260,2262,3,387, + 193,0,2261,2263,3,391,195,0,2262,2261,1,0,0,0,2262,2263,1,0,0,0, + 2263,2273,1,0,0,0,2264,2266,3,389,194,0,2265,2267,3,387,193,0,2266, + 2265,1,0,0,0,2266,2267,1,0,0,0,2267,2273,1,0,0,0,2268,2270,3,391, + 195,0,2269,2271,3,387,193,0,2270,2269,1,0,0,0,2270,2271,1,0,0,0, + 2271,2273,1,0,0,0,2272,2256,1,0,0,0,2272,2260,1,0,0,0,2272,2264, + 1,0,0,0,2272,2268,1,0,0,0,2273,386,1,0,0,0,2274,2275,7,8,0,0,2275, + 388,1,0,0,0,2276,2277,7,9,0,0,2277,390,1,0,0,0,2278,2279,5,108,0, + 0,2279,2283,5,108,0,0,2280,2281,5,76,0,0,2281,2283,5,76,0,0,2282, + 2278,1,0,0,0,2282,2280,1,0,0,0,2283,392,1,0,0,0,2284,2288,8,10,0, + 0,2285,2288,3,395,197,0,2286,2288,3,359,179,0,2287,2284,1,0,0,0, + 2287,2285,1,0,0,0,2287,2286,1,0,0,0,2288,394,1,0,0,0,2289,2293,3, + 397,198,0,2290,2293,3,399,199,0,2291,2293,3,401,200,0,2292,2289, + 1,0,0,0,2292,2290,1,0,0,0,2292,2291,1,0,0,0,2293,396,1,0,0,0,2294, + 2295,5,92,0,0,2295,2325,5,39,0,0,2296,2297,5,92,0,0,2297,2325,5, + 34,0,0,2298,2299,5,92,0,0,2299,2325,5,63,0,0,2300,2301,5,92,0,0, + 2301,2325,5,92,0,0,2302,2303,5,92,0,0,2303,2325,5,97,0,0,2304,2305, + 5,92,0,0,2305,2325,5,98,0,0,2306,2307,5,92,0,0,2307,2325,5,102,0, + 0,2308,2309,5,92,0,0,2309,2325,5,110,0,0,2310,2311,5,92,0,0,2311, + 2325,5,114,0,0,2312,2318,5,92,0,0,2313,2315,5,13,0,0,2314,2316,5, + 10,0,0,2315,2314,1,0,0,0,2315,2316,1,0,0,0,2316,2319,1,0,0,0,2317, + 2319,5,10,0,0,2318,2313,1,0,0,0,2318,2317,1,0,0,0,2319,2325,1,0, + 0,0,2320,2321,5,92,0,0,2321,2325,5,116,0,0,2322,2323,5,92,0,0,2323, + 2325,5,118,0,0,2324,2294,1,0,0,0,2324,2296,1,0,0,0,2324,2298,1,0, + 0,0,2324,2300,1,0,0,0,2324,2302,1,0,0,0,2324,2304,1,0,0,0,2324,2306, + 1,0,0,0,2324,2308,1,0,0,0,2324,2310,1,0,0,0,2324,2312,1,0,0,0,2324, + 2320,1,0,0,0,2324,2322,1,0,0,0,2325,398,1,0,0,0,2326,2327,5,92,0, + 0,2327,2338,3,379,189,0,2328,2329,5,92,0,0,2329,2330,3,379,189,0, + 2330,2331,3,379,189,0,2331,2338,1,0,0,0,2332,2333,5,92,0,0,2333, + 2334,3,379,189,0,2334,2335,3,379,189,0,2335,2336,3,379,189,0,2336, + 2338,1,0,0,0,2337,2326,1,0,0,0,2337,2328,1,0,0,0,2337,2332,1,0,0, + 0,2338,400,1,0,0,0,2339,2340,5,92,0,0,2340,2341,5,120,0,0,2341,2343, + 1,0,0,0,2342,2344,3,381,190,0,2343,2342,1,0,0,0,2344,2345,1,0,0, + 0,2345,2343,1,0,0,0,2345,2346,1,0,0,0,2346,402,1,0,0,0,2347,2349, + 3,409,204,0,2348,2347,1,0,0,0,2348,2349,1,0,0,0,2349,2350,1,0,0, + 0,2350,2351,5,46,0,0,2351,2356,3,409,204,0,2352,2353,3,409,204,0, + 2353,2354,5,46,0,0,2354,2356,1,0,0,0,2355,2348,1,0,0,0,2355,2352, + 1,0,0,0,2356,404,1,0,0,0,2357,2359,5,101,0,0,2358,2360,3,407,203, + 0,2359,2358,1,0,0,0,2359,2360,1,0,0,0,2360,2361,1,0,0,0,2361,2368, + 3,409,204,0,2362,2364,5,69,0,0,2363,2365,3,407,203,0,2364,2363,1, + 0,0,0,2364,2365,1,0,0,0,2365,2366,1,0,0,0,2366,2368,3,409,204,0, + 2367,2357,1,0,0,0,2367,2362,1,0,0,0,2368,406,1,0,0,0,2369,2370,7, + 11,0,0,2370,408,1,0,0,0,2371,2378,3,367,183,0,2372,2374,5,39,0,0, + 2373,2372,1,0,0,0,2373,2374,1,0,0,0,2374,2375,1,0,0,0,2375,2377, + 3,367,183,0,2376,2373,1,0,0,0,2377,2380,1,0,0,0,2378,2376,1,0,0, + 0,2378,2379,1,0,0,0,2379,410,1,0,0,0,2380,2378,1,0,0,0,2381,2382, + 7,12,0,0,2382,412,1,0,0,0,2383,2384,5,117,0,0,2384,2387,5,56,0,0, + 2385,2387,7,0,0,0,2386,2383,1,0,0,0,2386,2385,1,0,0,0,2387,414,1, + 0,0,0,2388,2392,8,13,0,0,2389,2392,3,395,197,0,2390,2392,3,359,179, + 0,2391,2388,1,0,0,0,2391,2389,1,0,0,0,2391,2390,1,0,0,0,2392,416, + 1,0,0,0,2393,2394,5,82,0,0,2394,2395,5,34,0,0,2395,2401,1,0,0,0, + 2396,2397,5,92,0,0,2397,2400,7,14,0,0,2398,2400,8,15,0,0,2399,2396, + 1,0,0,0,2399,2398,1,0,0,0,2400,2403,1,0,0,0,2401,2402,1,0,0,0,2401, + 2399,1,0,0,0,2402,2404,1,0,0,0,2403,2401,1,0,0,0,2404,2408,5,40, + 0,0,2405,2407,8,16,0,0,2406,2405,1,0,0,0,2407,2410,1,0,0,0,2408, + 2409,1,0,0,0,2408,2406,1,0,0,0,2409,2411,1,0,0,0,2410,2408,1,0,0, + 0,2411,2417,5,41,0,0,2412,2413,5,92,0,0,2413,2416,7,14,0,0,2414, + 2416,8,17,0,0,2415,2412,1,0,0,0,2415,2414,1,0,0,0,2416,2419,1,0, + 0,0,2417,2418,1,0,0,0,2417,2415,1,0,0,0,2418,2420,1,0,0,0,2419,2417, + 1,0,0,0,2420,2421,5,34,0,0,2421,418,1,0,0,0,2422,2423,3,369,184, + 0,2423,2424,3,427,213,0,2424,2435,1,0,0,0,2425,2426,3,371,185,0, + 2426,2427,3,427,213,0,2427,2435,1,0,0,0,2428,2429,3,373,186,0,2429, + 2430,3,427,213,0,2430,2435,1,0,0,0,2431,2432,3,375,187,0,2432,2433, + 3,427,213,0,2433,2435,1,0,0,0,2434,2422,1,0,0,0,2434,2425,1,0,0, + 0,2434,2428,1,0,0,0,2434,2431,1,0,0,0,2435,420,1,0,0,0,2436,2438, + 3,403,201,0,2437,2439,3,405,202,0,2438,2437,1,0,0,0,2438,2439,1, + 0,0,0,2439,2440,1,0,0,0,2440,2441,3,427,213,0,2441,2447,1,0,0,0, + 2442,2443,3,409,204,0,2443,2444,3,405,202,0,2444,2445,3,427,213, + 0,2445,2447,1,0,0,0,2446,2436,1,0,0,0,2446,2442,1,0,0,0,2447,422, + 1,0,0,0,2448,2449,3,103,51,0,2449,2450,3,427,213,0,2450,424,1,0, + 0,0,2451,2452,3,99,49,0,2452,2453,3,427,213,0,2453,426,1,0,0,0,2454, + 2455,3,361,180,0,2455,428,1,0,0,0,2456,2458,7,18,0,0,2457,2456,1, + 0,0,0,2458,2459,1,0,0,0,2459,2457,1,0,0,0,2459,2460,1,0,0,0,2460, + 2461,1,0,0,0,2461,2462,6,214,1,0,2462,430,1,0,0,0,2463,2465,5,13, + 0,0,2464,2466,5,10,0,0,2465,2464,1,0,0,0,2465,2466,1,0,0,0,2466, + 2469,1,0,0,0,2467,2469,5,10,0,0,2468,2463,1,0,0,0,2468,2467,1,0, + 0,0,2469,2470,1,0,0,0,2470,2471,6,215,1,0,2471,432,1,0,0,0,2472, + 2473,5,47,0,0,2473,2474,5,42,0,0,2474,2478,1,0,0,0,2475,2477,9,0, + 0,0,2476,2475,1,0,0,0,2477,2480,1,0,0,0,2478,2479,1,0,0,0,2478,2476, + 1,0,0,0,2479,2481,1,0,0,0,2480,2478,1,0,0,0,2481,2482,5,42,0,0,2482, + 2483,5,47,0,0,2483,2484,1,0,0,0,2484,2485,6,216,1,0,2485,434,1,0, + 0,0,2486,2487,5,47,0,0,2487,2488,5,47,0,0,2488,2492,1,0,0,0,2489, + 2491,8,19,0,0,2490,2489,1,0,0,0,2491,2494,1,0,0,0,2492,2490,1,0, + 0,0,2492,2493,1,0,0,0,2493,2495,1,0,0,0,2494,2492,1,0,0,0,2495,2496, + 6,217,1,0,2496,436,1,0,0,0,114,0,469,477,503,532,558,578,601,633, + 644,694,717,779,811,831,854,886,912,935,961,984,1001,1018,1038,1055, + 1069,1083,1097,1111,1134,1154,1168,1185,1214,1222,1244,1276,1293, + 1313,1339,1368,1390,1394,1398,1402,1404,1407,1413,1419,1422,1427, + 1429,1432,1439,1443,1447,1455,1461,1466,1471,1476,1484,2065,2122, + 2128,2178,2183,2185,2190,2198,2203,2208,2213,2220,2224,2229,2236, + 2240,2245,2258,2262,2266,2270,2272,2282,2287,2292,2315,2318,2324, + 2337,2345,2348,2355,2359,2364,2367,2373,2378,2386,2391,2399,2401, + 2408,2415,2417,2434,2438,2446,2459,2465,2468,2478,2492,2,0,1,0,6, + 0,0 ] class McInstrLexer(Lexer): @@ -995,202 +1006,204 @@ class McInstrLexer(Lexer): decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ] T__0 = 1 - Absolute = 2 - At = 3 - Category = 4 - Component = 5 - UserVars = 6 - Define = 7 - Declare = 8 - Definition = 9 - End = 10 - McDisplay = 11 - Finally = 12 - Initialize = 13 - Instrument = 14 - Output = 15 - Private = 16 - Parameters = 17 - Relative = 18 - Rotated = 19 - Previous = 20 - Setting = 21 - Trace = 22 - Share = 23 - Extend = 24 - Group = 25 - Save = 26 - Jump = 27 - When = 28 - Next = 29 - Iterate = 30 - Myself = 31 - Copy = 32 - Split = 33 - Removable = 34 - Cpu = 35 - NoAcc = 36 - Dependency = 37 - Shell = 38 - Search = 39 - MetaData = 40 - String = 41 - Vector = 42 - Symbol = 43 - UnparsedBlock = 44 - Include = 45 - Null = 46 - IntegerLiteral = 47 - CharacterLiteral = 48 - FloatingLiteral = 49 - StringLiteral = 50 - BooleanLitteral = 51 - PointerLiteral = 52 - UserDefinedLiteral = 53 - MultiLineMacro = 54 - Directive = 55 - Alignas = 56 - Alignof = 57 - Asm = 58 - Auto = 59 - Bool = 60 - Break = 61 - Case = 62 - Catch = 63 - Char = 64 - Char16 = 65 - Char32 = 66 - Class = 67 - Const = 68 - Constexpr = 69 - Const_cast = 70 - Continue = 71 - Decltype = 72 - Default = 73 - Delete = 74 - Do = 75 - Double = 76 - Dynamic_cast = 77 - Else = 78 - Enum = 79 - Explicit = 80 - Export = 81 - Extern = 82 - False_ = 83 - Final = 84 - Float = 85 - For = 86 - Friend = 87 - Goto = 88 - If = 89 - Inline = 90 - Int = 91 - Long = 92 - Mutable = 93 - Namespace = 94 - New = 95 - Noexcept = 96 - Nullptr = 97 - Operator = 98 - Override = 99 - Protected = 100 - Public = 101 - Register = 102 - Reinterpret_cast = 103 - Return = 104 - Short = 105 - Signed = 106 - Sizeof = 107 - Static = 108 - Static_assert = 109 - Static_cast = 110 - Struct = 111 - Switch = 112 - Template = 113 - This = 114 - Thread_local = 115 - Throw = 116 - True_ = 117 - Try = 118 - Typedef = 119 - Typeid_ = 120 - Typename_ = 121 - Union = 122 - Unsigned = 123 - Using = 124 - Virtual = 125 - Void = 126 - Volatile = 127 - Wchar = 128 - While = 129 - LeftParen = 130 - RightParen = 131 - LeftBracket = 132 - RightBracket = 133 - LeftBrace = 134 - RightBrace = 135 - Plus = 136 - Minus = 137 - Star = 138 - Div = 139 - Mod = 140 - Caret = 141 - And = 142 - Or = 143 - Tilde = 144 - Not = 145 - Assign = 146 - Less = 147 - Greater = 148 - PlusAssign = 149 - MinusAssign = 150 - StarAssign = 151 - DivAssign = 152 - ModAssign = 153 - XorAssign = 154 - AndAssign = 155 - OrAssign = 156 - LeftShiftAssign = 157 - RightShiftAssign = 158 - Equal = 159 - NotEqual = 160 - LessEqual = 161 - GreaterEqual = 162 - AndAnd = 163 - OrOr = 164 - PlusPlus = 165 - MinusMinus = 166 - Comma = 167 - ArrowStar = 168 - Arrow = 169 - Question = 170 - Colon = 171 - Doublecolon = 172 - Semi = 173 - Dot = 174 - DotStar = 175 - Ellipsis = 176 - Identifier = 177 - DecimalLiteral = 178 - OctalLiteral = 179 - HexadecimalLiteral = 180 - BinaryLiteral = 181 - IntegerSuffix = 182 - UserDefinedIntegerLiteral = 183 - UserDefinedFloatingLiteral = 184 - UserDefinedStringLiteral = 185 - UserDefinedCharacterLiteral = 186 - Whitespace = 187 - Newline = 188 - BlockComment = 189 - LineComment = 190 + T__1 = 2 + T__2 = 3 + Absolute = 4 + At = 5 + Category = 6 + Component = 7 + UserVars = 8 + Define = 9 + Declare = 10 + Definition = 11 + End = 12 + McDisplay = 13 + Finally = 14 + Initialize = 15 + Instrument = 16 + Output = 17 + Private = 18 + Parameters = 19 + Relative = 20 + Rotated = 21 + Previous = 22 + Setting = 23 + Trace = 24 + Share = 25 + Extend = 26 + Group = 27 + Save = 28 + Jump = 29 + When = 30 + Next = 31 + Iterate = 32 + Myself = 33 + Copy = 34 + Split = 35 + Removable = 36 + Cpu = 37 + NoAcc = 38 + Dependency = 39 + Shell = 40 + Search = 41 + MetaData = 42 + String = 43 + Vector = 44 + Symbol = 45 + UnparsedBlock = 46 + Include = 47 + Null = 48 + IntegerLiteral = 49 + CharacterLiteral = 50 + FloatingLiteral = 51 + StringLiteral = 52 + BooleanLitteral = 53 + PointerLiteral = 54 + UserDefinedLiteral = 55 + MultiLineMacro = 56 + Directive = 57 + Alignas = 58 + Alignof = 59 + Asm = 60 + Auto = 61 + Bool = 62 + Break = 63 + Case = 64 + Catch = 65 + Char = 66 + Char16 = 67 + Char32 = 68 + Class = 69 + Const = 70 + Constexpr = 71 + Const_cast = 72 + Continue = 73 + Decltype = 74 + Default = 75 + Delete = 76 + Do = 77 + Double = 78 + Dynamic_cast = 79 + Else = 80 + Enum = 81 + Explicit = 82 + Export = 83 + Extern = 84 + False_ = 85 + Final = 86 + Float = 87 + For = 88 + Friend = 89 + Goto = 90 + If = 91 + Inline = 92 + Int = 93 + Long = 94 + Mutable = 95 + Namespace = 96 + New = 97 + Noexcept = 98 + Nullptr = 99 + Operator = 100 + Override = 101 + Protected = 102 + Public = 103 + Register = 104 + Reinterpret_cast = 105 + Return = 106 + Short = 107 + Signed = 108 + Sizeof = 109 + Static = 110 + Static_assert = 111 + Static_cast = 112 + Struct = 113 + Switch = 114 + Template = 115 + This = 116 + Thread_local = 117 + Throw = 118 + True_ = 119 + Try = 120 + Typedef = 121 + Typeid_ = 122 + Typename_ = 123 + Union = 124 + Unsigned = 125 + Using = 126 + Virtual = 127 + Void = 128 + Volatile = 129 + Wchar = 130 + While = 131 + LeftParen = 132 + RightParen = 133 + LeftBracket = 134 + RightBracket = 135 + LeftBrace = 136 + RightBrace = 137 + Plus = 138 + Minus = 139 + Star = 140 + Div = 141 + Mod = 142 + Caret = 143 + And = 144 + Or = 145 + Tilde = 146 + Not = 147 + Assign = 148 + Less = 149 + Greater = 150 + PlusAssign = 151 + MinusAssign = 152 + StarAssign = 153 + DivAssign = 154 + ModAssign = 155 + XorAssign = 156 + AndAssign = 157 + OrAssign = 158 + LeftShiftAssign = 159 + RightShiftAssign = 160 + Equal = 161 + NotEqual = 162 + LessEqual = 163 + GreaterEqual = 164 + AndAnd = 165 + OrOr = 166 + PlusPlus = 167 + MinusMinus = 168 + Comma = 169 + ArrowStar = 170 + Arrow = 171 + Question = 172 + Colon = 173 + Doublecolon = 174 + Semi = 175 + Dot = 176 + DotStar = 177 + Ellipsis = 178 + Identifier = 179 + DecimalLiteral = 180 + OctalLiteral = 181 + HexadecimalLiteral = 182 + BinaryLiteral = 183 + IntegerSuffix = 184 + UserDefinedIntegerLiteral = 185 + UserDefinedFloatingLiteral = 186 + UserDefinedStringLiteral = 187 + UserDefinedCharacterLiteral = 188 + Whitespace = 189 + Newline = 190 + BlockComment = 191 + LineComment = 192 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] modeNames = [ "DEFAULT_MODE" ] literalNames = [ "", - "'0'", "'DECLARE'", "'string'", "'vector'", "'symbol'", "'%include'", + "'0'", "'>>'", "'<<'", "'string'", "'vector'", "'symbol'", "'%include'", "'NULL'", "'alignas'", "'alignof'", "'asm'", "'auto'", "'bool'", "'break'", "'case'", "'catch'", "'char'", "'char16_t'", "'char32_t'", "'class'", "'const'", "'constexpr'", "'const_cast'", "'continue'", @@ -1248,50 +1261,50 @@ class McInstrLexer(Lexer): "UserDefinedCharacterLiteral", "Whitespace", "Newline", "BlockComment", "LineComment" ] - ruleNames = [ "T__0", "Absolute", "At", "Category", "Component", "UserVars", - "Define", "Declare", "Definition", "End", "McDisplay", - "Finally", "Initialize", "Instrument", "Output", "Private", - "Parameters", "Relative", "Rotated", "Previous", "Setting", - "Trace", "Share", "Extend", "Group", "Save", "Jump", "When", - "Next", "Iterate", "Myself", "Copy", "Split", "Removable", - "Cpu", "NoAcc", "Dependency", "Shell", "Search", "MetaData", - "String", "Vector", "Symbol", "UnparsedBlock", "Include", - "Null", "IntegerLiteral", "CharacterLiteral", "FloatingLiteral", - "StringLiteral", "BooleanLitteral", "PointerLiteral", - "UserDefinedLiteral", "MultiLineMacro", "Directive", "Alignas", - "Alignof", "Asm", "Auto", "Bool", "Break", "Case", "Catch", - "Char", "Char16", "Char32", "Class", "Const", "Constexpr", - "Const_cast", "Continue", "Decltype", "Default", "Delete", - "Do", "Double", "Dynamic_cast", "Else", "Enum", "Explicit", - "Export", "Extern", "False_", "Final", "Float", "For", - "Friend", "Goto", "If", "Inline", "Int", "Long", "Mutable", - "Namespace", "New", "Noexcept", "Nullptr", "Operator", - "Override", "Protected", "Public", "Register", "Reinterpret_cast", - "Return", "Short", "Signed", "Sizeof", "Static", "Static_assert", - "Static_cast", "Struct", "Switch", "Template", "This", - "Thread_local", "Throw", "True_", "Try", "Typedef", "Typeid_", - "Typename_", "Union", "Unsigned", "Using", "Virtual", - "Void", "Volatile", "Wchar", "While", "LeftParen", "RightParen", - "LeftBracket", "RightBracket", "LeftBrace", "RightBrace", - "Plus", "Minus", "Star", "Div", "Mod", "Caret", "And", - "Or", "Tilde", "Not", "Assign", "Less", "Greater", "PlusAssign", - "MinusAssign", "StarAssign", "DivAssign", "ModAssign", - "XorAssign", "AndAssign", "OrAssign", "LeftShiftAssign", - "RightShiftAssign", "Equal", "NotEqual", "LessEqual", - "GreaterEqual", "AndAnd", "OrOr", "PlusPlus", "MinusMinus", - "Comma", "ArrowStar", "Arrow", "Question", "Colon", "Doublecolon", - "Semi", "Dot", "DotStar", "Ellipsis", "Hexquad", "Universalcharactername", - "Identifier", "Identifiernondigit", "NONDIGIT", "DIGIT", - "DecimalLiteral", "OctalLiteral", "HexadecimalLiteral", - "BinaryLiteral", "NONZERODIGIT", "OCTALDIGIT", "HEXADECIMALDIGIT", - "BINARYDIGIT", "IntegerSuffix", "Unsignedsuffix", "Longsuffix", - "Longlongsuffix", "Cchar", "Escapesequence", "Simpleescapesequence", - "Octalescapesequence", "Hexadecimalescapesequence", "FractionalConstant", - "ExponentPart", "SIGN", "DigitSequence", "FloatingSuffix", - "EncodingPrefix", "Schar", "Rawstring", "UserDefinedIntegerLiteral", - "UserDefinedFloatingLiteral", "UserDefinedStringLiteral", - "UserDefinedCharacterLiteral", "Udsuffix", "Whitespace", - "Newline", "BlockComment", "LineComment" ] + ruleNames = [ "T__0", "T__1", "T__2", "Absolute", "At", "Category", + "Component", "UserVars", "Define", "Declare", "Definition", + "End", "McDisplay", "Finally", "Initialize", "Instrument", + "Output", "Private", "Parameters", "Relative", "Rotated", + "Previous", "Setting", "Trace", "Share", "Extend", "Group", + "Save", "Jump", "When", "Next", "Iterate", "Myself", "Copy", + "Split", "Removable", "Cpu", "NoAcc", "Dependency", "Shell", + "Search", "MetaData", "String", "Vector", "Symbol", "UnparsedBlock", + "Include", "Null", "IntegerLiteral", "CharacterLiteral", + "FloatingLiteral", "StringLiteral", "BooleanLitteral", + "PointerLiteral", "UserDefinedLiteral", "MultiLineMacro", + "Directive", "Alignas", "Alignof", "Asm", "Auto", "Bool", + "Break", "Case", "Catch", "Char", "Char16", "Char32", + "Class", "Const", "Constexpr", "Const_cast", "Continue", + "Decltype", "Default", "Delete", "Do", "Double", "Dynamic_cast", + "Else", "Enum", "Explicit", "Export", "Extern", "False_", + "Final", "Float", "For", "Friend", "Goto", "If", "Inline", + "Int", "Long", "Mutable", "Namespace", "New", "Noexcept", + "Nullptr", "Operator", "Override", "Protected", "Public", + "Register", "Reinterpret_cast", "Return", "Short", "Signed", + "Sizeof", "Static", "Static_assert", "Static_cast", "Struct", + "Switch", "Template", "This", "Thread_local", "Throw", + "True_", "Try", "Typedef", "Typeid_", "Typename_", "Union", + "Unsigned", "Using", "Virtual", "Void", "Volatile", "Wchar", + "While", "LeftParen", "RightParen", "LeftBracket", "RightBracket", + "LeftBrace", "RightBrace", "Plus", "Minus", "Star", "Div", + "Mod", "Caret", "And", "Or", "Tilde", "Not", "Assign", + "Less", "Greater", "PlusAssign", "MinusAssign", "StarAssign", + "DivAssign", "ModAssign", "XorAssign", "AndAssign", "OrAssign", + "LeftShiftAssign", "RightShiftAssign", "Equal", "NotEqual", + "LessEqual", "GreaterEqual", "AndAnd", "OrOr", "PlusPlus", + "MinusMinus", "Comma", "ArrowStar", "Arrow", "Question", + "Colon", "Doublecolon", "Semi", "Dot", "DotStar", "Ellipsis", + "Hexquad", "Universalcharactername", "Identifier", "Identifiernondigit", + "NONDIGIT", "DIGIT", "DecimalLiteral", "OctalLiteral", + "HexadecimalLiteral", "BinaryLiteral", "NONZERODIGIT", + "OCTALDIGIT", "HEXADECIMALDIGIT", "BINARYDIGIT", "IntegerSuffix", + "Unsignedsuffix", "Longsuffix", "Longlongsuffix", "Cchar", + "Escapesequence", "Simpleescapesequence", "Octalescapesequence", + "Hexadecimalescapesequence", "FractionalConstant", "ExponentPart", + "SIGN", "DigitSequence", "FloatingSuffix", "EncodingPrefix", + "Schar", "Rawstring", "UserDefinedIntegerLiteral", "UserDefinedFloatingLiteral", + "UserDefinedStringLiteral", "UserDefinedCharacterLiteral", + "Udsuffix", "Whitespace", "Newline", "BlockComment", "LineComment" ] grammarFileName = "McInstr.g4" diff --git a/mccode_antlr/grammar/McInstrListener.py b/mccode_antlr/grammar/McInstrListener.py index be5e8be..9d77c4e 100644 --- a/mccode_antlr/grammar/McInstrListener.py +++ b/mccode_antlr/grammar/McInstrListener.py @@ -1,4 +1,4 @@ -# Generated from /home/g/Code/mccode_antlr-antlr/mccode_antlr/grammar/McInstr.g4 by ANTLR 4.13.1 +# Generated from /home/gst/PycharmProjects/mccode4/mccode_antlr/grammar/McInstr.g4 by ANTLR 4.13.1 from antlr4 import * if "." in __name__: from .McInstrParser import McInstrParser @@ -449,6 +449,15 @@ def exitAssignment(self, ctx:McInstrParser.AssignmentContext): pass + # Enter a parse tree produced by McInstrParser#ExpressionBinaryMod. + def enterExpressionBinaryMod(self, ctx:McInstrParser.ExpressionBinaryModContext): + pass + + # Exit a parse tree produced by McInstrParser#ExpressionBinaryMod. + def exitExpressionBinaryMod(self, ctx:McInstrParser.ExpressionBinaryModContext): + pass + + # Enter a parse tree produced by McInstrParser#ExpressionBinaryLess. def enterExpressionBinaryLess(self, ctx:McInstrParser.ExpressionBinaryLessContext): pass @@ -467,15 +476,6 @@ def exitExpressionBinaryGreater(self, ctx:McInstrParser.ExpressionBinaryGreaterC pass - # Enter a parse tree produced by McInstrParser#ExpressionGrouping. - def enterExpressionGrouping(self, ctx:McInstrParser.ExpressionGroupingContext): - pass - - # Exit a parse tree produced by McInstrParser#ExpressionGrouping. - def exitExpressionGrouping(self, ctx:McInstrParser.ExpressionGroupingContext): - pass - - # Enter a parse tree produced by McInstrParser#ExpressionBinaryLessEqual. def enterExpressionBinaryLessEqual(self, ctx:McInstrParser.ExpressionBinaryLessEqualContext): pass @@ -512,6 +512,87 @@ def exitExpressionInteger(self, ctx:McInstrParser.ExpressionIntegerContext): pass + # Enter a parse tree produced by McInstrParser#ExpressionBinaryRightShift. + def enterExpressionBinaryRightShift(self, ctx:McInstrParser.ExpressionBinaryRightShiftContext): + pass + + # Exit a parse tree produced by McInstrParser#ExpressionBinaryRightShift. + def exitExpressionBinaryRightShift(self, ctx:McInstrParser.ExpressionBinaryRightShiftContext): + pass + + + # Enter a parse tree produced by McInstrParser#ExpressionMyself. + def enterExpressionMyself(self, ctx:McInstrParser.ExpressionMyselfContext): + pass + + # Exit a parse tree produced by McInstrParser#ExpressionMyself. + def exitExpressionMyself(self, ctx:McInstrParser.ExpressionMyselfContext): + pass + + + # Enter a parse tree produced by McInstrParser#ExpressionPrevious. + def enterExpressionPrevious(self, ctx:McInstrParser.ExpressionPreviousContext): + pass + + # Exit a parse tree produced by McInstrParser#ExpressionPrevious. + def exitExpressionPrevious(self, ctx:McInstrParser.ExpressionPreviousContext): + pass + + + # Enter a parse tree produced by McInstrParser#ExpressionIdentifier. + def enterExpressionIdentifier(self, ctx:McInstrParser.ExpressionIdentifierContext): + pass + + # Exit a parse tree produced by McInstrParser#ExpressionIdentifier. + def exitExpressionIdentifier(self, ctx:McInstrParser.ExpressionIdentifierContext): + pass + + + # Enter a parse tree produced by McInstrParser#ExpressionStructAccess. + def enterExpressionStructAccess(self, ctx:McInstrParser.ExpressionStructAccessContext): + pass + + # Exit a parse tree produced by McInstrParser#ExpressionStructAccess. + def exitExpressionStructAccess(self, ctx:McInstrParser.ExpressionStructAccessContext): + pass + + + # Enter a parse tree produced by McInstrParser#ExpressionFunctionCall. + def enterExpressionFunctionCall(self, ctx:McInstrParser.ExpressionFunctionCallContext): + pass + + # Exit a parse tree produced by McInstrParser#ExpressionFunctionCall. + def exitExpressionFunctionCall(self, ctx:McInstrParser.ExpressionFunctionCallContext): + pass + + + # Enter a parse tree produced by McInstrParser#ExpressionBinaryMD. + def enterExpressionBinaryMD(self, ctx:McInstrParser.ExpressionBinaryMDContext): + pass + + # Exit a parse tree produced by McInstrParser#ExpressionBinaryMD. + def exitExpressionBinaryMD(self, ctx:McInstrParser.ExpressionBinaryMDContext): + pass + + + # Enter a parse tree produced by McInstrParser#ExpressionString. + def enterExpressionString(self, ctx:McInstrParser.ExpressionStringContext): + pass + + # Exit a parse tree produced by McInstrParser#ExpressionString. + def exitExpressionString(self, ctx:McInstrParser.ExpressionStringContext): + pass + + + # Enter a parse tree produced by McInstrParser#ExpressionGrouping. + def enterExpressionGrouping(self, ctx:McInstrParser.ExpressionGroupingContext): + pass + + # Exit a parse tree produced by McInstrParser#ExpressionGrouping. + def exitExpressionGrouping(self, ctx:McInstrParser.ExpressionGroupingContext): + pass + + # Enter a parse tree produced by McInstrParser#ExpressionExponentiation. def enterExpressionExponentiation(self, ctx:McInstrParser.ExpressionExponentiationContext): pass @@ -521,6 +602,15 @@ def exitExpressionExponentiation(self, ctx:McInstrParser.ExpressionExponentiatio pass + # Enter a parse tree produced by McInstrParser#ExpressionBinaryLeftShift. + def enterExpressionBinaryLeftShift(self, ctx:McInstrParser.ExpressionBinaryLeftShiftContext): + pass + + # Exit a parse tree produced by McInstrParser#ExpressionBinaryLeftShift. + def exitExpressionBinaryLeftShift(self, ctx:McInstrParser.ExpressionBinaryLeftShiftContext): + pass + + # Enter a parse tree produced by McInstrParser#ExpressionBinaryGreaterEqual. def enterExpressionBinaryGreaterEqual(self, ctx:McInstrParser.ExpressionBinaryGreaterEqualContext): pass @@ -539,15 +629,6 @@ def exitExpressionZero(self, ctx:McInstrParser.ExpressionZeroContext): pass - # Enter a parse tree produced by McInstrParser#ExpressionMyself. - def enterExpressionMyself(self, ctx:McInstrParser.ExpressionMyselfContext): - pass - - # Exit a parse tree produced by McInstrParser#ExpressionMyself. - def exitExpressionMyself(self, ctx:McInstrParser.ExpressionMyselfContext): - pass - - # Enter a parse tree produced by McInstrParser#ExpressionUnaryPM. def enterExpressionUnaryPM(self, ctx:McInstrParser.ExpressionUnaryPMContext): pass @@ -557,15 +638,6 @@ def exitExpressionUnaryPM(self, ctx:McInstrParser.ExpressionUnaryPMContext): pass - # Enter a parse tree produced by McInstrParser#ExpressionPrevious. - def enterExpressionPrevious(self, ctx:McInstrParser.ExpressionPreviousContext): - pass - - # Exit a parse tree produced by McInstrParser#ExpressionPrevious. - def exitExpressionPrevious(self, ctx:McInstrParser.ExpressionPreviousContext): - pass - - # Enter a parse tree produced by McInstrParser#ExpressionTrinaryLogic. def enterExpressionTrinaryLogic(self, ctx:McInstrParser.ExpressionTrinaryLogicContext): pass @@ -593,15 +665,6 @@ def exitExpressionPointerAccess(self, ctx:McInstrParser.ExpressionPointerAccessC pass - # Enter a parse tree produced by McInstrParser#ExpressionIdentifier. - def enterExpressionIdentifier(self, ctx:McInstrParser.ExpressionIdentifierContext): - pass - - # Exit a parse tree produced by McInstrParser#ExpressionIdentifier. - def exitExpressionIdentifier(self, ctx:McInstrParser.ExpressionIdentifierContext): - pass - - # Enter a parse tree produced by McInstrParser#ExpressionBinaryEqual. def enterExpressionBinaryEqual(self, ctx:McInstrParser.ExpressionBinaryEqualContext): pass @@ -629,42 +692,6 @@ def exitExpressionUnaryLogic(self, ctx:McInstrParser.ExpressionUnaryLogicContext pass - # Enter a parse tree produced by McInstrParser#ExpressionStructAccess. - def enterExpressionStructAccess(self, ctx:McInstrParser.ExpressionStructAccessContext): - pass - - # Exit a parse tree produced by McInstrParser#ExpressionStructAccess. - def exitExpressionStructAccess(self, ctx:McInstrParser.ExpressionStructAccessContext): - pass - - - # Enter a parse tree produced by McInstrParser#ExpressionFunctionCall. - def enterExpressionFunctionCall(self, ctx:McInstrParser.ExpressionFunctionCallContext): - pass - - # Exit a parse tree produced by McInstrParser#ExpressionFunctionCall. - def exitExpressionFunctionCall(self, ctx:McInstrParser.ExpressionFunctionCallContext): - pass - - - # Enter a parse tree produced by McInstrParser#ExpressionBinaryMD. - def enterExpressionBinaryMD(self, ctx:McInstrParser.ExpressionBinaryMDContext): - pass - - # Exit a parse tree produced by McInstrParser#ExpressionBinaryMD. - def exitExpressionBinaryMD(self, ctx:McInstrParser.ExpressionBinaryMDContext): - pass - - - # Enter a parse tree produced by McInstrParser#ExpressionString. - def enterExpressionString(self, ctx:McInstrParser.ExpressionStringContext): - pass - - # Exit a parse tree produced by McInstrParser#ExpressionString. - def exitExpressionString(self, ctx:McInstrParser.ExpressionStringContext): - pass - - # Enter a parse tree produced by McInstrParser#shell. def enterShell(self, ctx:McInstrParser.ShellContext): pass diff --git a/mccode_antlr/grammar/McInstrParser.py b/mccode_antlr/grammar/McInstrParser.py index f1a8ed5..4b29828 100644 --- a/mccode_antlr/grammar/McInstrParser.py +++ b/mccode_antlr/grammar/McInstrParser.py @@ -1,4 +1,4 @@ -# Generated from /home/g/Code/mccode_antlr-antlr/mccode_antlr/grammar/McInstr.g4 by ANTLR 4.13.1 +# Generated from /home/gst/PycharmProjects/mccode4/mccode_antlr/grammar/McInstr.g4 by ANTLR 4.13.1 # encoding: utf-8 from antlr4 import * from io import StringIO @@ -10,7 +10,7 @@ def serializedATN(): return [ - 4,1,190,505,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6, + 4,1,192,514,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6, 7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7, 13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2, 20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7, @@ -49,156 +49,160 @@ def serializedATN(): 1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,3,35,453,8,35, 1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35, 1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35, - 1,35,1,35,1,35,1,35,1,35,1,35,1,35,5,35,488,8,35,10,35,12,35,491, - 9,35,1,36,1,36,1,36,1,37,1,37,1,37,1,37,1,37,3,37,501,8,37,1,38, - 1,38,1,38,0,1,70,39,0,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, - 0,7,3,0,1,1,46,46,50,50,1,0,31,32,2,0,28,28,30,30,2,0,50,50,177, - 177,1,0,136,137,1,0,138,139,1,0,163,164,554,0,78,1,0,0,0,2,81,1, - 0,0,0,4,115,1,0,0,0,6,161,1,0,0,0,8,163,1,0,0,0,10,166,1,0,0,0,12, - 177,1,0,0,0,14,181,1,0,0,0,16,185,1,0,0,0,18,228,1,0,0,0,20,236, - 1,0,0,0,22,238,1,0,0,0,24,260,1,0,0,0,26,262,1,0,0,0,28,267,1,0, - 0,0,30,270,1,0,0,0,32,274,1,0,0,0,34,278,1,0,0,0,36,282,1,0,0,0, - 38,286,1,0,0,0,40,305,1,0,0,0,42,307,1,0,0,0,44,317,1,0,0,0,46,319, - 1,0,0,0,48,333,1,0,0,0,50,335,1,0,0,0,52,347,1,0,0,0,54,349,1,0, - 0,0,56,361,1,0,0,0,58,372,1,0,0,0,60,383,1,0,0,0,62,385,1,0,0,0, - 64,390,1,0,0,0,66,393,1,0,0,0,68,404,1,0,0,0,70,452,1,0,0,0,72,492, - 1,0,0,0,74,500,1,0,0,0,76,502,1,0,0,0,78,79,3,2,1,0,79,80,5,0,0, - 1,80,1,1,0,0,0,81,82,5,7,0,0,82,83,5,14,0,0,83,84,5,177,0,0,84,86, - 3,4,2,0,85,87,3,72,36,0,86,85,1,0,0,0,86,87,1,0,0,0,87,89,1,0,0, - 0,88,90,3,74,37,0,89,88,1,0,0,0,89,90,1,0,0,0,90,92,1,0,0,0,91,93, - 3,12,6,0,92,91,1,0,0,0,92,93,1,0,0,0,93,95,1,0,0,0,94,96,3,50,25, - 0,95,94,1,0,0,0,95,96,1,0,0,0,96,98,1,0,0,0,97,99,3,52,26,0,98,97, - 1,0,0,0,98,99,1,0,0,0,99,101,1,0,0,0,100,102,3,54,27,0,101,100,1, - 0,0,0,101,102,1,0,0,0,102,104,1,0,0,0,103,105,3,56,28,0,104,103, - 1,0,0,0,104,105,1,0,0,0,105,106,1,0,0,0,106,108,3,10,5,0,107,109, - 3,58,29,0,108,107,1,0,0,0,108,109,1,0,0,0,109,111,1,0,0,0,110,112, - 3,60,30,0,111,110,1,0,0,0,111,112,1,0,0,0,112,113,1,0,0,0,113,114, - 5,10,0,0,114,3,1,0,0,0,115,124,5,130,0,0,116,121,3,6,3,0,117,118, - 5,167,0,0,118,120,3,6,3,0,119,117,1,0,0,0,120,123,1,0,0,0,121,119, - 1,0,0,0,121,122,1,0,0,0,122,125,1,0,0,0,123,121,1,0,0,0,124,116, - 1,0,0,0,124,125,1,0,0,0,125,126,1,0,0,0,126,127,5,131,0,0,127,5, - 1,0,0,0,128,130,5,76,0,0,129,128,1,0,0,0,129,130,1,0,0,0,130,131, - 1,0,0,0,131,133,5,177,0,0,132,134,3,8,4,0,133,132,1,0,0,0,133,134, - 1,0,0,0,134,137,1,0,0,0,135,136,5,146,0,0,136,138,3,70,35,0,137, - 135,1,0,0,0,137,138,1,0,0,0,138,162,1,0,0,0,139,140,5,91,0,0,140, - 142,5,177,0,0,141,143,3,8,4,0,142,141,1,0,0,0,142,143,1,0,0,0,143, - 146,1,0,0,0,144,145,5,146,0,0,145,147,3,70,35,0,146,144,1,0,0,0, - 146,147,1,0,0,0,147,162,1,0,0,0,148,152,5,41,0,0,149,150,5,64,0, - 0,150,152,5,138,0,0,151,148,1,0,0,0,151,149,1,0,0,0,152,153,1,0, - 0,0,153,155,5,177,0,0,154,156,3,8,4,0,155,154,1,0,0,0,155,156,1, - 0,0,0,156,159,1,0,0,0,157,158,5,146,0,0,158,160,7,0,0,0,159,157, - 1,0,0,0,159,160,1,0,0,0,160,162,1,0,0,0,161,129,1,0,0,0,161,139, - 1,0,0,0,161,151,1,0,0,0,162,7,1,0,0,0,163,164,5,139,0,0,164,165, - 5,50,0,0,165,9,1,0,0,0,166,174,5,22,0,0,167,171,3,16,8,0,168,171, - 3,74,37,0,169,171,3,14,7,0,170,167,1,0,0,0,170,168,1,0,0,0,170,169, - 1,0,0,0,171,172,1,0,0,0,172,170,1,0,0,0,172,173,1,0,0,0,173,175, - 1,0,0,0,174,170,1,0,0,0,174,175,1,0,0,0,175,11,1,0,0,0,176,178,3, - 62,31,0,177,176,1,0,0,0,178,179,1,0,0,0,179,177,1,0,0,0,179,180, - 1,0,0,0,180,13,1,0,0,0,181,182,5,45,0,0,182,183,5,50,0,0,183,15, - 1,0,0,0,184,186,5,34,0,0,185,184,1,0,0,0,185,186,1,0,0,0,186,188, - 1,0,0,0,187,189,5,35,0,0,188,187,1,0,0,0,188,189,1,0,0,0,189,191, - 1,0,0,0,190,192,3,26,13,0,191,190,1,0,0,0,191,192,1,0,0,0,192,193, - 1,0,0,0,193,194,5,5,0,0,194,195,3,18,9,0,195,196,5,146,0,0,196,198, - 3,20,10,0,197,199,3,22,11,0,198,197,1,0,0,0,198,199,1,0,0,0,199, - 201,1,0,0,0,200,202,3,28,14,0,201,200,1,0,0,0,201,202,1,0,0,0,202, - 203,1,0,0,0,203,205,3,30,15,0,204,206,3,32,16,0,205,204,1,0,0,0, - 205,206,1,0,0,0,206,208,1,0,0,0,207,209,3,34,17,0,208,207,1,0,0, - 0,208,209,1,0,0,0,209,211,1,0,0,0,210,212,3,42,21,0,211,210,1,0, - 0,0,211,212,1,0,0,0,212,214,1,0,0,0,213,215,3,36,18,0,214,213,1, - 0,0,0,214,215,1,0,0,0,215,219,1,0,0,0,216,218,3,62,31,0,217,216, - 1,0,0,0,218,221,1,0,0,0,219,217,1,0,0,0,219,220,1,0,0,0,220,17,1, - 0,0,0,221,219,1,0,0,0,222,223,5,32,0,0,223,224,5,130,0,0,224,225, - 5,177,0,0,225,229,5,131,0,0,226,229,7,1,0,0,227,229,5,177,0,0,228, - 222,1,0,0,0,228,226,1,0,0,0,228,227,1,0,0,0,229,19,1,0,0,0,230,231, - 5,32,0,0,231,232,5,130,0,0,232,233,3,44,22,0,233,234,5,131,0,0,234, - 237,1,0,0,0,235,237,5,177,0,0,236,230,1,0,0,0,236,235,1,0,0,0,237, - 21,1,0,0,0,238,247,5,130,0,0,239,244,3,24,12,0,240,241,5,167,0,0, - 241,243,3,24,12,0,242,240,1,0,0,0,243,246,1,0,0,0,244,242,1,0,0, - 0,244,245,1,0,0,0,245,248,1,0,0,0,246,244,1,0,0,0,247,239,1,0,0, - 0,247,248,1,0,0,0,248,249,1,0,0,0,249,250,5,131,0,0,250,23,1,0,0, - 0,251,252,5,177,0,0,252,253,5,146,0,0,253,261,3,70,35,0,254,255, - 5,177,0,0,255,256,5,146,0,0,256,261,5,46,0,0,257,258,5,177,0,0,258, - 259,5,146,0,0,259,261,3,66,33,0,260,251,1,0,0,0,260,254,1,0,0,0, - 260,257,1,0,0,0,261,25,1,0,0,0,262,265,5,33,0,0,263,266,1,0,0,0, - 264,266,3,70,35,0,265,263,1,0,0,0,265,264,1,0,0,0,266,27,1,0,0,0, - 267,268,5,28,0,0,268,269,3,70,35,0,269,29,1,0,0,0,270,271,5,3,0, - 0,271,272,3,46,23,0,272,273,3,48,24,0,273,31,1,0,0,0,274,275,5,19, - 0,0,275,276,3,46,23,0,276,277,3,48,24,0,277,33,1,0,0,0,278,279,5, - 25,0,0,279,280,5,177,0,0,280,35,1,0,0,0,281,283,3,38,19,0,282,281, - 1,0,0,0,283,284,1,0,0,0,284,282,1,0,0,0,284,285,1,0,0,0,285,37,1, - 0,0,0,286,287,5,27,0,0,287,288,3,40,20,0,288,289,7,2,0,0,289,290, - 3,70,35,0,290,39,1,0,0,0,291,295,5,20,0,0,292,293,5,130,0,0,293, - 294,5,47,0,0,294,296,5,131,0,0,295,292,1,0,0,0,295,296,1,0,0,0,296, - 306,1,0,0,0,297,306,5,31,0,0,298,302,5,29,0,0,299,300,5,130,0,0, - 300,301,5,47,0,0,301,303,5,131,0,0,302,299,1,0,0,0,302,303,1,0,0, - 0,303,306,1,0,0,0,304,306,5,177,0,0,305,291,1,0,0,0,305,297,1,0, - 0,0,305,298,1,0,0,0,305,304,1,0,0,0,306,41,1,0,0,0,307,308,5,24, - 0,0,308,309,3,76,38,0,309,43,1,0,0,0,310,314,5,20,0,0,311,312,5, - 130,0,0,312,313,5,47,0,0,313,315,5,131,0,0,314,311,1,0,0,0,314,315, - 1,0,0,0,315,318,1,0,0,0,316,318,5,177,0,0,317,310,1,0,0,0,317,316, - 1,0,0,0,318,45,1,0,0,0,319,320,5,130,0,0,320,321,3,70,35,0,321,322, - 5,167,0,0,322,323,3,70,35,0,323,324,5,167,0,0,324,325,3,70,35,0, - 325,326,5,131,0,0,326,47,1,0,0,0,327,334,5,2,0,0,328,331,5,18,0, - 0,329,332,5,2,0,0,330,332,3,44,22,0,331,329,1,0,0,0,331,330,1,0, - 0,0,332,334,1,0,0,0,333,327,1,0,0,0,333,328,1,0,0,0,334,49,1,0,0, - 0,335,336,5,37,0,0,336,337,5,50,0,0,337,51,1,0,0,0,338,339,5,8,0, - 0,339,348,3,76,38,0,340,341,5,8,0,0,341,342,5,32,0,0,342,345,5,177, - 0,0,343,344,5,24,0,0,344,346,3,76,38,0,345,343,1,0,0,0,345,346,1, - 0,0,0,346,348,1,0,0,0,347,338,1,0,0,0,347,340,1,0,0,0,348,53,1,0, - 0,0,349,350,5,6,0,0,350,351,3,76,38,0,351,55,1,0,0,0,352,353,5,13, - 0,0,353,362,3,76,38,0,354,355,5,13,0,0,355,356,5,32,0,0,356,359, - 5,177,0,0,357,358,5,24,0,0,358,360,3,76,38,0,359,357,1,0,0,0,359, - 360,1,0,0,0,360,362,1,0,0,0,361,352,1,0,0,0,361,354,1,0,0,0,362, - 57,1,0,0,0,363,364,5,26,0,0,364,373,3,76,38,0,365,366,5,26,0,0,366, - 367,5,32,0,0,367,370,5,177,0,0,368,369,5,24,0,0,369,371,3,76,38, - 0,370,368,1,0,0,0,370,371,1,0,0,0,371,373,1,0,0,0,372,363,1,0,0, - 0,372,365,1,0,0,0,373,59,1,0,0,0,374,375,5,12,0,0,375,384,3,76,38, - 0,376,377,5,12,0,0,377,378,5,32,0,0,378,381,5,177,0,0,379,380,5, - 24,0,0,380,382,3,76,38,0,381,379,1,0,0,0,381,382,1,0,0,0,382,384, - 1,0,0,0,383,374,1,0,0,0,383,376,1,0,0,0,384,61,1,0,0,0,385,386,5, - 40,0,0,386,387,7,3,0,0,387,388,7,3,0,0,388,389,3,76,38,0,389,63, - 1,0,0,0,390,391,5,4,0,0,391,392,7,3,0,0,392,65,1,0,0,0,393,394,5, - 134,0,0,394,399,3,70,35,0,395,396,5,167,0,0,396,398,3,70,35,0,397, - 395,1,0,0,0,398,401,1,0,0,0,399,397,1,0,0,0,399,400,1,0,0,0,400, - 402,1,0,0,0,401,399,1,0,0,0,402,403,5,135,0,0,403,67,1,0,0,0,404, - 405,5,177,0,0,405,406,5,146,0,0,406,407,3,70,35,0,407,69,1,0,0,0, - 408,409,6,35,-1,0,409,453,5,1,0,0,410,453,5,47,0,0,411,453,5,49, - 0,0,412,414,5,50,0,0,413,412,1,0,0,0,414,417,1,0,0,0,415,413,1,0, - 0,0,415,416,1,0,0,0,416,453,1,0,0,0,417,415,1,0,0,0,418,419,5,177, - 0,0,419,420,5,169,0,0,420,453,3,70,35,20,421,422,5,177,0,0,422,423, - 5,174,0,0,423,453,3,70,35,19,424,425,5,177,0,0,425,426,5,132,0,0, - 426,427,3,70,35,0,427,428,5,133,0,0,428,453,1,0,0,0,429,430,5,177, - 0,0,430,431,5,130,0,0,431,436,3,70,35,0,432,433,5,167,0,0,433,435, - 3,70,35,0,434,432,1,0,0,0,435,438,1,0,0,0,436,434,1,0,0,0,436,437, - 1,0,0,0,437,439,1,0,0,0,438,436,1,0,0,0,439,440,5,131,0,0,440,453, - 1,0,0,0,441,442,5,130,0,0,442,443,3,70,35,0,443,444,5,131,0,0,444, - 453,1,0,0,0,445,446,7,4,0,0,446,453,3,70,35,15,447,453,5,177,0,0, - 448,449,5,145,0,0,449,453,3,70,35,5,450,453,5,20,0,0,451,453,5,31, - 0,0,452,408,1,0,0,0,452,410,1,0,0,0,452,411,1,0,0,0,452,415,1,0, - 0,0,452,418,1,0,0,0,452,421,1,0,0,0,452,424,1,0,0,0,452,429,1,0, - 0,0,452,441,1,0,0,0,452,445,1,0,0,0,452,447,1,0,0,0,452,448,1,0, - 0,0,452,450,1,0,0,0,452,451,1,0,0,0,453,489,1,0,0,0,454,455,10,14, - 0,0,455,456,5,141,0,0,456,488,3,70,35,14,457,458,10,13,0,0,458,459, - 7,5,0,0,459,488,3,70,35,14,460,461,10,12,0,0,461,462,7,4,0,0,462, - 488,3,70,35,13,463,464,10,10,0,0,464,465,5,159,0,0,465,488,3,70, - 35,11,466,467,10,9,0,0,467,468,5,161,0,0,468,488,3,70,35,10,469, - 470,10,8,0,0,470,471,5,162,0,0,471,488,3,70,35,9,472,473,10,7,0, - 0,473,474,5,147,0,0,474,488,3,70,35,8,475,476,10,6,0,0,476,477,5, - 148,0,0,477,488,3,70,35,7,478,479,10,4,0,0,479,480,7,6,0,0,480,488, - 3,70,35,5,481,482,10,3,0,0,482,483,5,170,0,0,483,484,3,70,35,0,484, - 485,5,171,0,0,485,486,3,70,35,4,486,488,1,0,0,0,487,454,1,0,0,0, - 487,457,1,0,0,0,487,460,1,0,0,0,487,463,1,0,0,0,487,466,1,0,0,0, - 487,469,1,0,0,0,487,472,1,0,0,0,487,475,1,0,0,0,487,478,1,0,0,0, - 487,481,1,0,0,0,488,491,1,0,0,0,489,487,1,0,0,0,489,490,1,0,0,0, - 490,71,1,0,0,0,491,489,1,0,0,0,492,493,5,38,0,0,493,494,5,50,0,0, - 494,73,1,0,0,0,495,496,5,39,0,0,496,501,5,50,0,0,497,498,5,39,0, - 0,498,499,5,38,0,0,499,501,5,50,0,0,500,495,1,0,0,0,500,497,1,0, - 0,0,501,75,1,0,0,0,502,503,5,44,0,0,503,77,1,0,0,0,63,86,89,92,95, - 98,101,104,108,111,121,124,129,133,137,142,146,151,155,159,161,170, - 172,174,179,185,188,191,198,201,205,208,211,214,219,228,236,244, - 247,260,265,284,295,302,305,314,317,331,333,345,347,359,361,370, - 372,381,383,399,415,436,452,487,489,500 + 1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35, + 1,35,1,35,1,35,5,35,497,8,35,10,35,12,35,500,9,35,1,36,1,36,1,36, + 1,37,1,37,1,37,1,37,1,37,3,37,510,8,37,1,38,1,38,1,38,0,1,70,39, + 0,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,0,7,3,0,1,1,48,48, + 52,52,1,0,33,34,2,0,30,30,32,32,2,0,52,52,179,179,1,0,138,139,1, + 0,140,141,1,0,165,166,566,0,78,1,0,0,0,2,81,1,0,0,0,4,115,1,0,0, + 0,6,161,1,0,0,0,8,163,1,0,0,0,10,166,1,0,0,0,12,177,1,0,0,0,14,181, + 1,0,0,0,16,185,1,0,0,0,18,228,1,0,0,0,20,236,1,0,0,0,22,238,1,0, + 0,0,24,260,1,0,0,0,26,262,1,0,0,0,28,267,1,0,0,0,30,270,1,0,0,0, + 32,274,1,0,0,0,34,278,1,0,0,0,36,282,1,0,0,0,38,286,1,0,0,0,40,305, + 1,0,0,0,42,307,1,0,0,0,44,317,1,0,0,0,46,319,1,0,0,0,48,333,1,0, + 0,0,50,335,1,0,0,0,52,347,1,0,0,0,54,349,1,0,0,0,56,361,1,0,0,0, + 58,372,1,0,0,0,60,383,1,0,0,0,62,385,1,0,0,0,64,390,1,0,0,0,66,393, + 1,0,0,0,68,404,1,0,0,0,70,452,1,0,0,0,72,501,1,0,0,0,74,509,1,0, + 0,0,76,511,1,0,0,0,78,79,3,2,1,0,79,80,5,0,0,1,80,1,1,0,0,0,81,82, + 5,9,0,0,82,83,5,16,0,0,83,84,5,179,0,0,84,86,3,4,2,0,85,87,3,72, + 36,0,86,85,1,0,0,0,86,87,1,0,0,0,87,89,1,0,0,0,88,90,3,74,37,0,89, + 88,1,0,0,0,89,90,1,0,0,0,90,92,1,0,0,0,91,93,3,12,6,0,92,91,1,0, + 0,0,92,93,1,0,0,0,93,95,1,0,0,0,94,96,3,50,25,0,95,94,1,0,0,0,95, + 96,1,0,0,0,96,98,1,0,0,0,97,99,3,52,26,0,98,97,1,0,0,0,98,99,1,0, + 0,0,99,101,1,0,0,0,100,102,3,54,27,0,101,100,1,0,0,0,101,102,1,0, + 0,0,102,104,1,0,0,0,103,105,3,56,28,0,104,103,1,0,0,0,104,105,1, + 0,0,0,105,106,1,0,0,0,106,108,3,10,5,0,107,109,3,58,29,0,108,107, + 1,0,0,0,108,109,1,0,0,0,109,111,1,0,0,0,110,112,3,60,30,0,111,110, + 1,0,0,0,111,112,1,0,0,0,112,113,1,0,0,0,113,114,5,12,0,0,114,3,1, + 0,0,0,115,124,5,132,0,0,116,121,3,6,3,0,117,118,5,169,0,0,118,120, + 3,6,3,0,119,117,1,0,0,0,120,123,1,0,0,0,121,119,1,0,0,0,121,122, + 1,0,0,0,122,125,1,0,0,0,123,121,1,0,0,0,124,116,1,0,0,0,124,125, + 1,0,0,0,125,126,1,0,0,0,126,127,5,133,0,0,127,5,1,0,0,0,128,130, + 5,78,0,0,129,128,1,0,0,0,129,130,1,0,0,0,130,131,1,0,0,0,131,133, + 5,179,0,0,132,134,3,8,4,0,133,132,1,0,0,0,133,134,1,0,0,0,134,137, + 1,0,0,0,135,136,5,148,0,0,136,138,3,70,35,0,137,135,1,0,0,0,137, + 138,1,0,0,0,138,162,1,0,0,0,139,140,5,93,0,0,140,142,5,179,0,0,141, + 143,3,8,4,0,142,141,1,0,0,0,142,143,1,0,0,0,143,146,1,0,0,0,144, + 145,5,148,0,0,145,147,3,70,35,0,146,144,1,0,0,0,146,147,1,0,0,0, + 147,162,1,0,0,0,148,152,5,43,0,0,149,150,5,66,0,0,150,152,5,140, + 0,0,151,148,1,0,0,0,151,149,1,0,0,0,152,153,1,0,0,0,153,155,5,179, + 0,0,154,156,3,8,4,0,155,154,1,0,0,0,155,156,1,0,0,0,156,159,1,0, + 0,0,157,158,5,148,0,0,158,160,7,0,0,0,159,157,1,0,0,0,159,160,1, + 0,0,0,160,162,1,0,0,0,161,129,1,0,0,0,161,139,1,0,0,0,161,151,1, + 0,0,0,162,7,1,0,0,0,163,164,5,141,0,0,164,165,5,52,0,0,165,9,1,0, + 0,0,166,174,5,24,0,0,167,171,3,16,8,0,168,171,3,74,37,0,169,171, + 3,14,7,0,170,167,1,0,0,0,170,168,1,0,0,0,170,169,1,0,0,0,171,172, + 1,0,0,0,172,170,1,0,0,0,172,173,1,0,0,0,173,175,1,0,0,0,174,170, + 1,0,0,0,174,175,1,0,0,0,175,11,1,0,0,0,176,178,3,62,31,0,177,176, + 1,0,0,0,178,179,1,0,0,0,179,177,1,0,0,0,179,180,1,0,0,0,180,13,1, + 0,0,0,181,182,5,47,0,0,182,183,5,52,0,0,183,15,1,0,0,0,184,186,5, + 36,0,0,185,184,1,0,0,0,185,186,1,0,0,0,186,188,1,0,0,0,187,189,5, + 37,0,0,188,187,1,0,0,0,188,189,1,0,0,0,189,191,1,0,0,0,190,192,3, + 26,13,0,191,190,1,0,0,0,191,192,1,0,0,0,192,193,1,0,0,0,193,194, + 5,7,0,0,194,195,3,18,9,0,195,196,5,148,0,0,196,198,3,20,10,0,197, + 199,3,22,11,0,198,197,1,0,0,0,198,199,1,0,0,0,199,201,1,0,0,0,200, + 202,3,28,14,0,201,200,1,0,0,0,201,202,1,0,0,0,202,203,1,0,0,0,203, + 205,3,30,15,0,204,206,3,32,16,0,205,204,1,0,0,0,205,206,1,0,0,0, + 206,208,1,0,0,0,207,209,3,34,17,0,208,207,1,0,0,0,208,209,1,0,0, + 0,209,211,1,0,0,0,210,212,3,42,21,0,211,210,1,0,0,0,211,212,1,0, + 0,0,212,214,1,0,0,0,213,215,3,36,18,0,214,213,1,0,0,0,214,215,1, + 0,0,0,215,219,1,0,0,0,216,218,3,62,31,0,217,216,1,0,0,0,218,221, + 1,0,0,0,219,217,1,0,0,0,219,220,1,0,0,0,220,17,1,0,0,0,221,219,1, + 0,0,0,222,223,5,34,0,0,223,224,5,132,0,0,224,225,5,179,0,0,225,229, + 5,133,0,0,226,229,7,1,0,0,227,229,5,179,0,0,228,222,1,0,0,0,228, + 226,1,0,0,0,228,227,1,0,0,0,229,19,1,0,0,0,230,231,5,34,0,0,231, + 232,5,132,0,0,232,233,3,44,22,0,233,234,5,133,0,0,234,237,1,0,0, + 0,235,237,5,179,0,0,236,230,1,0,0,0,236,235,1,0,0,0,237,21,1,0,0, + 0,238,247,5,132,0,0,239,244,3,24,12,0,240,241,5,169,0,0,241,243, + 3,24,12,0,242,240,1,0,0,0,243,246,1,0,0,0,244,242,1,0,0,0,244,245, + 1,0,0,0,245,248,1,0,0,0,246,244,1,0,0,0,247,239,1,0,0,0,247,248, + 1,0,0,0,248,249,1,0,0,0,249,250,5,133,0,0,250,23,1,0,0,0,251,252, + 5,179,0,0,252,253,5,148,0,0,253,261,3,70,35,0,254,255,5,179,0,0, + 255,256,5,148,0,0,256,261,5,48,0,0,257,258,5,179,0,0,258,259,5,148, + 0,0,259,261,3,66,33,0,260,251,1,0,0,0,260,254,1,0,0,0,260,257,1, + 0,0,0,261,25,1,0,0,0,262,265,5,35,0,0,263,266,1,0,0,0,264,266,3, + 70,35,0,265,263,1,0,0,0,265,264,1,0,0,0,266,27,1,0,0,0,267,268,5, + 30,0,0,268,269,3,70,35,0,269,29,1,0,0,0,270,271,5,5,0,0,271,272, + 3,46,23,0,272,273,3,48,24,0,273,31,1,0,0,0,274,275,5,21,0,0,275, + 276,3,46,23,0,276,277,3,48,24,0,277,33,1,0,0,0,278,279,5,27,0,0, + 279,280,5,179,0,0,280,35,1,0,0,0,281,283,3,38,19,0,282,281,1,0,0, + 0,283,284,1,0,0,0,284,282,1,0,0,0,284,285,1,0,0,0,285,37,1,0,0,0, + 286,287,5,29,0,0,287,288,3,40,20,0,288,289,7,2,0,0,289,290,3,70, + 35,0,290,39,1,0,0,0,291,295,5,22,0,0,292,293,5,132,0,0,293,294,5, + 49,0,0,294,296,5,133,0,0,295,292,1,0,0,0,295,296,1,0,0,0,296,306, + 1,0,0,0,297,306,5,33,0,0,298,302,5,31,0,0,299,300,5,132,0,0,300, + 301,5,49,0,0,301,303,5,133,0,0,302,299,1,0,0,0,302,303,1,0,0,0,303, + 306,1,0,0,0,304,306,5,179,0,0,305,291,1,0,0,0,305,297,1,0,0,0,305, + 298,1,0,0,0,305,304,1,0,0,0,306,41,1,0,0,0,307,308,5,26,0,0,308, + 309,3,76,38,0,309,43,1,0,0,0,310,314,5,22,0,0,311,312,5,132,0,0, + 312,313,5,49,0,0,313,315,5,133,0,0,314,311,1,0,0,0,314,315,1,0,0, + 0,315,318,1,0,0,0,316,318,5,179,0,0,317,310,1,0,0,0,317,316,1,0, + 0,0,318,45,1,0,0,0,319,320,5,132,0,0,320,321,3,70,35,0,321,322,5, + 169,0,0,322,323,3,70,35,0,323,324,5,169,0,0,324,325,3,70,35,0,325, + 326,5,133,0,0,326,47,1,0,0,0,327,334,5,4,0,0,328,331,5,20,0,0,329, + 332,5,4,0,0,330,332,3,44,22,0,331,329,1,0,0,0,331,330,1,0,0,0,332, + 334,1,0,0,0,333,327,1,0,0,0,333,328,1,0,0,0,334,49,1,0,0,0,335,336, + 5,39,0,0,336,337,5,52,0,0,337,51,1,0,0,0,338,339,5,10,0,0,339,348, + 3,76,38,0,340,341,5,10,0,0,341,342,5,34,0,0,342,345,5,179,0,0,343, + 344,5,26,0,0,344,346,3,76,38,0,345,343,1,0,0,0,345,346,1,0,0,0,346, + 348,1,0,0,0,347,338,1,0,0,0,347,340,1,0,0,0,348,53,1,0,0,0,349,350, + 5,8,0,0,350,351,3,76,38,0,351,55,1,0,0,0,352,353,5,15,0,0,353,362, + 3,76,38,0,354,355,5,15,0,0,355,356,5,34,0,0,356,359,5,179,0,0,357, + 358,5,26,0,0,358,360,3,76,38,0,359,357,1,0,0,0,359,360,1,0,0,0,360, + 362,1,0,0,0,361,352,1,0,0,0,361,354,1,0,0,0,362,57,1,0,0,0,363,364, + 5,28,0,0,364,373,3,76,38,0,365,366,5,28,0,0,366,367,5,34,0,0,367, + 370,5,179,0,0,368,369,5,26,0,0,369,371,3,76,38,0,370,368,1,0,0,0, + 370,371,1,0,0,0,371,373,1,0,0,0,372,363,1,0,0,0,372,365,1,0,0,0, + 373,59,1,0,0,0,374,375,5,14,0,0,375,384,3,76,38,0,376,377,5,14,0, + 0,377,378,5,34,0,0,378,381,5,179,0,0,379,380,5,26,0,0,380,382,3, + 76,38,0,381,379,1,0,0,0,381,382,1,0,0,0,382,384,1,0,0,0,383,374, + 1,0,0,0,383,376,1,0,0,0,384,61,1,0,0,0,385,386,5,42,0,0,386,387, + 7,3,0,0,387,388,7,3,0,0,388,389,3,76,38,0,389,63,1,0,0,0,390,391, + 5,6,0,0,391,392,7,3,0,0,392,65,1,0,0,0,393,394,5,136,0,0,394,399, + 3,70,35,0,395,396,5,169,0,0,396,398,3,70,35,0,397,395,1,0,0,0,398, + 401,1,0,0,0,399,397,1,0,0,0,399,400,1,0,0,0,400,402,1,0,0,0,401, + 399,1,0,0,0,402,403,5,137,0,0,403,67,1,0,0,0,404,405,5,179,0,0,405, + 406,5,148,0,0,406,407,3,70,35,0,407,69,1,0,0,0,408,409,6,35,-1,0, + 409,453,5,1,0,0,410,453,5,49,0,0,411,453,5,51,0,0,412,414,5,52,0, + 0,413,412,1,0,0,0,414,417,1,0,0,0,415,413,1,0,0,0,415,416,1,0,0, + 0,416,453,1,0,0,0,417,415,1,0,0,0,418,419,5,179,0,0,419,420,5,171, + 0,0,420,453,3,70,35,23,421,422,5,179,0,0,422,423,5,176,0,0,423,453, + 3,70,35,22,424,425,5,179,0,0,425,426,5,134,0,0,426,427,3,70,35,0, + 427,428,5,135,0,0,428,453,1,0,0,0,429,430,5,179,0,0,430,431,5,132, + 0,0,431,436,3,70,35,0,432,433,5,169,0,0,433,435,3,70,35,0,434,432, + 1,0,0,0,435,438,1,0,0,0,436,434,1,0,0,0,436,437,1,0,0,0,437,439, + 1,0,0,0,438,436,1,0,0,0,439,440,5,133,0,0,440,453,1,0,0,0,441,442, + 5,132,0,0,442,443,3,70,35,0,443,444,5,133,0,0,444,453,1,0,0,0,445, + 446,7,4,0,0,446,453,3,70,35,18,447,453,5,179,0,0,448,449,5,147,0, + 0,449,453,3,70,35,5,450,453,5,22,0,0,451,453,5,33,0,0,452,408,1, + 0,0,0,452,410,1,0,0,0,452,411,1,0,0,0,452,415,1,0,0,0,452,418,1, + 0,0,0,452,421,1,0,0,0,452,424,1,0,0,0,452,429,1,0,0,0,452,441,1, + 0,0,0,452,445,1,0,0,0,452,447,1,0,0,0,452,448,1,0,0,0,452,450,1, + 0,0,0,452,451,1,0,0,0,453,498,1,0,0,0,454,455,10,17,0,0,455,456, + 5,143,0,0,456,497,3,70,35,17,457,458,10,16,0,0,458,459,7,5,0,0,459, + 497,3,70,35,17,460,461,10,15,0,0,461,462,7,4,0,0,462,497,3,70,35, + 16,463,464,10,14,0,0,464,465,5,142,0,0,465,497,3,70,35,15,466,467, + 10,13,0,0,467,468,5,2,0,0,468,497,3,70,35,14,469,470,10,12,0,0,470, + 471,5,3,0,0,471,497,3,70,35,13,472,473,10,10,0,0,473,474,5,161,0, + 0,474,497,3,70,35,11,475,476,10,9,0,0,476,477,5,163,0,0,477,497, + 3,70,35,10,478,479,10,8,0,0,479,480,5,164,0,0,480,497,3,70,35,9, + 481,482,10,7,0,0,482,483,5,149,0,0,483,497,3,70,35,8,484,485,10, + 6,0,0,485,486,5,150,0,0,486,497,3,70,35,7,487,488,10,4,0,0,488,489, + 7,6,0,0,489,497,3,70,35,5,490,491,10,3,0,0,491,492,5,172,0,0,492, + 493,3,70,35,0,493,494,5,173,0,0,494,495,3,70,35,4,495,497,1,0,0, + 0,496,454,1,0,0,0,496,457,1,0,0,0,496,460,1,0,0,0,496,463,1,0,0, + 0,496,466,1,0,0,0,496,469,1,0,0,0,496,472,1,0,0,0,496,475,1,0,0, + 0,496,478,1,0,0,0,496,481,1,0,0,0,496,484,1,0,0,0,496,487,1,0,0, + 0,496,490,1,0,0,0,497,500,1,0,0,0,498,496,1,0,0,0,498,499,1,0,0, + 0,499,71,1,0,0,0,500,498,1,0,0,0,501,502,5,40,0,0,502,503,5,52,0, + 0,503,73,1,0,0,0,504,505,5,41,0,0,505,510,5,52,0,0,506,507,5,41, + 0,0,507,508,5,40,0,0,508,510,5,52,0,0,509,504,1,0,0,0,509,506,1, + 0,0,0,510,75,1,0,0,0,511,512,5,46,0,0,512,77,1,0,0,0,63,86,89,92, + 95,98,101,104,108,111,121,124,129,133,137,142,146,151,155,159,161, + 170,172,174,179,185,188,191,198,201,205,208,211,214,219,228,236, + 244,247,260,265,284,295,302,305,314,317,331,333,345,347,359,361, + 370,372,381,383,399,415,436,452,496,498,509 ] class McInstrParser ( Parser ): @@ -211,8 +215,8 @@ class McInstrParser ( Parser ): sharedContextCache = PredictionContextCache() - literalNames = [ "", "'0'", "", "", "", - "", "", "", "'DECLARE'", + literalNames = [ "", "'0'", "'>>'", "'<<'", "", "", + "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", @@ -221,17 +225,17 @@ class McInstrParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "", "", - "'string'", "'vector'", "'symbol'", "", "'%include'", - "'NULL'", "", "", "", "", + "", "'string'", "'vector'", "'symbol'", "", + "'%include'", "'NULL'", "", "", "", "", "", "", "", - "", "'alignas'", "'alignof'", "'asm'", "'auto'", - "'bool'", "'break'", "'case'", "'catch'", "'char'", - "'char16_t'", "'char32_t'", "'class'", "'const'", "'constexpr'", - "'const_cast'", "'continue'", "'decltype'", "'default'", - "'delete'", "'do'", "'double'", "'dynamic_cast'", "'else'", - "'enum'", "'explicit'", "'export'", "'extern'", "'false'", - "'final'", "'float'", "'for'", "'friend'", "'goto'", - "'if'", "'inline'", "'int'", "'long'", "'mutable'", + "", "", "'alignas'", "'alignof'", + "'asm'", "'auto'", "'bool'", "'break'", "'case'", "'catch'", + "'char'", "'char16_t'", "'char32_t'", "'class'", "'const'", + "'constexpr'", "'const_cast'", "'continue'", "'decltype'", + "'default'", "'delete'", "'do'", "'double'", "'dynamic_cast'", + "'else'", "'enum'", "'explicit'", "'export'", "'extern'", + "'false'", "'final'", "'float'", "'for'", "'friend'", + "'goto'", "'if'", "'inline'", "'int'", "'long'", "'mutable'", "'namespace'", "'new'", "'noexcept'", "'nullptr'", "'operator'", "'override'", "'protected'", "'public'", "'register'", "'reinterpret_cast'", "'return'", "'short'", @@ -248,42 +252,43 @@ class McInstrParser ( Parser ): "", "'++'", "'--'", "','", "'->*'", "'->'", "'?'", "':'", "'::'", "';'", "'.'", "'.*'", "'...'" ] - symbolicNames = [ "", "", "Absolute", "At", "Category", - "Component", "UserVars", "Define", "Declare", "Definition", - "End", "McDisplay", "Finally", "Initialize", "Instrument", - "Output", "Private", "Parameters", "Relative", "Rotated", - "Previous", "Setting", "Trace", "Share", "Extend", - "Group", "Save", "Jump", "When", "Next", "Iterate", - "Myself", "Copy", "Split", "Removable", "Cpu", "NoAcc", - "Dependency", "Shell", "Search", "MetaData", "String", - "Vector", "Symbol", "UnparsedBlock", "Include", "Null", - "IntegerLiteral", "CharacterLiteral", "FloatingLiteral", - "StringLiteral", "BooleanLitteral", "PointerLiteral", - "UserDefinedLiteral", "MultiLineMacro", "Directive", - "Alignas", "Alignof", "Asm", "Auto", "Bool", "Break", - "Case", "Catch", "Char", "Char16", "Char32", "Class", - "Const", "Constexpr", "Const_cast", "Continue", "Decltype", - "Default", "Delete", "Do", "Double", "Dynamic_cast", - "Else", "Enum", "Explicit", "Export", "Extern", "False_", - "Final", "Float", "For", "Friend", "Goto", "If", "Inline", - "Int", "Long", "Mutable", "Namespace", "New", "Noexcept", - "Nullptr", "Operator", "Override", "Protected", "Public", - "Register", "Reinterpret_cast", "Return", "Short", - "Signed", "Sizeof", "Static", "Static_assert", "Static_cast", - "Struct", "Switch", "Template", "This", "Thread_local", - "Throw", "True_", "Try", "Typedef", "Typeid_", "Typename_", - "Union", "Unsigned", "Using", "Virtual", "Void", "Volatile", - "Wchar", "While", "LeftParen", "RightParen", "LeftBracket", - "RightBracket", "LeftBrace", "RightBrace", "Plus", - "Minus", "Star", "Div", "Mod", "Caret", "And", "Or", - "Tilde", "Not", "Assign", "Less", "Greater", "PlusAssign", - "MinusAssign", "StarAssign", "DivAssign", "ModAssign", - "XorAssign", "AndAssign", "OrAssign", "LeftShiftAssign", - "RightShiftAssign", "Equal", "NotEqual", "LessEqual", - "GreaterEqual", "AndAnd", "OrOr", "PlusPlus", "MinusMinus", - "Comma", "ArrowStar", "Arrow", "Question", "Colon", - "Doublecolon", "Semi", "Dot", "DotStar", "Ellipsis", - "Identifier", "DecimalLiteral", "OctalLiteral", "HexadecimalLiteral", + symbolicNames = [ "", "", "", "", + "Absolute", "At", "Category", "Component", "UserVars", + "Define", "Declare", "Definition", "End", "McDisplay", + "Finally", "Initialize", "Instrument", "Output", "Private", + "Parameters", "Relative", "Rotated", "Previous", "Setting", + "Trace", "Share", "Extend", "Group", "Save", "Jump", + "When", "Next", "Iterate", "Myself", "Copy", "Split", + "Removable", "Cpu", "NoAcc", "Dependency", "Shell", + "Search", "MetaData", "String", "Vector", "Symbol", + "UnparsedBlock", "Include", "Null", "IntegerLiteral", + "CharacterLiteral", "FloatingLiteral", "StringLiteral", + "BooleanLitteral", "PointerLiteral", "UserDefinedLiteral", + "MultiLineMacro", "Directive", "Alignas", "Alignof", + "Asm", "Auto", "Bool", "Break", "Case", "Catch", "Char", + "Char16", "Char32", "Class", "Const", "Constexpr", + "Const_cast", "Continue", "Decltype", "Default", "Delete", + "Do", "Double", "Dynamic_cast", "Else", "Enum", "Explicit", + "Export", "Extern", "False_", "Final", "Float", "For", + "Friend", "Goto", "If", "Inline", "Int", "Long", "Mutable", + "Namespace", "New", "Noexcept", "Nullptr", "Operator", + "Override", "Protected", "Public", "Register", "Reinterpret_cast", + "Return", "Short", "Signed", "Sizeof", "Static", "Static_assert", + "Static_cast", "Struct", "Switch", "Template", "This", + "Thread_local", "Throw", "True_", "Try", "Typedef", + "Typeid_", "Typename_", "Union", "Unsigned", "Using", + "Virtual", "Void", "Volatile", "Wchar", "While", "LeftParen", + "RightParen", "LeftBracket", "RightBracket", "LeftBrace", + "RightBrace", "Plus", "Minus", "Star", "Div", "Mod", + "Caret", "And", "Or", "Tilde", "Not", "Assign", "Less", + "Greater", "PlusAssign", "MinusAssign", "StarAssign", + "DivAssign", "ModAssign", "XorAssign", "AndAssign", + "OrAssign", "LeftShiftAssign", "RightShiftAssign", + "Equal", "NotEqual", "LessEqual", "GreaterEqual", + "AndAnd", "OrOr", "PlusPlus", "MinusMinus", "Comma", + "ArrowStar", "Arrow", "Question", "Colon", "Doublecolon", + "Semi", "Dot", "DotStar", "Ellipsis", "Identifier", + "DecimalLiteral", "OctalLiteral", "HexadecimalLiteral", "BinaryLiteral", "IntegerSuffix", "UserDefinedIntegerLiteral", "UserDefinedFloatingLiteral", "UserDefinedStringLiteral", "UserDefinedCharacterLiteral", "Whitespace", "Newline", @@ -342,195 +347,197 @@ class McInstrParser ( Parser ): EOF = Token.EOF T__0=1 - Absolute=2 - At=3 - Category=4 - Component=5 - UserVars=6 - Define=7 - Declare=8 - Definition=9 - End=10 - McDisplay=11 - Finally=12 - Initialize=13 - Instrument=14 - Output=15 - Private=16 - Parameters=17 - Relative=18 - Rotated=19 - Previous=20 - Setting=21 - Trace=22 - Share=23 - Extend=24 - Group=25 - Save=26 - Jump=27 - When=28 - Next=29 - Iterate=30 - Myself=31 - Copy=32 - Split=33 - Removable=34 - Cpu=35 - NoAcc=36 - Dependency=37 - Shell=38 - Search=39 - MetaData=40 - String=41 - Vector=42 - Symbol=43 - UnparsedBlock=44 - Include=45 - Null=46 - IntegerLiteral=47 - CharacterLiteral=48 - FloatingLiteral=49 - StringLiteral=50 - BooleanLitteral=51 - PointerLiteral=52 - UserDefinedLiteral=53 - MultiLineMacro=54 - Directive=55 - Alignas=56 - Alignof=57 - Asm=58 - Auto=59 - Bool=60 - Break=61 - Case=62 - Catch=63 - Char=64 - Char16=65 - Char32=66 - Class=67 - Const=68 - Constexpr=69 - Const_cast=70 - Continue=71 - Decltype=72 - Default=73 - Delete=74 - Do=75 - Double=76 - Dynamic_cast=77 - Else=78 - Enum=79 - Explicit=80 - Export=81 - Extern=82 - False_=83 - Final=84 - Float=85 - For=86 - Friend=87 - Goto=88 - If=89 - Inline=90 - Int=91 - Long=92 - Mutable=93 - Namespace=94 - New=95 - Noexcept=96 - Nullptr=97 - Operator=98 - Override=99 - Protected=100 - Public=101 - Register=102 - Reinterpret_cast=103 - Return=104 - Short=105 - Signed=106 - Sizeof=107 - Static=108 - Static_assert=109 - Static_cast=110 - Struct=111 - Switch=112 - Template=113 - This=114 - Thread_local=115 - Throw=116 - True_=117 - Try=118 - Typedef=119 - Typeid_=120 - Typename_=121 - Union=122 - Unsigned=123 - Using=124 - Virtual=125 - Void=126 - Volatile=127 - Wchar=128 - While=129 - LeftParen=130 - RightParen=131 - LeftBracket=132 - RightBracket=133 - LeftBrace=134 - RightBrace=135 - Plus=136 - Minus=137 - Star=138 - Div=139 - Mod=140 - Caret=141 - And=142 - Or=143 - Tilde=144 - Not=145 - Assign=146 - Less=147 - Greater=148 - PlusAssign=149 - MinusAssign=150 - StarAssign=151 - DivAssign=152 - ModAssign=153 - XorAssign=154 - AndAssign=155 - OrAssign=156 - LeftShiftAssign=157 - RightShiftAssign=158 - Equal=159 - NotEqual=160 - LessEqual=161 - GreaterEqual=162 - AndAnd=163 - OrOr=164 - PlusPlus=165 - MinusMinus=166 - Comma=167 - ArrowStar=168 - Arrow=169 - Question=170 - Colon=171 - Doublecolon=172 - Semi=173 - Dot=174 - DotStar=175 - Ellipsis=176 - Identifier=177 - DecimalLiteral=178 - OctalLiteral=179 - HexadecimalLiteral=180 - BinaryLiteral=181 - IntegerSuffix=182 - UserDefinedIntegerLiteral=183 - UserDefinedFloatingLiteral=184 - UserDefinedStringLiteral=185 - UserDefinedCharacterLiteral=186 - Whitespace=187 - Newline=188 - BlockComment=189 - LineComment=190 + T__1=2 + T__2=3 + Absolute=4 + At=5 + Category=6 + Component=7 + UserVars=8 + Define=9 + Declare=10 + Definition=11 + End=12 + McDisplay=13 + Finally=14 + Initialize=15 + Instrument=16 + Output=17 + Private=18 + Parameters=19 + Relative=20 + Rotated=21 + Previous=22 + Setting=23 + Trace=24 + Share=25 + Extend=26 + Group=27 + Save=28 + Jump=29 + When=30 + Next=31 + Iterate=32 + Myself=33 + Copy=34 + Split=35 + Removable=36 + Cpu=37 + NoAcc=38 + Dependency=39 + Shell=40 + Search=41 + MetaData=42 + String=43 + Vector=44 + Symbol=45 + UnparsedBlock=46 + Include=47 + Null=48 + IntegerLiteral=49 + CharacterLiteral=50 + FloatingLiteral=51 + StringLiteral=52 + BooleanLitteral=53 + PointerLiteral=54 + UserDefinedLiteral=55 + MultiLineMacro=56 + Directive=57 + Alignas=58 + Alignof=59 + Asm=60 + Auto=61 + Bool=62 + Break=63 + Case=64 + Catch=65 + Char=66 + Char16=67 + Char32=68 + Class=69 + Const=70 + Constexpr=71 + Const_cast=72 + Continue=73 + Decltype=74 + Default=75 + Delete=76 + Do=77 + Double=78 + Dynamic_cast=79 + Else=80 + Enum=81 + Explicit=82 + Export=83 + Extern=84 + False_=85 + Final=86 + Float=87 + For=88 + Friend=89 + Goto=90 + If=91 + Inline=92 + Int=93 + Long=94 + Mutable=95 + Namespace=96 + New=97 + Noexcept=98 + Nullptr=99 + Operator=100 + Override=101 + Protected=102 + Public=103 + Register=104 + Reinterpret_cast=105 + Return=106 + Short=107 + Signed=108 + Sizeof=109 + Static=110 + Static_assert=111 + Static_cast=112 + Struct=113 + Switch=114 + Template=115 + This=116 + Thread_local=117 + Throw=118 + True_=119 + Try=120 + Typedef=121 + Typeid_=122 + Typename_=123 + Union=124 + Unsigned=125 + Using=126 + Virtual=127 + Void=128 + Volatile=129 + Wchar=130 + While=131 + LeftParen=132 + RightParen=133 + LeftBracket=134 + RightBracket=135 + LeftBrace=136 + RightBrace=137 + Plus=138 + Minus=139 + Star=140 + Div=141 + Mod=142 + Caret=143 + And=144 + Or=145 + Tilde=146 + Not=147 + Assign=148 + Less=149 + Greater=150 + PlusAssign=151 + MinusAssign=152 + StarAssign=153 + DivAssign=154 + ModAssign=155 + XorAssign=156 + AndAssign=157 + OrAssign=158 + LeftShiftAssign=159 + RightShiftAssign=160 + Equal=161 + NotEqual=162 + LessEqual=163 + GreaterEqual=164 + AndAnd=165 + OrOr=166 + PlusPlus=167 + MinusMinus=168 + Comma=169 + ArrowStar=170 + Arrow=171 + Question=172 + Colon=173 + Doublecolon=174 + Semi=175 + Dot=176 + DotStar=177 + Ellipsis=178 + Identifier=179 + DecimalLiteral=180 + OctalLiteral=181 + HexadecimalLiteral=182 + BinaryLiteral=183 + IntegerSuffix=184 + UserDefinedIntegerLiteral=185 + UserDefinedFloatingLiteral=186 + UserDefinedStringLiteral=187 + UserDefinedCharacterLiteral=188 + Whitespace=189 + Newline=190 + BlockComment=191 + LineComment=192 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -695,7 +702,7 @@ def instrument_definition(self): self.state = 86 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==38: + if _la==40: self.state = 85 self.shell() @@ -703,7 +710,7 @@ def instrument_definition(self): self.state = 89 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==39: + if _la==41: self.state = 88 self.search() @@ -711,7 +718,7 @@ def instrument_definition(self): self.state = 92 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==40: + if _la==42: self.state = 91 self.instrument_metadata() @@ -719,7 +726,7 @@ def instrument_definition(self): self.state = 95 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==37: + if _la==39: self.state = 94 self.dependency() @@ -727,7 +734,7 @@ def instrument_definition(self): self.state = 98 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==8: + if _la==10: self.state = 97 self.declare() @@ -735,7 +742,7 @@ def instrument_definition(self): self.state = 101 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==6: + if _la==8: self.state = 100 self.uservars() @@ -743,7 +750,7 @@ def instrument_definition(self): self.state = 104 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==13: + if _la==15: self.state = 103 self.initialize() @@ -753,7 +760,7 @@ def instrument_definition(self): self.state = 108 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==26: + if _la==28: self.state = 107 self.save() @@ -761,7 +768,7 @@ def instrument_definition(self): self.state = 111 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==12: + if _la==14: self.state = 110 self.finally_() @@ -837,14 +844,14 @@ def instrument_parameters(self): self.state = 124 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 41)) & ~0x3f) == 0 and ((1 << (_la - 41)) & 1125934274969601) != 0) or _la==177: + if ((((_la - 43)) & ~0x3f) == 0 and ((1 << (_la - 43)) & 1125934274969601) != 0) or _la==179: self.state = 116 localctx._instrument_parameter = self.instrument_parameter() localctx.params.append(localctx._instrument_parameter) self.state = 121 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==167: + while _la==169: self.state = 117 self.match(McInstrParser.Comma) self.state = 118 @@ -1001,13 +1008,13 @@ def instrument_parameter(self): self.state = 161 self._errHandler.sync(self) token = self._input.LA(1) - if token in [76, 177]: + if token in [78, 179]: localctx = McInstrParser.InstrumentParameterDoubleContext(self, localctx) self.enterOuterAlt(localctx, 1) self.state = 129 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==76: + if _la==78: self.state = 128 self.match(McInstrParser.Double) @@ -1017,7 +1024,7 @@ def instrument_parameter(self): self.state = 133 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==139: + if _la==141: self.state = 132 self.instrument_parameter_unit() @@ -1025,7 +1032,7 @@ def instrument_parameter(self): self.state = 137 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==146: + if _la==148: self.state = 135 self.match(McInstrParser.Assign) self.state = 136 @@ -1033,7 +1040,7 @@ def instrument_parameter(self): pass - elif token in [91]: + elif token in [93]: localctx = McInstrParser.InstrumentParameterIntegerContext(self, localctx) self.enterOuterAlt(localctx, 2) self.state = 139 @@ -1043,7 +1050,7 @@ def instrument_parameter(self): self.state = 142 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==139: + if _la==141: self.state = 141 self.instrument_parameter_unit() @@ -1051,7 +1058,7 @@ def instrument_parameter(self): self.state = 146 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==146: + if _la==148: self.state = 144 self.match(McInstrParser.Assign) self.state = 145 @@ -1059,17 +1066,17 @@ def instrument_parameter(self): pass - elif token in [41, 64]: + elif token in [43, 66]: localctx = McInstrParser.InstrumentParameterStringContext(self, localctx) self.enterOuterAlt(localctx, 3) self.state = 151 self._errHandler.sync(self) token = self._input.LA(1) - if token in [41]: + if token in [43]: self.state = 148 self.match(McInstrParser.String) pass - elif token in [64]: + elif token in [66]: self.state = 149 self.match(McInstrParser.Char) self.state = 150 @@ -1083,7 +1090,7 @@ def instrument_parameter(self): self.state = 155 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==139: + if _la==141: self.state = 154 self.instrument_parameter_unit() @@ -1091,12 +1098,12 @@ def instrument_parameter(self): self.state = 159 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==146: + if _la==148: self.state = 157 self.match(McInstrParser.Assign) self.state = 158 _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 1196268651020290) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 4785074604081154) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -1231,7 +1238,7 @@ def instrument_trace(self): self.state = 174 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & 35794257444896) != 0): + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 143177029779584) != 0): self.state = 170 self._errHandler.sync(self) _la = self._input.LA(1) @@ -1239,15 +1246,15 @@ def instrument_trace(self): self.state = 170 self._errHandler.sync(self) token = self._input.LA(1) - if token in [5, 33, 34, 35]: + if token in [7, 35, 36, 37]: self.state = 167 self.component_instance() pass - elif token in [39]: + elif token in [41]: self.state = 168 self.search() pass - elif token in [45]: + elif token in [47]: self.state = 169 self.instrument_trace_include() pass @@ -1257,7 +1264,7 @@ def instrument_trace(self): self.state = 172 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & 35794257444896) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & 143177029779584) != 0)): break @@ -1321,7 +1328,7 @@ def instrument_metadata(self): self.state = 179 self._errHandler.sync(self) _la = self._input.LA(1) - if not (_la==40): + if not (_la==42): break except RecognitionException as re: @@ -1481,7 +1488,7 @@ def component_instance(self): self.state = 185 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==34: + if _la==36: self.state = 184 self.match(McInstrParser.Removable) @@ -1489,7 +1496,7 @@ def component_instance(self): self.state = 188 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==35: + if _la==37: self.state = 187 self.match(McInstrParser.Cpu) @@ -1497,7 +1504,7 @@ def component_instance(self): self.state = 191 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==33: + if _la==35: self.state = 190 self.split() @@ -1513,7 +1520,7 @@ def component_instance(self): self.state = 198 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==130: + if _la==132: self.state = 197 self.instance_parameters() @@ -1521,7 +1528,7 @@ def component_instance(self): self.state = 201 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==28: + if _la==30: self.state = 200 self.when() @@ -1531,7 +1538,7 @@ def component_instance(self): self.state = 205 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==19: + if _la==21: self.state = 204 self.orientation() @@ -1539,7 +1546,7 @@ def component_instance(self): self.state = 208 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==25: + if _la==27: self.state = 207 self.groupref() @@ -1547,7 +1554,7 @@ def component_instance(self): self.state = 211 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==24: + if _la==26: self.state = 210 self.extend() @@ -1555,7 +1562,7 @@ def component_instance(self): self.state = 214 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==27: + if _la==29: self.state = 213 self.jumps() @@ -1563,7 +1570,7 @@ def component_instance(self): self.state = 219 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==40: + while _la==42: self.state = 216 self.metadata() self.state = 221 @@ -1704,7 +1711,7 @@ def instance_name(self): self.enterOuterAlt(localctx, 2) self.state = 226 _la = self._input.LA(1) - if not(_la==31 or _la==32): + if not(_la==33 or _la==34): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -1809,7 +1816,7 @@ def component_type(self): self.state = 236 self._errHandler.sync(self) token = self._input.LA(1) - if token in [32]: + if token in [34]: localctx = McInstrParser.ComponentTypeCopyContext(self, localctx) self.enterOuterAlt(localctx, 1) self.state = 230 @@ -1821,7 +1828,7 @@ def component_type(self): self.state = 233 self.match(McInstrParser.RightParen) pass - elif token in [177]: + elif token in [179]: localctx = McInstrParser.ComponentTypeIdentifierContext(self, localctx) self.enterOuterAlt(localctx, 2) self.state = 235 @@ -1899,14 +1906,14 @@ def instance_parameters(self): self.state = 247 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==177: + if _la==179: self.state = 239 localctx._instance_parameter = self.instance_parameter() localctx.params.append(localctx._instance_parameter) self.state = 244 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==167: + while _la==169: self.state = 240 self.match(McInstrParser.Comma) self.state = 241 @@ -2420,7 +2427,7 @@ def jumps(self): self.state = 284 self._errHandler.sync(self) _la = self._input.LA(1) - if not (_la==27): + if not (_la==29): break except RecognitionException as re: @@ -2489,7 +2496,7 @@ def jump(self): self.jumpname() self.state = 288 _la = self._input.LA(1) - if not(_la==28 or _la==30): + if not(_la==30 or _la==32): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -2640,7 +2647,7 @@ def jumpname(self): self.state = 305 self._errHandler.sync(self) token = self._input.LA(1) - if token in [20]: + if token in [22]: localctx = McInstrParser.JumpPreviousContext(self, localctx) self.enterOuterAlt(localctx, 1) self.state = 291 @@ -2648,7 +2655,7 @@ def jumpname(self): self.state = 295 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==130: + if _la==132: self.state = 292 self.match(McInstrParser.LeftParen) self.state = 293 @@ -2658,13 +2665,13 @@ def jumpname(self): pass - elif token in [31]: + elif token in [33]: localctx = McInstrParser.JumpMyselfContext(self, localctx) self.enterOuterAlt(localctx, 2) self.state = 297 self.match(McInstrParser.Myself) pass - elif token in [29]: + elif token in [31]: localctx = McInstrParser.JumpNextContext(self, localctx) self.enterOuterAlt(localctx, 3) self.state = 298 @@ -2672,7 +2679,7 @@ def jumpname(self): self.state = 302 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==130: + if _la==132: self.state = 299 self.match(McInstrParser.LeftParen) self.state = 300 @@ -2682,7 +2689,7 @@ def jumpname(self): pass - elif token in [177]: + elif token in [179]: localctx = McInstrParser.JumpIdentifierContext(self, localctx) self.enterOuterAlt(localctx, 4) self.state = 304 @@ -2804,14 +2811,14 @@ def component_ref(self): self.state = 317 self._errHandler.sync(self) token = self._input.LA(1) - if token in [20]: + if token in [22]: self.enterOuterAlt(localctx, 1) self.state = 310 self.match(McInstrParser.Previous) self.state = 314 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==130: + if _la==132: self.state = 311 self.match(McInstrParser.LeftParen) self.state = 312 @@ -2821,7 +2828,7 @@ def component_ref(self): pass - elif token in [177]: + elif token in [179]: self.enterOuterAlt(localctx, 2) self.state = 316 self.match(McInstrParser.Identifier) @@ -2958,23 +2965,23 @@ def reference(self): self.state = 333 self._errHandler.sync(self) token = self._input.LA(1) - if token in [2]: + if token in [4]: self.enterOuterAlt(localctx, 1) self.state = 327 self.match(McInstrParser.Absolute) pass - elif token in [18]: + elif token in [20]: self.enterOuterAlt(localctx, 2) self.state = 328 self.match(McInstrParser.Relative) self.state = 331 self._errHandler.sync(self) token = self._input.LA(1) - if token in [2]: + if token in [4]: self.state = 329 self.match(McInstrParser.Absolute) pass - elif token in [20, 177]: + elif token in [22, 179]: self.state = 330 self.component_ref() pass @@ -3154,7 +3161,7 @@ def declare(self): self.state = 345 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==24: + if _la==26: self.state = 343 self.match(McInstrParser.Extend) self.state = 344 @@ -3334,7 +3341,7 @@ def initialize(self): self.state = 359 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==24: + if _la==26: self.state = 357 self.match(McInstrParser.Extend) self.state = 358 @@ -3461,7 +3468,7 @@ def save(self): self.state = 370 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==24: + if _la==26: self.state = 368 self.match(McInstrParser.Extend) self.state = 369 @@ -3588,7 +3595,7 @@ def finally_(self): self.state = 381 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==24: + if _la==26: self.state = 379 self.match(McInstrParser.Extend) self.state = 380 @@ -3667,7 +3674,7 @@ def metadata(self): self.state = 386 localctx.mime = self._input.LT(1) _la = self._input.LA(1) - if not(_la==50 or _la==177): + if not(_la==52 or _la==179): localctx.mime = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -3675,7 +3682,7 @@ def metadata(self): self.state = 387 localctx.name = self._input.LT(1) _la = self._input.LA(1) - if not(_la==50 or _la==177): + if not(_la==52 or _la==179): localctx.name = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -3738,7 +3745,7 @@ def category(self): self.match(McInstrParser.Category) self.state = 391 _la = self._input.LA(1) - if not(_la==50 or _la==177): + if not(_la==52 or _la==179): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -3815,7 +3822,7 @@ def initializerlist(self): self.state = 399 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==167: + while _la==169: self.state = 395 self.match(McInstrParser.Comma) self.state = 396 @@ -3910,6 +3917,38 @@ def copyFrom(self, ctx:ParserRuleContext): super().copyFrom(ctx) + class ExpressionBinaryModContext(ExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a McInstrParser.ExprContext + super().__init__(parser) + self.left = None # ExprContext + self.right = None # ExprContext + self.copyFrom(ctx) + + def Mod(self): + return self.getToken(McInstrParser.Mod, 0) + def expr(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(McInstrParser.ExprContext) + else: + return self.getTypedRuleContext(McInstrParser.ExprContext,i) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterExpressionBinaryMod" ): + listener.enterExpressionBinaryMod(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitExpressionBinaryMod" ): + listener.exitExpressionBinaryMod(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExpressionBinaryMod" ): + return visitor.visitExpressionBinaryMod(self) + else: + return visitor.visitChildren(self) + + class ExpressionBinaryLessContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McInstrParser.ExprContext @@ -3974,35 +4013,6 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) - class ExpressionGroupingContext(ExprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a McInstrParser.ExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def LeftParen(self): - return self.getToken(McInstrParser.LeftParen, 0) - def expr(self): - return self.getTypedRuleContext(McInstrParser.ExprContext,0) - - def RightParen(self): - return self.getToken(McInstrParser.RightParen, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionGrouping" ): - listener.enterExpressionGrouping(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionGrouping" ): - listener.exitExpressionGrouping(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionGrouping" ): - return visitor.visitExpressionGrouping(self) - else: - return visitor.visitChildren(self) - - class ExpressionBinaryLessEqualContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McInstrParser.ExprContext @@ -4124,16 +4134,14 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) - class ExpressionExponentiationContext(ExprContext): + class ExpressionBinaryRightShiftContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McInstrParser.ExprContext super().__init__(parser) - self.base = None # ExprContext - self.exponent = None # ExprContext + self.left = None # ExprContext + self.right = None # ExprContext self.copyFrom(ctx) - def Caret(self): - return self.getToken(McInstrParser.Caret, 0) def expr(self, i:int=None): if i is None: return self.getTypedRuleContexts(McInstrParser.ExprContext) @@ -4142,264 +4150,287 @@ def expr(self, i:int=None): def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionExponentiation" ): - listener.enterExpressionExponentiation(self) + if hasattr( listener, "enterExpressionBinaryRightShift" ): + listener.enterExpressionBinaryRightShift(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionExponentiation" ): - listener.exitExpressionExponentiation(self) + if hasattr( listener, "exitExpressionBinaryRightShift" ): + listener.exitExpressionBinaryRightShift(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionExponentiation" ): - return visitor.visitExpressionExponentiation(self) + if hasattr( visitor, "visitExpressionBinaryRightShift" ): + return visitor.visitExpressionBinaryRightShift(self) else: return visitor.visitChildren(self) - class ExpressionBinaryGreaterEqualContext(ExprContext): + class ExpressionMyselfContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McInstrParser.ExprContext super().__init__(parser) - self.left = None # ExprContext - self.right = None # ExprContext self.copyFrom(ctx) - def GreaterEqual(self): - return self.getToken(McInstrParser.GreaterEqual, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(McInstrParser.ExprContext) - else: - return self.getTypedRuleContext(McInstrParser.ExprContext,i) - + def Myself(self): + return self.getToken(McInstrParser.Myself, 0) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionBinaryGreaterEqual" ): - listener.enterExpressionBinaryGreaterEqual(self) + if hasattr( listener, "enterExpressionMyself" ): + listener.enterExpressionMyself(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionBinaryGreaterEqual" ): - listener.exitExpressionBinaryGreaterEqual(self) + if hasattr( listener, "exitExpressionMyself" ): + listener.exitExpressionMyself(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionBinaryGreaterEqual" ): - return visitor.visitExpressionBinaryGreaterEqual(self) + if hasattr( visitor, "visitExpressionMyself" ): + return visitor.visitExpressionMyself(self) else: return visitor.visitChildren(self) - class ExpressionZeroContext(ExprContext): + class ExpressionPreviousContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McInstrParser.ExprContext super().__init__(parser) self.copyFrom(ctx) + def Previous(self): + return self.getToken(McInstrParser.Previous, 0) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionZero" ): - listener.enterExpressionZero(self) + if hasattr( listener, "enterExpressionPrevious" ): + listener.enterExpressionPrevious(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionZero" ): - listener.exitExpressionZero(self) + if hasattr( listener, "exitExpressionPrevious" ): + listener.exitExpressionPrevious(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionZero" ): - return visitor.visitExpressionZero(self) + if hasattr( visitor, "visitExpressionPrevious" ): + return visitor.visitExpressionPrevious(self) else: return visitor.visitChildren(self) - class ExpressionMyselfContext(ExprContext): + class ExpressionIdentifierContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McInstrParser.ExprContext super().__init__(parser) self.copyFrom(ctx) - def Myself(self): - return self.getToken(McInstrParser.Myself, 0) + def Identifier(self): + return self.getToken(McInstrParser.Identifier, 0) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionMyself" ): - listener.enterExpressionMyself(self) + if hasattr( listener, "enterExpressionIdentifier" ): + listener.enterExpressionIdentifier(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionMyself" ): - listener.exitExpressionMyself(self) + if hasattr( listener, "exitExpressionIdentifier" ): + listener.exitExpressionIdentifier(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionMyself" ): - return visitor.visitExpressionMyself(self) + if hasattr( visitor, "visitExpressionIdentifier" ): + return visitor.visitExpressionIdentifier(self) else: return visitor.visitChildren(self) - class ExpressionUnaryPMContext(ExprContext): + class ExpressionStructAccessContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McInstrParser.ExprContext super().__init__(parser) self.copyFrom(ctx) + def Identifier(self): + return self.getToken(McInstrParser.Identifier, 0) + def Dot(self): + return self.getToken(McInstrParser.Dot, 0) def expr(self): return self.getTypedRuleContext(McInstrParser.ExprContext,0) - def Plus(self): - return self.getToken(McInstrParser.Plus, 0) - def Minus(self): - return self.getToken(McInstrParser.Minus, 0) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionUnaryPM" ): - listener.enterExpressionUnaryPM(self) + if hasattr( listener, "enterExpressionStructAccess" ): + listener.enterExpressionStructAccess(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionUnaryPM" ): - listener.exitExpressionUnaryPM(self) + if hasattr( listener, "exitExpressionStructAccess" ): + listener.exitExpressionStructAccess(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionUnaryPM" ): - return visitor.visitExpressionUnaryPM(self) + if hasattr( visitor, "visitExpressionStructAccess" ): + return visitor.visitExpressionStructAccess(self) else: return visitor.visitChildren(self) - class ExpressionPreviousContext(ExprContext): + class ExpressionFunctionCallContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McInstrParser.ExprContext super().__init__(parser) + self._expr = None # ExprContext + self.args = list() # of ExprContexts self.copyFrom(ctx) - def Previous(self): - return self.getToken(McInstrParser.Previous, 0) + def Identifier(self): + return self.getToken(McInstrParser.Identifier, 0) + def LeftParen(self): + return self.getToken(McInstrParser.LeftParen, 0) + def RightParen(self): + return self.getToken(McInstrParser.RightParen, 0) + def expr(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(McInstrParser.ExprContext) + else: + return self.getTypedRuleContext(McInstrParser.ExprContext,i) + + def Comma(self, i:int=None): + if i is None: + return self.getTokens(McInstrParser.Comma) + else: + return self.getToken(McInstrParser.Comma, i) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionPrevious" ): - listener.enterExpressionPrevious(self) + if hasattr( listener, "enterExpressionFunctionCall" ): + listener.enterExpressionFunctionCall(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionPrevious" ): - listener.exitExpressionPrevious(self) + if hasattr( listener, "exitExpressionFunctionCall" ): + listener.exitExpressionFunctionCall(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionPrevious" ): - return visitor.visitExpressionPrevious(self) + if hasattr( visitor, "visitExpressionFunctionCall" ): + return visitor.visitExpressionFunctionCall(self) else: return visitor.visitChildren(self) - class ExpressionTrinaryLogicContext(ExprContext): + class ExpressionBinaryMDContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McInstrParser.ExprContext super().__init__(parser) - self.test = None # ExprContext - self.true = None # ExprContext - self.false = None # ExprContext + self.left = None # ExprContext + self.right = None # ExprContext self.copyFrom(ctx) - def Question(self): - return self.getToken(McInstrParser.Question, 0) - def Colon(self): - return self.getToken(McInstrParser.Colon, 0) def expr(self, i:int=None): if i is None: return self.getTypedRuleContexts(McInstrParser.ExprContext) else: return self.getTypedRuleContext(McInstrParser.ExprContext,i) + def Star(self): + return self.getToken(McInstrParser.Star, 0) + def Div(self): + return self.getToken(McInstrParser.Div, 0) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionTrinaryLogic" ): - listener.enterExpressionTrinaryLogic(self) + if hasattr( listener, "enterExpressionBinaryMD" ): + listener.enterExpressionBinaryMD(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionTrinaryLogic" ): - listener.exitExpressionTrinaryLogic(self) + if hasattr( listener, "exitExpressionBinaryMD" ): + listener.exitExpressionBinaryMD(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionTrinaryLogic" ): - return visitor.visitExpressionTrinaryLogic(self) + if hasattr( visitor, "visitExpressionBinaryMD" ): + return visitor.visitExpressionBinaryMD(self) else: return visitor.visitChildren(self) - class ExpressionFloatContext(ExprContext): + class ExpressionStringContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McInstrParser.ExprContext super().__init__(parser) + self._StringLiteral = None # Token + self.args = list() # of Tokens self.copyFrom(ctx) - def FloatingLiteral(self): - return self.getToken(McInstrParser.FloatingLiteral, 0) + def StringLiteral(self, i:int=None): + if i is None: + return self.getTokens(McInstrParser.StringLiteral) + else: + return self.getToken(McInstrParser.StringLiteral, i) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionFloat" ): - listener.enterExpressionFloat(self) + if hasattr( listener, "enterExpressionString" ): + listener.enterExpressionString(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionFloat" ): - listener.exitExpressionFloat(self) + if hasattr( listener, "exitExpressionString" ): + listener.exitExpressionString(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionFloat" ): - return visitor.visitExpressionFloat(self) + if hasattr( visitor, "visitExpressionString" ): + return visitor.visitExpressionString(self) else: return visitor.visitChildren(self) - class ExpressionPointerAccessContext(ExprContext): + class ExpressionGroupingContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McInstrParser.ExprContext super().__init__(parser) self.copyFrom(ctx) - def Identifier(self): - return self.getToken(McInstrParser.Identifier, 0) - def Arrow(self): - return self.getToken(McInstrParser.Arrow, 0) + def LeftParen(self): + return self.getToken(McInstrParser.LeftParen, 0) def expr(self): return self.getTypedRuleContext(McInstrParser.ExprContext,0) + def RightParen(self): + return self.getToken(McInstrParser.RightParen, 0) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionPointerAccess" ): - listener.enterExpressionPointerAccess(self) + if hasattr( listener, "enterExpressionGrouping" ): + listener.enterExpressionGrouping(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionPointerAccess" ): - listener.exitExpressionPointerAccess(self) + if hasattr( listener, "exitExpressionGrouping" ): + listener.exitExpressionGrouping(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionPointerAccess" ): - return visitor.visitExpressionPointerAccess(self) + if hasattr( visitor, "visitExpressionGrouping" ): + return visitor.visitExpressionGrouping(self) else: return visitor.visitChildren(self) - class ExpressionIdentifierContext(ExprContext): + class ExpressionExponentiationContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McInstrParser.ExprContext super().__init__(parser) + self.base = None # ExprContext + self.exponent = None # ExprContext self.copyFrom(ctx) - def Identifier(self): - return self.getToken(McInstrParser.Identifier, 0) + def Caret(self): + return self.getToken(McInstrParser.Caret, 0) + def expr(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(McInstrParser.ExprContext) + else: + return self.getTypedRuleContext(McInstrParser.ExprContext,i) + def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionIdentifier" ): - listener.enterExpressionIdentifier(self) + if hasattr( listener, "enterExpressionExponentiation" ): + listener.enterExpressionExponentiation(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionIdentifier" ): - listener.exitExpressionIdentifier(self) + if hasattr( listener, "exitExpressionExponentiation" ): + listener.exitExpressionExponentiation(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionIdentifier" ): - return visitor.visitExpressionIdentifier(self) + if hasattr( visitor, "visitExpressionExponentiation" ): + return visitor.visitExpressionExponentiation(self) else: return visitor.visitChildren(self) - class ExpressionBinaryEqualContext(ExprContext): + class ExpressionBinaryLeftShiftContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McInstrParser.ExprContext super().__init__(parser) @@ -4407,8 +4438,6 @@ def __init__(self, parser, ctx:ParserRuleContext): # actually a McInstrParser.Ex self.right = None # ExprContext self.copyFrom(ctx) - def Equal(self): - return self.getToken(McInstrParser.Equal, 0) def expr(self, i:int=None): if i is None: return self.getTypedRuleContexts(McInstrParser.ExprContext) @@ -4417,21 +4446,21 @@ def expr(self, i:int=None): def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionBinaryEqual" ): - listener.enterExpressionBinaryEqual(self) + if hasattr( listener, "enterExpressionBinaryLeftShift" ): + listener.enterExpressionBinaryLeftShift(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionBinaryEqual" ): - listener.exitExpressionBinaryEqual(self) + if hasattr( listener, "exitExpressionBinaryLeftShift" ): + listener.exitExpressionBinaryLeftShift(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionBinaryEqual" ): - return visitor.visitExpressionBinaryEqual(self) + if hasattr( visitor, "visitExpressionBinaryLeftShift" ): + return visitor.visitExpressionBinaryLeftShift(self) else: return visitor.visitChildren(self) - class ExpressionBinaryPMContext(ExprContext): + class ExpressionBinaryGreaterEqualContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McInstrParser.ExprContext super().__init__(parser) @@ -4439,60 +4468,141 @@ def __init__(self, parser, ctx:ParserRuleContext): # actually a McInstrParser.Ex self.right = None # ExprContext self.copyFrom(ctx) + def GreaterEqual(self): + return self.getToken(McInstrParser.GreaterEqual, 0) def expr(self, i:int=None): if i is None: return self.getTypedRuleContexts(McInstrParser.ExprContext) else: return self.getTypedRuleContext(McInstrParser.ExprContext,i) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterExpressionBinaryGreaterEqual" ): + listener.enterExpressionBinaryGreaterEqual(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitExpressionBinaryGreaterEqual" ): + listener.exitExpressionBinaryGreaterEqual(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExpressionBinaryGreaterEqual" ): + return visitor.visitExpressionBinaryGreaterEqual(self) + else: + return visitor.visitChildren(self) + + + class ExpressionZeroContext(ExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a McInstrParser.ExprContext + super().__init__(parser) + self.copyFrom(ctx) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterExpressionZero" ): + listener.enterExpressionZero(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitExpressionZero" ): + listener.exitExpressionZero(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExpressionZero" ): + return visitor.visitExpressionZero(self) + else: + return visitor.visitChildren(self) + + + class ExpressionUnaryPMContext(ExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a McInstrParser.ExprContext + super().__init__(parser) + self.copyFrom(ctx) + + def expr(self): + return self.getTypedRuleContext(McInstrParser.ExprContext,0) + def Plus(self): return self.getToken(McInstrParser.Plus, 0) def Minus(self): return self.getToken(McInstrParser.Minus, 0) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionBinaryPM" ): - listener.enterExpressionBinaryPM(self) + if hasattr( listener, "enterExpressionUnaryPM" ): + listener.enterExpressionUnaryPM(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionBinaryPM" ): - listener.exitExpressionBinaryPM(self) + if hasattr( listener, "exitExpressionUnaryPM" ): + listener.exitExpressionUnaryPM(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionBinaryPM" ): - return visitor.visitExpressionBinaryPM(self) + if hasattr( visitor, "visitExpressionUnaryPM" ): + return visitor.visitExpressionUnaryPM(self) else: return visitor.visitChildren(self) - class ExpressionUnaryLogicContext(ExprContext): + class ExpressionTrinaryLogicContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McInstrParser.ExprContext super().__init__(parser) + self.test = None # ExprContext + self.true = None # ExprContext + self.false = None # ExprContext self.copyFrom(ctx) - def Not(self): - return self.getToken(McInstrParser.Not, 0) - def expr(self): - return self.getTypedRuleContext(McInstrParser.ExprContext,0) + def Question(self): + return self.getToken(McInstrParser.Question, 0) + def Colon(self): + return self.getToken(McInstrParser.Colon, 0) + def expr(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(McInstrParser.ExprContext) + else: + return self.getTypedRuleContext(McInstrParser.ExprContext,i) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionUnaryLogic" ): - listener.enterExpressionUnaryLogic(self) + if hasattr( listener, "enterExpressionTrinaryLogic" ): + listener.enterExpressionTrinaryLogic(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionUnaryLogic" ): - listener.exitExpressionUnaryLogic(self) + if hasattr( listener, "exitExpressionTrinaryLogic" ): + listener.exitExpressionTrinaryLogic(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionUnaryLogic" ): - return visitor.visitExpressionUnaryLogic(self) + if hasattr( visitor, "visitExpressionTrinaryLogic" ): + return visitor.visitExpressionTrinaryLogic(self) else: return visitor.visitChildren(self) - class ExpressionStructAccessContext(ExprContext): + class ExpressionFloatContext(ExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a McInstrParser.ExprContext + super().__init__(parser) + self.copyFrom(ctx) + + def FloatingLiteral(self): + return self.getToken(McInstrParser.FloatingLiteral, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterExpressionFloat" ): + listener.enterExpressionFloat(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitExpressionFloat" ): + listener.exitExpressionFloat(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExpressionFloat" ): + return visitor.visitExpressionFloat(self) + else: + return visitor.visitChildren(self) + + + class ExpressionPointerAccessContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McInstrParser.ExprContext super().__init__(parser) @@ -4500,69 +4610,60 @@ def __init__(self, parser, ctx:ParserRuleContext): # actually a McInstrParser.Ex def Identifier(self): return self.getToken(McInstrParser.Identifier, 0) - def Dot(self): - return self.getToken(McInstrParser.Dot, 0) + def Arrow(self): + return self.getToken(McInstrParser.Arrow, 0) def expr(self): return self.getTypedRuleContext(McInstrParser.ExprContext,0) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionStructAccess" ): - listener.enterExpressionStructAccess(self) + if hasattr( listener, "enterExpressionPointerAccess" ): + listener.enterExpressionPointerAccess(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionStructAccess" ): - listener.exitExpressionStructAccess(self) + if hasattr( listener, "exitExpressionPointerAccess" ): + listener.exitExpressionPointerAccess(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionStructAccess" ): - return visitor.visitExpressionStructAccess(self) + if hasattr( visitor, "visitExpressionPointerAccess" ): + return visitor.visitExpressionPointerAccess(self) else: return visitor.visitChildren(self) - class ExpressionFunctionCallContext(ExprContext): + class ExpressionBinaryEqualContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McInstrParser.ExprContext super().__init__(parser) - self._expr = None # ExprContext - self.args = list() # of ExprContexts + self.left = None # ExprContext + self.right = None # ExprContext self.copyFrom(ctx) - def Identifier(self): - return self.getToken(McInstrParser.Identifier, 0) - def LeftParen(self): - return self.getToken(McInstrParser.LeftParen, 0) - def RightParen(self): - return self.getToken(McInstrParser.RightParen, 0) + def Equal(self): + return self.getToken(McInstrParser.Equal, 0) def expr(self, i:int=None): if i is None: return self.getTypedRuleContexts(McInstrParser.ExprContext) else: return self.getTypedRuleContext(McInstrParser.ExprContext,i) - def Comma(self, i:int=None): - if i is None: - return self.getTokens(McInstrParser.Comma) - else: - return self.getToken(McInstrParser.Comma, i) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionFunctionCall" ): - listener.enterExpressionFunctionCall(self) + if hasattr( listener, "enterExpressionBinaryEqual" ): + listener.enterExpressionBinaryEqual(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionFunctionCall" ): - listener.exitExpressionFunctionCall(self) + if hasattr( listener, "exitExpressionBinaryEqual" ): + listener.exitExpressionBinaryEqual(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionFunctionCall" ): - return visitor.visitExpressionFunctionCall(self) + if hasattr( visitor, "visitExpressionBinaryEqual" ): + return visitor.visitExpressionBinaryEqual(self) else: return visitor.visitChildren(self) - class ExpressionBinaryMDContext(ExprContext): + class ExpressionBinaryPMContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McInstrParser.ExprContext super().__init__(parser) @@ -4576,51 +4677,49 @@ def expr(self, i:int=None): else: return self.getTypedRuleContext(McInstrParser.ExprContext,i) - def Star(self): - return self.getToken(McInstrParser.Star, 0) - def Div(self): - return self.getToken(McInstrParser.Div, 0) + def Plus(self): + return self.getToken(McInstrParser.Plus, 0) + def Minus(self): + return self.getToken(McInstrParser.Minus, 0) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionBinaryMD" ): - listener.enterExpressionBinaryMD(self) + if hasattr( listener, "enterExpressionBinaryPM" ): + listener.enterExpressionBinaryPM(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionBinaryMD" ): - listener.exitExpressionBinaryMD(self) + if hasattr( listener, "exitExpressionBinaryPM" ): + listener.exitExpressionBinaryPM(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionBinaryMD" ): - return visitor.visitExpressionBinaryMD(self) + if hasattr( visitor, "visitExpressionBinaryPM" ): + return visitor.visitExpressionBinaryPM(self) else: return visitor.visitChildren(self) - class ExpressionStringContext(ExprContext): + class ExpressionUnaryLogicContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a McInstrParser.ExprContext super().__init__(parser) - self._StringLiteral = None # Token - self.args = list() # of Tokens self.copyFrom(ctx) - def StringLiteral(self, i:int=None): - if i is None: - return self.getTokens(McInstrParser.StringLiteral) - else: - return self.getToken(McInstrParser.StringLiteral, i) + def Not(self): + return self.getToken(McInstrParser.Not, 0) + def expr(self): + return self.getTypedRuleContext(McInstrParser.ExprContext,0) + def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionString" ): - listener.enterExpressionString(self) + if hasattr( listener, "enterExpressionUnaryLogic" ): + listener.enterExpressionUnaryLogic(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionString" ): - listener.exitExpressionString(self) + if hasattr( listener, "exitExpressionUnaryLogic" ): + listener.exitExpressionUnaryLogic(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionString" ): - return visitor.visitExpressionString(self) + if hasattr( visitor, "visitExpressionUnaryLogic" ): + return visitor.visitExpressionUnaryLogic(self) else: return visitor.visitChildren(self) @@ -4691,7 +4790,7 @@ def expr(self, _p:int=0): self.state = 419 self.match(McInstrParser.Arrow) self.state = 420 - self.expr(20) + self.expr(23) pass elif la_ == 6: @@ -4703,7 +4802,7 @@ def expr(self, _p:int=0): self.state = 422 self.match(McInstrParser.Dot) self.state = 423 - self.expr(19) + self.expr(22) pass elif la_ == 7: @@ -4734,7 +4833,7 @@ def expr(self, _p:int=0): self.state = 436 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==167: + while _la==169: self.state = 432 self.match(McInstrParser.Comma) self.state = 433 @@ -4766,13 +4865,13 @@ def expr(self, _p:int=0): _prevctx = localctx self.state = 445 _la = self._input.LA(1) - if not(_la==136 or _la==137): + if not(_la==138 or _la==139): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() self.state = 446 - self.expr(15) + self.expr(18) pass elif la_ == 11: @@ -4811,7 +4910,7 @@ def expr(self, _p:int=0): self._ctx.stop = self._input.LT(-1) - self.state = 489 + self.state = 498 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,61,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: @@ -4819,7 +4918,7 @@ def expr(self, _p:int=0): if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 487 + self.state = 496 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,60,self._ctx) if la_ == 1: @@ -4827,13 +4926,13 @@ def expr(self, _p:int=0): localctx.base = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 454 - if not self.precpred(self._ctx, 14): + if not self.precpred(self._ctx, 17): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 17)") self.state = 455 self.match(McInstrParser.Caret) self.state = 456 - localctx.exponent = self.expr(14) + localctx.exponent = self.expr(17) pass elif la_ == 2: @@ -4841,18 +4940,18 @@ def expr(self, _p:int=0): localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 457 - if not self.precpred(self._ctx, 13): + if not self.precpred(self._ctx, 16): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 16)") self.state = 458 _la = self._input.LA(1) - if not(_la==138 or _la==139): + if not(_la==140 or _la==141): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() self.state = 459 - localctx.right = self.expr(14) + localctx.right = self.expr(17) pass elif la_ == 3: @@ -4860,129 +4959,171 @@ def expr(self, _p:int=0): localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 460 - if not self.precpred(self._ctx, 12): + if not self.precpred(self._ctx, 15): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 15)") self.state = 461 _la = self._input.LA(1) - if not(_la==136 or _la==137): + if not(_la==138 or _la==139): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() self.state = 462 - localctx.right = self.expr(13) + localctx.right = self.expr(16) pass elif la_ == 4: - localctx = McInstrParser.ExpressionBinaryEqualContext(self, McInstrParser.ExprContext(self, _parentctx, _parentState)) + localctx = McInstrParser.ExpressionBinaryModContext(self, McInstrParser.ExprContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 463 + if not self.precpred(self._ctx, 14): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") + self.state = 464 + self.match(McInstrParser.Mod) + self.state = 465 + localctx.right = self.expr(15) + pass + + elif la_ == 5: + localctx = McInstrParser.ExpressionBinaryRightShiftContext(self, McInstrParser.ExprContext(self, _parentctx, _parentState)) + localctx.left = _prevctx + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 466 + if not self.precpred(self._ctx, 13): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") + self.state = 467 + self.match(McInstrParser.T__1) + self.state = 468 + localctx.right = self.expr(14) + pass + + elif la_ == 6: + localctx = McInstrParser.ExpressionBinaryLeftShiftContext(self, McInstrParser.ExprContext(self, _parentctx, _parentState)) + localctx.left = _prevctx + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 469 + if not self.precpred(self._ctx, 12): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") + self.state = 470 + self.match(McInstrParser.T__2) + self.state = 471 + localctx.right = self.expr(13) + pass + + elif la_ == 7: + localctx = McInstrParser.ExpressionBinaryEqualContext(self, McInstrParser.ExprContext(self, _parentctx, _parentState)) + localctx.left = _prevctx + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 472 if not self.precpred(self._ctx, 10): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") - self.state = 464 + self.state = 473 self.match(McInstrParser.Equal) - self.state = 465 + self.state = 474 localctx.right = self.expr(11) pass - elif la_ == 5: + elif la_ == 8: localctx = McInstrParser.ExpressionBinaryLessEqualContext(self, McInstrParser.ExprContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 466 + self.state = 475 if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") - self.state = 467 + self.state = 476 self.match(McInstrParser.LessEqual) - self.state = 468 + self.state = 477 localctx.right = self.expr(10) pass - elif la_ == 6: + elif la_ == 9: localctx = McInstrParser.ExpressionBinaryGreaterEqualContext(self, McInstrParser.ExprContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 469 + self.state = 478 if not self.precpred(self._ctx, 8): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") - self.state = 470 + self.state = 479 self.match(McInstrParser.GreaterEqual) - self.state = 471 + self.state = 480 localctx.right = self.expr(9) pass - elif la_ == 7: + elif la_ == 10: localctx = McInstrParser.ExpressionBinaryLessContext(self, McInstrParser.ExprContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 472 + self.state = 481 if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") - self.state = 473 + self.state = 482 self.match(McInstrParser.Less) - self.state = 474 + self.state = 483 localctx.right = self.expr(8) pass - elif la_ == 8: + elif la_ == 11: localctx = McInstrParser.ExpressionBinaryGreaterContext(self, McInstrParser.ExprContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 475 + self.state = 484 if not self.precpred(self._ctx, 6): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") - self.state = 476 + self.state = 485 self.match(McInstrParser.Greater) - self.state = 477 + self.state = 486 localctx.right = self.expr(7) pass - elif la_ == 9: + elif la_ == 12: localctx = McInstrParser.ExpressionBinaryLogicContext(self, McInstrParser.ExprContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 478 + self.state = 487 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 479 + self.state = 488 _la = self._input.LA(1) - if not(_la==163 or _la==164): + if not(_la==165 or _la==166): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 480 + self.state = 489 localctx.right = self.expr(5) pass - elif la_ == 10: + elif la_ == 13: localctx = McInstrParser.ExpressionTrinaryLogicContext(self, McInstrParser.ExprContext(self, _parentctx, _parentState)) localctx.test = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 481 + self.state = 490 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 482 + self.state = 491 self.match(McInstrParser.Question) - self.state = 483 + self.state = 492 localctx.true = self.expr(0) - self.state = 484 + self.state = 493 self.match(McInstrParser.Colon) - self.state = 485 + self.state = 494 localctx.false = self.expr(4) pass - self.state = 491 + self.state = 500 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,61,self._ctx) @@ -5034,9 +5175,9 @@ def shell(self): self.enterRule(localctx, 72, self.RULE_shell) try: self.enterOuterAlt(localctx, 1) - self.state = 492 + self.state = 501 self.match(McInstrParser.Shell) - self.state = 493 + self.state = 502 self.match(McInstrParser.StringLiteral) except RecognitionException as re: localctx.exception = re @@ -5124,26 +5265,26 @@ def search(self): localctx = McInstrParser.SearchContext(self, self._ctx, self.state) self.enterRule(localctx, 74, self.RULE_search) try: - self.state = 500 + self.state = 509 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,62,self._ctx) if la_ == 1: localctx = McInstrParser.SearchPathContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 495 + self.state = 504 self.match(McInstrParser.Search) - self.state = 496 + self.state = 505 self.match(McInstrParser.StringLiteral) pass elif la_ == 2: localctx = McInstrParser.SearchShellContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 497 + self.state = 506 self.match(McInstrParser.Search) - self.state = 498 + self.state = 507 self.match(McInstrParser.Shell) - self.state = 499 + self.state = 508 self.match(McInstrParser.StringLiteral) pass @@ -5193,7 +5334,7 @@ def unparsed_block(self): self.enterRule(localctx, 76, self.RULE_unparsed_block) try: self.enterOuterAlt(localctx, 1) - self.state = 502 + self.state = 511 self.match(McInstrParser.UnparsedBlock) except RecognitionException as re: localctx.exception = re @@ -5217,42 +5358,54 @@ def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): def expr_sempred(self, localctx:ExprContext, predIndex:int): if predIndex == 0: - return self.precpred(self._ctx, 14) + return self.precpred(self._ctx, 17) if predIndex == 1: - return self.precpred(self._ctx, 13) + return self.precpred(self._ctx, 16) if predIndex == 2: - return self.precpred(self._ctx, 12) + return self.precpred(self._ctx, 15) if predIndex == 3: - return self.precpred(self._ctx, 10) + return self.precpred(self._ctx, 14) if predIndex == 4: - return self.precpred(self._ctx, 9) + return self.precpred(self._ctx, 13) if predIndex == 5: - return self.precpred(self._ctx, 8) + return self.precpred(self._ctx, 12) if predIndex == 6: - return self.precpred(self._ctx, 7) + return self.precpred(self._ctx, 10) if predIndex == 7: - return self.precpred(self._ctx, 6) + return self.precpred(self._ctx, 9) if predIndex == 8: - return self.precpred(self._ctx, 4) + return self.precpred(self._ctx, 8) if predIndex == 9: + return self.precpred(self._ctx, 7) + + + if predIndex == 10: + return self.precpred(self._ctx, 6) + + + if predIndex == 11: + return self.precpred(self._ctx, 4) + + + if predIndex == 12: return self.precpred(self._ctx, 3) diff --git a/mccode_antlr/grammar/McInstrVisitor.py b/mccode_antlr/grammar/McInstrVisitor.py index c9558aa..657d6c8 100644 --- a/mccode_antlr/grammar/McInstrVisitor.py +++ b/mccode_antlr/grammar/McInstrVisitor.py @@ -1,4 +1,4 @@ -# Generated from /home/g/Code/mccode_antlr-antlr/mccode_antlr/grammar/McInstr.g4 by ANTLR 4.13.1 +# Generated from /home/gst/PycharmProjects/mccode4/mccode_antlr/grammar/McInstr.g4 by ANTLR 4.13.1 from antlr4 import * if "." in __name__: from .McInstrParser import McInstrParser @@ -254,6 +254,11 @@ def visitAssignment(self, ctx:McInstrParser.AssignmentContext): return self.visitChildren(ctx) + # Visit a parse tree produced by McInstrParser#ExpressionBinaryMod. + def visitExpressionBinaryMod(self, ctx:McInstrParser.ExpressionBinaryModContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by McInstrParser#ExpressionBinaryLess. def visitExpressionBinaryLess(self, ctx:McInstrParser.ExpressionBinaryLessContext): return self.visitChildren(ctx) @@ -264,11 +269,6 @@ def visitExpressionBinaryGreater(self, ctx:McInstrParser.ExpressionBinaryGreater return self.visitChildren(ctx) - # Visit a parse tree produced by McInstrParser#ExpressionGrouping. - def visitExpressionGrouping(self, ctx:McInstrParser.ExpressionGroupingContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by McInstrParser#ExpressionBinaryLessEqual. def visitExpressionBinaryLessEqual(self, ctx:McInstrParser.ExpressionBinaryLessEqualContext): return self.visitChildren(ctx) @@ -289,88 +289,103 @@ def visitExpressionInteger(self, ctx:McInstrParser.ExpressionIntegerContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McInstrParser#ExpressionExponentiation. - def visitExpressionExponentiation(self, ctx:McInstrParser.ExpressionExponentiationContext): + # Visit a parse tree produced by McInstrParser#ExpressionBinaryRightShift. + def visitExpressionBinaryRightShift(self, ctx:McInstrParser.ExpressionBinaryRightShiftContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McInstrParser#ExpressionBinaryGreaterEqual. - def visitExpressionBinaryGreaterEqual(self, ctx:McInstrParser.ExpressionBinaryGreaterEqualContext): + # Visit a parse tree produced by McInstrParser#ExpressionMyself. + def visitExpressionMyself(self, ctx:McInstrParser.ExpressionMyselfContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McInstrParser#ExpressionZero. - def visitExpressionZero(self, ctx:McInstrParser.ExpressionZeroContext): + # Visit a parse tree produced by McInstrParser#ExpressionPrevious. + def visitExpressionPrevious(self, ctx:McInstrParser.ExpressionPreviousContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McInstrParser#ExpressionMyself. - def visitExpressionMyself(self, ctx:McInstrParser.ExpressionMyselfContext): + # Visit a parse tree produced by McInstrParser#ExpressionIdentifier. + def visitExpressionIdentifier(self, ctx:McInstrParser.ExpressionIdentifierContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McInstrParser#ExpressionUnaryPM. - def visitExpressionUnaryPM(self, ctx:McInstrParser.ExpressionUnaryPMContext): + # Visit a parse tree produced by McInstrParser#ExpressionStructAccess. + def visitExpressionStructAccess(self, ctx:McInstrParser.ExpressionStructAccessContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McInstrParser#ExpressionPrevious. - def visitExpressionPrevious(self, ctx:McInstrParser.ExpressionPreviousContext): + # Visit a parse tree produced by McInstrParser#ExpressionFunctionCall. + def visitExpressionFunctionCall(self, ctx:McInstrParser.ExpressionFunctionCallContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McInstrParser#ExpressionTrinaryLogic. - def visitExpressionTrinaryLogic(self, ctx:McInstrParser.ExpressionTrinaryLogicContext): + # Visit a parse tree produced by McInstrParser#ExpressionBinaryMD. + def visitExpressionBinaryMD(self, ctx:McInstrParser.ExpressionBinaryMDContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McInstrParser#ExpressionFloat. - def visitExpressionFloat(self, ctx:McInstrParser.ExpressionFloatContext): + # Visit a parse tree produced by McInstrParser#ExpressionString. + def visitExpressionString(self, ctx:McInstrParser.ExpressionStringContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McInstrParser#ExpressionPointerAccess. - def visitExpressionPointerAccess(self, ctx:McInstrParser.ExpressionPointerAccessContext): + # Visit a parse tree produced by McInstrParser#ExpressionGrouping. + def visitExpressionGrouping(self, ctx:McInstrParser.ExpressionGroupingContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McInstrParser#ExpressionIdentifier. - def visitExpressionIdentifier(self, ctx:McInstrParser.ExpressionIdentifierContext): + # Visit a parse tree produced by McInstrParser#ExpressionExponentiation. + def visitExpressionExponentiation(self, ctx:McInstrParser.ExpressionExponentiationContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McInstrParser#ExpressionBinaryEqual. - def visitExpressionBinaryEqual(self, ctx:McInstrParser.ExpressionBinaryEqualContext): + # Visit a parse tree produced by McInstrParser#ExpressionBinaryLeftShift. + def visitExpressionBinaryLeftShift(self, ctx:McInstrParser.ExpressionBinaryLeftShiftContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McInstrParser#ExpressionBinaryPM. - def visitExpressionBinaryPM(self, ctx:McInstrParser.ExpressionBinaryPMContext): + # Visit a parse tree produced by McInstrParser#ExpressionBinaryGreaterEqual. + def visitExpressionBinaryGreaterEqual(self, ctx:McInstrParser.ExpressionBinaryGreaterEqualContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McInstrParser#ExpressionUnaryLogic. - def visitExpressionUnaryLogic(self, ctx:McInstrParser.ExpressionUnaryLogicContext): + # Visit a parse tree produced by McInstrParser#ExpressionZero. + def visitExpressionZero(self, ctx:McInstrParser.ExpressionZeroContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McInstrParser#ExpressionStructAccess. - def visitExpressionStructAccess(self, ctx:McInstrParser.ExpressionStructAccessContext): + # Visit a parse tree produced by McInstrParser#ExpressionUnaryPM. + def visitExpressionUnaryPM(self, ctx:McInstrParser.ExpressionUnaryPMContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McInstrParser#ExpressionFunctionCall. - def visitExpressionFunctionCall(self, ctx:McInstrParser.ExpressionFunctionCallContext): + # Visit a parse tree produced by McInstrParser#ExpressionTrinaryLogic. + def visitExpressionTrinaryLogic(self, ctx:McInstrParser.ExpressionTrinaryLogicContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McInstrParser#ExpressionBinaryMD. - def visitExpressionBinaryMD(self, ctx:McInstrParser.ExpressionBinaryMDContext): + # Visit a parse tree produced by McInstrParser#ExpressionFloat. + def visitExpressionFloat(self, ctx:McInstrParser.ExpressionFloatContext): return self.visitChildren(ctx) - # Visit a parse tree produced by McInstrParser#ExpressionString. - def visitExpressionString(self, ctx:McInstrParser.ExpressionStringContext): + # Visit a parse tree produced by McInstrParser#ExpressionPointerAccess. + def visitExpressionPointerAccess(self, ctx:McInstrParser.ExpressionPointerAccessContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by McInstrParser#ExpressionBinaryEqual. + def visitExpressionBinaryEqual(self, ctx:McInstrParser.ExpressionBinaryEqualContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by McInstrParser#ExpressionBinaryPM. + def visitExpressionBinaryPM(self, ctx:McInstrParser.ExpressionBinaryPMContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by McInstrParser#ExpressionUnaryLogic. + def visitExpressionUnaryLogic(self, ctx:McInstrParser.ExpressionUnaryLogicContext): return self.visitChildren(ctx) diff --git a/mccode_antlr/instr/visitor.py b/mccode_antlr/instr/visitor.py index 10f5f3d..ffd7972 100644 --- a/mccode_antlr/instr/visitor.py +++ b/mccode_antlr/instr/visitor.py @@ -425,6 +425,21 @@ def visitExpressionBinaryMD(self, ctx: McInstrParser.ExpressionBinaryMDContext): left, right = self.visit(ctx.left), self.visit(ctx.right) return left * right if ctx.Div() is None else left / right + def visitExpressionBinaryMod(self, ctx: McInstrParser.ExpressionBinaryModContext): + from ..common import BinaryOp + left, right = self.visit(ctx.left), self.visit(ctx.right) + return Expr(BinaryOp('%', left, right)) + + def visitExpressionBinaryLeftShift(self, ctx: McInstrParser.ExpressionBinaryLeftShiftContext): + from ..common import BinaryOp + left, right = self.visit(ctx.left), self.visit(ctx.right) + return Expr(BinaryOp('<<', left, right)) + + def visitExpressionBinaryRightShift(self, ctx: McInstrParser.ExpressionBinaryRightShiftContext): + from ..common import BinaryOp + left, right = self.visit(ctx.left), self.visit(ctx.right) + return Expr(BinaryOp('>>', left, right)) + def visitInitializerlist(self, ctx: McInstrParser.InitializerlistContext): from ..common import Value, ObjectType, ShapeType values = [self.visit(x).expr[0].value for x in ctx.values] diff --git a/mccode_antlr/translators/c_header.py b/mccode_antlr/translators/c_header.py index 74d3174..034f77d 100644 --- a/mccode_antlr/translators/c_header.py +++ b/mccode_antlr/translators/c_header.py @@ -3,7 +3,7 @@ def header_pre_runtime(is_mcstas, source, runtime: dict, config: dict, typedefs: from mccode_antlr import version def jump_line(instance, jump): - return f'long Jump_{instance.name}_{jump}; /* the JUMP connection _ */' + return f'long Jump_{instance.name}_{jump.target}; /* the JUMP connection _ */' jump_string = '\n'.join([jump_line(i, j) for i in source.components for j in i.jump if j.iterate]) diff --git a/mccode_antlr/translators/c_raytrace.py b/mccode_antlr/translators/c_raytrace.py index 0c85d89..491ae1f 100644 --- a/mccode_antlr/translators/c_raytrace.py +++ b/mccode_antlr/translators/c_raytrace.py @@ -37,13 +37,13 @@ def cogen_raytrace(source, ok_to_skip): for index, comp in enumerate(source.components): if comp.split is not None: # split is a Value, containing a number or expression indicating *how many* split particles to produce - print(f'-> SPLIT {comp.split} at component {comp.name}') + print(f'-> SPLIT {comp.split:p} at component {comp.name}') lines.extend([ '#ifndef NOSPLIT', f' /* start SPLIT at {comp.name} */', ' if (!ABSORBED) {', f' _class_particle Split_{comp.name}_particle = *_particle;', - f' int SplitS_{comp.name} = {comp.split};', + f' int SplitS_{comp.name} = {comp.split:p};', f' for (int SplitN_{comp.name}=0; SplitN_{comp.name} < SplitS_{comp.name}; SplitN_{comp.name}++) {{', ' randstate_t randbackup = *_particle->randstate;', f' *_particle=Split_{comp.name}_particle;', @@ -96,8 +96,8 @@ def cogen_raytrace(source, ok_to_skip): for jump in comp.jump: if jump.iterate: lines.extend([ - f' if (++_particle->_logic.Jump_{comp.name}_{jump.target} < {jump.condition}) {{ /* test for iteration */', - f' _particle->_index = {jump.absolute_target - 1};', + f' if (++_particle->_logic.Jump_{comp.name}_{jump.target} < {jump.condition:p}) {{ /* test for iteration */', + f' _particle->_index = {jump.absolute_target};', # NO -1 despite to ++ below, 0-based target ' _particle->flag_nocoordschange=1; /* pass coordinate transformations when jumping */', ' } else {', f' _particle->_logic.Jump_{comp.name}_{jump.target} = 0; /* reset Jump top and go forward */', @@ -105,8 +105,8 @@ def cogen_raytrace(source, ok_to_skip): ]) else: lines.extend([ - f' if ({jump.condition}) {{/* conditional JUMP to {jump.target} */', - f' _particle->_index = {jump.absolute_target - 1};', + f' if ({jump.condition:p}) {{/* conditional JUMP to {jump.target} */', + f' _particle->_index = {jump.absolute_target};', # target is 0-based, _index 1; OK ' _particle->flag_nocoordschange=1; /* pass coordinate transformations when jumping */', ' }' ]) @@ -345,7 +345,7 @@ def cogen_funnel(source, ok_to_skip): lines.extend([ f' // {comp.name}', - f' if (!ABSORBED && _particle->index == {index}) {{', + f' if (!ABSORBED && _particle->_index == {index+1}) {{', ]) if not ok_to_skip[index]: lines.extend([ diff --git a/test/compiled.py b/test/compiled.py new file mode 100644 index 0000000..a360b9c --- /dev/null +++ b/test/compiled.py @@ -0,0 +1,91 @@ +from __future__ import annotations + + +def once(fun): + + def wrapper(*args, **kwargs): + if wrapper.result is None: + wrapper.result = fun(*args, **kwargs) + return wrapper.result + + wrapper.result = None + return wrapper + + +@once +def check_for_mccode_antlr_compiler(which: str) -> bool: + import subprocess + from zenlog import log + from mccode_antlr.config import config + cc = config + for key in which.split('/'): + cc = cc[key] + cc = cc.get(str) + + try: + subprocess.run([cc, '--version'], check=True) + return True + except FileNotFoundError: + log.info(f'Expected compiler {cc} not found.') + log.info('Provide alternate C compiler via MCCODE_ANTLR_CC environment variable') + return False + + +def compiled(method, compiler: str | None = None): + if compiler is None: + # Basic compiled instruments only need the 'cc' compiler specified in the config file + compiler = 'cc' + + def wrapper(*args, **kwargs): + if check_for_mccode_antlr_compiler(compiler): + method(*args, **kwargs) + + return wrapper + + +def gpu(method): + # GPU compiled instruments need the specific OpenACC compiler + return compiled(method, 'acc') + + +def mpi(method): + # MPI compiled instruments need the specified compiler + return compiled(method, 'mpi/cc') + + +def compile_and_run(instr, parameters, run=True, dump_source=True, + target: dict | None = None, config: dict | None = None): + from mccode_antlr.compiler.c import compile_instrument, CBinaryTarget, run_compiled_instrument + from mccode_antlr.translators.target import MCSTAS_GENERATOR + from mccode_antlr.loader import read_mccode_dat + from mccode_antlr.config import config as module_config + from tempfile import TemporaryDirectory + from os import R_OK, access + from pathlib import Path + from zenlog import log + + def_target = CBinaryTarget(mpi=False, acc=False, count=1, nexus=False) + def_config = dict(default_main=True, enable_trace=False, portable=False, include_runtime=True, + embed_instrument_file=False, verbose=False) + def_config.update(config or {}) + def_target.update(target or {}) + + with TemporaryDirectory() as directory: + try: + compile_instrument(instr, def_target, directory, + generator=MCSTAS_GENERATOR, config=def_config, dump_source=dump_source) + except RuntimeError as e: + log.error(f'Failed to compile instrument: {e}') + raise e + binary = Path(directory).joinpath(f'{instr.name}{module_config["ext"].get(str)}') + + if not binary.exists() or not binary.is_file() or not access(binary, R_OK): + raise FileNotFoundError(f"No executable binary, {binary}, produced") + + if run: + result = run_compiled_instrument(binary, def_target, f"--dir {directory}/instr {parameters}", + capture=True) + sim_files = list(Path(directory).glob('**/*.dat')) + dats = {file.stem: read_mccode_dat(file) for file in sim_files} + return result, dats + return None, None diff --git a/test/test_c_runtime.py b/test/test_c_runtime.py new file mode 100644 index 0000000..5d90afd --- /dev/null +++ b/test/test_c_runtime.py @@ -0,0 +1,137 @@ +import unittest +from textwrap import dedent +from mccode_antlr.loader import parse_mcstas_instr +from .compiled import compiled, compile_and_run + + +class CRuntimeTestCase(unittest.TestCase): + + @compiled + def test_component_traces_visited(self): + contents = dedent("""\ + DEFINE INSTRUMENT test_component_traces_visited() + TRACE + COMPONENT a = Arm() AT (0, 0, 0) ABSOLUTE EXTEND %{printf("visited a\\n");%} + COMPONENT b = Arm() AT (0, 0, 1) ABSOLUTE EXTEND %{printf("visited b\\n");%} + END + """) + # + instr = parse_mcstas_instr(contents) + # + # The FUNNEL define is only followed if OpenACC is enabled :/ + # And real OpenACC can only be enabled if we have a GPU :( + # But since we don't actually need ACC, we can force use of the normal compiler instead + from mccode_antlr.config import config + config['acc'] = config['cc'].get(str) + config['flags']['acc'] = config['flags']['cc'].get(str) + ' -DFUNNEL -DOPENACC -DGCCOFFLOAD' + + for with_acc in (False, True): + results, data = compile_and_run(instr, "-n 1", target={'acc': with_acc}) + lines = results.decode('utf-8').split('\n') + self.assertEqual(1, sum(line == 'visited a' for line in lines)) + self.assertEqual(1, sum(line == 'visited b' for line in lines)) + + def _do_jump_tests(self, contents: str, jumps: int): + instr = parse_mcstas_instr(contents) + results, data = compile_and_run(instr, f"-n 1 jumps={jumps}") + lines = results.decode('utf-8').split('\n') + self.assertEqual(jumps, sum(line.startswith('time=') for line in lines)) + times = [int(x.split('=')[-1]) for x in filter(lambda y: y.startswith('time='), lines)] + self.assertEqual(((jumps + 1) * jumps) >> 1, sum(times)) + + @compiled + def test_jump_iterate(self): + contents = dedent("""\ + DEFINE INSTRUMENT test_jump_iterate(int jumps) + USERVARS %{int time;%} + TRACE + COMPONENT o = Arm() AT (0,0,0) ABSOLUTE EXTEND %{time=0;%} + COMPONENT a = Arm() AT (0,0,0) ABSOLUTE EXTEND %{time+=1;%} + COMPONENT b = Arm() AT (0,0,1) ABSOLUTE EXTEND %{printf("time=%d\\n", time);%} + COMPONENT c = Arm() AT (0,0,2) ABSOLUTE JUMP a ITERATE jumps + END + """) + self._do_jump_tests(contents, 10) + + @compiled + def test_jump_when(self): + contents = dedent("""\ + DEFINE INSTRUMENT test_jump_when(int jumps) + USERVARS %{int time; int do_jump;%} + TRACE + COMPONENT o = Arm() AT (0,0,0) ABSOLUTE EXTEND %{time=0;%} + COMPONENT a = Arm() AT (0,0,0) ABSOLUTE EXTEND %{ + time+=1; + do_jump = time < INSTRUMENT_GETPAR(jumps) ? 1 : 0; + %} + COMPONENT b = Arm() AT (0,0,1) ABSOLUTE EXTEND %{printf("time=%d\\n", time);%} + COMPONENT c = Arm() AT (0,0,2) ABSOLUTE JUMP a WHEN (do_jump) + END + """) + self._do_jump_tests(contents, 100) + + @compiled + def test_split(self): + contents = dedent("""\ + define instrument test_split(int splits) trace + component a = Arm() AT (0,0,0) ABSOLUTE EXTEND %{printf("a\\n");%} + split splits component b = Arm() at (0,0,0) absolute extend %{printf("b\\n");%} + split splits component c = Arm() at (0,0,0) absolute extend %{printf("c\\n");%} + end + """) + instr = parse_mcstas_instr(contents) + splits = 10 + results, data = compile_and_run(instr, f"-n 1 splits={splits}") + lines = results.decode('utf-8').split('\n') + self.assertEqual(1, sum(line == 'a' for line in lines)) + self.assertEqual(splits, sum(line == 'b' for line in lines)) + self.assertEqual(splits*splits, sum(line == 'c' for line in lines)) + # The *order* of output is known as well: + expected = ['a', *(['b', *(['c'] * splits)] * splits)] + for ex, ln in zip(expected, lines): + self.assertEqual(ex, ln) + + @compiled + def test_when(self): + instr = parse_mcstas_instr(dedent("""\ + define instrument test_when(dummy) + declare %{int count;%} + initialize %{count = 0;%} + trace + component a = Arm() at (0,0,0) absolute extend %{++count;%} + component b = Arm() when (count%2==1) at (0,0,0) absolute extend %{printf("count=%d\\n", count);%} + end + """)) + n_max = 10 + results, data = compile_and_run(instr, f"-n {n_max} dummy=1") + lines = results.decode('utf-8').split('\n') + print(lines) + expected = [f'count={x}' for x in range(1, n_max, 2)] + for ex, ln in zip(expected, lines): + self.assertEqual(ex, ln) + + @compiled + def test_group(self): + instr = parse_mcstas_instr(dedent("""\ + define instrument test_group(dummy) + declare %{int count;%} + initialize %{count = -1;%} + trace + component o = Arm() at (0,0,0) absolute extend %{++count;%} + component a = Arm() when (count%4==0) at (0,0,0) absolute group first + extend %{printf("a=%d\\n", count); SCATTER; %} + component b = Arm() when (count%2==0) at (0,0,0) absolute group first + extend %{printf("b=%d\\n", count);%} + end + """)) + n_max = 10 + results, data = compile_and_run(instr, f"-n {n_max} dummy=1") + lines = results.decode('utf-8').split('\n') + print(lines) + expected = [f'{"a" if x % 4 == 0 else "b"}={x}' for x in range(0, n_max, 2)] + for ex, ln in zip(expected, lines): + self.assertEqual(ex, ln) + + +if __name__ == '__main__': + unittest.main() From f01df24c07bc8f7bd0b04a6bd90c69f8b609d97d Mon Sep 17 00:00:00 2001 From: Gregory Tucker Date: Sat, 9 Dec 2023 13:53:01 +0100 Subject: [PATCH 2/4] [Fix] ACC/FUNNEL test needs openacc.h -- skip w/o acc compilers --- test/compiled.py | 18 ++++-------------- test/test_c_runtime.py | 41 +++++++++++++++++++++++------------------ 2 files changed, 27 insertions(+), 32 deletions(-) diff --git a/test/compiled.py b/test/compiled.py index a360b9c..6769574 100644 --- a/test/compiled.py +++ b/test/compiled.py @@ -1,18 +1,8 @@ from __future__ import annotations +from functools import cache -def once(fun): - - def wrapper(*args, **kwargs): - if wrapper.result is None: - wrapper.result = fun(*args, **kwargs) - return wrapper.result - - wrapper.result = None - return wrapper - - -@once +@cache def check_for_mccode_antlr_compiler(which: str) -> bool: import subprocess from zenlog import log @@ -43,12 +33,12 @@ def wrapper(*args, **kwargs): return wrapper -def gpu(method): +def gpu_only(method): # GPU compiled instruments need the specific OpenACC compiler return compiled(method, 'acc') -def mpi(method): +def mpi_only(method): # MPI compiled instruments need the specified compiler return compiled(method, 'mpi/cc') diff --git a/test/test_c_runtime.py b/test/test_c_runtime.py index 5d90afd..7b202c7 100644 --- a/test/test_c_runtime.py +++ b/test/test_c_runtime.py @@ -1,35 +1,40 @@ import unittest from textwrap import dedent from mccode_antlr.loader import parse_mcstas_instr -from .compiled import compiled, compile_and_run +from .compiled import compiled, gpu_only, compile_and_run class CRuntimeTestCase(unittest.TestCase): + def _do_trace_tests(self, with_acc): + instr = parse_mcstas_instr(dedent( + """\ + DEFINE INSTRUMENT test_component_traces_visited() + TRACE + COMPONENT a = Arm() AT (0, 0, 0) ABSOLUTE EXTEND %{printf("visited a\\n");%} + COMPONENT b = Arm() AT (0, 0, 1) ABSOLUTE EXTEND %{printf("visited b\\n");%} + END + """) + ) + # + results, data = compile_and_run(instr, "-n 1", target={'acc': with_acc}) + lines = results.decode('utf-8').split('\n') + self.assertEqual(1, sum(line == 'visited a' for line in lines)) + self.assertEqual(1, sum(line == 'visited b' for line in lines)) @compiled - def test_component_traces_visited(self): - contents = dedent("""\ - DEFINE INSTRUMENT test_component_traces_visited() - TRACE - COMPONENT a = Arm() AT (0, 0, 0) ABSOLUTE EXTEND %{printf("visited a\\n");%} - COMPONENT b = Arm() AT (0, 0, 1) ABSOLUTE EXTEND %{printf("visited b\\n");%} - END - """) - # - instr = parse_mcstas_instr(contents) - # + def test_raytrace_traces_visited(self): + self._do_trace_tests(with_acc=False) + + @gpu_only + def test_funnel_raytrace_traces_visited(self): # The FUNNEL define is only followed if OpenACC is enabled :/ # And real OpenACC can only be enabled if we have a GPU :( # But since we don't actually need ACC, we can force use of the normal compiler instead + # Unfortunately the runtime still includes openacc.h, so we should not try to run this normally. from mccode_antlr.config import config config['acc'] = config['cc'].get(str) config['flags']['acc'] = config['flags']['cc'].get(str) + ' -DFUNNEL -DOPENACC -DGCCOFFLOAD' - - for with_acc in (False, True): - results, data = compile_and_run(instr, "-n 1", target={'acc': with_acc}) - lines = results.decode('utf-8').split('\n') - self.assertEqual(1, sum(line == 'visited a' for line in lines)) - self.assertEqual(1, sum(line == 'visited b' for line in lines)) + self._do_trace_tests(with_acc=True) def _do_jump_tests(self, contents: str, jumps: int): instr = parse_mcstas_instr(contents) From 483f3bfe47bf39d1053f6d00aac7fb855ee58341 Mon Sep 17 00:00:00 2001 From: Gregory Tucker Date: Sat, 9 Dec 2023 15:06:21 +0100 Subject: [PATCH 3/4] [Add] check that requested compiler works (needed for ACC tests) --- test/compiled.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/test/compiled.py b/test/compiled.py index 6769574..8b8c22c 100644 --- a/test/compiled.py +++ b/test/compiled.py @@ -1,5 +1,6 @@ from __future__ import annotations from functools import cache +from unittest import TestCase @cache @@ -21,20 +22,37 @@ def check_for_mccode_antlr_compiler(which: str) -> bool: return False +@cache +def simple_instr_compiles(which: str) -> bool: + if check_for_mccode_antlr_compiler(which): + try: + from mccode_antlr.loader import parse_mcstas_instr + instr = parse_mcstas_instr("define instrument check() trace component a = Arm() at (0,0,0) absolute end") + compile_and_run(instr, "-n 1", run=False, target={'acc': which == 'acc'}) + except RuntimeError: + return False + except FileNotFoundError: + return False + return True + + def compiled(method, compiler: str | None = None): if compiler is None: # Basic compiled instruments only need the 'cc' compiler specified in the config file compiler = 'cc' def wrapper(*args, **kwargs): - if check_for_mccode_antlr_compiler(compiler): + if simple_instr_compiles(compiler): method(*args, **kwargs) + elif isinstance(args[0], TestCase): + args[0].skipTest(f'Skipping due to lack of working ${compiler}') return wrapper def gpu_only(method): # GPU compiled instruments need the specific OpenACC compiler + # **PLUS** they need to _actually_ have the openACC header (macOS and Windows don't use different compilers) return compiled(method, 'acc') From 3438bf79e86f09cc6a397bd47289415d77a76fc5 Mon Sep 17 00:00:00 2001 From: Gregory Tucker Date: Sat, 9 Dec 2023 15:13:55 +0100 Subject: [PATCH 4/4] [Fix] use splitlines to handle Windows \r\n line endings --- test/test_c_runtime.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/test_c_runtime.py b/test/test_c_runtime.py index 7b202c7..b4bc1a6 100644 --- a/test/test_c_runtime.py +++ b/test/test_c_runtime.py @@ -17,7 +17,7 @@ def _do_trace_tests(self, with_acc): ) # results, data = compile_and_run(instr, "-n 1", target={'acc': with_acc}) - lines = results.decode('utf-8').split('\n') + lines = results.decode('utf-8').splitlines() self.assertEqual(1, sum(line == 'visited a' for line in lines)) self.assertEqual(1, sum(line == 'visited b' for line in lines)) @@ -39,7 +39,7 @@ def test_funnel_raytrace_traces_visited(self): def _do_jump_tests(self, contents: str, jumps: int): instr = parse_mcstas_instr(contents) results, data = compile_and_run(instr, f"-n 1 jumps={jumps}") - lines = results.decode('utf-8').split('\n') + lines = results.decode('utf-8').splitlines() self.assertEqual(jumps, sum(line.startswith('time=') for line in lines)) times = [int(x.split('=')[-1]) for x in filter(lambda y: y.startswith('time='), lines)] self.assertEqual(((jumps + 1) * jumps) >> 1, sum(times)) @@ -87,7 +87,7 @@ def test_split(self): instr = parse_mcstas_instr(contents) splits = 10 results, data = compile_and_run(instr, f"-n 1 splits={splits}") - lines = results.decode('utf-8').split('\n') + lines = results.decode('utf-8').splitlines() self.assertEqual(1, sum(line == 'a' for line in lines)) self.assertEqual(splits, sum(line == 'b' for line in lines)) self.assertEqual(splits*splits, sum(line == 'c' for line in lines)) @@ -109,7 +109,7 @@ def test_when(self): """)) n_max = 10 results, data = compile_and_run(instr, f"-n {n_max} dummy=1") - lines = results.decode('utf-8').split('\n') + lines = results.decode('utf-8').splitlines() print(lines) expected = [f'count={x}' for x in range(1, n_max, 2)] for ex, ln in zip(expected, lines): @@ -131,7 +131,7 @@ def test_group(self): """)) n_max = 10 results, data = compile_and_run(instr, f"-n {n_max} dummy=1") - lines = results.decode('utf-8').split('\n') + lines = results.decode('utf-8').splitlines() print(lines) expected = [f'{"a" if x % 4 == 0 else "b"}={x}' for x in range(0, n_max, 2)] for ex, ln in zip(expected, lines):