diff --git a/.gitmodules b/.gitmodules index f6154ef..d751517 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "solidity-antlr4"] path = solidity-antlr4 - url = https://github.com/solidityj/solidity-antlr4.git + url = https://github.com/solidity-parser/antlr.git diff --git a/README.md b/README.md index 048f662..4a39649 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,10 @@ # python-solidity-parser -A Solidity parser for Python built on top of a robust ANTLR4 grammar +An experimental Solidity parser for Python built on top of a robust ANTLR4 grammar. **ⓘ** This is a **python3** port of the [javascript antlr parser](https://github.com/federicobond/solidity-parser-antlr) maintained by [@federicobond](https://github.com/federicobond/). Interfaces are intentionally following the javascript implementation and are therefore not pep8 compliant. + + ## Install ``` diff --git a/requirements.txt b/requirements.txt index 730d192..f796e2a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1 @@ -antlr4-python3-runtime \ No newline at end of file +antlr4-python3-runtime==4.9.3 \ No newline at end of file diff --git a/scripts/antlr4.sh b/scripts/antlr4.sh index da2c2b0..26169bc 100644 --- a/scripts/antlr4.sh +++ b/scripts/antlr4.sh @@ -3,8 +3,9 @@ set -o errexit antlr -Dlanguage=Python3 solidity-antlr4/Solidity.g4 -o src -visitor -mv src/solidity-antlr4/* src/solidity_antlr4 + +mv src/solidity-antlr4/* solidity_parser/solidity_antlr4 rm -rf src/solidity-antlr4 -touch src/solidity_antlr4/__init__.py -touch src/solidity_antlr4/__AUTOGENERATED__ +touch solidity_parser/solidity_antlr4/__init__.py +touch solidity_parser/solidity_antlr4/__AUTOGENERATED__ diff --git a/setup.py b/setup.py index b879acc..ec2942a 100644 --- a/setup.py +++ b/setup.py @@ -36,7 +36,7 @@ def read(fname): long_description=read("README.md") if os.path.isfile("README.md") else "", long_description_content_type='text/markdown', #python setup.py register -r https://testpypi.python.org/pypi - install_requires=["antlr4-python3-runtime"], + install_requires=["antlr4-python3-runtime==4.9.3"], #test_suite="nose.collector", #tests_require=["nose"], ) diff --git a/solidity-antlr4 b/solidity-antlr4 index edce5c4..b6b34ca 160000 --- a/solidity-antlr4 +++ b/solidity-antlr4 @@ -1 +1 @@ -Subproject commit edce5c44d2d681e32bb23034d822bf0fcf1cb43e +Subproject commit b6b34ca743ba04cc6f976413bc175b2175aa0bc2 diff --git a/solidity_parser/__main__.py b/solidity_parser/__main__.py index b6d2f18..ba21c7d 100644 --- a/solidity_parser/__main__.py +++ b/solidity_parser/__main__.py @@ -35,7 +35,7 @@ print("=== contract: " + contract_name) level +=1 - print(("\t" * level) + "=== Inherited Contrracts: " + ','.join([bc.baseName.namePath for bc in contract_object._node.baseContracts])) + print(("\t" * level) + "=== Inherited Contracts: " + ','.join([bc.baseName.namePath for bc in contract_object._node.baseContracts])) ## statevars print(("\t" * level) + "=== Enums") level += 2 diff --git a/solidity_parser/parser.py b/solidity_parser/parser.py index ea27b61..7a19864 100644 --- a/solidity_parser/parser.py +++ b/solidity_parser/parser.py @@ -124,6 +124,27 @@ def visitEnumValue(self, ctx): type="EnumValue", name=ctx.identifier().getText()) + def visitTypeDefinition(self, ctx): + return Node(ctx=ctx, + type="TypeDefinition", + typeKeyword=ctx.TypeKeyword().getText(), + elementaryTypeName=self.visit(ctx.elementaryTypeName())) + + + def visitCustomErrorDefinition(self, ctx): + return Node(ctx=ctx, + type="CustomErrorDefinition", + name=self.visit(ctx.identifier()), + parameterList=self.visit(ctx.parameterList())) + + def visitFileLevelConstant(self, ctx): + return Node(ctx=ctx, + type="FileLevelConstant", + name=self.visit(ctx.identifier()), + typeName=self.visit(ctx.typeName()), + ConstantKeyword=self.visit(ctx.ConstantKeyword())) + + def visitUsingForDeclaration(self, ctx: SolidityParser.UsingForDeclarationContext): typename = None if ctx.getChild(3) != '*': @@ -138,45 +159,29 @@ def visitInheritanceSpecifier(self, ctx: SolidityParser.InheritanceSpecifierCont return Node(ctx=ctx, type="InheritanceSpecifier", baseName=self.visit(ctx.userDefinedTypeName()), - arguments=self.visit(ctx.expression())) + arguments=self.visit(ctx.expressionList())) def visitContractPart(self, ctx: SolidityParser.ContractPartContext): return self.visit(ctx.children[0]) - def visitConstructorDefinition(self, ctx: SolidityParser.ConstructorDefinitionContext): - parameters = self.visit(ctx.parameterList()) - block = self.visit(ctx.block()) if ctx.block() else [] - modifiers = [self.visit(i) for i in ctx.modifierList().modifierInvocation()] - - if ctx.modifierList().ExternalKeyword(0): - visibility = "external" - elif ctx.modifierList().InternalKeyword(0): - visibility = "internal" - elif ctx.modifierList().PublicKeyword(0): - visibility = "public" - elif ctx.modifierList().PrivateKeyword(0): - visibility = "private" - else: - visibility = 'default' - if ctx.modifierList().stateMutability(0): - stateMutability = ctx.modifierList().stateMutability(0).getText() + def visitFunctionDefinition(self, ctx: SolidityParser.FunctionDefinitionContext): + isConstructor = isFallback =isReceive = False + + fd = ctx.functionDescriptor() + if fd.ConstructorKeyword(): + name = fd.ConstructorKeyword().getText() + isConstructor = True + elif fd.FallbackKeyword(): + name = fd.FallbackKeyword().getText() + isFallback = True + elif fd.ReceiveKeyword(): + name = fd.ReceiveKeyword().getText() + isReceive = True + elif fd.identifier(): + name = fd.identifier().getText() else: - stateMutability = None - - return Node(ctx=ctx, - type="FunctionDefinition", - name=None, - parameters=parameters, - returnParameters=None, - body=block, - visibility=visibility, - modifiers=modifiers, - isConstructor=True, - stateMutability=stateMutability) - - def visitFunctionDefinition(self, ctx: SolidityParser.ConstructorDefinitionContext): - name = ctx.identifier().getText() if ctx.identifier() else "" + raise Exception("unexpected function descriptor") parameters = self.visit(ctx.parameterList()) returnParameters = self.visit(ctx.returnParameters()) if ctx.returnParameters() else [] @@ -207,7 +212,9 @@ def visitFunctionDefinition(self, ctx: SolidityParser.ConstructorDefinitionConte body=block, visibility=visibility, modifiers=modifiers, - isConstructor=name == self._currentContract, + isConstructor=isConstructor, + isFallback=isFallback, + isReceive=isReceive, stateMutability=stateMutability) def visitReturnParameters(self, ctx: SolidityParser.ReturnParametersContext): @@ -319,6 +326,10 @@ def visitEmitStatement(self, ctx): type='EmitStatement', eventCall=self.visit(ctx.getChild(1))) + def visitThrowStatement(self, ctx): + return Node(ctx=ctx, + type='ThrowStatement') + def visitStructDefinition(self, ctx): return Node(ctx=ctx, type='StructDefinition', @@ -393,6 +404,21 @@ def visitIfStatement(self, ctx): TrueBody=TrueBody, FalseBody=FalseBody) + def visitTryStatement(self, ctx): + return Node(ctx=ctx, + type='TryStatement', + expression=self.visit(ctx.expression()), + block=self.visit(ctx.block()), + returnParameters=self.visit(ctx.returnParameters()), + catchClause=self.visit(ctx.catchClause())) + + def visitCatchClause(self, ctx): + return Node(ctx=ctx, + type='CatchClause', + identifier=self.visit(ctx.identifier()), + parameterList=self.visit(ctx.parameterList()), + block=self.visit(ctx.block())) + def visitUserDefinedTypeName(self, ctx): return Node(ctx=ctx, type='UserDefinedTypeName', @@ -428,7 +454,7 @@ def visitNumberLiteral(self, ctx): def visitMapping(self, ctx): return Node(ctx=ctx, type='Mapping', - keyType=self.visit(ctx.elementaryTypeName()), + keyType=self.visit(ctx.mappingKey()), valueType=self.visit(ctx.typeName())) def visitModifierDefinition(self, ctx): @@ -449,6 +475,16 @@ def visitStatement(self, ctx): def visitSimpleStatement(self, ctx): return self.visit(ctx.getChild(0)) + def visitUncheckedStatement(self, ctx): + return Node(ctx=ctx, + type='UncheckedStatement', + body=self.visit(ctx.block())) + + def visitRevertStatement(self, ctx): + return Node(ctx=ctx, + type='RevertStatement', + functionCall=self.visit(ctx.functionCall())) + def visitExpression(self, ctx): children_length = len(ctx.children) @@ -641,16 +677,15 @@ def visitPrimaryExpression(self, ctx): type='BooleanLiteral', value=ctx.BooleanLiteral().getText() == 'true') - if ctx.HexLiteral(): + if ctx.hexLiteral(): return Node(ctx=ctx, - type='HexLiteral', - value=ctx.HexLiteral().getText()) + type='hexLiteral', + value=ctx.hexLiteral().getText()) - if ctx.StringLiteral(): + if ctx.stringLiteral(): text = ctx.getText() - return Node(ctx=ctx, - type='StringLiteral', + type='stringLiteral', value=text[1: len(text) - 1]) if len(ctx.children) == 3 and ctx.getChild(1).getText() == '[' and ctx.getChild(2).getText() == ']': @@ -737,32 +772,6 @@ def visitVariableDeclarationStatement(self, ctx): variables=variables, initialValue=initialValue) - def visitImportDirective(self, ctx): - pathString = ctx.StringLiteral().getText() - unitAlias = None - symbolAliases = None - - impDecLen = len(ctx.importDeclaration()) - if impDecLen > 0: - symbolAliases = [] - for decl in ctx.importDeclaration(): - symbol = decl.identifier(0).getText() - alias = None - if decl.identifier(1): - alias = decl.identifier(1).getText() - - symbolAliases.append([symbol, alias]) - elif impDecLen == 7: - unitAlias = ctx.getChild(3).getText() - elif impDecLen == 5: - unitAlias = ctx.getChild(3).getText() - - return Node(ctx=ctx, - type='ImportDirective', - path=pathString[1: len(pathString) - 1], - unitAlias=unitAlias, - symbolAliases=symbolAliases) - def visitEventDefinition(self, ctx): return Node(ctx=ctx, type='EventDefinition', @@ -792,8 +801,8 @@ def visitEventParameterList(self, ctx): def visitInlineAssemblyStatement(self, ctx): language = None - if ctx.StringLiteral(): - language = ctx.StringLiteral().getText() + if ctx.StringLiteralFragment(): + language = ctx.StringLiteralFragment().getText() language = language[1: len(language) - 1] return Node(ctx=ctx, @@ -810,13 +819,13 @@ def visitAssemblyBlock(self, ctx): def visitAssemblyItem(self, ctx): - if ctx.HexLiteral(): + if ctx.hexLiteral(): return Node(ctx=ctx, type='HexLiteral', - value=ctx.HexLiteral().getText()) + value=ctx.hexLiteral().getText()) - if ctx.StringLiteral(): - text = ctx.StringLiteral().getText() + if ctx.stringLiteral(): + text = ctx.stringLiteral().getText() return Node(ctx=ctx, type='StringLiteral', value=text[1: len(text) - 1]) @@ -834,6 +843,11 @@ def visitAssemblyItem(self, ctx): def visitAssemblyExpression(self, ctx): return self.visit(ctx.getChild(0)) + def visitAssemblyMember(self, ctx): + return Node(ctx=ctx, + type='AssemblyMember', + name=ctx.identifier().getText()) + def visitAssemblyCall(self, ctx): functionName = ctx.getChild(0).getText() args = [self.visit(arg) for arg in ctx.assemblyExpression()] @@ -845,7 +859,7 @@ def visitAssemblyCall(self, ctx): def visitAssemblyLiteral(self, ctx): - if ctx.StringLiteral(): + if ctx.stringLiteral(): text = ctx.getText() return Node(ctx=ctx, type='StringLiteral', @@ -861,7 +875,7 @@ def visitAssemblyLiteral(self, ctx): type='HexNumber', value=ctx.getText()) - if ctx.HexLiteral(): + if ctx.hexLiteral(): return Node(ctx=ctx, type='HexLiteral', value=ctx.getText()) @@ -981,7 +995,7 @@ def visitImportDirective(self, ctx): return Node(ctx=ctx, type="ImportDirective", - path=ctx.StringLiteral().getText().strip('"'), + path=ctx.importPath().getText().strip('"'), symbolAliases=symbol_aliases, unitAlias=unit_alias ) @@ -1024,7 +1038,7 @@ def parse(text, start="sourceUnit", loc=False, strict=False): def parse_file(path, start="sourceUnit", loc=False, strict=False): - with open(path, 'r') as f: + with open(path, 'r', encoding="utf-8") as f: return parse(f.read(), start=start, loc=loc, strict=strict) @@ -1106,10 +1120,6 @@ def visitStructDefinition(self, _node): self.structs[_node.name]=_node self.names[_node.name]=_node - def visitConstructorDefinition(self, _node): - self.constructor = _node - - def visitStateVariableDeclaration(self, _node): class VarDecVisitor(object): @@ -1150,10 +1160,15 @@ def __init__(self, node): if(node.type=="FunctionDefinition"): self.visibility = node.visibility self.stateMutability = node.stateMutability + self.isConstructor = node.isConstructor + self.isFallback = node.isFallback + self.isReceive = node.isReceive self.arguments = {} self.returns = {} self.declarations = {} self.identifiers = [] + + class FunctionArgumentVisitor(object): @@ -1182,13 +1197,14 @@ def visitIdentifier(self, __node): def visitAssemblyCall(self, __node): self.idents.append(__node) - current_function = FunctionObject(_node) self.names[_node.name] = current_function if _definition_type=="ModifierDefinition": self.modifiers[_node.name] = current_function else: self.functions[_node.name] = current_function + if current_function.isConstructor: + self.constructor = current_function ## get parameters funcargvisitor = FunctionArgumentVisitor() diff --git a/solidity_parser/solidity_antlr4/Solidity.interp b/solidity_parser/solidity_antlr4/Solidity.interp index bea8926..4ef6e32 100644 --- a/solidity_parser/solidity_antlr4/Solidity.interp +++ b/solidity_parser/solidity_antlr4/Solidity.interp @@ -2,6 +2,7 @@ token literal names: null 'pragma' ';' +'||' '^' '~' '>=' @@ -16,16 +17,17 @@ null '{' ',' '}' +'abstract' 'contract' 'interface' 'library' 'is' '(' ')' +'error' 'using' 'for' 'struct' -'constructor' 'modifier' 'function' 'returns' @@ -42,12 +44,16 @@ null 'calldata' 'if' 'else' +'try' +'catch' 'while' +'unchecked' 'assembly' 'do' 'return' 'throw' 'emit' +'revert' 'var' 'bool' 'string' @@ -55,6 +61,7 @@ null '++' '--' 'new' +':' '+' '-' 'after' @@ -70,9 +77,7 @@ null '==' '!=' '&&' -'||' '?' -':' '|=' '^=' '&=' @@ -90,7 +95,8 @@ null 'case' 'default' '->' -null +'callback' +'override' null null null @@ -105,15 +111,23 @@ null 'anonymous' 'break' 'constant' +'immutable' 'continue' +'leave' 'external' 'indexed' 'internal' 'payable' 'private' 'public' +'virtual' 'pure' +'type' 'view' +'constructor' +'fallback' +'receive' +null null null null @@ -212,32 +226,46 @@ null null null null +null +null +null +null +null +null +null Int Uint Byte Fixed Ufixed -VersionLiteral BooleanLiteral DecimalNumber HexNumber NumberUnit -HexLiteral +HexLiteralFragment ReservedKeyword AnonymousKeyword BreakKeyword ConstantKeyword +ImmutableKeyword ContinueKeyword +LeaveKeyword ExternalKeyword IndexedKeyword InternalKeyword PayableKeyword PrivateKeyword PublicKeyword +VirtualKeyword PureKeyword +TypeKeyword ViewKeyword +ConstructorKeyword +FallbackKeyword +ReceiveKeyword Identifier -StringLiteral +StringLiteralFragment +VersionLiteral WS COMMENT LINE_COMMENT @@ -252,16 +280,20 @@ versionOperator versionConstraint importDeclaration importDirective +importPath contractDefinition inheritanceSpecifier contractPart stateVariableDeclaration +fileLevelConstant +customErrorDefinition +typeDefinition usingForDeclaration structDefinition -constructorDefinition modifierDefinition modifierInvocation functionDefinition +functionDescriptor returnParameters modifierList eventDefinition @@ -276,6 +308,7 @@ functionTypeParameter variableDeclaration typeName userDefinedTypeName +mappingKey mapping functionTypeName storageLocation @@ -284,8 +317,11 @@ block statement expressionStatement ifStatement +tryStatement +catchClause whileStatement simpleStatement +uncheckedStatement forStatement inlineAssemblyStatement doWhileStatement @@ -294,6 +330,7 @@ breakStatement returnStatement throwStatement emitStatement +revertStatement variableDeclarationStatement variableDeclarationList identifierList @@ -308,6 +345,7 @@ functionCall assemblyBlock assemblyItem assemblyExpression +assemblyMember assemblyCall assemblyLocalDefinition assemblyAssignment @@ -324,10 +362,13 @@ assemblyIf assemblyLiteral subAssembly tupleExpression -elementaryTypeNameExpression +typeNameExpression numberLiteral identifier +hexLiteral +overrideSpecifier +stringLiteral atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 121, 965, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 3, 2, 3, 2, 3, 2, 7, 2, 174, 10, 2, 12, 2, 14, 2, 177, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 5, 5, 190, 10, 5, 3, 6, 3, 6, 5, 6, 194, 10, 6, 3, 7, 3, 7, 3, 8, 5, 8, 199, 10, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 5, 9, 206, 10, 9, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 212, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 218, 10, 10, 3, 10, 3, 10, 5, 10, 222, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 232, 10, 10, 12, 10, 14, 10, 235, 11, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 242, 10, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 250, 10, 11, 12, 11, 14, 11, 253, 11, 11, 5, 11, 255, 10, 11, 3, 11, 3, 11, 7, 11, 259, 10, 11, 12, 11, 14, 11, 262, 11, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 7, 12, 271, 10, 12, 12, 12, 14, 12, 274, 11, 12, 3, 12, 3, 12, 5, 12, 278, 10, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 288, 10, 13, 3, 14, 3, 14, 7, 14, 292, 10, 14, 12, 14, 14, 14, 295, 11, 14, 3, 14, 3, 14, 3, 14, 5, 14, 300, 10, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 309, 10, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 7, 16, 321, 10, 16, 12, 16, 14, 16, 324, 11, 16, 5, 16, 326, 10, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 5, 18, 338, 10, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 5, 19, 345, 10, 19, 3, 19, 5, 19, 348, 10, 19, 3, 20, 3, 20, 5, 20, 352, 10, 20, 3, 20, 3, 20, 3, 20, 5, 20, 357, 10, 20, 3, 20, 3, 20, 5, 20, 361, 10, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 7, 22, 372, 10, 22, 12, 22, 14, 22, 375, 11, 22, 3, 23, 3, 23, 3, 23, 3, 23, 5, 23, 381, 10, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 391, 10, 25, 3, 25, 3, 25, 7, 25, 395, 10, 25, 12, 25, 14, 25, 398, 11, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 7, 26, 406, 10, 26, 12, 26, 14, 26, 409, 11, 26, 5, 26, 411, 10, 26, 3, 26, 3, 26, 3, 27, 3, 27, 5, 27, 417, 10, 27, 3, 27, 5, 27, 420, 10, 27, 3, 28, 3, 28, 3, 28, 3, 28, 7, 28, 426, 10, 28, 12, 28, 14, 28, 429, 11, 28, 5, 28, 431, 10, 28, 3, 28, 3, 28, 3, 29, 3, 29, 5, 29, 437, 10, 29, 3, 29, 5, 29, 440, 10, 29, 3, 30, 3, 30, 3, 30, 3, 30, 7, 30, 446, 10, 30, 12, 30, 14, 30, 449, 11, 30, 5, 30, 451, 10, 30, 3, 30, 3, 30, 3, 31, 3, 31, 5, 31, 457, 10, 31, 3, 32, 3, 32, 5, 32, 461, 10, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 5, 33, 472, 10, 33, 3, 33, 3, 33, 3, 33, 5, 33, 477, 10, 33, 3, 33, 7, 33, 480, 10, 33, 12, 33, 14, 33, 483, 11, 33, 3, 34, 3, 34, 3, 34, 7, 34, 488, 10, 34, 12, 34, 14, 34, 491, 11, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 7, 36, 505, 10, 36, 12, 36, 14, 36, 508, 11, 36, 3, 36, 3, 36, 5, 36, 512, 10, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 7, 39, 520, 10, 39, 12, 39, 14, 39, 523, 11, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 539, 10, 40, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 5, 42, 551, 10, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 5, 44, 561, 10, 44, 3, 45, 3, 45, 3, 45, 3, 45, 5, 45, 567, 10, 45, 3, 45, 3, 45, 5, 45, 571, 10, 45, 3, 45, 5, 45, 574, 10, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 5, 46, 581, 10, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 5, 50, 601, 10, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 5, 53, 619, 10, 53, 3, 53, 3, 53, 5, 53, 623, 10, 53, 3, 53, 3, 53, 3, 54, 5, 54, 628, 10, 54, 3, 54, 3, 54, 5, 54, 632, 10, 54, 7, 54, 634, 10, 54, 12, 54, 14, 54, 637, 11, 54, 3, 55, 3, 55, 5, 55, 641, 10, 55, 3, 55, 7, 55, 644, 10, 55, 12, 55, 14, 55, 647, 11, 55, 3, 55, 5, 55, 650, 10, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 5, 57, 674, 10, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 7, 57, 733, 10, 57, 12, 57, 14, 57, 736, 11, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 5, 58, 745, 10, 58, 3, 58, 3, 58, 3, 58, 3, 58, 5, 58, 751, 10, 58, 5, 58, 753, 10, 58, 3, 59, 3, 59, 3, 59, 7, 59, 758, 10, 59, 12, 59, 14, 59, 761, 11, 59, 3, 60, 3, 60, 3, 60, 7, 60, 766, 10, 60, 12, 60, 14, 60, 769, 11, 60, 3, 60, 5, 60, 772, 10, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 5, 62, 780, 10, 62, 3, 62, 3, 62, 5, 62, 784, 10, 62, 5, 62, 786, 10, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 7, 64, 795, 10, 64, 12, 64, 14, 64, 798, 11, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 5, 65, 819, 10, 65, 3, 66, 3, 66, 5, 66, 823, 10, 66, 3, 67, 3, 67, 3, 67, 3, 67, 5, 67, 829, 10, 67, 3, 67, 3, 67, 5, 67, 833, 10, 67, 3, 67, 3, 67, 7, 67, 837, 10, 67, 12, 67, 14, 67, 840, 11, 67, 3, 67, 5, 67, 843, 10, 67, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 849, 10, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 5, 70, 860, 10, 70, 3, 71, 3, 71, 3, 71, 7, 71, 865, 10, 71, 12, 71, 14, 71, 868, 11, 71, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 7, 74, 879, 10, 74, 12, 74, 14, 74, 882, 11, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 5, 75, 890, 10, 75, 3, 76, 3, 76, 3, 76, 3, 76, 5, 76, 896, 10, 76, 3, 76, 3, 76, 5, 76, 900, 10, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 5, 78, 910, 10, 78, 3, 78, 3, 78, 3, 78, 5, 78, 915, 10, 78, 3, 78, 3, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 82, 3, 82, 5, 82, 931, 10, 82, 3, 82, 3, 82, 5, 82, 935, 10, 82, 7, 82, 937, 10, 82, 12, 82, 14, 82, 940, 11, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 7, 82, 947, 10, 82, 12, 82, 14, 82, 950, 11, 82, 5, 82, 952, 10, 82, 3, 82, 5, 82, 955, 10, 82, 3, 83, 3, 83, 3, 84, 3, 84, 5, 84, 961, 10, 84, 3, 85, 3, 85, 3, 85, 2, 4, 64, 112, 86, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 2, 19, 3, 2, 5, 11, 3, 2, 19, 21, 5, 2, 107, 107, 111, 111, 113, 114, 3, 2, 40, 42, 5, 2, 107, 107, 112, 112, 115, 116, 5, 2, 36, 36, 51, 54, 93, 97, 3, 2, 55, 56, 3, 2, 58, 59, 3, 2, 60, 61, 4, 2, 14, 14, 64, 65, 3, 2, 66, 67, 3, 2, 7, 10, 3, 2, 70, 71, 4, 2, 11, 11, 76, 85, 5, 2, 100, 101, 103, 103, 118, 118, 3, 2, 100, 101, 5, 2, 15, 15, 42, 42, 117, 117, 2, 1054, 2, 175, 3, 2, 2, 2, 4, 180, 3, 2, 2, 2, 6, 185, 3, 2, 2, 2, 8, 189, 3, 2, 2, 2, 10, 191, 3, 2, 2, 2, 12, 195, 3, 2, 2, 2, 14, 198, 3, 2, 2, 2, 16, 202, 3, 2, 2, 2, 18, 241, 3, 2, 2, 2, 20, 243, 3, 2, 2, 2, 22, 265, 3, 2, 2, 2, 24, 287, 3, 2, 2, 2, 26, 289, 3, 2, 2, 2, 28, 303, 3, 2, 2, 2, 30, 312, 3, 2, 2, 2, 32, 329, 3, 2, 2, 2, 34, 334, 3, 2, 2, 2, 36, 341, 3, 2, 2, 2, 38, 349, 3, 2, 2, 2, 40, 362, 3, 2, 2, 2, 42, 373, 3, 2, 2, 2, 44, 376, 3, 2, 2, 2, 46, 384, 3, 2, 2, 2, 48, 386, 3, 2, 2, 2, 50, 401, 3, 2, 2, 2, 52, 414, 3, 2, 2, 2, 54, 421, 3, 2, 2, 2, 56, 434, 3, 2, 2, 2, 58, 441, 3, 2, 2, 2, 60, 454, 3, 2, 2, 2, 62, 458, 3, 2, 2, 2, 64, 471, 3, 2, 2, 2, 66, 484, 3, 2, 2, 2, 68, 492, 3, 2, 2, 2, 70, 499, 3, 2, 2, 2, 72, 513, 3, 2, 2, 2, 74, 515, 3, 2, 2, 2, 76, 517, 3, 2, 2, 2, 78, 538, 3, 2, 2, 2, 80, 540, 3, 2, 2, 2, 82, 543, 3, 2, 2, 2, 84, 552, 3, 2, 2, 2, 86, 560, 3, 2, 2, 2, 88, 562, 3, 2, 2, 2, 90, 578, 3, 2, 2, 2, 92, 584, 3, 2, 2, 2, 94, 592, 3, 2, 2, 2, 96, 595, 3, 2, 2, 2, 98, 598, 3, 2, 2, 2, 100, 604, 3, 2, 2, 2, 102, 607, 3, 2, 2, 2, 104, 618, 3, 2, 2, 2, 106, 627, 3, 2, 2, 2, 108, 638, 3, 2, 2, 2, 110, 653, 3, 2, 2, 2, 112, 673, 3, 2, 2, 2, 114, 752, 3, 2, 2, 2, 116, 754, 3, 2, 2, 2, 118, 762, 3, 2, 2, 2, 120, 773, 3, 2, 2, 2, 122, 785, 3, 2, 2, 2, 124, 787, 3, 2, 2, 2, 126, 792, 3, 2, 2, 2, 128, 818, 3, 2, 2, 2, 130, 822, 3, 2, 2, 2, 132, 828, 3, 2, 2, 2, 134, 844, 3, 2, 2, 2, 136, 850, 3, 2, 2, 2, 138, 859, 3, 2, 2, 2, 140, 861, 3, 2, 2, 2, 142, 869, 3, 2, 2, 2, 144, 872, 3, 2, 2, 2, 146, 875, 3, 2, 2, 2, 148, 889, 3, 2, 2, 2, 150, 891, 3, 2, 2, 2, 152, 903, 3, 2, 2, 2, 154, 906, 3, 2, 2, 2, 156, 918, 3, 2, 2, 2, 158, 922, 3, 2, 2, 2, 160, 924, 3, 2, 2, 2, 162, 954, 3, 2, 2, 2, 164, 956, 3, 2, 2, 2, 166, 958, 3, 2, 2, 2, 168, 962, 3, 2, 2, 2, 170, 174, 5, 4, 3, 2, 171, 174, 5, 18, 10, 2, 172, 174, 5, 20, 11, 2, 173, 170, 3, 2, 2, 2, 173, 171, 3, 2, 2, 2, 173, 172, 3, 2, 2, 2, 174, 177, 3, 2, 2, 2, 175, 173, 3, 2, 2, 2, 175, 176, 3, 2, 2, 2, 176, 178, 3, 2, 2, 2, 177, 175, 3, 2, 2, 2, 178, 179, 7, 2, 2, 3, 179, 3, 3, 2, 2, 2, 180, 181, 7, 3, 2, 2, 181, 182, 5, 6, 4, 2, 182, 183, 5, 8, 5, 2, 183, 184, 7, 4, 2, 2, 184, 5, 3, 2, 2, 2, 185, 186, 5, 168, 85, 2, 186, 7, 3, 2, 2, 2, 187, 190, 5, 10, 6, 2, 188, 190, 5, 112, 57, 2, 189, 187, 3, 2, 2, 2, 189, 188, 3, 2, 2, 2, 190, 9, 3, 2, 2, 2, 191, 193, 5, 14, 8, 2, 192, 194, 5, 14, 8, 2, 193, 192, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 11, 3, 2, 2, 2, 195, 196, 9, 2, 2, 2, 196, 13, 3, 2, 2, 2, 197, 199, 5, 12, 7, 2, 198, 197, 3, 2, 2, 2, 198, 199, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 201, 7, 98, 2, 2, 201, 15, 3, 2, 2, 2, 202, 205, 5, 168, 85, 2, 203, 204, 7, 12, 2, 2, 204, 206, 5, 168, 85, 2, 205, 203, 3, 2, 2, 2, 205, 206, 3, 2, 2, 2, 206, 17, 3, 2, 2, 2, 207, 208, 7, 13, 2, 2, 208, 211, 7, 118, 2, 2, 209, 210, 7, 12, 2, 2, 210, 212, 5, 168, 85, 2, 211, 209, 3, 2, 2, 2, 211, 212, 3, 2, 2, 2, 212, 213, 3, 2, 2, 2, 213, 242, 7, 4, 2, 2, 214, 217, 7, 13, 2, 2, 215, 218, 7, 14, 2, 2, 216, 218, 5, 168, 85, 2, 217, 215, 3, 2, 2, 2, 217, 216, 3, 2, 2, 2, 218, 221, 3, 2, 2, 2, 219, 220, 7, 12, 2, 2, 220, 222, 5, 168, 85, 2, 221, 219, 3, 2, 2, 2, 221, 222, 3, 2, 2, 2, 222, 223, 3, 2, 2, 2, 223, 224, 7, 15, 2, 2, 224, 225, 7, 118, 2, 2, 225, 242, 7, 4, 2, 2, 226, 227, 7, 13, 2, 2, 227, 228, 7, 16, 2, 2, 228, 233, 5, 16, 9, 2, 229, 230, 7, 17, 2, 2, 230, 232, 5, 16, 9, 2, 231, 229, 3, 2, 2, 2, 232, 235, 3, 2, 2, 2, 233, 231, 3, 2, 2, 2, 233, 234, 3, 2, 2, 2, 234, 236, 3, 2, 2, 2, 235, 233, 3, 2, 2, 2, 236, 237, 7, 18, 2, 2, 237, 238, 7, 15, 2, 2, 238, 239, 7, 118, 2, 2, 239, 240, 7, 4, 2, 2, 240, 242, 3, 2, 2, 2, 241, 207, 3, 2, 2, 2, 241, 214, 3, 2, 2, 2, 241, 226, 3, 2, 2, 2, 242, 19, 3, 2, 2, 2, 243, 244, 9, 3, 2, 2, 244, 254, 5, 168, 85, 2, 245, 246, 7, 22, 2, 2, 246, 251, 5, 22, 12, 2, 247, 248, 7, 17, 2, 2, 248, 250, 5, 22, 12, 2, 249, 247, 3, 2, 2, 2, 250, 253, 3, 2, 2, 2, 251, 249, 3, 2, 2, 2, 251, 252, 3, 2, 2, 2, 252, 255, 3, 2, 2, 2, 253, 251, 3, 2, 2, 2, 254, 245, 3, 2, 2, 2, 254, 255, 3, 2, 2, 2, 255, 256, 3, 2, 2, 2, 256, 260, 7, 16, 2, 2, 257, 259, 5, 24, 13, 2, 258, 257, 3, 2, 2, 2, 259, 262, 3, 2, 2, 2, 260, 258, 3, 2, 2, 2, 260, 261, 3, 2, 2, 2, 261, 263, 3, 2, 2, 2, 262, 260, 3, 2, 2, 2, 263, 264, 7, 18, 2, 2, 264, 21, 3, 2, 2, 2, 265, 277, 5, 66, 34, 2, 266, 267, 7, 23, 2, 2, 267, 272, 5, 112, 57, 2, 268, 269, 7, 17, 2, 2, 269, 271, 5, 112, 57, 2, 270, 268, 3, 2, 2, 2, 271, 274, 3, 2, 2, 2, 272, 270, 3, 2, 2, 2, 272, 273, 3, 2, 2, 2, 273, 275, 3, 2, 2, 2, 274, 272, 3, 2, 2, 2, 275, 276, 7, 24, 2, 2, 276, 278, 3, 2, 2, 2, 277, 266, 3, 2, 2, 2, 277, 278, 3, 2, 2, 2, 278, 23, 3, 2, 2, 2, 279, 288, 5, 26, 14, 2, 280, 288, 5, 28, 15, 2, 281, 288, 5, 30, 16, 2, 282, 288, 5, 32, 17, 2, 283, 288, 5, 34, 18, 2, 284, 288, 5, 38, 20, 2, 285, 288, 5, 44, 23, 2, 286, 288, 5, 48, 25, 2, 287, 279, 3, 2, 2, 2, 287, 280, 3, 2, 2, 2, 287, 281, 3, 2, 2, 2, 287, 282, 3, 2, 2, 2, 287, 283, 3, 2, 2, 2, 287, 284, 3, 2, 2, 2, 287, 285, 3, 2, 2, 2, 287, 286, 3, 2, 2, 2, 288, 25, 3, 2, 2, 2, 289, 293, 5, 64, 33, 2, 290, 292, 9, 4, 2, 2, 291, 290, 3, 2, 2, 2, 292, 295, 3, 2, 2, 2, 293, 291, 3, 2, 2, 2, 293, 294, 3, 2, 2, 2, 294, 296, 3, 2, 2, 2, 295, 293, 3, 2, 2, 2, 296, 299, 5, 168, 85, 2, 297, 298, 7, 11, 2, 2, 298, 300, 5, 112, 57, 2, 299, 297, 3, 2, 2, 2, 299, 300, 3, 2, 2, 2, 300, 301, 3, 2, 2, 2, 301, 302, 7, 4, 2, 2, 302, 27, 3, 2, 2, 2, 303, 304, 7, 25, 2, 2, 304, 305, 5, 168, 85, 2, 305, 308, 7, 26, 2, 2, 306, 309, 7, 14, 2, 2, 307, 309, 5, 64, 33, 2, 308, 306, 3, 2, 2, 2, 308, 307, 3, 2, 2, 2, 309, 310, 3, 2, 2, 2, 310, 311, 7, 4, 2, 2, 311, 29, 3, 2, 2, 2, 312, 313, 7, 27, 2, 2, 313, 314, 5, 168, 85, 2, 314, 325, 7, 16, 2, 2, 315, 316, 5, 62, 32, 2, 316, 322, 7, 4, 2, 2, 317, 318, 5, 62, 32, 2, 318, 319, 7, 4, 2, 2, 319, 321, 3, 2, 2, 2, 320, 317, 3, 2, 2, 2, 321, 324, 3, 2, 2, 2, 322, 320, 3, 2, 2, 2, 322, 323, 3, 2, 2, 2, 323, 326, 3, 2, 2, 2, 324, 322, 3, 2, 2, 2, 325, 315, 3, 2, 2, 2, 325, 326, 3, 2, 2, 2, 326, 327, 3, 2, 2, 2, 327, 328, 7, 18, 2, 2, 328, 31, 3, 2, 2, 2, 329, 330, 7, 28, 2, 2, 330, 331, 5, 50, 26, 2, 331, 332, 5, 42, 22, 2, 332, 333, 5, 76, 39, 2, 333, 33, 3, 2, 2, 2, 334, 335, 7, 29, 2, 2, 335, 337, 5, 168, 85, 2, 336, 338, 5, 50, 26, 2, 337, 336, 3, 2, 2, 2, 337, 338, 3, 2, 2, 2, 338, 339, 3, 2, 2, 2, 339, 340, 5, 76, 39, 2, 340, 35, 3, 2, 2, 2, 341, 347, 5, 168, 85, 2, 342, 344, 7, 23, 2, 2, 343, 345, 5, 116, 59, 2, 344, 343, 3, 2, 2, 2, 344, 345, 3, 2, 2, 2, 345, 346, 3, 2, 2, 2, 346, 348, 7, 24, 2, 2, 347, 342, 3, 2, 2, 2, 347, 348, 3, 2, 2, 2, 348, 37, 3, 2, 2, 2, 349, 351, 7, 30, 2, 2, 350, 352, 5, 168, 85, 2, 351, 350, 3, 2, 2, 2, 351, 352, 3, 2, 2, 2, 352, 353, 3, 2, 2, 2, 353, 354, 5, 50, 26, 2, 354, 356, 5, 42, 22, 2, 355, 357, 5, 40, 21, 2, 356, 355, 3, 2, 2, 2, 356, 357, 3, 2, 2, 2, 357, 360, 3, 2, 2, 2, 358, 361, 7, 4, 2, 2, 359, 361, 5, 76, 39, 2, 360, 358, 3, 2, 2, 2, 360, 359, 3, 2, 2, 2, 361, 39, 3, 2, 2, 2, 362, 363, 7, 31, 2, 2, 363, 364, 5, 50, 26, 2, 364, 41, 3, 2, 2, 2, 365, 372, 5, 36, 19, 2, 366, 372, 5, 74, 38, 2, 367, 372, 7, 109, 2, 2, 368, 372, 7, 114, 2, 2, 369, 372, 7, 111, 2, 2, 370, 372, 7, 113, 2, 2, 371, 365, 3, 2, 2, 2, 371, 366, 3, 2, 2, 2, 371, 367, 3, 2, 2, 2, 371, 368, 3, 2, 2, 2, 371, 369, 3, 2, 2, 2, 371, 370, 3, 2, 2, 2, 372, 375, 3, 2, 2, 2, 373, 371, 3, 2, 2, 2, 373, 374, 3, 2, 2, 2, 374, 43, 3, 2, 2, 2, 375, 373, 3, 2, 2, 2, 376, 377, 7, 32, 2, 2, 377, 378, 5, 168, 85, 2, 378, 380, 5, 54, 28, 2, 379, 381, 7, 105, 2, 2, 380, 379, 3, 2, 2, 2, 380, 381, 3, 2, 2, 2, 381, 382, 3, 2, 2, 2, 382, 383, 7, 4, 2, 2, 383, 45, 3, 2, 2, 2, 384, 385, 5, 168, 85, 2, 385, 47, 3, 2, 2, 2, 386, 387, 7, 33, 2, 2, 387, 388, 5, 168, 85, 2, 388, 390, 7, 16, 2, 2, 389, 391, 5, 46, 24, 2, 390, 389, 3, 2, 2, 2, 390, 391, 3, 2, 2, 2, 391, 396, 3, 2, 2, 2, 392, 393, 7, 17, 2, 2, 393, 395, 5, 46, 24, 2, 394, 392, 3, 2, 2, 2, 395, 398, 3, 2, 2, 2, 396, 394, 3, 2, 2, 2, 396, 397, 3, 2, 2, 2, 397, 399, 3, 2, 2, 2, 398, 396, 3, 2, 2, 2, 399, 400, 7, 18, 2, 2, 400, 49, 3, 2, 2, 2, 401, 410, 7, 23, 2, 2, 402, 407, 5, 52, 27, 2, 403, 404, 7, 17, 2, 2, 404, 406, 5, 52, 27, 2, 405, 403, 3, 2, 2, 2, 406, 409, 3, 2, 2, 2, 407, 405, 3, 2, 2, 2, 407, 408, 3, 2, 2, 2, 408, 411, 3, 2, 2, 2, 409, 407, 3, 2, 2, 2, 410, 402, 3, 2, 2, 2, 410, 411, 3, 2, 2, 2, 411, 412, 3, 2, 2, 2, 412, 413, 7, 24, 2, 2, 413, 51, 3, 2, 2, 2, 414, 416, 5, 64, 33, 2, 415, 417, 5, 72, 37, 2, 416, 415, 3, 2, 2, 2, 416, 417, 3, 2, 2, 2, 417, 419, 3, 2, 2, 2, 418, 420, 5, 168, 85, 2, 419, 418, 3, 2, 2, 2, 419, 420, 3, 2, 2, 2, 420, 53, 3, 2, 2, 2, 421, 430, 7, 23, 2, 2, 422, 427, 5, 56, 29, 2, 423, 424, 7, 17, 2, 2, 424, 426, 5, 56, 29, 2, 425, 423, 3, 2, 2, 2, 426, 429, 3, 2, 2, 2, 427, 425, 3, 2, 2, 2, 427, 428, 3, 2, 2, 2, 428, 431, 3, 2, 2, 2, 429, 427, 3, 2, 2, 2, 430, 422, 3, 2, 2, 2, 430, 431, 3, 2, 2, 2, 431, 432, 3, 2, 2, 2, 432, 433, 7, 24, 2, 2, 433, 55, 3, 2, 2, 2, 434, 436, 5, 64, 33, 2, 435, 437, 7, 110, 2, 2, 436, 435, 3, 2, 2, 2, 436, 437, 3, 2, 2, 2, 437, 439, 3, 2, 2, 2, 438, 440, 5, 168, 85, 2, 439, 438, 3, 2, 2, 2, 439, 440, 3, 2, 2, 2, 440, 57, 3, 2, 2, 2, 441, 450, 7, 23, 2, 2, 442, 447, 5, 60, 31, 2, 443, 444, 7, 17, 2, 2, 444, 446, 5, 60, 31, 2, 445, 443, 3, 2, 2, 2, 446, 449, 3, 2, 2, 2, 447, 445, 3, 2, 2, 2, 447, 448, 3, 2, 2, 2, 448, 451, 3, 2, 2, 2, 449, 447, 3, 2, 2, 2, 450, 442, 3, 2, 2, 2, 450, 451, 3, 2, 2, 2, 451, 452, 3, 2, 2, 2, 452, 453, 7, 24, 2, 2, 453, 59, 3, 2, 2, 2, 454, 456, 5, 64, 33, 2, 455, 457, 5, 72, 37, 2, 456, 455, 3, 2, 2, 2, 456, 457, 3, 2, 2, 2, 457, 61, 3, 2, 2, 2, 458, 460, 5, 64, 33, 2, 459, 461, 5, 72, 37, 2, 460, 459, 3, 2, 2, 2, 460, 461, 3, 2, 2, 2, 461, 462, 3, 2, 2, 2, 462, 463, 5, 168, 85, 2, 463, 63, 3, 2, 2, 2, 464, 465, 8, 33, 1, 2, 465, 472, 5, 110, 56, 2, 466, 472, 5, 66, 34, 2, 467, 472, 5, 68, 35, 2, 468, 472, 5, 70, 36, 2, 469, 470, 7, 36, 2, 2, 470, 472, 7, 112, 2, 2, 471, 464, 3, 2, 2, 2, 471, 466, 3, 2, 2, 2, 471, 467, 3, 2, 2, 2, 471, 468, 3, 2, 2, 2, 471, 469, 3, 2, 2, 2, 472, 481, 3, 2, 2, 2, 473, 474, 12, 5, 2, 2, 474, 476, 7, 34, 2, 2, 475, 477, 5, 112, 57, 2, 476, 475, 3, 2, 2, 2, 476, 477, 3, 2, 2, 2, 477, 478, 3, 2, 2, 2, 478, 480, 7, 35, 2, 2, 479, 473, 3, 2, 2, 2, 480, 483, 3, 2, 2, 2, 481, 479, 3, 2, 2, 2, 481, 482, 3, 2, 2, 2, 482, 65, 3, 2, 2, 2, 483, 481, 3, 2, 2, 2, 484, 489, 5, 168, 85, 2, 485, 486, 7, 37, 2, 2, 486, 488, 5, 168, 85, 2, 487, 485, 3, 2, 2, 2, 488, 491, 3, 2, 2, 2, 489, 487, 3, 2, 2, 2, 489, 490, 3, 2, 2, 2, 490, 67, 3, 2, 2, 2, 491, 489, 3, 2, 2, 2, 492, 493, 7, 38, 2, 2, 493, 494, 7, 23, 2, 2, 494, 495, 5, 110, 56, 2, 495, 496, 7, 39, 2, 2, 496, 497, 5, 64, 33, 2, 497, 498, 7, 24, 2, 2, 498, 69, 3, 2, 2, 2, 499, 500, 7, 30, 2, 2, 500, 506, 5, 58, 30, 2, 501, 505, 7, 111, 2, 2, 502, 505, 7, 109, 2, 2, 503, 505, 5, 74, 38, 2, 504, 501, 3, 2, 2, 2, 504, 502, 3, 2, 2, 2, 504, 503, 3, 2, 2, 2, 505, 508, 3, 2, 2, 2, 506, 504, 3, 2, 2, 2, 506, 507, 3, 2, 2, 2, 507, 511, 3, 2, 2, 2, 508, 506, 3, 2, 2, 2, 509, 510, 7, 31, 2, 2, 510, 512, 5, 58, 30, 2, 511, 509, 3, 2, 2, 2, 511, 512, 3, 2, 2, 2, 512, 71, 3, 2, 2, 2, 513, 514, 9, 5, 2, 2, 514, 73, 3, 2, 2, 2, 515, 516, 9, 6, 2, 2, 516, 75, 3, 2, 2, 2, 517, 521, 7, 16, 2, 2, 518, 520, 5, 78, 40, 2, 519, 518, 3, 2, 2, 2, 520, 523, 3, 2, 2, 2, 521, 519, 3, 2, 2, 2, 521, 522, 3, 2, 2, 2, 522, 524, 3, 2, 2, 2, 523, 521, 3, 2, 2, 2, 524, 525, 7, 18, 2, 2, 525, 77, 3, 2, 2, 2, 526, 539, 5, 82, 42, 2, 527, 539, 5, 84, 43, 2, 528, 539, 5, 88, 45, 2, 529, 539, 5, 76, 39, 2, 530, 539, 5, 90, 46, 2, 531, 539, 5, 92, 47, 2, 532, 539, 5, 94, 48, 2, 533, 539, 5, 96, 49, 2, 534, 539, 5, 98, 50, 2, 535, 539, 5, 100, 51, 2, 536, 539, 5, 102, 52, 2, 537, 539, 5, 86, 44, 2, 538, 526, 3, 2, 2, 2, 538, 527, 3, 2, 2, 2, 538, 528, 3, 2, 2, 2, 538, 529, 3, 2, 2, 2, 538, 530, 3, 2, 2, 2, 538, 531, 3, 2, 2, 2, 538, 532, 3, 2, 2, 2, 538, 533, 3, 2, 2, 2, 538, 534, 3, 2, 2, 2, 538, 535, 3, 2, 2, 2, 538, 536, 3, 2, 2, 2, 538, 537, 3, 2, 2, 2, 539, 79, 3, 2, 2, 2, 540, 541, 5, 112, 57, 2, 541, 542, 7, 4, 2, 2, 542, 81, 3, 2, 2, 2, 543, 544, 7, 43, 2, 2, 544, 545, 7, 23, 2, 2, 545, 546, 5, 112, 57, 2, 546, 547, 7, 24, 2, 2, 547, 550, 5, 78, 40, 2, 548, 549, 7, 44, 2, 2, 549, 551, 5, 78, 40, 2, 550, 548, 3, 2, 2, 2, 550, 551, 3, 2, 2, 2, 551, 83, 3, 2, 2, 2, 552, 553, 7, 45, 2, 2, 553, 554, 7, 23, 2, 2, 554, 555, 5, 112, 57, 2, 555, 556, 7, 24, 2, 2, 556, 557, 5, 78, 40, 2, 557, 85, 3, 2, 2, 2, 558, 561, 5, 104, 53, 2, 559, 561, 5, 80, 41, 2, 560, 558, 3, 2, 2, 2, 560, 559, 3, 2, 2, 2, 561, 87, 3, 2, 2, 2, 562, 563, 7, 26, 2, 2, 563, 566, 7, 23, 2, 2, 564, 567, 5, 86, 44, 2, 565, 567, 7, 4, 2, 2, 566, 564, 3, 2, 2, 2, 566, 565, 3, 2, 2, 2, 567, 570, 3, 2, 2, 2, 568, 571, 5, 80, 41, 2, 569, 571, 7, 4, 2, 2, 570, 568, 3, 2, 2, 2, 570, 569, 3, 2, 2, 2, 571, 573, 3, 2, 2, 2, 572, 574, 5, 112, 57, 2, 573, 572, 3, 2, 2, 2, 573, 574, 3, 2, 2, 2, 574, 575, 3, 2, 2, 2, 575, 576, 7, 24, 2, 2, 576, 577, 5, 78, 40, 2, 577, 89, 3, 2, 2, 2, 578, 580, 7, 46, 2, 2, 579, 581, 7, 118, 2, 2, 580, 579, 3, 2, 2, 2, 580, 581, 3, 2, 2, 2, 581, 582, 3, 2, 2, 2, 582, 583, 5, 126, 64, 2, 583, 91, 3, 2, 2, 2, 584, 585, 7, 47, 2, 2, 585, 586, 5, 78, 40, 2, 586, 587, 7, 45, 2, 2, 587, 588, 7, 23, 2, 2, 588, 589, 5, 112, 57, 2, 589, 590, 7, 24, 2, 2, 590, 591, 7, 4, 2, 2, 591, 93, 3, 2, 2, 2, 592, 593, 7, 108, 2, 2, 593, 594, 7, 4, 2, 2, 594, 95, 3, 2, 2, 2, 595, 596, 7, 106, 2, 2, 596, 597, 7, 4, 2, 2, 597, 97, 3, 2, 2, 2, 598, 600, 7, 48, 2, 2, 599, 601, 5, 112, 57, 2, 600, 599, 3, 2, 2, 2, 600, 601, 3, 2, 2, 2, 601, 602, 3, 2, 2, 2, 602, 603, 7, 4, 2, 2, 603, 99, 3, 2, 2, 2, 604, 605, 7, 49, 2, 2, 605, 606, 7, 4, 2, 2, 606, 101, 3, 2, 2, 2, 607, 608, 7, 50, 2, 2, 608, 609, 5, 124, 63, 2, 609, 610, 7, 4, 2, 2, 610, 103, 3, 2, 2, 2, 611, 612, 7, 51, 2, 2, 612, 619, 5, 108, 55, 2, 613, 619, 5, 62, 32, 2, 614, 615, 7, 23, 2, 2, 615, 616, 5, 106, 54, 2, 616, 617, 7, 24, 2, 2, 617, 619, 3, 2, 2, 2, 618, 611, 3, 2, 2, 2, 618, 613, 3, 2, 2, 2, 618, 614, 3, 2, 2, 2, 619, 622, 3, 2, 2, 2, 620, 621, 7, 11, 2, 2, 621, 623, 5, 112, 57, 2, 622, 620, 3, 2, 2, 2, 622, 623, 3, 2, 2, 2, 623, 624, 3, 2, 2, 2, 624, 625, 7, 4, 2, 2, 625, 105, 3, 2, 2, 2, 626, 628, 5, 62, 32, 2, 627, 626, 3, 2, 2, 2, 627, 628, 3, 2, 2, 2, 628, 635, 3, 2, 2, 2, 629, 631, 7, 17, 2, 2, 630, 632, 5, 62, 32, 2, 631, 630, 3, 2, 2, 2, 631, 632, 3, 2, 2, 2, 632, 634, 3, 2, 2, 2, 633, 629, 3, 2, 2, 2, 634, 637, 3, 2, 2, 2, 635, 633, 3, 2, 2, 2, 635, 636, 3, 2, 2, 2, 636, 107, 3, 2, 2, 2, 637, 635, 3, 2, 2, 2, 638, 645, 7, 23, 2, 2, 639, 641, 5, 168, 85, 2, 640, 639, 3, 2, 2, 2, 640, 641, 3, 2, 2, 2, 641, 642, 3, 2, 2, 2, 642, 644, 7, 17, 2, 2, 643, 640, 3, 2, 2, 2, 644, 647, 3, 2, 2, 2, 645, 643, 3, 2, 2, 2, 645, 646, 3, 2, 2, 2, 646, 649, 3, 2, 2, 2, 647, 645, 3, 2, 2, 2, 648, 650, 5, 168, 85, 2, 649, 648, 3, 2, 2, 2, 649, 650, 3, 2, 2, 2, 650, 651, 3, 2, 2, 2, 651, 652, 7, 24, 2, 2, 652, 109, 3, 2, 2, 2, 653, 654, 9, 7, 2, 2, 654, 111, 3, 2, 2, 2, 655, 656, 8, 57, 1, 2, 656, 657, 7, 57, 2, 2, 657, 674, 5, 64, 33, 2, 658, 659, 7, 23, 2, 2, 659, 660, 5, 112, 57, 2, 660, 661, 7, 24, 2, 2, 661, 674, 3, 2, 2, 2, 662, 663, 9, 8, 2, 2, 663, 674, 5, 112, 57, 21, 664, 665, 9, 9, 2, 2, 665, 674, 5, 112, 57, 20, 666, 667, 9, 10, 2, 2, 667, 674, 5, 112, 57, 19, 668, 669, 7, 62, 2, 2, 669, 674, 5, 112, 57, 18, 670, 671, 7, 6, 2, 2, 671, 674, 5, 112, 57, 17, 672, 674, 5, 114, 58, 2, 673, 655, 3, 2, 2, 2, 673, 658, 3, 2, 2, 2, 673, 662, 3, 2, 2, 2, 673, 664, 3, 2, 2, 2, 673, 666, 3, 2, 2, 2, 673, 668, 3, 2, 2, 2, 673, 670, 3, 2, 2, 2, 673, 672, 3, 2, 2, 2, 674, 734, 3, 2, 2, 2, 675, 676, 12, 16, 2, 2, 676, 677, 7, 63, 2, 2, 677, 733, 5, 112, 57, 17, 678, 679, 12, 15, 2, 2, 679, 680, 9, 11, 2, 2, 680, 733, 5, 112, 57, 16, 681, 682, 12, 14, 2, 2, 682, 683, 9, 9, 2, 2, 683, 733, 5, 112, 57, 15, 684, 685, 12, 13, 2, 2, 685, 686, 9, 12, 2, 2, 686, 733, 5, 112, 57, 14, 687, 688, 12, 12, 2, 2, 688, 689, 7, 68, 2, 2, 689, 733, 5, 112, 57, 13, 690, 691, 12, 11, 2, 2, 691, 692, 7, 5, 2, 2, 692, 733, 5, 112, 57, 12, 693, 694, 12, 10, 2, 2, 694, 695, 7, 69, 2, 2, 695, 733, 5, 112, 57, 11, 696, 697, 12, 9, 2, 2, 697, 698, 9, 13, 2, 2, 698, 733, 5, 112, 57, 10, 699, 700, 12, 8, 2, 2, 700, 701, 9, 14, 2, 2, 701, 733, 5, 112, 57, 9, 702, 703, 12, 7, 2, 2, 703, 704, 7, 72, 2, 2, 704, 733, 5, 112, 57, 8, 705, 706, 12, 6, 2, 2, 706, 707, 7, 73, 2, 2, 707, 733, 5, 112, 57, 7, 708, 709, 12, 5, 2, 2, 709, 710, 7, 74, 2, 2, 710, 711, 5, 112, 57, 2, 711, 712, 7, 75, 2, 2, 712, 713, 5, 112, 57, 6, 713, 733, 3, 2, 2, 2, 714, 715, 12, 4, 2, 2, 715, 716, 9, 15, 2, 2, 716, 733, 5, 112, 57, 5, 717, 718, 12, 27, 2, 2, 718, 733, 9, 8, 2, 2, 719, 720, 12, 25, 2, 2, 720, 721, 7, 34, 2, 2, 721, 722, 5, 112, 57, 2, 722, 723, 7, 35, 2, 2, 723, 733, 3, 2, 2, 2, 724, 725, 12, 24, 2, 2, 725, 726, 7, 23, 2, 2, 726, 727, 5, 122, 62, 2, 727, 728, 7, 24, 2, 2, 728, 733, 3, 2, 2, 2, 729, 730, 12, 23, 2, 2, 730, 731, 7, 37, 2, 2, 731, 733, 5, 168, 85, 2, 732, 675, 3, 2, 2, 2, 732, 678, 3, 2, 2, 2, 732, 681, 3, 2, 2, 2, 732, 684, 3, 2, 2, 2, 732, 687, 3, 2, 2, 2, 732, 690, 3, 2, 2, 2, 732, 693, 3, 2, 2, 2, 732, 696, 3, 2, 2, 2, 732, 699, 3, 2, 2, 2, 732, 702, 3, 2, 2, 2, 732, 705, 3, 2, 2, 2, 732, 708, 3, 2, 2, 2, 732, 714, 3, 2, 2, 2, 732, 717, 3, 2, 2, 2, 732, 719, 3, 2, 2, 2, 732, 724, 3, 2, 2, 2, 732, 729, 3, 2, 2, 2, 733, 736, 3, 2, 2, 2, 734, 732, 3, 2, 2, 2, 734, 735, 3, 2, 2, 2, 735, 113, 3, 2, 2, 2, 736, 734, 3, 2, 2, 2, 737, 753, 7, 99, 2, 2, 738, 753, 5, 166, 84, 2, 739, 753, 7, 103, 2, 2, 740, 753, 7, 118, 2, 2, 741, 744, 5, 168, 85, 2, 742, 743, 7, 34, 2, 2, 743, 745, 7, 35, 2, 2, 744, 742, 3, 2, 2, 2, 744, 745, 3, 2, 2, 2, 745, 753, 3, 2, 2, 2, 746, 753, 5, 162, 82, 2, 747, 750, 5, 164, 83, 2, 748, 749, 7, 34, 2, 2, 749, 751, 7, 35, 2, 2, 750, 748, 3, 2, 2, 2, 750, 751, 3, 2, 2, 2, 751, 753, 3, 2, 2, 2, 752, 737, 3, 2, 2, 2, 752, 738, 3, 2, 2, 2, 752, 739, 3, 2, 2, 2, 752, 740, 3, 2, 2, 2, 752, 741, 3, 2, 2, 2, 752, 746, 3, 2, 2, 2, 752, 747, 3, 2, 2, 2, 753, 115, 3, 2, 2, 2, 754, 759, 5, 112, 57, 2, 755, 756, 7, 17, 2, 2, 756, 758, 5, 112, 57, 2, 757, 755, 3, 2, 2, 2, 758, 761, 3, 2, 2, 2, 759, 757, 3, 2, 2, 2, 759, 760, 3, 2, 2, 2, 760, 117, 3, 2, 2, 2, 761, 759, 3, 2, 2, 2, 762, 767, 5, 120, 61, 2, 763, 764, 7, 17, 2, 2, 764, 766, 5, 120, 61, 2, 765, 763, 3, 2, 2, 2, 766, 769, 3, 2, 2, 2, 767, 765, 3, 2, 2, 2, 767, 768, 3, 2, 2, 2, 768, 771, 3, 2, 2, 2, 769, 767, 3, 2, 2, 2, 770, 772, 7, 17, 2, 2, 771, 770, 3, 2, 2, 2, 771, 772, 3, 2, 2, 2, 772, 119, 3, 2, 2, 2, 773, 774, 5, 168, 85, 2, 774, 775, 7, 75, 2, 2, 775, 776, 5, 112, 57, 2, 776, 121, 3, 2, 2, 2, 777, 779, 7, 16, 2, 2, 778, 780, 5, 118, 60, 2, 779, 778, 3, 2, 2, 2, 779, 780, 3, 2, 2, 2, 780, 781, 3, 2, 2, 2, 781, 786, 7, 18, 2, 2, 782, 784, 5, 116, 59, 2, 783, 782, 3, 2, 2, 2, 783, 784, 3, 2, 2, 2, 784, 786, 3, 2, 2, 2, 785, 777, 3, 2, 2, 2, 785, 783, 3, 2, 2, 2, 786, 123, 3, 2, 2, 2, 787, 788, 5, 112, 57, 2, 788, 789, 7, 23, 2, 2, 789, 790, 5, 122, 62, 2, 790, 791, 7, 24, 2, 2, 791, 125, 3, 2, 2, 2, 792, 796, 7, 16, 2, 2, 793, 795, 5, 128, 65, 2, 794, 793, 3, 2, 2, 2, 795, 798, 3, 2, 2, 2, 796, 794, 3, 2, 2, 2, 796, 797, 3, 2, 2, 2, 797, 799, 3, 2, 2, 2, 798, 796, 3, 2, 2, 2, 799, 800, 7, 18, 2, 2, 800, 127, 3, 2, 2, 2, 801, 819, 5, 168, 85, 2, 802, 819, 5, 126, 64, 2, 803, 819, 5, 130, 66, 2, 804, 819, 5, 134, 68, 2, 805, 819, 5, 136, 69, 2, 806, 819, 5, 142, 72, 2, 807, 819, 5, 144, 73, 2, 808, 819, 5, 146, 74, 2, 809, 819, 5, 150, 76, 2, 810, 819, 5, 154, 78, 2, 811, 819, 5, 156, 79, 2, 812, 819, 7, 106, 2, 2, 813, 819, 7, 108, 2, 2, 814, 819, 5, 160, 81, 2, 815, 819, 5, 166, 84, 2, 816, 819, 7, 118, 2, 2, 817, 819, 7, 103, 2, 2, 818, 801, 3, 2, 2, 2, 818, 802, 3, 2, 2, 2, 818, 803, 3, 2, 2, 2, 818, 804, 3, 2, 2, 2, 818, 805, 3, 2, 2, 2, 818, 806, 3, 2, 2, 2, 818, 807, 3, 2, 2, 2, 818, 808, 3, 2, 2, 2, 818, 809, 3, 2, 2, 2, 818, 810, 3, 2, 2, 2, 818, 811, 3, 2, 2, 2, 818, 812, 3, 2, 2, 2, 818, 813, 3, 2, 2, 2, 818, 814, 3, 2, 2, 2, 818, 815, 3, 2, 2, 2, 818, 816, 3, 2, 2, 2, 818, 817, 3, 2, 2, 2, 819, 129, 3, 2, 2, 2, 820, 823, 5, 132, 67, 2, 821, 823, 5, 158, 80, 2, 822, 820, 3, 2, 2, 2, 822, 821, 3, 2, 2, 2, 823, 131, 3, 2, 2, 2, 824, 829, 7, 48, 2, 2, 825, 829, 7, 36, 2, 2, 826, 829, 7, 54, 2, 2, 827, 829, 5, 168, 85, 2, 828, 824, 3, 2, 2, 2, 828, 825, 3, 2, 2, 2, 828, 826, 3, 2, 2, 2, 828, 827, 3, 2, 2, 2, 829, 842, 3, 2, 2, 2, 830, 832, 7, 23, 2, 2, 831, 833, 5, 130, 66, 2, 832, 831, 3, 2, 2, 2, 832, 833, 3, 2, 2, 2, 833, 838, 3, 2, 2, 2, 834, 835, 7, 17, 2, 2, 835, 837, 5, 130, 66, 2, 836, 834, 3, 2, 2, 2, 837, 840, 3, 2, 2, 2, 838, 836, 3, 2, 2, 2, 838, 839, 3, 2, 2, 2, 839, 841, 3, 2, 2, 2, 840, 838, 3, 2, 2, 2, 841, 843, 7, 24, 2, 2, 842, 830, 3, 2, 2, 2, 842, 843, 3, 2, 2, 2, 843, 133, 3, 2, 2, 2, 844, 845, 7, 86, 2, 2, 845, 848, 5, 138, 70, 2, 846, 847, 7, 87, 2, 2, 847, 849, 5, 130, 66, 2, 848, 846, 3, 2, 2, 2, 848, 849, 3, 2, 2, 2, 849, 135, 3, 2, 2, 2, 850, 851, 5, 138, 70, 2, 851, 852, 7, 87, 2, 2, 852, 853, 5, 130, 66, 2, 853, 137, 3, 2, 2, 2, 854, 860, 5, 168, 85, 2, 855, 856, 7, 23, 2, 2, 856, 857, 5, 140, 71, 2, 857, 858, 7, 24, 2, 2, 858, 860, 3, 2, 2, 2, 859, 854, 3, 2, 2, 2, 859, 855, 3, 2, 2, 2, 860, 139, 3, 2, 2, 2, 861, 866, 5, 168, 85, 2, 862, 863, 7, 17, 2, 2, 863, 865, 5, 168, 85, 2, 864, 862, 3, 2, 2, 2, 865, 868, 3, 2, 2, 2, 866, 864, 3, 2, 2, 2, 866, 867, 3, 2, 2, 2, 867, 141, 3, 2, 2, 2, 868, 866, 3, 2, 2, 2, 869, 870, 7, 88, 2, 2, 870, 871, 5, 168, 85, 2, 871, 143, 3, 2, 2, 2, 872, 873, 5, 168, 85, 2, 873, 874, 7, 75, 2, 2, 874, 145, 3, 2, 2, 2, 875, 876, 7, 89, 2, 2, 876, 880, 5, 130, 66, 2, 877, 879, 5, 148, 75, 2, 878, 877, 3, 2, 2, 2, 879, 882, 3, 2, 2, 2, 880, 878, 3, 2, 2, 2, 880, 881, 3, 2, 2, 2, 881, 147, 3, 2, 2, 2, 882, 880, 3, 2, 2, 2, 883, 884, 7, 90, 2, 2, 884, 885, 5, 158, 80, 2, 885, 886, 5, 126, 64, 2, 886, 890, 3, 2, 2, 2, 887, 888, 7, 91, 2, 2, 888, 890, 5, 126, 64, 2, 889, 883, 3, 2, 2, 2, 889, 887, 3, 2, 2, 2, 890, 149, 3, 2, 2, 2, 891, 892, 7, 30, 2, 2, 892, 893, 5, 168, 85, 2, 893, 895, 7, 23, 2, 2, 894, 896, 5, 140, 71, 2, 895, 894, 3, 2, 2, 2, 895, 896, 3, 2, 2, 2, 896, 897, 3, 2, 2, 2, 897, 899, 7, 24, 2, 2, 898, 900, 5, 152, 77, 2, 899, 898, 3, 2, 2, 2, 899, 900, 3, 2, 2, 2, 900, 901, 3, 2, 2, 2, 901, 902, 5, 126, 64, 2, 902, 151, 3, 2, 2, 2, 903, 904, 7, 92, 2, 2, 904, 905, 5, 140, 71, 2, 905, 153, 3, 2, 2, 2, 906, 909, 7, 26, 2, 2, 907, 910, 5, 126, 64, 2, 908, 910, 5, 130, 66, 2, 909, 907, 3, 2, 2, 2, 909, 908, 3, 2, 2, 2, 910, 911, 3, 2, 2, 2, 911, 914, 5, 130, 66, 2, 912, 915, 5, 126, 64, 2, 913, 915, 5, 130, 66, 2, 914, 912, 3, 2, 2, 2, 914, 913, 3, 2, 2, 2, 915, 916, 3, 2, 2, 2, 916, 917, 5, 126, 64, 2, 917, 155, 3, 2, 2, 2, 918, 919, 7, 43, 2, 2, 919, 920, 5, 130, 66, 2, 920, 921, 5, 126, 64, 2, 921, 157, 3, 2, 2, 2, 922, 923, 9, 16, 2, 2, 923, 159, 3, 2, 2, 2, 924, 925, 7, 46, 2, 2, 925, 926, 5, 168, 85, 2, 926, 927, 5, 126, 64, 2, 927, 161, 3, 2, 2, 2, 928, 930, 7, 23, 2, 2, 929, 931, 5, 112, 57, 2, 930, 929, 3, 2, 2, 2, 930, 931, 3, 2, 2, 2, 931, 938, 3, 2, 2, 2, 932, 934, 7, 17, 2, 2, 933, 935, 5, 112, 57, 2, 934, 933, 3, 2, 2, 2, 934, 935, 3, 2, 2, 2, 935, 937, 3, 2, 2, 2, 936, 932, 3, 2, 2, 2, 937, 940, 3, 2, 2, 2, 938, 936, 3, 2, 2, 2, 938, 939, 3, 2, 2, 2, 939, 941, 3, 2, 2, 2, 940, 938, 3, 2, 2, 2, 941, 955, 7, 24, 2, 2, 942, 951, 7, 34, 2, 2, 943, 948, 5, 112, 57, 2, 944, 945, 7, 17, 2, 2, 945, 947, 5, 112, 57, 2, 946, 944, 3, 2, 2, 2, 947, 950, 3, 2, 2, 2, 948, 946, 3, 2, 2, 2, 948, 949, 3, 2, 2, 2, 949, 952, 3, 2, 2, 2, 950, 948, 3, 2, 2, 2, 951, 943, 3, 2, 2, 2, 951, 952, 3, 2, 2, 2, 952, 953, 3, 2, 2, 2, 953, 955, 7, 35, 2, 2, 954, 928, 3, 2, 2, 2, 954, 942, 3, 2, 2, 2, 955, 163, 3, 2, 2, 2, 956, 957, 5, 110, 56, 2, 957, 165, 3, 2, 2, 2, 958, 960, 9, 17, 2, 2, 959, 961, 7, 102, 2, 2, 960, 959, 3, 2, 2, 2, 960, 961, 3, 2, 2, 2, 961, 167, 3, 2, 2, 2, 962, 963, 9, 18, 2, 2, 963, 169, 3, 2, 2, 2, 106, 173, 175, 189, 193, 198, 205, 211, 217, 221, 233, 241, 251, 254, 260, 272, 277, 287, 293, 299, 308, 322, 325, 337, 344, 347, 351, 356, 360, 371, 373, 380, 390, 396, 407, 410, 416, 419, 427, 430, 436, 439, 447, 450, 456, 460, 471, 476, 481, 489, 504, 506, 511, 521, 538, 550, 560, 566, 570, 573, 580, 600, 618, 622, 627, 631, 635, 640, 645, 649, 673, 732, 734, 744, 750, 752, 759, 767, 771, 779, 783, 785, 796, 818, 822, 828, 832, 838, 842, 848, 859, 866, 880, 889, 895, 899, 909, 914, 930, 934, 938, 948, 951, 954, 960] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 135, 1133, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 206, 10, 2, 12, 2, 14, 2, 209, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 5, 5, 222, 10, 5, 3, 6, 3, 6, 5, 6, 226, 10, 6, 3, 6, 7, 6, 229, 10, 6, 12, 6, 14, 6, 232, 11, 6, 3, 7, 3, 7, 3, 8, 5, 8, 237, 10, 8, 3, 8, 3, 8, 5, 8, 241, 10, 8, 3, 8, 5, 8, 244, 10, 8, 3, 9, 3, 9, 3, 9, 5, 9, 249, 10, 9, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 255, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 262, 10, 10, 3, 10, 3, 10, 5, 10, 266, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 277, 10, 10, 12, 10, 14, 10, 280, 11, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 287, 10, 10, 3, 11, 3, 11, 3, 12, 5, 12, 292, 10, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 7, 12, 300, 10, 12, 12, 12, 14, 12, 303, 11, 12, 5, 12, 305, 10, 12, 3, 12, 3, 12, 7, 12, 309, 10, 12, 12, 12, 14, 12, 312, 11, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 5, 13, 319, 10, 13, 3, 13, 5, 13, 322, 10, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 333, 10, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 7, 15, 342, 10, 15, 12, 15, 14, 15, 345, 11, 15, 3, 15, 3, 15, 3, 15, 5, 15, 350, 10, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 5, 19, 377, 10, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 7, 20, 389, 10, 20, 12, 20, 14, 20, 392, 11, 20, 5, 20, 394, 10, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 5, 21, 401, 10, 21, 3, 21, 3, 21, 7, 21, 405, 10, 21, 12, 21, 14, 21, 408, 11, 21, 3, 21, 3, 21, 5, 21, 412, 10, 21, 3, 22, 3, 22, 3, 22, 5, 22, 417, 10, 22, 3, 22, 5, 22, 420, 10, 22, 3, 23, 3, 23, 3, 23, 3, 23, 5, 23, 426, 10, 23, 3, 23, 3, 23, 5, 23, 430, 10, 23, 3, 24, 3, 24, 5, 24, 434, 10, 24, 3, 24, 3, 24, 3, 24, 5, 24, 439, 10, 24, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 7, 26, 452, 10, 26, 12, 26, 14, 26, 455, 11, 26, 3, 27, 3, 27, 3, 27, 3, 27, 5, 27, 461, 10, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 5, 29, 471, 10, 29, 3, 29, 3, 29, 7, 29, 475, 10, 29, 12, 29, 14, 29, 478, 11, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 7, 30, 486, 10, 30, 12, 30, 14, 30, 489, 11, 30, 5, 30, 491, 10, 30, 3, 30, 3, 30, 3, 31, 3, 31, 5, 31, 497, 10, 31, 3, 31, 5, 31, 500, 10, 31, 3, 32, 3, 32, 3, 32, 3, 32, 7, 32, 506, 10, 32, 12, 32, 14, 32, 509, 11, 32, 5, 32, 511, 10, 32, 3, 32, 3, 32, 3, 33, 3, 33, 5, 33, 517, 10, 33, 3, 33, 5, 33, 520, 10, 33, 3, 34, 3, 34, 3, 34, 3, 34, 7, 34, 526, 10, 34, 12, 34, 14, 34, 529, 11, 34, 5, 34, 531, 10, 34, 3, 34, 3, 34, 3, 35, 3, 35, 5, 35, 537, 10, 35, 3, 36, 3, 36, 5, 36, 541, 10, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 552, 10, 37, 3, 37, 3, 37, 3, 37, 5, 37, 557, 10, 37, 3, 37, 7, 37, 560, 10, 37, 12, 37, 14, 37, 563, 11, 37, 3, 38, 3, 38, 3, 38, 7, 38, 568, 10, 38, 12, 38, 14, 38, 571, 11, 38, 3, 39, 3, 39, 5, 39, 575, 10, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 7, 41, 589, 10, 41, 12, 41, 14, 41, 592, 11, 41, 3, 41, 3, 41, 5, 41, 596, 10, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 7, 44, 604, 10, 44, 12, 44, 14, 44, 607, 11, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 5, 45, 626, 10, 45, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 5, 47, 638, 10, 47, 3, 48, 3, 48, 3, 48, 5, 48, 643, 10, 48, 3, 48, 3, 48, 6, 48, 647, 10, 48, 13, 48, 14, 48, 648, 3, 49, 3, 49, 5, 49, 653, 10, 49, 3, 49, 5, 49, 656, 10, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 5, 51, 668, 10, 51, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 5, 53, 677, 10, 53, 3, 53, 3, 53, 5, 53, 681, 10, 53, 3, 53, 5, 53, 684, 10, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 5, 54, 691, 10, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 5, 58, 711, 10, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 5, 62, 733, 10, 62, 3, 62, 3, 62, 5, 62, 737, 10, 62, 3, 62, 3, 62, 3, 63, 5, 63, 742, 10, 63, 3, 63, 3, 63, 5, 63, 746, 10, 63, 7, 63, 748, 10, 63, 12, 63, 14, 63, 751, 11, 63, 3, 64, 3, 64, 5, 64, 755, 10, 64, 3, 64, 7, 64, 758, 10, 64, 12, 64, 14, 64, 761, 11, 64, 3, 64, 5, 64, 764, 10, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 5, 66, 788, 10, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 5, 66, 842, 10, 66, 3, 66, 3, 66, 5, 66, 846, 10, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 7, 66, 862, 10, 66, 12, 66, 14, 66, 865, 11, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 5, 67, 874, 10, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 5, 67, 882, 10, 67, 5, 67, 884, 10, 67, 3, 68, 3, 68, 3, 68, 7, 68, 889, 10, 68, 12, 68, 14, 68, 892, 11, 68, 3, 69, 3, 69, 3, 69, 7, 69, 897, 10, 69, 12, 69, 14, 69, 900, 11, 69, 3, 69, 5, 69, 903, 10, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 71, 3, 71, 5, 71, 911, 10, 71, 3, 71, 3, 71, 5, 71, 915, 10, 71, 5, 71, 917, 10, 71, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 7, 73, 926, 10, 73, 12, 73, 14, 73, 929, 11, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 5, 74, 951, 10, 74, 3, 75, 3, 75, 3, 75, 5, 75, 956, 10, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 77, 5, 77, 966, 10, 77, 3, 77, 3, 77, 5, 77, 970, 10, 77, 3, 77, 3, 77, 7, 77, 974, 10, 77, 12, 77, 14, 77, 977, 11, 77, 3, 77, 5, 77, 980, 10, 77, 3, 78, 3, 78, 3, 78, 3, 78, 5, 78, 986, 10, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 5, 80, 998, 10, 80, 3, 81, 3, 81, 3, 81, 7, 81, 1003, 10, 81, 12, 81, 14, 81, 1006, 11, 81, 3, 82, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 7, 84, 1017, 10, 84, 12, 84, 14, 84, 1020, 11, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 5, 85, 1028, 10, 85, 3, 86, 3, 86, 3, 86, 3, 86, 5, 86, 1034, 10, 86, 3, 86, 3, 86, 5, 86, 1038, 10, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 5, 88, 1048, 10, 88, 3, 88, 3, 88, 3, 88, 5, 88, 1053, 10, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 3, 89, 3, 90, 3, 90, 3, 90, 3, 90, 5, 90, 1065, 10, 90, 3, 91, 3, 91, 3, 91, 3, 91, 3, 92, 3, 92, 5, 92, 1073, 10, 92, 3, 92, 3, 92, 5, 92, 1077, 10, 92, 7, 92, 1079, 10, 92, 12, 92, 14, 92, 1082, 11, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 7, 92, 1089, 10, 92, 12, 92, 14, 92, 1092, 11, 92, 5, 92, 1094, 10, 92, 3, 92, 5, 92, 1097, 10, 92, 3, 93, 3, 93, 5, 93, 1101, 10, 93, 3, 94, 3, 94, 5, 94, 1105, 10, 94, 3, 95, 3, 95, 3, 96, 6, 96, 1110, 10, 96, 13, 96, 14, 96, 1111, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 7, 97, 1119, 10, 97, 12, 97, 14, 97, 1122, 11, 97, 3, 97, 3, 97, 5, 97, 1126, 10, 97, 3, 98, 6, 98, 1129, 10, 98, 13, 98, 14, 98, 1130, 3, 98, 2, 4, 72, 130, 99, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 2, 17, 3, 2, 6, 12, 3, 2, 21, 23, 3, 2, 42, 44, 6, 2, 113, 113, 120, 120, 124, 124, 126, 126, 5, 2, 38, 38, 57, 60, 100, 104, 3, 2, 61, 62, 3, 2, 65, 66, 3, 2, 67, 68, 4, 2, 15, 15, 71, 72, 3, 2, 73, 74, 3, 2, 8, 11, 3, 2, 77, 78, 4, 2, 12, 12, 81, 90, 3, 2, 106, 107, 11, 2, 16, 16, 27, 27, 44, 44, 56, 56, 98, 98, 116, 116, 120, 120, 127, 127, 129, 130, 2, 1258, 2, 207, 3, 2, 2, 2, 4, 212, 3, 2, 2, 2, 6, 217, 3, 2, 2, 2, 8, 221, 3, 2, 2, 2, 10, 223, 3, 2, 2, 2, 12, 233, 3, 2, 2, 2, 14, 243, 3, 2, 2, 2, 16, 245, 3, 2, 2, 2, 18, 286, 3, 2, 2, 2, 20, 288, 3, 2, 2, 2, 22, 291, 3, 2, 2, 2, 24, 315, 3, 2, 2, 2, 26, 332, 3, 2, 2, 2, 28, 334, 3, 2, 2, 2, 30, 353, 3, 2, 2, 2, 32, 360, 3, 2, 2, 2, 34, 365, 3, 2, 2, 2, 36, 371, 3, 2, 2, 2, 38, 380, 3, 2, 2, 2, 40, 397, 3, 2, 2, 2, 42, 413, 3, 2, 2, 2, 44, 421, 3, 2, 2, 2, 46, 438, 3, 2, 2, 2, 48, 440, 3, 2, 2, 2, 50, 453, 3, 2, 2, 2, 52, 456, 3, 2, 2, 2, 54, 464, 3, 2, 2, 2, 56, 466, 3, 2, 2, 2, 58, 481, 3, 2, 2, 2, 60, 494, 3, 2, 2, 2, 62, 501, 3, 2, 2, 2, 64, 514, 3, 2, 2, 2, 66, 521, 3, 2, 2, 2, 68, 534, 3, 2, 2, 2, 70, 538, 3, 2, 2, 2, 72, 551, 3, 2, 2, 2, 74, 564, 3, 2, 2, 2, 76, 574, 3, 2, 2, 2, 78, 576, 3, 2, 2, 2, 80, 583, 3, 2, 2, 2, 82, 597, 3, 2, 2, 2, 84, 599, 3, 2, 2, 2, 86, 601, 3, 2, 2, 2, 88, 625, 3, 2, 2, 2, 90, 627, 3, 2, 2, 2, 92, 630, 3, 2, 2, 2, 94, 639, 3, 2, 2, 2, 96, 650, 3, 2, 2, 2, 98, 659, 3, 2, 2, 2, 100, 667, 3, 2, 2, 2, 102, 669, 3, 2, 2, 2, 104, 672, 3, 2, 2, 2, 106, 688, 3, 2, 2, 2, 108, 694, 3, 2, 2, 2, 110, 702, 3, 2, 2, 2, 112, 705, 3, 2, 2, 2, 114, 708, 3, 2, 2, 2, 116, 714, 3, 2, 2, 2, 118, 717, 3, 2, 2, 2, 120, 721, 3, 2, 2, 2, 122, 732, 3, 2, 2, 2, 124, 741, 3, 2, 2, 2, 126, 752, 3, 2, 2, 2, 128, 767, 3, 2, 2, 2, 130, 787, 3, 2, 2, 2, 132, 883, 3, 2, 2, 2, 134, 885, 3, 2, 2, 2, 136, 893, 3, 2, 2, 2, 138, 904, 3, 2, 2, 2, 140, 916, 3, 2, 2, 2, 142, 918, 3, 2, 2, 2, 144, 923, 3, 2, 2, 2, 146, 950, 3, 2, 2, 2, 148, 955, 3, 2, 2, 2, 150, 957, 3, 2, 2, 2, 152, 965, 3, 2, 2, 2, 154, 981, 3, 2, 2, 2, 156, 987, 3, 2, 2, 2, 158, 997, 3, 2, 2, 2, 160, 999, 3, 2, 2, 2, 162, 1007, 3, 2, 2, 2, 164, 1010, 3, 2, 2, 2, 166, 1013, 3, 2, 2, 2, 168, 1027, 3, 2, 2, 2, 170, 1029, 3, 2, 2, 2, 172, 1041, 3, 2, 2, 2, 174, 1044, 3, 2, 2, 2, 176, 1056, 3, 2, 2, 2, 178, 1064, 3, 2, 2, 2, 180, 1066, 3, 2, 2, 2, 182, 1096, 3, 2, 2, 2, 184, 1100, 3, 2, 2, 2, 186, 1102, 3, 2, 2, 2, 188, 1106, 3, 2, 2, 2, 190, 1109, 3, 2, 2, 2, 192, 1113, 3, 2, 2, 2, 194, 1128, 3, 2, 2, 2, 196, 206, 5, 4, 3, 2, 197, 206, 5, 18, 10, 2, 198, 206, 5, 22, 12, 2, 199, 206, 5, 56, 29, 2, 200, 206, 5, 38, 20, 2, 201, 206, 5, 44, 23, 2, 202, 206, 5, 30, 16, 2, 203, 206, 5, 32, 17, 2, 204, 206, 5, 34, 18, 2, 205, 196, 3, 2, 2, 2, 205, 197, 3, 2, 2, 2, 205, 198, 3, 2, 2, 2, 205, 199, 3, 2, 2, 2, 205, 200, 3, 2, 2, 2, 205, 201, 3, 2, 2, 2, 205, 202, 3, 2, 2, 2, 205, 203, 3, 2, 2, 2, 205, 204, 3, 2, 2, 2, 206, 209, 3, 2, 2, 2, 207, 205, 3, 2, 2, 2, 207, 208, 3, 2, 2, 2, 208, 210, 3, 2, 2, 2, 209, 207, 3, 2, 2, 2, 210, 211, 7, 2, 2, 3, 211, 3, 3, 2, 2, 2, 212, 213, 7, 3, 2, 2, 213, 214, 5, 6, 4, 2, 214, 215, 5, 8, 5, 2, 215, 216, 7, 4, 2, 2, 216, 5, 3, 2, 2, 2, 217, 218, 5, 188, 95, 2, 218, 7, 3, 2, 2, 2, 219, 222, 5, 10, 6, 2, 220, 222, 5, 130, 66, 2, 221, 219, 3, 2, 2, 2, 221, 220, 3, 2, 2, 2, 222, 9, 3, 2, 2, 2, 223, 230, 5, 14, 8, 2, 224, 226, 7, 5, 2, 2, 225, 224, 3, 2, 2, 2, 225, 226, 3, 2, 2, 2, 226, 227, 3, 2, 2, 2, 227, 229, 5, 14, 8, 2, 228, 225, 3, 2, 2, 2, 229, 232, 3, 2, 2, 2, 230, 228, 3, 2, 2, 2, 230, 231, 3, 2, 2, 2, 231, 11, 3, 2, 2, 2, 232, 230, 3, 2, 2, 2, 233, 234, 9, 2, 2, 2, 234, 13, 3, 2, 2, 2, 235, 237, 5, 12, 7, 2, 236, 235, 3, 2, 2, 2, 236, 237, 3, 2, 2, 2, 237, 238, 3, 2, 2, 2, 238, 244, 7, 132, 2, 2, 239, 241, 5, 12, 7, 2, 240, 239, 3, 2, 2, 2, 240, 241, 3, 2, 2, 2, 241, 242, 3, 2, 2, 2, 242, 244, 7, 106, 2, 2, 243, 236, 3, 2, 2, 2, 243, 240, 3, 2, 2, 2, 244, 15, 3, 2, 2, 2, 245, 248, 5, 188, 95, 2, 246, 247, 7, 13, 2, 2, 247, 249, 5, 188, 95, 2, 248, 246, 3, 2, 2, 2, 248, 249, 3, 2, 2, 2, 249, 17, 3, 2, 2, 2, 250, 251, 7, 14, 2, 2, 251, 254, 5, 20, 11, 2, 252, 253, 7, 13, 2, 2, 253, 255, 5, 188, 95, 2, 254, 252, 3, 2, 2, 2, 254, 255, 3, 2, 2, 2, 255, 256, 3, 2, 2, 2, 256, 257, 7, 4, 2, 2, 257, 287, 3, 2, 2, 2, 258, 261, 7, 14, 2, 2, 259, 262, 7, 15, 2, 2, 260, 262, 5, 188, 95, 2, 261, 259, 3, 2, 2, 2, 261, 260, 3, 2, 2, 2, 262, 265, 3, 2, 2, 2, 263, 264, 7, 13, 2, 2, 264, 266, 5, 188, 95, 2, 265, 263, 3, 2, 2, 2, 265, 266, 3, 2, 2, 2, 266, 267, 3, 2, 2, 2, 267, 268, 7, 16, 2, 2, 268, 269, 5, 20, 11, 2, 269, 270, 7, 4, 2, 2, 270, 287, 3, 2, 2, 2, 271, 272, 7, 14, 2, 2, 272, 273, 7, 17, 2, 2, 273, 278, 5, 16, 9, 2, 274, 275, 7, 18, 2, 2, 275, 277, 5, 16, 9, 2, 276, 274, 3, 2, 2, 2, 277, 280, 3, 2, 2, 2, 278, 276, 3, 2, 2, 2, 278, 279, 3, 2, 2, 2, 279, 281, 3, 2, 2, 2, 280, 278, 3, 2, 2, 2, 281, 282, 7, 19, 2, 2, 282, 283, 7, 16, 2, 2, 283, 284, 5, 20, 11, 2, 284, 285, 7, 4, 2, 2, 285, 287, 3, 2, 2, 2, 286, 250, 3, 2, 2, 2, 286, 258, 3, 2, 2, 2, 286, 271, 3, 2, 2, 2, 287, 19, 3, 2, 2, 2, 288, 289, 7, 131, 2, 2, 289, 21, 3, 2, 2, 2, 290, 292, 7, 20, 2, 2, 291, 290, 3, 2, 2, 2, 291, 292, 3, 2, 2, 2, 292, 293, 3, 2, 2, 2, 293, 294, 9, 3, 2, 2, 294, 304, 5, 188, 95, 2, 295, 296, 7, 24, 2, 2, 296, 301, 5, 24, 13, 2, 297, 298, 7, 18, 2, 2, 298, 300, 5, 24, 13, 2, 299, 297, 3, 2, 2, 2, 300, 303, 3, 2, 2, 2, 301, 299, 3, 2, 2, 2, 301, 302, 3, 2, 2, 2, 302, 305, 3, 2, 2, 2, 303, 301, 3, 2, 2, 2, 304, 295, 3, 2, 2, 2, 304, 305, 3, 2, 2, 2, 305, 306, 3, 2, 2, 2, 306, 310, 7, 17, 2, 2, 307, 309, 5, 26, 14, 2, 308, 307, 3, 2, 2, 2, 309, 312, 3, 2, 2, 2, 310, 308, 3, 2, 2, 2, 310, 311, 3, 2, 2, 2, 311, 313, 3, 2, 2, 2, 312, 310, 3, 2, 2, 2, 313, 314, 7, 19, 2, 2, 314, 23, 3, 2, 2, 2, 315, 321, 5, 74, 38, 2, 316, 318, 7, 25, 2, 2, 317, 319, 5, 134, 68, 2, 318, 317, 3, 2, 2, 2, 318, 319, 3, 2, 2, 2, 319, 320, 3, 2, 2, 2, 320, 322, 7, 26, 2, 2, 321, 316, 3, 2, 2, 2, 321, 322, 3, 2, 2, 2, 322, 25, 3, 2, 2, 2, 323, 333, 5, 28, 15, 2, 324, 333, 5, 36, 19, 2, 325, 333, 5, 38, 20, 2, 326, 333, 5, 40, 21, 2, 327, 333, 5, 44, 23, 2, 328, 333, 5, 52, 27, 2, 329, 333, 5, 56, 29, 2, 330, 333, 5, 32, 17, 2, 331, 333, 5, 34, 18, 2, 332, 323, 3, 2, 2, 2, 332, 324, 3, 2, 2, 2, 332, 325, 3, 2, 2, 2, 332, 326, 3, 2, 2, 2, 332, 327, 3, 2, 2, 2, 332, 328, 3, 2, 2, 2, 332, 329, 3, 2, 2, 2, 332, 330, 3, 2, 2, 2, 332, 331, 3, 2, 2, 2, 333, 27, 3, 2, 2, 2, 334, 343, 5, 72, 37, 2, 335, 342, 7, 122, 2, 2, 336, 342, 7, 119, 2, 2, 337, 342, 7, 121, 2, 2, 338, 342, 7, 113, 2, 2, 339, 342, 7, 114, 2, 2, 340, 342, 5, 192, 97, 2, 341, 335, 3, 2, 2, 2, 341, 336, 3, 2, 2, 2, 341, 337, 3, 2, 2, 2, 341, 338, 3, 2, 2, 2, 341, 339, 3, 2, 2, 2, 341, 340, 3, 2, 2, 2, 342, 345, 3, 2, 2, 2, 343, 341, 3, 2, 2, 2, 343, 344, 3, 2, 2, 2, 344, 346, 3, 2, 2, 2, 345, 343, 3, 2, 2, 2, 346, 349, 5, 188, 95, 2, 347, 348, 7, 12, 2, 2, 348, 350, 5, 130, 66, 2, 349, 347, 3, 2, 2, 2, 349, 350, 3, 2, 2, 2, 350, 351, 3, 2, 2, 2, 351, 352, 7, 4, 2, 2, 352, 29, 3, 2, 2, 2, 353, 354, 5, 72, 37, 2, 354, 355, 7, 113, 2, 2, 355, 356, 5, 188, 95, 2, 356, 357, 7, 12, 2, 2, 357, 358, 5, 130, 66, 2, 358, 359, 7, 4, 2, 2, 359, 31, 3, 2, 2, 2, 360, 361, 7, 27, 2, 2, 361, 362, 5, 188, 95, 2, 362, 363, 5, 58, 30, 2, 363, 364, 7, 4, 2, 2, 364, 33, 3, 2, 2, 2, 365, 366, 7, 125, 2, 2, 366, 367, 5, 188, 95, 2, 367, 368, 7, 24, 2, 2, 368, 369, 5, 128, 65, 2, 369, 370, 7, 4, 2, 2, 370, 35, 3, 2, 2, 2, 371, 372, 7, 28, 2, 2, 372, 373, 5, 188, 95, 2, 373, 376, 7, 29, 2, 2, 374, 377, 7, 15, 2, 2, 375, 377, 5, 72, 37, 2, 376, 374, 3, 2, 2, 2, 376, 375, 3, 2, 2, 2, 377, 378, 3, 2, 2, 2, 378, 379, 7, 4, 2, 2, 379, 37, 3, 2, 2, 2, 380, 381, 7, 30, 2, 2, 381, 382, 5, 188, 95, 2, 382, 393, 7, 17, 2, 2, 383, 384, 5, 70, 36, 2, 384, 390, 7, 4, 2, 2, 385, 386, 5, 70, 36, 2, 386, 387, 7, 4, 2, 2, 387, 389, 3, 2, 2, 2, 388, 385, 3, 2, 2, 2, 389, 392, 3, 2, 2, 2, 390, 388, 3, 2, 2, 2, 390, 391, 3, 2, 2, 2, 391, 394, 3, 2, 2, 2, 392, 390, 3, 2, 2, 2, 393, 383, 3, 2, 2, 2, 393, 394, 3, 2, 2, 2, 394, 395, 3, 2, 2, 2, 395, 396, 7, 19, 2, 2, 396, 39, 3, 2, 2, 2, 397, 398, 7, 31, 2, 2, 398, 400, 5, 188, 95, 2, 399, 401, 5, 58, 30, 2, 400, 399, 3, 2, 2, 2, 400, 401, 3, 2, 2, 2, 401, 406, 3, 2, 2, 2, 402, 405, 7, 123, 2, 2, 403, 405, 5, 192, 97, 2, 404, 402, 3, 2, 2, 2, 404, 403, 3, 2, 2, 2, 405, 408, 3, 2, 2, 2, 406, 404, 3, 2, 2, 2, 406, 407, 3, 2, 2, 2, 407, 411, 3, 2, 2, 2, 408, 406, 3, 2, 2, 2, 409, 412, 7, 4, 2, 2, 410, 412, 5, 86, 44, 2, 411, 409, 3, 2, 2, 2, 411, 410, 3, 2, 2, 2, 412, 41, 3, 2, 2, 2, 413, 419, 5, 188, 95, 2, 414, 416, 7, 25, 2, 2, 415, 417, 5, 134, 68, 2, 416, 415, 3, 2, 2, 2, 416, 417, 3, 2, 2, 2, 417, 418, 3, 2, 2, 2, 418, 420, 7, 26, 2, 2, 419, 414, 3, 2, 2, 2, 419, 420, 3, 2, 2, 2, 420, 43, 3, 2, 2, 2, 421, 422, 5, 46, 24, 2, 422, 423, 5, 58, 30, 2, 423, 425, 5, 50, 26, 2, 424, 426, 5, 48, 25, 2, 425, 424, 3, 2, 2, 2, 425, 426, 3, 2, 2, 2, 426, 429, 3, 2, 2, 2, 427, 430, 7, 4, 2, 2, 428, 430, 5, 86, 44, 2, 429, 427, 3, 2, 2, 2, 429, 428, 3, 2, 2, 2, 430, 45, 3, 2, 2, 2, 431, 433, 7, 32, 2, 2, 432, 434, 5, 188, 95, 2, 433, 432, 3, 2, 2, 2, 433, 434, 3, 2, 2, 2, 434, 439, 3, 2, 2, 2, 435, 439, 7, 127, 2, 2, 436, 439, 7, 128, 2, 2, 437, 439, 7, 129, 2, 2, 438, 431, 3, 2, 2, 2, 438, 435, 3, 2, 2, 2, 438, 436, 3, 2, 2, 2, 438, 437, 3, 2, 2, 2, 439, 47, 3, 2, 2, 2, 440, 441, 7, 33, 2, 2, 441, 442, 5, 58, 30, 2, 442, 49, 3, 2, 2, 2, 443, 452, 7, 117, 2, 2, 444, 452, 7, 122, 2, 2, 445, 452, 7, 119, 2, 2, 446, 452, 7, 121, 2, 2, 447, 452, 7, 123, 2, 2, 448, 452, 5, 84, 43, 2, 449, 452, 5, 42, 22, 2, 450, 452, 5, 192, 97, 2, 451, 443, 3, 2, 2, 2, 451, 444, 3, 2, 2, 2, 451, 445, 3, 2, 2, 2, 451, 446, 3, 2, 2, 2, 451, 447, 3, 2, 2, 2, 451, 448, 3, 2, 2, 2, 451, 449, 3, 2, 2, 2, 451, 450, 3, 2, 2, 2, 452, 455, 3, 2, 2, 2, 453, 451, 3, 2, 2, 2, 453, 454, 3, 2, 2, 2, 454, 51, 3, 2, 2, 2, 455, 453, 3, 2, 2, 2, 456, 457, 7, 34, 2, 2, 457, 458, 5, 188, 95, 2, 458, 460, 5, 62, 32, 2, 459, 461, 7, 111, 2, 2, 460, 459, 3, 2, 2, 2, 460, 461, 3, 2, 2, 2, 461, 462, 3, 2, 2, 2, 462, 463, 7, 4, 2, 2, 463, 53, 3, 2, 2, 2, 464, 465, 5, 188, 95, 2, 465, 55, 3, 2, 2, 2, 466, 467, 7, 35, 2, 2, 467, 468, 5, 188, 95, 2, 468, 470, 7, 17, 2, 2, 469, 471, 5, 54, 28, 2, 470, 469, 3, 2, 2, 2, 470, 471, 3, 2, 2, 2, 471, 476, 3, 2, 2, 2, 472, 473, 7, 18, 2, 2, 473, 475, 5, 54, 28, 2, 474, 472, 3, 2, 2, 2, 475, 478, 3, 2, 2, 2, 476, 474, 3, 2, 2, 2, 476, 477, 3, 2, 2, 2, 477, 479, 3, 2, 2, 2, 478, 476, 3, 2, 2, 2, 479, 480, 7, 19, 2, 2, 480, 57, 3, 2, 2, 2, 481, 490, 7, 25, 2, 2, 482, 487, 5, 60, 31, 2, 483, 484, 7, 18, 2, 2, 484, 486, 5, 60, 31, 2, 485, 483, 3, 2, 2, 2, 486, 489, 3, 2, 2, 2, 487, 485, 3, 2, 2, 2, 487, 488, 3, 2, 2, 2, 488, 491, 3, 2, 2, 2, 489, 487, 3, 2, 2, 2, 490, 482, 3, 2, 2, 2, 490, 491, 3, 2, 2, 2, 491, 492, 3, 2, 2, 2, 492, 493, 7, 26, 2, 2, 493, 59, 3, 2, 2, 2, 494, 496, 5, 72, 37, 2, 495, 497, 5, 82, 42, 2, 496, 495, 3, 2, 2, 2, 496, 497, 3, 2, 2, 2, 497, 499, 3, 2, 2, 2, 498, 500, 5, 188, 95, 2, 499, 498, 3, 2, 2, 2, 499, 500, 3, 2, 2, 2, 500, 61, 3, 2, 2, 2, 501, 510, 7, 25, 2, 2, 502, 507, 5, 64, 33, 2, 503, 504, 7, 18, 2, 2, 504, 506, 5, 64, 33, 2, 505, 503, 3, 2, 2, 2, 506, 509, 3, 2, 2, 2, 507, 505, 3, 2, 2, 2, 507, 508, 3, 2, 2, 2, 508, 511, 3, 2, 2, 2, 509, 507, 3, 2, 2, 2, 510, 502, 3, 2, 2, 2, 510, 511, 3, 2, 2, 2, 511, 512, 3, 2, 2, 2, 512, 513, 7, 26, 2, 2, 513, 63, 3, 2, 2, 2, 514, 516, 5, 72, 37, 2, 515, 517, 7, 118, 2, 2, 516, 515, 3, 2, 2, 2, 516, 517, 3, 2, 2, 2, 517, 519, 3, 2, 2, 2, 518, 520, 5, 188, 95, 2, 519, 518, 3, 2, 2, 2, 519, 520, 3, 2, 2, 2, 520, 65, 3, 2, 2, 2, 521, 530, 7, 25, 2, 2, 522, 527, 5, 68, 35, 2, 523, 524, 7, 18, 2, 2, 524, 526, 5, 68, 35, 2, 525, 523, 3, 2, 2, 2, 526, 529, 3, 2, 2, 2, 527, 525, 3, 2, 2, 2, 527, 528, 3, 2, 2, 2, 528, 531, 3, 2, 2, 2, 529, 527, 3, 2, 2, 2, 530, 522, 3, 2, 2, 2, 530, 531, 3, 2, 2, 2, 531, 532, 3, 2, 2, 2, 532, 533, 7, 26, 2, 2, 533, 67, 3, 2, 2, 2, 534, 536, 5, 72, 37, 2, 535, 537, 5, 82, 42, 2, 536, 535, 3, 2, 2, 2, 536, 537, 3, 2, 2, 2, 537, 69, 3, 2, 2, 2, 538, 540, 5, 72, 37, 2, 539, 541, 5, 82, 42, 2, 540, 539, 3, 2, 2, 2, 540, 541, 3, 2, 2, 2, 541, 542, 3, 2, 2, 2, 542, 543, 5, 188, 95, 2, 543, 71, 3, 2, 2, 2, 544, 545, 8, 37, 1, 2, 545, 552, 5, 128, 65, 2, 546, 552, 5, 74, 38, 2, 547, 552, 5, 78, 40, 2, 548, 552, 5, 80, 41, 2, 549, 550, 7, 38, 2, 2, 550, 552, 7, 120, 2, 2, 551, 544, 3, 2, 2, 2, 551, 546, 3, 2, 2, 2, 551, 547, 3, 2, 2, 2, 551, 548, 3, 2, 2, 2, 551, 549, 3, 2, 2, 2, 552, 561, 3, 2, 2, 2, 553, 554, 12, 5, 2, 2, 554, 556, 7, 36, 2, 2, 555, 557, 5, 130, 66, 2, 556, 555, 3, 2, 2, 2, 556, 557, 3, 2, 2, 2, 557, 558, 3, 2, 2, 2, 558, 560, 7, 37, 2, 2, 559, 553, 3, 2, 2, 2, 560, 563, 3, 2, 2, 2, 561, 559, 3, 2, 2, 2, 561, 562, 3, 2, 2, 2, 562, 73, 3, 2, 2, 2, 563, 561, 3, 2, 2, 2, 564, 569, 5, 188, 95, 2, 565, 566, 7, 39, 2, 2, 566, 568, 5, 188, 95, 2, 567, 565, 3, 2, 2, 2, 568, 571, 3, 2, 2, 2, 569, 567, 3, 2, 2, 2, 569, 570, 3, 2, 2, 2, 570, 75, 3, 2, 2, 2, 571, 569, 3, 2, 2, 2, 572, 575, 5, 128, 65, 2, 573, 575, 5, 74, 38, 2, 574, 572, 3, 2, 2, 2, 574, 573, 3, 2, 2, 2, 575, 77, 3, 2, 2, 2, 576, 577, 7, 40, 2, 2, 577, 578, 7, 25, 2, 2, 578, 579, 5, 76, 39, 2, 579, 580, 7, 41, 2, 2, 580, 581, 5, 72, 37, 2, 581, 582, 7, 26, 2, 2, 582, 79, 3, 2, 2, 2, 583, 584, 7, 32, 2, 2, 584, 590, 5, 66, 34, 2, 585, 589, 7, 119, 2, 2, 586, 589, 7, 117, 2, 2, 587, 589, 5, 84, 43, 2, 588, 585, 3, 2, 2, 2, 588, 586, 3, 2, 2, 2, 588, 587, 3, 2, 2, 2, 589, 592, 3, 2, 2, 2, 590, 588, 3, 2, 2, 2, 590, 591, 3, 2, 2, 2, 591, 595, 3, 2, 2, 2, 592, 590, 3, 2, 2, 2, 593, 594, 7, 33, 2, 2, 594, 596, 5, 66, 34, 2, 595, 593, 3, 2, 2, 2, 595, 596, 3, 2, 2, 2, 596, 81, 3, 2, 2, 2, 597, 598, 9, 4, 2, 2, 598, 83, 3, 2, 2, 2, 599, 600, 9, 5, 2, 2, 600, 85, 3, 2, 2, 2, 601, 605, 7, 17, 2, 2, 602, 604, 5, 88, 45, 2, 603, 602, 3, 2, 2, 2, 604, 607, 3, 2, 2, 2, 605, 603, 3, 2, 2, 2, 605, 606, 3, 2, 2, 2, 606, 608, 3, 2, 2, 2, 607, 605, 3, 2, 2, 2, 608, 609, 7, 19, 2, 2, 609, 87, 3, 2, 2, 2, 610, 626, 5, 92, 47, 2, 611, 626, 5, 94, 48, 2, 612, 626, 5, 98, 50, 2, 613, 626, 5, 104, 53, 2, 614, 626, 5, 86, 44, 2, 615, 626, 5, 106, 54, 2, 616, 626, 5, 108, 55, 2, 617, 626, 5, 110, 56, 2, 618, 626, 5, 112, 57, 2, 619, 626, 5, 114, 58, 2, 620, 626, 5, 116, 59, 2, 621, 626, 5, 118, 60, 2, 622, 626, 5, 100, 51, 2, 623, 626, 5, 102, 52, 2, 624, 626, 5, 120, 61, 2, 625, 610, 3, 2, 2, 2, 625, 611, 3, 2, 2, 2, 625, 612, 3, 2, 2, 2, 625, 613, 3, 2, 2, 2, 625, 614, 3, 2, 2, 2, 625, 615, 3, 2, 2, 2, 625, 616, 3, 2, 2, 2, 625, 617, 3, 2, 2, 2, 625, 618, 3, 2, 2, 2, 625, 619, 3, 2, 2, 2, 625, 620, 3, 2, 2, 2, 625, 621, 3, 2, 2, 2, 625, 622, 3, 2, 2, 2, 625, 623, 3, 2, 2, 2, 625, 624, 3, 2, 2, 2, 626, 89, 3, 2, 2, 2, 627, 628, 5, 130, 66, 2, 628, 629, 7, 4, 2, 2, 629, 91, 3, 2, 2, 2, 630, 631, 7, 45, 2, 2, 631, 632, 7, 25, 2, 2, 632, 633, 5, 130, 66, 2, 633, 634, 7, 26, 2, 2, 634, 637, 5, 88, 45, 2, 635, 636, 7, 46, 2, 2, 636, 638, 5, 88, 45, 2, 637, 635, 3, 2, 2, 2, 637, 638, 3, 2, 2, 2, 638, 93, 3, 2, 2, 2, 639, 640, 7, 47, 2, 2, 640, 642, 5, 130, 66, 2, 641, 643, 5, 48, 25, 2, 642, 641, 3, 2, 2, 2, 642, 643, 3, 2, 2, 2, 643, 644, 3, 2, 2, 2, 644, 646, 5, 86, 44, 2, 645, 647, 5, 96, 49, 2, 646, 645, 3, 2, 2, 2, 647, 648, 3, 2, 2, 2, 648, 646, 3, 2, 2, 2, 648, 649, 3, 2, 2, 2, 649, 95, 3, 2, 2, 2, 650, 655, 7, 48, 2, 2, 651, 653, 5, 188, 95, 2, 652, 651, 3, 2, 2, 2, 652, 653, 3, 2, 2, 2, 653, 654, 3, 2, 2, 2, 654, 656, 5, 58, 30, 2, 655, 652, 3, 2, 2, 2, 655, 656, 3, 2, 2, 2, 656, 657, 3, 2, 2, 2, 657, 658, 5, 86, 44, 2, 658, 97, 3, 2, 2, 2, 659, 660, 7, 49, 2, 2, 660, 661, 7, 25, 2, 2, 661, 662, 5, 130, 66, 2, 662, 663, 7, 26, 2, 2, 663, 664, 5, 88, 45, 2, 664, 99, 3, 2, 2, 2, 665, 668, 5, 122, 62, 2, 666, 668, 5, 90, 46, 2, 667, 665, 3, 2, 2, 2, 667, 666, 3, 2, 2, 2, 668, 101, 3, 2, 2, 2, 669, 670, 7, 50, 2, 2, 670, 671, 5, 86, 44, 2, 671, 103, 3, 2, 2, 2, 672, 673, 7, 29, 2, 2, 673, 676, 7, 25, 2, 2, 674, 677, 5, 100, 51, 2, 675, 677, 7, 4, 2, 2, 676, 674, 3, 2, 2, 2, 676, 675, 3, 2, 2, 2, 677, 680, 3, 2, 2, 2, 678, 681, 5, 90, 46, 2, 679, 681, 7, 4, 2, 2, 680, 678, 3, 2, 2, 2, 680, 679, 3, 2, 2, 2, 681, 683, 3, 2, 2, 2, 682, 684, 5, 130, 66, 2, 683, 682, 3, 2, 2, 2, 683, 684, 3, 2, 2, 2, 684, 685, 3, 2, 2, 2, 685, 686, 7, 26, 2, 2, 686, 687, 5, 88, 45, 2, 687, 105, 3, 2, 2, 2, 688, 690, 7, 51, 2, 2, 689, 691, 7, 131, 2, 2, 690, 689, 3, 2, 2, 2, 690, 691, 3, 2, 2, 2, 691, 692, 3, 2, 2, 2, 692, 693, 5, 144, 73, 2, 693, 107, 3, 2, 2, 2, 694, 695, 7, 52, 2, 2, 695, 696, 5, 88, 45, 2, 696, 697, 7, 49, 2, 2, 697, 698, 7, 25, 2, 2, 698, 699, 5, 130, 66, 2, 699, 700, 7, 26, 2, 2, 700, 701, 7, 4, 2, 2, 701, 109, 3, 2, 2, 2, 702, 703, 7, 115, 2, 2, 703, 704, 7, 4, 2, 2, 704, 111, 3, 2, 2, 2, 705, 706, 7, 112, 2, 2, 706, 707, 7, 4, 2, 2, 707, 113, 3, 2, 2, 2, 708, 710, 7, 53, 2, 2, 709, 711, 5, 130, 66, 2, 710, 709, 3, 2, 2, 2, 710, 711, 3, 2, 2, 2, 711, 712, 3, 2, 2, 2, 712, 713, 7, 4, 2, 2, 713, 115, 3, 2, 2, 2, 714, 715, 7, 54, 2, 2, 715, 716, 7, 4, 2, 2, 716, 117, 3, 2, 2, 2, 717, 718, 7, 55, 2, 2, 718, 719, 5, 142, 72, 2, 719, 720, 7, 4, 2, 2, 720, 119, 3, 2, 2, 2, 721, 722, 7, 56, 2, 2, 722, 723, 5, 142, 72, 2, 723, 724, 7, 4, 2, 2, 724, 121, 3, 2, 2, 2, 725, 726, 7, 57, 2, 2, 726, 733, 5, 126, 64, 2, 727, 733, 5, 70, 36, 2, 728, 729, 7, 25, 2, 2, 729, 730, 5, 124, 63, 2, 730, 731, 7, 26, 2, 2, 731, 733, 3, 2, 2, 2, 732, 725, 3, 2, 2, 2, 732, 727, 3, 2, 2, 2, 732, 728, 3, 2, 2, 2, 733, 736, 3, 2, 2, 2, 734, 735, 7, 12, 2, 2, 735, 737, 5, 130, 66, 2, 736, 734, 3, 2, 2, 2, 736, 737, 3, 2, 2, 2, 737, 738, 3, 2, 2, 2, 738, 739, 7, 4, 2, 2, 739, 123, 3, 2, 2, 2, 740, 742, 5, 70, 36, 2, 741, 740, 3, 2, 2, 2, 741, 742, 3, 2, 2, 2, 742, 749, 3, 2, 2, 2, 743, 745, 7, 18, 2, 2, 744, 746, 5, 70, 36, 2, 745, 744, 3, 2, 2, 2, 745, 746, 3, 2, 2, 2, 746, 748, 3, 2, 2, 2, 747, 743, 3, 2, 2, 2, 748, 751, 3, 2, 2, 2, 749, 747, 3, 2, 2, 2, 749, 750, 3, 2, 2, 2, 750, 125, 3, 2, 2, 2, 751, 749, 3, 2, 2, 2, 752, 759, 7, 25, 2, 2, 753, 755, 5, 188, 95, 2, 754, 753, 3, 2, 2, 2, 754, 755, 3, 2, 2, 2, 755, 756, 3, 2, 2, 2, 756, 758, 7, 18, 2, 2, 757, 754, 3, 2, 2, 2, 758, 761, 3, 2, 2, 2, 759, 757, 3, 2, 2, 2, 759, 760, 3, 2, 2, 2, 760, 763, 3, 2, 2, 2, 761, 759, 3, 2, 2, 2, 762, 764, 5, 188, 95, 2, 763, 762, 3, 2, 2, 2, 763, 764, 3, 2, 2, 2, 764, 765, 3, 2, 2, 2, 765, 766, 7, 26, 2, 2, 766, 127, 3, 2, 2, 2, 767, 768, 9, 6, 2, 2, 768, 129, 3, 2, 2, 2, 769, 770, 8, 66, 1, 2, 770, 771, 7, 63, 2, 2, 771, 788, 5, 72, 37, 2, 772, 773, 7, 25, 2, 2, 773, 774, 5, 130, 66, 2, 774, 775, 7, 26, 2, 2, 775, 788, 3, 2, 2, 2, 776, 777, 9, 7, 2, 2, 777, 788, 5, 130, 66, 21, 778, 779, 9, 8, 2, 2, 779, 788, 5, 130, 66, 20, 780, 781, 9, 9, 2, 2, 781, 788, 5, 130, 66, 19, 782, 783, 7, 69, 2, 2, 783, 788, 5, 130, 66, 18, 784, 785, 7, 7, 2, 2, 785, 788, 5, 130, 66, 17, 786, 788, 5, 132, 67, 2, 787, 769, 3, 2, 2, 2, 787, 772, 3, 2, 2, 2, 787, 776, 3, 2, 2, 2, 787, 778, 3, 2, 2, 2, 787, 780, 3, 2, 2, 2, 787, 782, 3, 2, 2, 2, 787, 784, 3, 2, 2, 2, 787, 786, 3, 2, 2, 2, 788, 863, 3, 2, 2, 2, 789, 790, 12, 16, 2, 2, 790, 791, 7, 70, 2, 2, 791, 862, 5, 130, 66, 17, 792, 793, 12, 15, 2, 2, 793, 794, 9, 10, 2, 2, 794, 862, 5, 130, 66, 16, 795, 796, 12, 14, 2, 2, 796, 797, 9, 8, 2, 2, 797, 862, 5, 130, 66, 15, 798, 799, 12, 13, 2, 2, 799, 800, 9, 11, 2, 2, 800, 862, 5, 130, 66, 14, 801, 802, 12, 12, 2, 2, 802, 803, 7, 75, 2, 2, 803, 862, 5, 130, 66, 13, 804, 805, 12, 11, 2, 2, 805, 806, 7, 6, 2, 2, 806, 862, 5, 130, 66, 12, 807, 808, 12, 10, 2, 2, 808, 809, 7, 76, 2, 2, 809, 862, 5, 130, 66, 11, 810, 811, 12, 9, 2, 2, 811, 812, 9, 12, 2, 2, 812, 862, 5, 130, 66, 10, 813, 814, 12, 8, 2, 2, 814, 815, 9, 13, 2, 2, 815, 862, 5, 130, 66, 9, 816, 817, 12, 7, 2, 2, 817, 818, 7, 79, 2, 2, 818, 862, 5, 130, 66, 8, 819, 820, 12, 6, 2, 2, 820, 821, 7, 5, 2, 2, 821, 862, 5, 130, 66, 7, 822, 823, 12, 5, 2, 2, 823, 824, 7, 80, 2, 2, 824, 825, 5, 130, 66, 2, 825, 826, 7, 64, 2, 2, 826, 827, 5, 130, 66, 6, 827, 862, 3, 2, 2, 2, 828, 829, 12, 4, 2, 2, 829, 830, 9, 14, 2, 2, 830, 862, 5, 130, 66, 5, 831, 832, 12, 29, 2, 2, 832, 862, 9, 7, 2, 2, 833, 834, 12, 27, 2, 2, 834, 835, 7, 36, 2, 2, 835, 836, 5, 130, 66, 2, 836, 837, 7, 37, 2, 2, 837, 862, 3, 2, 2, 2, 838, 839, 12, 26, 2, 2, 839, 841, 7, 36, 2, 2, 840, 842, 5, 130, 66, 2, 841, 840, 3, 2, 2, 2, 841, 842, 3, 2, 2, 2, 842, 843, 3, 2, 2, 2, 843, 845, 7, 64, 2, 2, 844, 846, 5, 130, 66, 2, 845, 844, 3, 2, 2, 2, 845, 846, 3, 2, 2, 2, 846, 847, 3, 2, 2, 2, 847, 862, 7, 37, 2, 2, 848, 849, 12, 25, 2, 2, 849, 850, 7, 39, 2, 2, 850, 862, 5, 188, 95, 2, 851, 852, 12, 24, 2, 2, 852, 853, 7, 17, 2, 2, 853, 854, 5, 136, 69, 2, 854, 855, 7, 19, 2, 2, 855, 862, 3, 2, 2, 2, 856, 857, 12, 23, 2, 2, 857, 858, 7, 25, 2, 2, 858, 859, 5, 140, 71, 2, 859, 860, 7, 26, 2, 2, 860, 862, 3, 2, 2, 2, 861, 789, 3, 2, 2, 2, 861, 792, 3, 2, 2, 2, 861, 795, 3, 2, 2, 2, 861, 798, 3, 2, 2, 2, 861, 801, 3, 2, 2, 2, 861, 804, 3, 2, 2, 2, 861, 807, 3, 2, 2, 2, 861, 810, 3, 2, 2, 2, 861, 813, 3, 2, 2, 2, 861, 816, 3, 2, 2, 2, 861, 819, 3, 2, 2, 2, 861, 822, 3, 2, 2, 2, 861, 828, 3, 2, 2, 2, 861, 831, 3, 2, 2, 2, 861, 833, 3, 2, 2, 2, 861, 838, 3, 2, 2, 2, 861, 848, 3, 2, 2, 2, 861, 851, 3, 2, 2, 2, 861, 856, 3, 2, 2, 2, 862, 865, 3, 2, 2, 2, 863, 861, 3, 2, 2, 2, 863, 864, 3, 2, 2, 2, 864, 131, 3, 2, 2, 2, 865, 863, 3, 2, 2, 2, 866, 884, 7, 105, 2, 2, 867, 884, 5, 186, 94, 2, 868, 884, 5, 190, 96, 2, 869, 884, 5, 194, 98, 2, 870, 873, 5, 188, 95, 2, 871, 872, 7, 36, 2, 2, 872, 874, 7, 37, 2, 2, 873, 871, 3, 2, 2, 2, 873, 874, 3, 2, 2, 2, 874, 884, 3, 2, 2, 2, 875, 884, 7, 125, 2, 2, 876, 884, 7, 120, 2, 2, 877, 884, 5, 182, 92, 2, 878, 881, 5, 184, 93, 2, 879, 880, 7, 36, 2, 2, 880, 882, 7, 37, 2, 2, 881, 879, 3, 2, 2, 2, 881, 882, 3, 2, 2, 2, 882, 884, 3, 2, 2, 2, 883, 866, 3, 2, 2, 2, 883, 867, 3, 2, 2, 2, 883, 868, 3, 2, 2, 2, 883, 869, 3, 2, 2, 2, 883, 870, 3, 2, 2, 2, 883, 875, 3, 2, 2, 2, 883, 876, 3, 2, 2, 2, 883, 877, 3, 2, 2, 2, 883, 878, 3, 2, 2, 2, 884, 133, 3, 2, 2, 2, 885, 890, 5, 130, 66, 2, 886, 887, 7, 18, 2, 2, 887, 889, 5, 130, 66, 2, 888, 886, 3, 2, 2, 2, 889, 892, 3, 2, 2, 2, 890, 888, 3, 2, 2, 2, 890, 891, 3, 2, 2, 2, 891, 135, 3, 2, 2, 2, 892, 890, 3, 2, 2, 2, 893, 898, 5, 138, 70, 2, 894, 895, 7, 18, 2, 2, 895, 897, 5, 138, 70, 2, 896, 894, 3, 2, 2, 2, 897, 900, 3, 2, 2, 2, 898, 896, 3, 2, 2, 2, 898, 899, 3, 2, 2, 2, 899, 902, 3, 2, 2, 2, 900, 898, 3, 2, 2, 2, 901, 903, 7, 18, 2, 2, 902, 901, 3, 2, 2, 2, 902, 903, 3, 2, 2, 2, 903, 137, 3, 2, 2, 2, 904, 905, 5, 188, 95, 2, 905, 906, 7, 64, 2, 2, 906, 907, 5, 130, 66, 2, 907, 139, 3, 2, 2, 2, 908, 910, 7, 17, 2, 2, 909, 911, 5, 136, 69, 2, 910, 909, 3, 2, 2, 2, 910, 911, 3, 2, 2, 2, 911, 912, 3, 2, 2, 2, 912, 917, 7, 19, 2, 2, 913, 915, 5, 134, 68, 2, 914, 913, 3, 2, 2, 2, 914, 915, 3, 2, 2, 2, 915, 917, 3, 2, 2, 2, 916, 908, 3, 2, 2, 2, 916, 914, 3, 2, 2, 2, 917, 141, 3, 2, 2, 2, 918, 919, 5, 130, 66, 2, 919, 920, 7, 25, 2, 2, 920, 921, 5, 140, 71, 2, 921, 922, 7, 26, 2, 2, 922, 143, 3, 2, 2, 2, 923, 927, 7, 17, 2, 2, 924, 926, 5, 146, 74, 2, 925, 924, 3, 2, 2, 2, 926, 929, 3, 2, 2, 2, 927, 925, 3, 2, 2, 2, 927, 928, 3, 2, 2, 2, 928, 930, 3, 2, 2, 2, 929, 927, 3, 2, 2, 2, 930, 931, 7, 19, 2, 2, 931, 145, 3, 2, 2, 2, 932, 951, 5, 188, 95, 2, 933, 951, 5, 144, 73, 2, 934, 951, 5, 148, 75, 2, 935, 951, 5, 154, 78, 2, 936, 951, 5, 156, 79, 2, 937, 951, 5, 162, 82, 2, 938, 951, 5, 164, 83, 2, 939, 951, 5, 166, 84, 2, 940, 951, 5, 170, 86, 2, 941, 951, 5, 174, 88, 2, 942, 951, 5, 176, 89, 2, 943, 951, 7, 112, 2, 2, 944, 951, 7, 115, 2, 2, 945, 951, 7, 116, 2, 2, 946, 951, 5, 180, 91, 2, 947, 951, 5, 186, 94, 2, 948, 951, 5, 194, 98, 2, 949, 951, 5, 190, 96, 2, 950, 932, 3, 2, 2, 2, 950, 933, 3, 2, 2, 2, 950, 934, 3, 2, 2, 2, 950, 935, 3, 2, 2, 2, 950, 936, 3, 2, 2, 2, 950, 937, 3, 2, 2, 2, 950, 938, 3, 2, 2, 2, 950, 939, 3, 2, 2, 2, 950, 940, 3, 2, 2, 2, 950, 941, 3, 2, 2, 2, 950, 942, 3, 2, 2, 2, 950, 943, 3, 2, 2, 2, 950, 944, 3, 2, 2, 2, 950, 945, 3, 2, 2, 2, 950, 946, 3, 2, 2, 2, 950, 947, 3, 2, 2, 2, 950, 948, 3, 2, 2, 2, 950, 949, 3, 2, 2, 2, 951, 147, 3, 2, 2, 2, 952, 956, 5, 152, 77, 2, 953, 956, 5, 178, 90, 2, 954, 956, 5, 150, 76, 2, 955, 952, 3, 2, 2, 2, 955, 953, 3, 2, 2, 2, 955, 954, 3, 2, 2, 2, 956, 149, 3, 2, 2, 2, 957, 958, 5, 188, 95, 2, 958, 959, 7, 39, 2, 2, 959, 960, 5, 188, 95, 2, 960, 151, 3, 2, 2, 2, 961, 966, 7, 53, 2, 2, 962, 966, 7, 38, 2, 2, 963, 966, 7, 60, 2, 2, 964, 966, 5, 188, 95, 2, 965, 961, 3, 2, 2, 2, 965, 962, 3, 2, 2, 2, 965, 963, 3, 2, 2, 2, 965, 964, 3, 2, 2, 2, 966, 979, 3, 2, 2, 2, 967, 969, 7, 25, 2, 2, 968, 970, 5, 148, 75, 2, 969, 968, 3, 2, 2, 2, 969, 970, 3, 2, 2, 2, 970, 975, 3, 2, 2, 2, 971, 972, 7, 18, 2, 2, 972, 974, 5, 148, 75, 2, 973, 971, 3, 2, 2, 2, 974, 977, 3, 2, 2, 2, 975, 973, 3, 2, 2, 2, 975, 976, 3, 2, 2, 2, 976, 978, 3, 2, 2, 2, 977, 975, 3, 2, 2, 2, 978, 980, 7, 26, 2, 2, 979, 967, 3, 2, 2, 2, 979, 980, 3, 2, 2, 2, 980, 153, 3, 2, 2, 2, 981, 982, 7, 91, 2, 2, 982, 985, 5, 158, 80, 2, 983, 984, 7, 92, 2, 2, 984, 986, 5, 148, 75, 2, 985, 983, 3, 2, 2, 2, 985, 986, 3, 2, 2, 2, 986, 155, 3, 2, 2, 2, 987, 988, 5, 158, 80, 2, 988, 989, 7, 92, 2, 2, 989, 990, 5, 148, 75, 2, 990, 157, 3, 2, 2, 2, 991, 998, 5, 188, 95, 2, 992, 998, 5, 150, 76, 2, 993, 994, 7, 25, 2, 2, 994, 995, 5, 160, 81, 2, 995, 996, 7, 26, 2, 2, 996, 998, 3, 2, 2, 2, 997, 991, 3, 2, 2, 2, 997, 992, 3, 2, 2, 2, 997, 993, 3, 2, 2, 2, 998, 159, 3, 2, 2, 2, 999, 1004, 5, 188, 95, 2, 1000, 1001, 7, 18, 2, 2, 1001, 1003, 5, 188, 95, 2, 1002, 1000, 3, 2, 2, 2, 1003, 1006, 3, 2, 2, 2, 1004, 1002, 3, 2, 2, 2, 1004, 1005, 3, 2, 2, 2, 1005, 161, 3, 2, 2, 2, 1006, 1004, 3, 2, 2, 2, 1007, 1008, 7, 93, 2, 2, 1008, 1009, 5, 188, 95, 2, 1009, 163, 3, 2, 2, 2, 1010, 1011, 5, 188, 95, 2, 1011, 1012, 7, 64, 2, 2, 1012, 165, 3, 2, 2, 2, 1013, 1014, 7, 94, 2, 2, 1014, 1018, 5, 148, 75, 2, 1015, 1017, 5, 168, 85, 2, 1016, 1015, 3, 2, 2, 2, 1017, 1020, 3, 2, 2, 2, 1018, 1016, 3, 2, 2, 2, 1018, 1019, 3, 2, 2, 2, 1019, 167, 3, 2, 2, 2, 1020, 1018, 3, 2, 2, 2, 1021, 1022, 7, 95, 2, 2, 1022, 1023, 5, 178, 90, 2, 1023, 1024, 5, 144, 73, 2, 1024, 1028, 3, 2, 2, 2, 1025, 1026, 7, 96, 2, 2, 1026, 1028, 5, 144, 73, 2, 1027, 1021, 3, 2, 2, 2, 1027, 1025, 3, 2, 2, 2, 1028, 169, 3, 2, 2, 2, 1029, 1030, 7, 32, 2, 2, 1030, 1031, 5, 188, 95, 2, 1031, 1033, 7, 25, 2, 2, 1032, 1034, 5, 160, 81, 2, 1033, 1032, 3, 2, 2, 2, 1033, 1034, 3, 2, 2, 2, 1034, 1035, 3, 2, 2, 2, 1035, 1037, 7, 26, 2, 2, 1036, 1038, 5, 172, 87, 2, 1037, 1036, 3, 2, 2, 2, 1037, 1038, 3, 2, 2, 2, 1038, 1039, 3, 2, 2, 2, 1039, 1040, 5, 144, 73, 2, 1040, 171, 3, 2, 2, 2, 1041, 1042, 7, 97, 2, 2, 1042, 1043, 5, 160, 81, 2, 1043, 173, 3, 2, 2, 2, 1044, 1047, 7, 29, 2, 2, 1045, 1048, 5, 144, 73, 2, 1046, 1048, 5, 148, 75, 2, 1047, 1045, 3, 2, 2, 2, 1047, 1046, 3, 2, 2, 2, 1048, 1049, 3, 2, 2, 2, 1049, 1052, 5, 148, 75, 2, 1050, 1053, 5, 144, 73, 2, 1051, 1053, 5, 148, 75, 2, 1052, 1050, 3, 2, 2, 2, 1052, 1051, 3, 2, 2, 2, 1053, 1054, 3, 2, 2, 2, 1054, 1055, 5, 144, 73, 2, 1055, 175, 3, 2, 2, 2, 1056, 1057, 7, 45, 2, 2, 1057, 1058, 5, 148, 75, 2, 1058, 1059, 5, 144, 73, 2, 1059, 177, 3, 2, 2, 2, 1060, 1065, 5, 194, 98, 2, 1061, 1065, 7, 106, 2, 2, 1062, 1065, 7, 107, 2, 2, 1063, 1065, 5, 190, 96, 2, 1064, 1060, 3, 2, 2, 2, 1064, 1061, 3, 2, 2, 2, 1064, 1062, 3, 2, 2, 2, 1064, 1063, 3, 2, 2, 2, 1065, 179, 3, 2, 2, 2, 1066, 1067, 7, 51, 2, 2, 1067, 1068, 5, 188, 95, 2, 1068, 1069, 5, 144, 73, 2, 1069, 181, 3, 2, 2, 2, 1070, 1072, 7, 25, 2, 2, 1071, 1073, 5, 130, 66, 2, 1072, 1071, 3, 2, 2, 2, 1072, 1073, 3, 2, 2, 2, 1073, 1080, 3, 2, 2, 2, 1074, 1076, 7, 18, 2, 2, 1075, 1077, 5, 130, 66, 2, 1076, 1075, 3, 2, 2, 2, 1076, 1077, 3, 2, 2, 2, 1077, 1079, 3, 2, 2, 2, 1078, 1074, 3, 2, 2, 2, 1079, 1082, 3, 2, 2, 2, 1080, 1078, 3, 2, 2, 2, 1080, 1081, 3, 2, 2, 2, 1081, 1083, 3, 2, 2, 2, 1082, 1080, 3, 2, 2, 2, 1083, 1097, 7, 26, 2, 2, 1084, 1093, 7, 36, 2, 2, 1085, 1090, 5, 130, 66, 2, 1086, 1087, 7, 18, 2, 2, 1087, 1089, 5, 130, 66, 2, 1088, 1086, 3, 2, 2, 2, 1089, 1092, 3, 2, 2, 2, 1090, 1088, 3, 2, 2, 2, 1090, 1091, 3, 2, 2, 2, 1091, 1094, 3, 2, 2, 2, 1092, 1090, 3, 2, 2, 2, 1093, 1085, 3, 2, 2, 2, 1093, 1094, 3, 2, 2, 2, 1094, 1095, 3, 2, 2, 2, 1095, 1097, 7, 37, 2, 2, 1096, 1070, 3, 2, 2, 2, 1096, 1084, 3, 2, 2, 2, 1097, 183, 3, 2, 2, 2, 1098, 1101, 5, 128, 65, 2, 1099, 1101, 5, 74, 38, 2, 1100, 1098, 3, 2, 2, 2, 1100, 1099, 3, 2, 2, 2, 1101, 185, 3, 2, 2, 2, 1102, 1104, 9, 15, 2, 2, 1103, 1105, 7, 108, 2, 2, 1104, 1103, 3, 2, 2, 2, 1104, 1105, 3, 2, 2, 2, 1105, 187, 3, 2, 2, 2, 1106, 1107, 9, 16, 2, 2, 1107, 189, 3, 2, 2, 2, 1108, 1110, 7, 109, 2, 2, 1109, 1108, 3, 2, 2, 2, 1110, 1111, 3, 2, 2, 2, 1111, 1109, 3, 2, 2, 2, 1111, 1112, 3, 2, 2, 2, 1112, 191, 3, 2, 2, 2, 1113, 1125, 7, 99, 2, 2, 1114, 1115, 7, 25, 2, 2, 1115, 1120, 5, 74, 38, 2, 1116, 1117, 7, 18, 2, 2, 1117, 1119, 5, 74, 38, 2, 1118, 1116, 3, 2, 2, 2, 1119, 1122, 3, 2, 2, 2, 1120, 1118, 3, 2, 2, 2, 1120, 1121, 3, 2, 2, 2, 1121, 1123, 3, 2, 2, 2, 1122, 1120, 3, 2, 2, 2, 1123, 1124, 7, 26, 2, 2, 1124, 1126, 3, 2, 2, 2, 1125, 1114, 3, 2, 2, 2, 1125, 1126, 3, 2, 2, 2, 1126, 193, 3, 2, 2, 2, 1127, 1129, 7, 131, 2, 2, 1128, 1127, 3, 2, 2, 2, 1129, 1130, 3, 2, 2, 2, 1130, 1128, 3, 2, 2, 2, 1130, 1131, 3, 2, 2, 2, 1131, 195, 3, 2, 2, 2, 128, 205, 207, 221, 225, 230, 236, 240, 243, 248, 254, 261, 265, 278, 286, 291, 301, 304, 310, 318, 321, 332, 341, 343, 349, 376, 390, 393, 400, 404, 406, 411, 416, 419, 425, 429, 433, 438, 451, 453, 460, 470, 476, 487, 490, 496, 499, 507, 510, 516, 519, 527, 530, 536, 540, 551, 556, 561, 569, 574, 588, 590, 595, 605, 625, 637, 642, 648, 652, 655, 667, 676, 680, 683, 690, 710, 732, 736, 741, 745, 749, 754, 759, 763, 787, 841, 845, 861, 863, 873, 881, 883, 890, 898, 902, 910, 914, 916, 927, 950, 955, 965, 969, 975, 979, 985, 997, 1004, 1018, 1027, 1033, 1037, 1047, 1052, 1064, 1072, 1076, 1080, 1090, 1093, 1096, 1100, 1104, 1111, 1120, 1125, 1130] \ No newline at end of file diff --git a/solidity_parser/solidity_antlr4/Solidity.tokens b/solidity_parser/solidity_antlr4/Solidity.tokens index 9164f31..58e78b7 100644 --- a/solidity_parser/solidity_antlr4/Solidity.tokens +++ b/solidity_parser/solidity_antlr4/Solidity.tokens @@ -88,134 +88,162 @@ T__86=87 T__87=88 T__88=89 T__89=90 -Int=91 -Uint=92 -Byte=93 -Fixed=94 -Ufixed=95 -VersionLiteral=96 -BooleanLiteral=97 -DecimalNumber=98 -HexNumber=99 -NumberUnit=100 -HexLiteral=101 -ReservedKeyword=102 -AnonymousKeyword=103 -BreakKeyword=104 -ConstantKeyword=105 -ContinueKeyword=106 -ExternalKeyword=107 -IndexedKeyword=108 -InternalKeyword=109 -PayableKeyword=110 -PrivateKeyword=111 -PublicKeyword=112 -PureKeyword=113 -ViewKeyword=114 -Identifier=115 -StringLiteral=116 -WS=117 -COMMENT=118 -LINE_COMMENT=119 +T__90=91 +T__91=92 +T__92=93 +T__93=94 +T__94=95 +T__95=96 +T__96=97 +Int=98 +Uint=99 +Byte=100 +Fixed=101 +Ufixed=102 +BooleanLiteral=103 +DecimalNumber=104 +HexNumber=105 +NumberUnit=106 +HexLiteralFragment=107 +ReservedKeyword=108 +AnonymousKeyword=109 +BreakKeyword=110 +ConstantKeyword=111 +ImmutableKeyword=112 +ContinueKeyword=113 +LeaveKeyword=114 +ExternalKeyword=115 +IndexedKeyword=116 +InternalKeyword=117 +PayableKeyword=118 +PrivateKeyword=119 +PublicKeyword=120 +VirtualKeyword=121 +PureKeyword=122 +TypeKeyword=123 +ViewKeyword=124 +ConstructorKeyword=125 +FallbackKeyword=126 +ReceiveKeyword=127 +Identifier=128 +StringLiteralFragment=129 +VersionLiteral=130 +WS=131 +COMMENT=132 +LINE_COMMENT=133 'pragma'=1 ';'=2 -'^'=3 -'~'=4 -'>='=5 -'>'=6 -'<'=7 -'<='=8 -'='=9 -'as'=10 -'import'=11 -'*'=12 -'from'=13 -'{'=14 -','=15 -'}'=16 -'contract'=17 -'interface'=18 -'library'=19 -'is'=20 -'('=21 -')'=22 -'using'=23 -'for'=24 -'struct'=25 -'constructor'=26 -'modifier'=27 -'function'=28 -'returns'=29 -'event'=30 -'enum'=31 -'['=32 -']'=33 -'address'=34 -'.'=35 -'mapping'=36 -'=>'=37 -'memory'=38 -'storage'=39 -'calldata'=40 -'if'=41 -'else'=42 -'while'=43 -'assembly'=44 -'do'=45 -'return'=46 -'throw'=47 -'emit'=48 -'var'=49 -'bool'=50 -'string'=51 -'byte'=52 -'++'=53 -'--'=54 -'new'=55 -'+'=56 -'-'=57 -'after'=58 -'delete'=59 -'!'=60 -'**'=61 -'/'=62 -'%'=63 -'<<'=64 -'>>'=65 -'&'=66 -'|'=67 -'=='=68 -'!='=69 -'&&'=70 -'||'=71 -'?'=72 -':'=73 -'|='=74 -'^='=75 -'&='=76 -'<<='=77 -'>>='=78 -'+='=79 -'-='=80 -'*='=81 -'/='=82 -'%='=83 -'let'=84 -':='=85 -'=:'=86 -'switch'=87 -'case'=88 -'default'=89 -'->'=90 -'anonymous'=103 -'break'=104 -'constant'=105 -'continue'=106 -'external'=107 -'indexed'=108 -'internal'=109 -'payable'=110 -'private'=111 -'public'=112 -'pure'=113 -'view'=114 +'||'=3 +'^'=4 +'~'=5 +'>='=6 +'>'=7 +'<'=8 +'<='=9 +'='=10 +'as'=11 +'import'=12 +'*'=13 +'from'=14 +'{'=15 +','=16 +'}'=17 +'abstract'=18 +'contract'=19 +'interface'=20 +'library'=21 +'is'=22 +'('=23 +')'=24 +'error'=25 +'using'=26 +'for'=27 +'struct'=28 +'modifier'=29 +'function'=30 +'returns'=31 +'event'=32 +'enum'=33 +'['=34 +']'=35 +'address'=36 +'.'=37 +'mapping'=38 +'=>'=39 +'memory'=40 +'storage'=41 +'calldata'=42 +'if'=43 +'else'=44 +'try'=45 +'catch'=46 +'while'=47 +'unchecked'=48 +'assembly'=49 +'do'=50 +'return'=51 +'throw'=52 +'emit'=53 +'revert'=54 +'var'=55 +'bool'=56 +'string'=57 +'byte'=58 +'++'=59 +'--'=60 +'new'=61 +':'=62 +'+'=63 +'-'=64 +'after'=65 +'delete'=66 +'!'=67 +'**'=68 +'/'=69 +'%'=70 +'<<'=71 +'>>'=72 +'&'=73 +'|'=74 +'=='=75 +'!='=76 +'&&'=77 +'?'=78 +'|='=79 +'^='=80 +'&='=81 +'<<='=82 +'>>='=83 +'+='=84 +'-='=85 +'*='=86 +'/='=87 +'%='=88 +'let'=89 +':='=90 +'=:'=91 +'switch'=92 +'case'=93 +'default'=94 +'->'=95 +'callback'=96 +'override'=97 +'anonymous'=109 +'break'=110 +'constant'=111 +'immutable'=112 +'continue'=113 +'leave'=114 +'external'=115 +'indexed'=116 +'internal'=117 +'payable'=118 +'private'=119 +'public'=120 +'virtual'=121 +'pure'=122 +'type'=123 +'view'=124 +'constructor'=125 +'fallback'=126 +'receive'=127 diff --git a/solidity_parser/solidity_antlr4/SolidityLexer.interp b/solidity_parser/solidity_antlr4/SolidityLexer.interp index 14482d9..6fb4bb7 100644 --- a/solidity_parser/solidity_antlr4/SolidityLexer.interp +++ b/solidity_parser/solidity_antlr4/SolidityLexer.interp @@ -2,6 +2,7 @@ token literal names: null 'pragma' ';' +'||' '^' '~' '>=' @@ -16,16 +17,17 @@ null '{' ',' '}' +'abstract' 'contract' 'interface' 'library' 'is' '(' ')' +'error' 'using' 'for' 'struct' -'constructor' 'modifier' 'function' 'returns' @@ -42,12 +44,16 @@ null 'calldata' 'if' 'else' +'try' +'catch' 'while' +'unchecked' 'assembly' 'do' 'return' 'throw' 'emit' +'revert' 'var' 'bool' 'string' @@ -55,6 +61,7 @@ null '++' '--' 'new' +':' '+' '-' 'after' @@ -70,9 +77,7 @@ null '==' '!=' '&&' -'||' '?' -':' '|=' '^=' '&=' @@ -90,7 +95,8 @@ null 'case' 'default' '->' -null +'callback' +'override' null null null @@ -105,15 +111,23 @@ null 'anonymous' 'break' 'constant' +'immutable' 'continue' +'leave' 'external' 'indexed' 'internal' 'payable' 'private' 'public' +'virtual' 'pure' +'type' 'view' +'constructor' +'fallback' +'receive' +null null null null @@ -212,32 +226,46 @@ null null null null +null +null +null +null +null +null +null Int Uint Byte Fixed Ufixed -VersionLiteral BooleanLiteral DecimalNumber HexNumber NumberUnit -HexLiteral +HexLiteralFragment ReservedKeyword AnonymousKeyword BreakKeyword ConstantKeyword +ImmutableKeyword ContinueKeyword +LeaveKeyword ExternalKeyword IndexedKeyword InternalKeyword PayableKeyword PrivateKeyword PublicKeyword +VirtualKeyword PureKeyword +TypeKeyword ViewKeyword +ConstructorKeyword +FallbackKeyword +ReceiveKeyword Identifier -StringLiteral +StringLiteralFragment +VersionLiteral WS COMMENT LINE_COMMENT @@ -333,38 +361,54 @@ T__86 T__87 T__88 T__89 +T__90 +T__91 +T__92 +T__93 +T__94 +T__95 +T__96 Int Uint Byte Fixed Ufixed -VersionLiteral BooleanLiteral DecimalNumber +DecimalDigits HexNumber +HexDigits NumberUnit -HexLiteral +HexLiteralFragment HexPair HexCharacter ReservedKeyword AnonymousKeyword BreakKeyword ConstantKeyword +ImmutableKeyword ContinueKeyword +LeaveKeyword ExternalKeyword IndexedKeyword InternalKeyword PayableKeyword PrivateKeyword PublicKeyword +VirtualKeyword PureKeyword +TypeKeyword ViewKeyword +ConstructorKeyword +FallbackKeyword +ReceiveKeyword Identifier IdentifierStart IdentifierPart -StringLiteral +StringLiteralFragment DoubleQuotedStringCharacter SingleQuotedStringCharacter +VersionLiteral WS COMMENT LINE_COMMENT @@ -377,4 +421,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 121, 1716, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 4, 122, 9, 122, 4, 123, 9, 123, 4, 124, 9, 124, 4, 125, 9, 125, 4, 126, 9, 126, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 3, 81, 3, 81, 3, 81, 3, 82, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 91, 3, 91, 3, 91, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 5, 92, 825, 10, 92, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 5, 93, 1042, 10, 93, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 5, 94, 1264, 10, 94, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 6, 95, 1278, 10, 95, 13, 95, 14, 95, 1279, 3, 95, 3, 95, 6, 95, 1284, 10, 95, 13, 95, 14, 95, 1285, 5, 95, 1288, 10, 95, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 6, 96, 1304, 10, 96, 13, 96, 14, 96, 1305, 3, 96, 3, 96, 6, 96, 1310, 10, 96, 13, 96, 14, 96, 1311, 5, 96, 1314, 10, 96, 3, 97, 6, 97, 1317, 10, 97, 13, 97, 14, 97, 1318, 3, 97, 3, 97, 6, 97, 1323, 10, 97, 13, 97, 14, 97, 1324, 3, 97, 3, 97, 6, 97, 1329, 10, 97, 13, 97, 14, 97, 1330, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 5, 98, 1342, 10, 98, 3, 99, 6, 99, 1345, 10, 99, 13, 99, 14, 99, 1346, 3, 99, 7, 99, 1350, 10, 99, 12, 99, 14, 99, 1353, 11, 99, 3, 99, 3, 99, 6, 99, 1357, 10, 99, 13, 99, 14, 99, 1358, 5, 99, 1361, 10, 99, 3, 99, 3, 99, 6, 99, 1365, 10, 99, 13, 99, 14, 99, 1366, 5, 99, 1369, 10, 99, 3, 100, 3, 100, 3, 100, 6, 100, 1374, 10, 100, 13, 100, 14, 100, 1375, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 5, 101, 1430, 10, 101, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 7, 102, 1438, 10, 102, 12, 102, 14, 102, 1441, 11, 102, 3, 102, 3, 102, 3, 102, 7, 102, 1446, 10, 102, 12, 102, 14, 102, 1449, 11, 102, 3, 102, 5, 102, 1452, 10, 102, 3, 103, 3, 103, 3, 103, 3, 104, 3, 104, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 5, 105, 1551, 10, 105, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 118, 3, 118, 7, 118, 1648, 10, 118, 12, 118, 14, 118, 1651, 11, 118, 3, 119, 3, 119, 3, 120, 3, 120, 3, 121, 3, 121, 7, 121, 1659, 10, 121, 12, 121, 14, 121, 1662, 11, 121, 3, 121, 3, 121, 3, 121, 7, 121, 1667, 10, 121, 12, 121, 14, 121, 1670, 11, 121, 3, 121, 5, 121, 1673, 10, 121, 3, 122, 3, 122, 3, 122, 5, 122, 1678, 10, 122, 3, 123, 3, 123, 3, 123, 5, 123, 1683, 10, 123, 3, 124, 6, 124, 1686, 10, 124, 13, 124, 14, 124, 1687, 3, 124, 3, 124, 3, 125, 3, 125, 3, 125, 3, 125, 7, 125, 1696, 10, 125, 12, 125, 14, 125, 1699, 11, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 126, 3, 126, 3, 126, 3, 126, 7, 126, 1710, 10, 126, 12, 126, 14, 126, 1713, 11, 126, 3, 126, 3, 126, 3, 1697, 2, 127, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 75, 149, 76, 151, 77, 153, 78, 155, 79, 157, 80, 159, 81, 161, 82, 163, 83, 165, 84, 167, 85, 169, 86, 171, 87, 173, 88, 175, 89, 177, 90, 179, 91, 181, 92, 183, 93, 185, 94, 187, 95, 189, 96, 191, 97, 193, 98, 195, 99, 197, 100, 199, 101, 201, 102, 203, 103, 205, 2, 207, 2, 209, 104, 211, 105, 213, 106, 215, 107, 217, 108, 219, 109, 221, 110, 223, 111, 225, 112, 227, 113, 229, 114, 231, 115, 233, 116, 235, 117, 237, 2, 239, 2, 241, 118, 243, 2, 245, 2, 247, 119, 249, 120, 251, 121, 3, 2, 12, 3, 2, 50, 59, 4, 2, 71, 71, 103, 103, 4, 2, 90, 90, 122, 122, 5, 2, 50, 59, 67, 72, 99, 104, 6, 2, 38, 38, 67, 92, 97, 97, 99, 124, 7, 2, 38, 38, 50, 59, 67, 92, 97, 97, 99, 124, 6, 2, 12, 12, 15, 15, 36, 36, 94, 94, 6, 2, 12, 12, 15, 15, 41, 41, 94, 94, 5, 2, 11, 12, 14, 15, 34, 34, 4, 2, 12, 12, 15, 15, 2, 1860, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 2, 161, 3, 2, 2, 2, 2, 163, 3, 2, 2, 2, 2, 165, 3, 2, 2, 2, 2, 167, 3, 2, 2, 2, 2, 169, 3, 2, 2, 2, 2, 171, 3, 2, 2, 2, 2, 173, 3, 2, 2, 2, 2, 175, 3, 2, 2, 2, 2, 177, 3, 2, 2, 2, 2, 179, 3, 2, 2, 2, 2, 181, 3, 2, 2, 2, 2, 183, 3, 2, 2, 2, 2, 185, 3, 2, 2, 2, 2, 187, 3, 2, 2, 2, 2, 189, 3, 2, 2, 2, 2, 191, 3, 2, 2, 2, 2, 193, 3, 2, 2, 2, 2, 195, 3, 2, 2, 2, 2, 197, 3, 2, 2, 2, 2, 199, 3, 2, 2, 2, 2, 201, 3, 2, 2, 2, 2, 203, 3, 2, 2, 2, 2, 209, 3, 2, 2, 2, 2, 211, 3, 2, 2, 2, 2, 213, 3, 2, 2, 2, 2, 215, 3, 2, 2, 2, 2, 217, 3, 2, 2, 2, 2, 219, 3, 2, 2, 2, 2, 221, 3, 2, 2, 2, 2, 223, 3, 2, 2, 2, 2, 225, 3, 2, 2, 2, 2, 227, 3, 2, 2, 2, 2, 229, 3, 2, 2, 2, 2, 231, 3, 2, 2, 2, 2, 233, 3, 2, 2, 2, 2, 235, 3, 2, 2, 2, 2, 241, 3, 2, 2, 2, 2, 247, 3, 2, 2, 2, 2, 249, 3, 2, 2, 2, 2, 251, 3, 2, 2, 2, 3, 253, 3, 2, 2, 2, 5, 260, 3, 2, 2, 2, 7, 262, 3, 2, 2, 2, 9, 264, 3, 2, 2, 2, 11, 266, 3, 2, 2, 2, 13, 269, 3, 2, 2, 2, 15, 271, 3, 2, 2, 2, 17, 273, 3, 2, 2, 2, 19, 276, 3, 2, 2, 2, 21, 278, 3, 2, 2, 2, 23, 281, 3, 2, 2, 2, 25, 288, 3, 2, 2, 2, 27, 290, 3, 2, 2, 2, 29, 295, 3, 2, 2, 2, 31, 297, 3, 2, 2, 2, 33, 299, 3, 2, 2, 2, 35, 301, 3, 2, 2, 2, 37, 310, 3, 2, 2, 2, 39, 320, 3, 2, 2, 2, 41, 328, 3, 2, 2, 2, 43, 331, 3, 2, 2, 2, 45, 333, 3, 2, 2, 2, 47, 335, 3, 2, 2, 2, 49, 341, 3, 2, 2, 2, 51, 345, 3, 2, 2, 2, 53, 352, 3, 2, 2, 2, 55, 364, 3, 2, 2, 2, 57, 373, 3, 2, 2, 2, 59, 382, 3, 2, 2, 2, 61, 390, 3, 2, 2, 2, 63, 396, 3, 2, 2, 2, 65, 401, 3, 2, 2, 2, 67, 403, 3, 2, 2, 2, 69, 405, 3, 2, 2, 2, 71, 413, 3, 2, 2, 2, 73, 415, 3, 2, 2, 2, 75, 423, 3, 2, 2, 2, 77, 426, 3, 2, 2, 2, 79, 433, 3, 2, 2, 2, 81, 441, 3, 2, 2, 2, 83, 450, 3, 2, 2, 2, 85, 453, 3, 2, 2, 2, 87, 458, 3, 2, 2, 2, 89, 464, 3, 2, 2, 2, 91, 473, 3, 2, 2, 2, 93, 476, 3, 2, 2, 2, 95, 483, 3, 2, 2, 2, 97, 489, 3, 2, 2, 2, 99, 494, 3, 2, 2, 2, 101, 498, 3, 2, 2, 2, 103, 503, 3, 2, 2, 2, 105, 510, 3, 2, 2, 2, 107, 515, 3, 2, 2, 2, 109, 518, 3, 2, 2, 2, 111, 521, 3, 2, 2, 2, 113, 525, 3, 2, 2, 2, 115, 527, 3, 2, 2, 2, 117, 529, 3, 2, 2, 2, 119, 535, 3, 2, 2, 2, 121, 542, 3, 2, 2, 2, 123, 544, 3, 2, 2, 2, 125, 547, 3, 2, 2, 2, 127, 549, 3, 2, 2, 2, 129, 551, 3, 2, 2, 2, 131, 554, 3, 2, 2, 2, 133, 557, 3, 2, 2, 2, 135, 559, 3, 2, 2, 2, 137, 561, 3, 2, 2, 2, 139, 564, 3, 2, 2, 2, 141, 567, 3, 2, 2, 2, 143, 570, 3, 2, 2, 2, 145, 573, 3, 2, 2, 2, 147, 575, 3, 2, 2, 2, 149, 577, 3, 2, 2, 2, 151, 580, 3, 2, 2, 2, 153, 583, 3, 2, 2, 2, 155, 586, 3, 2, 2, 2, 157, 590, 3, 2, 2, 2, 159, 594, 3, 2, 2, 2, 161, 597, 3, 2, 2, 2, 163, 600, 3, 2, 2, 2, 165, 603, 3, 2, 2, 2, 167, 606, 3, 2, 2, 2, 169, 609, 3, 2, 2, 2, 171, 613, 3, 2, 2, 2, 173, 616, 3, 2, 2, 2, 175, 619, 3, 2, 2, 2, 177, 626, 3, 2, 2, 2, 179, 631, 3, 2, 2, 2, 181, 639, 3, 2, 2, 2, 183, 824, 3, 2, 2, 2, 185, 1041, 3, 2, 2, 2, 187, 1263, 3, 2, 2, 2, 189, 1287, 3, 2, 2, 2, 191, 1313, 3, 2, 2, 2, 193, 1316, 3, 2, 2, 2, 195, 1341, 3, 2, 2, 2, 197, 1360, 3, 2, 2, 2, 199, 1370, 3, 2, 2, 2, 201, 1429, 3, 2, 2, 2, 203, 1431, 3, 2, 2, 2, 205, 1453, 3, 2, 2, 2, 207, 1456, 3, 2, 2, 2, 209, 1550, 3, 2, 2, 2, 211, 1552, 3, 2, 2, 2, 213, 1562, 3, 2, 2, 2, 215, 1568, 3, 2, 2, 2, 217, 1577, 3, 2, 2, 2, 219, 1586, 3, 2, 2, 2, 221, 1595, 3, 2, 2, 2, 223, 1603, 3, 2, 2, 2, 225, 1612, 3, 2, 2, 2, 227, 1620, 3, 2, 2, 2, 229, 1628, 3, 2, 2, 2, 231, 1635, 3, 2, 2, 2, 233, 1640, 3, 2, 2, 2, 235, 1645, 3, 2, 2, 2, 237, 1652, 3, 2, 2, 2, 239, 1654, 3, 2, 2, 2, 241, 1672, 3, 2, 2, 2, 243, 1677, 3, 2, 2, 2, 245, 1682, 3, 2, 2, 2, 247, 1685, 3, 2, 2, 2, 249, 1691, 3, 2, 2, 2, 251, 1705, 3, 2, 2, 2, 253, 254, 7, 114, 2, 2, 254, 255, 7, 116, 2, 2, 255, 256, 7, 99, 2, 2, 256, 257, 7, 105, 2, 2, 257, 258, 7, 111, 2, 2, 258, 259, 7, 99, 2, 2, 259, 4, 3, 2, 2, 2, 260, 261, 7, 61, 2, 2, 261, 6, 3, 2, 2, 2, 262, 263, 7, 96, 2, 2, 263, 8, 3, 2, 2, 2, 264, 265, 7, 128, 2, 2, 265, 10, 3, 2, 2, 2, 266, 267, 7, 64, 2, 2, 267, 268, 7, 63, 2, 2, 268, 12, 3, 2, 2, 2, 269, 270, 7, 64, 2, 2, 270, 14, 3, 2, 2, 2, 271, 272, 7, 62, 2, 2, 272, 16, 3, 2, 2, 2, 273, 274, 7, 62, 2, 2, 274, 275, 7, 63, 2, 2, 275, 18, 3, 2, 2, 2, 276, 277, 7, 63, 2, 2, 277, 20, 3, 2, 2, 2, 278, 279, 7, 99, 2, 2, 279, 280, 7, 117, 2, 2, 280, 22, 3, 2, 2, 2, 281, 282, 7, 107, 2, 2, 282, 283, 7, 111, 2, 2, 283, 284, 7, 114, 2, 2, 284, 285, 7, 113, 2, 2, 285, 286, 7, 116, 2, 2, 286, 287, 7, 118, 2, 2, 287, 24, 3, 2, 2, 2, 288, 289, 7, 44, 2, 2, 289, 26, 3, 2, 2, 2, 290, 291, 7, 104, 2, 2, 291, 292, 7, 116, 2, 2, 292, 293, 7, 113, 2, 2, 293, 294, 7, 111, 2, 2, 294, 28, 3, 2, 2, 2, 295, 296, 7, 125, 2, 2, 296, 30, 3, 2, 2, 2, 297, 298, 7, 46, 2, 2, 298, 32, 3, 2, 2, 2, 299, 300, 7, 127, 2, 2, 300, 34, 3, 2, 2, 2, 301, 302, 7, 101, 2, 2, 302, 303, 7, 113, 2, 2, 303, 304, 7, 112, 2, 2, 304, 305, 7, 118, 2, 2, 305, 306, 7, 116, 2, 2, 306, 307, 7, 99, 2, 2, 307, 308, 7, 101, 2, 2, 308, 309, 7, 118, 2, 2, 309, 36, 3, 2, 2, 2, 310, 311, 7, 107, 2, 2, 311, 312, 7, 112, 2, 2, 312, 313, 7, 118, 2, 2, 313, 314, 7, 103, 2, 2, 314, 315, 7, 116, 2, 2, 315, 316, 7, 104, 2, 2, 316, 317, 7, 99, 2, 2, 317, 318, 7, 101, 2, 2, 318, 319, 7, 103, 2, 2, 319, 38, 3, 2, 2, 2, 320, 321, 7, 110, 2, 2, 321, 322, 7, 107, 2, 2, 322, 323, 7, 100, 2, 2, 323, 324, 7, 116, 2, 2, 324, 325, 7, 99, 2, 2, 325, 326, 7, 116, 2, 2, 326, 327, 7, 123, 2, 2, 327, 40, 3, 2, 2, 2, 328, 329, 7, 107, 2, 2, 329, 330, 7, 117, 2, 2, 330, 42, 3, 2, 2, 2, 331, 332, 7, 42, 2, 2, 332, 44, 3, 2, 2, 2, 333, 334, 7, 43, 2, 2, 334, 46, 3, 2, 2, 2, 335, 336, 7, 119, 2, 2, 336, 337, 7, 117, 2, 2, 337, 338, 7, 107, 2, 2, 338, 339, 7, 112, 2, 2, 339, 340, 7, 105, 2, 2, 340, 48, 3, 2, 2, 2, 341, 342, 7, 104, 2, 2, 342, 343, 7, 113, 2, 2, 343, 344, 7, 116, 2, 2, 344, 50, 3, 2, 2, 2, 345, 346, 7, 117, 2, 2, 346, 347, 7, 118, 2, 2, 347, 348, 7, 116, 2, 2, 348, 349, 7, 119, 2, 2, 349, 350, 7, 101, 2, 2, 350, 351, 7, 118, 2, 2, 351, 52, 3, 2, 2, 2, 352, 353, 7, 101, 2, 2, 353, 354, 7, 113, 2, 2, 354, 355, 7, 112, 2, 2, 355, 356, 7, 117, 2, 2, 356, 357, 7, 118, 2, 2, 357, 358, 7, 116, 2, 2, 358, 359, 7, 119, 2, 2, 359, 360, 7, 101, 2, 2, 360, 361, 7, 118, 2, 2, 361, 362, 7, 113, 2, 2, 362, 363, 7, 116, 2, 2, 363, 54, 3, 2, 2, 2, 364, 365, 7, 111, 2, 2, 365, 366, 7, 113, 2, 2, 366, 367, 7, 102, 2, 2, 367, 368, 7, 107, 2, 2, 368, 369, 7, 104, 2, 2, 369, 370, 7, 107, 2, 2, 370, 371, 7, 103, 2, 2, 371, 372, 7, 116, 2, 2, 372, 56, 3, 2, 2, 2, 373, 374, 7, 104, 2, 2, 374, 375, 7, 119, 2, 2, 375, 376, 7, 112, 2, 2, 376, 377, 7, 101, 2, 2, 377, 378, 7, 118, 2, 2, 378, 379, 7, 107, 2, 2, 379, 380, 7, 113, 2, 2, 380, 381, 7, 112, 2, 2, 381, 58, 3, 2, 2, 2, 382, 383, 7, 116, 2, 2, 383, 384, 7, 103, 2, 2, 384, 385, 7, 118, 2, 2, 385, 386, 7, 119, 2, 2, 386, 387, 7, 116, 2, 2, 387, 388, 7, 112, 2, 2, 388, 389, 7, 117, 2, 2, 389, 60, 3, 2, 2, 2, 390, 391, 7, 103, 2, 2, 391, 392, 7, 120, 2, 2, 392, 393, 7, 103, 2, 2, 393, 394, 7, 112, 2, 2, 394, 395, 7, 118, 2, 2, 395, 62, 3, 2, 2, 2, 396, 397, 7, 103, 2, 2, 397, 398, 7, 112, 2, 2, 398, 399, 7, 119, 2, 2, 399, 400, 7, 111, 2, 2, 400, 64, 3, 2, 2, 2, 401, 402, 7, 93, 2, 2, 402, 66, 3, 2, 2, 2, 403, 404, 7, 95, 2, 2, 404, 68, 3, 2, 2, 2, 405, 406, 7, 99, 2, 2, 406, 407, 7, 102, 2, 2, 407, 408, 7, 102, 2, 2, 408, 409, 7, 116, 2, 2, 409, 410, 7, 103, 2, 2, 410, 411, 7, 117, 2, 2, 411, 412, 7, 117, 2, 2, 412, 70, 3, 2, 2, 2, 413, 414, 7, 48, 2, 2, 414, 72, 3, 2, 2, 2, 415, 416, 7, 111, 2, 2, 416, 417, 7, 99, 2, 2, 417, 418, 7, 114, 2, 2, 418, 419, 7, 114, 2, 2, 419, 420, 7, 107, 2, 2, 420, 421, 7, 112, 2, 2, 421, 422, 7, 105, 2, 2, 422, 74, 3, 2, 2, 2, 423, 424, 7, 63, 2, 2, 424, 425, 7, 64, 2, 2, 425, 76, 3, 2, 2, 2, 426, 427, 7, 111, 2, 2, 427, 428, 7, 103, 2, 2, 428, 429, 7, 111, 2, 2, 429, 430, 7, 113, 2, 2, 430, 431, 7, 116, 2, 2, 431, 432, 7, 123, 2, 2, 432, 78, 3, 2, 2, 2, 433, 434, 7, 117, 2, 2, 434, 435, 7, 118, 2, 2, 435, 436, 7, 113, 2, 2, 436, 437, 7, 116, 2, 2, 437, 438, 7, 99, 2, 2, 438, 439, 7, 105, 2, 2, 439, 440, 7, 103, 2, 2, 440, 80, 3, 2, 2, 2, 441, 442, 7, 101, 2, 2, 442, 443, 7, 99, 2, 2, 443, 444, 7, 110, 2, 2, 444, 445, 7, 110, 2, 2, 445, 446, 7, 102, 2, 2, 446, 447, 7, 99, 2, 2, 447, 448, 7, 118, 2, 2, 448, 449, 7, 99, 2, 2, 449, 82, 3, 2, 2, 2, 450, 451, 7, 107, 2, 2, 451, 452, 7, 104, 2, 2, 452, 84, 3, 2, 2, 2, 453, 454, 7, 103, 2, 2, 454, 455, 7, 110, 2, 2, 455, 456, 7, 117, 2, 2, 456, 457, 7, 103, 2, 2, 457, 86, 3, 2, 2, 2, 458, 459, 7, 121, 2, 2, 459, 460, 7, 106, 2, 2, 460, 461, 7, 107, 2, 2, 461, 462, 7, 110, 2, 2, 462, 463, 7, 103, 2, 2, 463, 88, 3, 2, 2, 2, 464, 465, 7, 99, 2, 2, 465, 466, 7, 117, 2, 2, 466, 467, 7, 117, 2, 2, 467, 468, 7, 103, 2, 2, 468, 469, 7, 111, 2, 2, 469, 470, 7, 100, 2, 2, 470, 471, 7, 110, 2, 2, 471, 472, 7, 123, 2, 2, 472, 90, 3, 2, 2, 2, 473, 474, 7, 102, 2, 2, 474, 475, 7, 113, 2, 2, 475, 92, 3, 2, 2, 2, 476, 477, 7, 116, 2, 2, 477, 478, 7, 103, 2, 2, 478, 479, 7, 118, 2, 2, 479, 480, 7, 119, 2, 2, 480, 481, 7, 116, 2, 2, 481, 482, 7, 112, 2, 2, 482, 94, 3, 2, 2, 2, 483, 484, 7, 118, 2, 2, 484, 485, 7, 106, 2, 2, 485, 486, 7, 116, 2, 2, 486, 487, 7, 113, 2, 2, 487, 488, 7, 121, 2, 2, 488, 96, 3, 2, 2, 2, 489, 490, 7, 103, 2, 2, 490, 491, 7, 111, 2, 2, 491, 492, 7, 107, 2, 2, 492, 493, 7, 118, 2, 2, 493, 98, 3, 2, 2, 2, 494, 495, 7, 120, 2, 2, 495, 496, 7, 99, 2, 2, 496, 497, 7, 116, 2, 2, 497, 100, 3, 2, 2, 2, 498, 499, 7, 100, 2, 2, 499, 500, 7, 113, 2, 2, 500, 501, 7, 113, 2, 2, 501, 502, 7, 110, 2, 2, 502, 102, 3, 2, 2, 2, 503, 504, 7, 117, 2, 2, 504, 505, 7, 118, 2, 2, 505, 506, 7, 116, 2, 2, 506, 507, 7, 107, 2, 2, 507, 508, 7, 112, 2, 2, 508, 509, 7, 105, 2, 2, 509, 104, 3, 2, 2, 2, 510, 511, 7, 100, 2, 2, 511, 512, 7, 123, 2, 2, 512, 513, 7, 118, 2, 2, 513, 514, 7, 103, 2, 2, 514, 106, 3, 2, 2, 2, 515, 516, 7, 45, 2, 2, 516, 517, 7, 45, 2, 2, 517, 108, 3, 2, 2, 2, 518, 519, 7, 47, 2, 2, 519, 520, 7, 47, 2, 2, 520, 110, 3, 2, 2, 2, 521, 522, 7, 112, 2, 2, 522, 523, 7, 103, 2, 2, 523, 524, 7, 121, 2, 2, 524, 112, 3, 2, 2, 2, 525, 526, 7, 45, 2, 2, 526, 114, 3, 2, 2, 2, 527, 528, 7, 47, 2, 2, 528, 116, 3, 2, 2, 2, 529, 530, 7, 99, 2, 2, 530, 531, 7, 104, 2, 2, 531, 532, 7, 118, 2, 2, 532, 533, 7, 103, 2, 2, 533, 534, 7, 116, 2, 2, 534, 118, 3, 2, 2, 2, 535, 536, 7, 102, 2, 2, 536, 537, 7, 103, 2, 2, 537, 538, 7, 110, 2, 2, 538, 539, 7, 103, 2, 2, 539, 540, 7, 118, 2, 2, 540, 541, 7, 103, 2, 2, 541, 120, 3, 2, 2, 2, 542, 543, 7, 35, 2, 2, 543, 122, 3, 2, 2, 2, 544, 545, 7, 44, 2, 2, 545, 546, 7, 44, 2, 2, 546, 124, 3, 2, 2, 2, 547, 548, 7, 49, 2, 2, 548, 126, 3, 2, 2, 2, 549, 550, 7, 39, 2, 2, 550, 128, 3, 2, 2, 2, 551, 552, 7, 62, 2, 2, 552, 553, 7, 62, 2, 2, 553, 130, 3, 2, 2, 2, 554, 555, 7, 64, 2, 2, 555, 556, 7, 64, 2, 2, 556, 132, 3, 2, 2, 2, 557, 558, 7, 40, 2, 2, 558, 134, 3, 2, 2, 2, 559, 560, 7, 126, 2, 2, 560, 136, 3, 2, 2, 2, 561, 562, 7, 63, 2, 2, 562, 563, 7, 63, 2, 2, 563, 138, 3, 2, 2, 2, 564, 565, 7, 35, 2, 2, 565, 566, 7, 63, 2, 2, 566, 140, 3, 2, 2, 2, 567, 568, 7, 40, 2, 2, 568, 569, 7, 40, 2, 2, 569, 142, 3, 2, 2, 2, 570, 571, 7, 126, 2, 2, 571, 572, 7, 126, 2, 2, 572, 144, 3, 2, 2, 2, 573, 574, 7, 65, 2, 2, 574, 146, 3, 2, 2, 2, 575, 576, 7, 60, 2, 2, 576, 148, 3, 2, 2, 2, 577, 578, 7, 126, 2, 2, 578, 579, 7, 63, 2, 2, 579, 150, 3, 2, 2, 2, 580, 581, 7, 96, 2, 2, 581, 582, 7, 63, 2, 2, 582, 152, 3, 2, 2, 2, 583, 584, 7, 40, 2, 2, 584, 585, 7, 63, 2, 2, 585, 154, 3, 2, 2, 2, 586, 587, 7, 62, 2, 2, 587, 588, 7, 62, 2, 2, 588, 589, 7, 63, 2, 2, 589, 156, 3, 2, 2, 2, 590, 591, 7, 64, 2, 2, 591, 592, 7, 64, 2, 2, 592, 593, 7, 63, 2, 2, 593, 158, 3, 2, 2, 2, 594, 595, 7, 45, 2, 2, 595, 596, 7, 63, 2, 2, 596, 160, 3, 2, 2, 2, 597, 598, 7, 47, 2, 2, 598, 599, 7, 63, 2, 2, 599, 162, 3, 2, 2, 2, 600, 601, 7, 44, 2, 2, 601, 602, 7, 63, 2, 2, 602, 164, 3, 2, 2, 2, 603, 604, 7, 49, 2, 2, 604, 605, 7, 63, 2, 2, 605, 166, 3, 2, 2, 2, 606, 607, 7, 39, 2, 2, 607, 608, 7, 63, 2, 2, 608, 168, 3, 2, 2, 2, 609, 610, 7, 110, 2, 2, 610, 611, 7, 103, 2, 2, 611, 612, 7, 118, 2, 2, 612, 170, 3, 2, 2, 2, 613, 614, 7, 60, 2, 2, 614, 615, 7, 63, 2, 2, 615, 172, 3, 2, 2, 2, 616, 617, 7, 63, 2, 2, 617, 618, 7, 60, 2, 2, 618, 174, 3, 2, 2, 2, 619, 620, 7, 117, 2, 2, 620, 621, 7, 121, 2, 2, 621, 622, 7, 107, 2, 2, 622, 623, 7, 118, 2, 2, 623, 624, 7, 101, 2, 2, 624, 625, 7, 106, 2, 2, 625, 176, 3, 2, 2, 2, 626, 627, 7, 101, 2, 2, 627, 628, 7, 99, 2, 2, 628, 629, 7, 117, 2, 2, 629, 630, 7, 103, 2, 2, 630, 178, 3, 2, 2, 2, 631, 632, 7, 102, 2, 2, 632, 633, 7, 103, 2, 2, 633, 634, 7, 104, 2, 2, 634, 635, 7, 99, 2, 2, 635, 636, 7, 119, 2, 2, 636, 637, 7, 110, 2, 2, 637, 638, 7, 118, 2, 2, 638, 180, 3, 2, 2, 2, 639, 640, 7, 47, 2, 2, 640, 641, 7, 64, 2, 2, 641, 182, 3, 2, 2, 2, 642, 643, 7, 107, 2, 2, 643, 644, 7, 112, 2, 2, 644, 825, 7, 118, 2, 2, 645, 646, 7, 107, 2, 2, 646, 647, 7, 112, 2, 2, 647, 648, 7, 118, 2, 2, 648, 825, 7, 58, 2, 2, 649, 650, 7, 107, 2, 2, 650, 651, 7, 112, 2, 2, 651, 652, 7, 118, 2, 2, 652, 653, 7, 51, 2, 2, 653, 825, 7, 56, 2, 2, 654, 655, 7, 107, 2, 2, 655, 656, 7, 112, 2, 2, 656, 657, 7, 118, 2, 2, 657, 658, 7, 52, 2, 2, 658, 825, 7, 54, 2, 2, 659, 660, 7, 107, 2, 2, 660, 661, 7, 112, 2, 2, 661, 662, 7, 118, 2, 2, 662, 663, 7, 53, 2, 2, 663, 825, 7, 52, 2, 2, 664, 665, 7, 107, 2, 2, 665, 666, 7, 112, 2, 2, 666, 667, 7, 118, 2, 2, 667, 668, 7, 54, 2, 2, 668, 825, 7, 50, 2, 2, 669, 670, 7, 107, 2, 2, 670, 671, 7, 112, 2, 2, 671, 672, 7, 118, 2, 2, 672, 673, 7, 54, 2, 2, 673, 825, 7, 58, 2, 2, 674, 675, 7, 107, 2, 2, 675, 676, 7, 112, 2, 2, 676, 677, 7, 118, 2, 2, 677, 678, 7, 55, 2, 2, 678, 825, 7, 56, 2, 2, 679, 680, 7, 107, 2, 2, 680, 681, 7, 112, 2, 2, 681, 682, 7, 118, 2, 2, 682, 683, 7, 56, 2, 2, 683, 825, 7, 54, 2, 2, 684, 685, 7, 107, 2, 2, 685, 686, 7, 112, 2, 2, 686, 687, 7, 118, 2, 2, 687, 688, 7, 57, 2, 2, 688, 825, 7, 52, 2, 2, 689, 690, 7, 107, 2, 2, 690, 691, 7, 112, 2, 2, 691, 692, 7, 118, 2, 2, 692, 693, 7, 58, 2, 2, 693, 825, 7, 50, 2, 2, 694, 695, 7, 107, 2, 2, 695, 696, 7, 112, 2, 2, 696, 697, 7, 118, 2, 2, 697, 698, 7, 58, 2, 2, 698, 825, 7, 58, 2, 2, 699, 700, 7, 107, 2, 2, 700, 701, 7, 112, 2, 2, 701, 702, 7, 118, 2, 2, 702, 703, 7, 59, 2, 2, 703, 825, 7, 56, 2, 2, 704, 705, 7, 107, 2, 2, 705, 706, 7, 112, 2, 2, 706, 707, 7, 118, 2, 2, 707, 708, 7, 51, 2, 2, 708, 709, 7, 50, 2, 2, 709, 825, 7, 54, 2, 2, 710, 711, 7, 107, 2, 2, 711, 712, 7, 112, 2, 2, 712, 713, 7, 118, 2, 2, 713, 714, 7, 51, 2, 2, 714, 715, 7, 51, 2, 2, 715, 825, 7, 52, 2, 2, 716, 717, 7, 107, 2, 2, 717, 718, 7, 112, 2, 2, 718, 719, 7, 118, 2, 2, 719, 720, 7, 51, 2, 2, 720, 721, 7, 52, 2, 2, 721, 825, 7, 50, 2, 2, 722, 723, 7, 107, 2, 2, 723, 724, 7, 112, 2, 2, 724, 725, 7, 118, 2, 2, 725, 726, 7, 51, 2, 2, 726, 727, 7, 52, 2, 2, 727, 825, 7, 58, 2, 2, 728, 729, 7, 107, 2, 2, 729, 730, 7, 112, 2, 2, 730, 731, 7, 118, 2, 2, 731, 732, 7, 51, 2, 2, 732, 733, 7, 53, 2, 2, 733, 825, 7, 56, 2, 2, 734, 735, 7, 107, 2, 2, 735, 736, 7, 112, 2, 2, 736, 737, 7, 118, 2, 2, 737, 738, 7, 51, 2, 2, 738, 739, 7, 54, 2, 2, 739, 825, 7, 54, 2, 2, 740, 741, 7, 107, 2, 2, 741, 742, 7, 112, 2, 2, 742, 743, 7, 118, 2, 2, 743, 744, 7, 51, 2, 2, 744, 745, 7, 55, 2, 2, 745, 825, 7, 52, 2, 2, 746, 747, 7, 107, 2, 2, 747, 748, 7, 112, 2, 2, 748, 749, 7, 118, 2, 2, 749, 750, 7, 51, 2, 2, 750, 751, 7, 56, 2, 2, 751, 825, 7, 50, 2, 2, 752, 753, 7, 107, 2, 2, 753, 754, 7, 112, 2, 2, 754, 755, 7, 118, 2, 2, 755, 756, 7, 51, 2, 2, 756, 757, 7, 56, 2, 2, 757, 825, 7, 58, 2, 2, 758, 759, 7, 107, 2, 2, 759, 760, 7, 112, 2, 2, 760, 761, 7, 118, 2, 2, 761, 762, 7, 51, 2, 2, 762, 763, 7, 57, 2, 2, 763, 825, 7, 56, 2, 2, 764, 765, 7, 107, 2, 2, 765, 766, 7, 112, 2, 2, 766, 767, 7, 118, 2, 2, 767, 768, 7, 51, 2, 2, 768, 769, 7, 58, 2, 2, 769, 825, 7, 54, 2, 2, 770, 771, 7, 107, 2, 2, 771, 772, 7, 112, 2, 2, 772, 773, 7, 118, 2, 2, 773, 774, 7, 51, 2, 2, 774, 775, 7, 59, 2, 2, 775, 825, 7, 52, 2, 2, 776, 777, 7, 107, 2, 2, 777, 778, 7, 112, 2, 2, 778, 779, 7, 118, 2, 2, 779, 780, 7, 52, 2, 2, 780, 781, 7, 50, 2, 2, 781, 825, 7, 50, 2, 2, 782, 783, 7, 107, 2, 2, 783, 784, 7, 112, 2, 2, 784, 785, 7, 118, 2, 2, 785, 786, 7, 52, 2, 2, 786, 787, 7, 50, 2, 2, 787, 825, 7, 58, 2, 2, 788, 789, 7, 107, 2, 2, 789, 790, 7, 112, 2, 2, 790, 791, 7, 118, 2, 2, 791, 792, 7, 52, 2, 2, 792, 793, 7, 51, 2, 2, 793, 825, 7, 56, 2, 2, 794, 795, 7, 107, 2, 2, 795, 796, 7, 112, 2, 2, 796, 797, 7, 118, 2, 2, 797, 798, 7, 52, 2, 2, 798, 799, 7, 52, 2, 2, 799, 825, 7, 54, 2, 2, 800, 801, 7, 107, 2, 2, 801, 802, 7, 112, 2, 2, 802, 803, 7, 118, 2, 2, 803, 804, 7, 52, 2, 2, 804, 805, 7, 53, 2, 2, 805, 825, 7, 52, 2, 2, 806, 807, 7, 107, 2, 2, 807, 808, 7, 112, 2, 2, 808, 809, 7, 118, 2, 2, 809, 810, 7, 52, 2, 2, 810, 811, 7, 54, 2, 2, 811, 825, 7, 50, 2, 2, 812, 813, 7, 107, 2, 2, 813, 814, 7, 112, 2, 2, 814, 815, 7, 118, 2, 2, 815, 816, 7, 52, 2, 2, 816, 817, 7, 54, 2, 2, 817, 825, 7, 58, 2, 2, 818, 819, 7, 107, 2, 2, 819, 820, 7, 112, 2, 2, 820, 821, 7, 118, 2, 2, 821, 822, 7, 52, 2, 2, 822, 823, 7, 55, 2, 2, 823, 825, 7, 56, 2, 2, 824, 642, 3, 2, 2, 2, 824, 645, 3, 2, 2, 2, 824, 649, 3, 2, 2, 2, 824, 654, 3, 2, 2, 2, 824, 659, 3, 2, 2, 2, 824, 664, 3, 2, 2, 2, 824, 669, 3, 2, 2, 2, 824, 674, 3, 2, 2, 2, 824, 679, 3, 2, 2, 2, 824, 684, 3, 2, 2, 2, 824, 689, 3, 2, 2, 2, 824, 694, 3, 2, 2, 2, 824, 699, 3, 2, 2, 2, 824, 704, 3, 2, 2, 2, 824, 710, 3, 2, 2, 2, 824, 716, 3, 2, 2, 2, 824, 722, 3, 2, 2, 2, 824, 728, 3, 2, 2, 2, 824, 734, 3, 2, 2, 2, 824, 740, 3, 2, 2, 2, 824, 746, 3, 2, 2, 2, 824, 752, 3, 2, 2, 2, 824, 758, 3, 2, 2, 2, 824, 764, 3, 2, 2, 2, 824, 770, 3, 2, 2, 2, 824, 776, 3, 2, 2, 2, 824, 782, 3, 2, 2, 2, 824, 788, 3, 2, 2, 2, 824, 794, 3, 2, 2, 2, 824, 800, 3, 2, 2, 2, 824, 806, 3, 2, 2, 2, 824, 812, 3, 2, 2, 2, 824, 818, 3, 2, 2, 2, 825, 184, 3, 2, 2, 2, 826, 827, 7, 119, 2, 2, 827, 828, 7, 107, 2, 2, 828, 829, 7, 112, 2, 2, 829, 1042, 7, 118, 2, 2, 830, 831, 7, 119, 2, 2, 831, 832, 7, 107, 2, 2, 832, 833, 7, 112, 2, 2, 833, 834, 7, 118, 2, 2, 834, 1042, 7, 58, 2, 2, 835, 836, 7, 119, 2, 2, 836, 837, 7, 107, 2, 2, 837, 838, 7, 112, 2, 2, 838, 839, 7, 118, 2, 2, 839, 840, 7, 51, 2, 2, 840, 1042, 7, 56, 2, 2, 841, 842, 7, 119, 2, 2, 842, 843, 7, 107, 2, 2, 843, 844, 7, 112, 2, 2, 844, 845, 7, 118, 2, 2, 845, 846, 7, 52, 2, 2, 846, 1042, 7, 54, 2, 2, 847, 848, 7, 119, 2, 2, 848, 849, 7, 107, 2, 2, 849, 850, 7, 112, 2, 2, 850, 851, 7, 118, 2, 2, 851, 852, 7, 53, 2, 2, 852, 1042, 7, 52, 2, 2, 853, 854, 7, 119, 2, 2, 854, 855, 7, 107, 2, 2, 855, 856, 7, 112, 2, 2, 856, 857, 7, 118, 2, 2, 857, 858, 7, 54, 2, 2, 858, 1042, 7, 50, 2, 2, 859, 860, 7, 119, 2, 2, 860, 861, 7, 107, 2, 2, 861, 862, 7, 112, 2, 2, 862, 863, 7, 118, 2, 2, 863, 864, 7, 54, 2, 2, 864, 1042, 7, 58, 2, 2, 865, 866, 7, 119, 2, 2, 866, 867, 7, 107, 2, 2, 867, 868, 7, 112, 2, 2, 868, 869, 7, 118, 2, 2, 869, 870, 7, 55, 2, 2, 870, 1042, 7, 56, 2, 2, 871, 872, 7, 119, 2, 2, 872, 873, 7, 107, 2, 2, 873, 874, 7, 112, 2, 2, 874, 875, 7, 118, 2, 2, 875, 876, 7, 56, 2, 2, 876, 1042, 7, 54, 2, 2, 877, 878, 7, 119, 2, 2, 878, 879, 7, 107, 2, 2, 879, 880, 7, 112, 2, 2, 880, 881, 7, 118, 2, 2, 881, 882, 7, 57, 2, 2, 882, 1042, 7, 52, 2, 2, 883, 884, 7, 119, 2, 2, 884, 885, 7, 107, 2, 2, 885, 886, 7, 112, 2, 2, 886, 887, 7, 118, 2, 2, 887, 888, 7, 58, 2, 2, 888, 1042, 7, 50, 2, 2, 889, 890, 7, 119, 2, 2, 890, 891, 7, 107, 2, 2, 891, 892, 7, 112, 2, 2, 892, 893, 7, 118, 2, 2, 893, 894, 7, 58, 2, 2, 894, 1042, 7, 58, 2, 2, 895, 896, 7, 119, 2, 2, 896, 897, 7, 107, 2, 2, 897, 898, 7, 112, 2, 2, 898, 899, 7, 118, 2, 2, 899, 900, 7, 59, 2, 2, 900, 1042, 7, 56, 2, 2, 901, 902, 7, 119, 2, 2, 902, 903, 7, 107, 2, 2, 903, 904, 7, 112, 2, 2, 904, 905, 7, 118, 2, 2, 905, 906, 7, 51, 2, 2, 906, 907, 7, 50, 2, 2, 907, 1042, 7, 54, 2, 2, 908, 909, 7, 119, 2, 2, 909, 910, 7, 107, 2, 2, 910, 911, 7, 112, 2, 2, 911, 912, 7, 118, 2, 2, 912, 913, 7, 51, 2, 2, 913, 914, 7, 51, 2, 2, 914, 1042, 7, 52, 2, 2, 915, 916, 7, 119, 2, 2, 916, 917, 7, 107, 2, 2, 917, 918, 7, 112, 2, 2, 918, 919, 7, 118, 2, 2, 919, 920, 7, 51, 2, 2, 920, 921, 7, 52, 2, 2, 921, 1042, 7, 50, 2, 2, 922, 923, 7, 119, 2, 2, 923, 924, 7, 107, 2, 2, 924, 925, 7, 112, 2, 2, 925, 926, 7, 118, 2, 2, 926, 927, 7, 51, 2, 2, 927, 928, 7, 52, 2, 2, 928, 1042, 7, 58, 2, 2, 929, 930, 7, 119, 2, 2, 930, 931, 7, 107, 2, 2, 931, 932, 7, 112, 2, 2, 932, 933, 7, 118, 2, 2, 933, 934, 7, 51, 2, 2, 934, 935, 7, 53, 2, 2, 935, 1042, 7, 56, 2, 2, 936, 937, 7, 119, 2, 2, 937, 938, 7, 107, 2, 2, 938, 939, 7, 112, 2, 2, 939, 940, 7, 118, 2, 2, 940, 941, 7, 51, 2, 2, 941, 942, 7, 54, 2, 2, 942, 1042, 7, 54, 2, 2, 943, 944, 7, 119, 2, 2, 944, 945, 7, 107, 2, 2, 945, 946, 7, 112, 2, 2, 946, 947, 7, 118, 2, 2, 947, 948, 7, 51, 2, 2, 948, 949, 7, 55, 2, 2, 949, 1042, 7, 52, 2, 2, 950, 951, 7, 119, 2, 2, 951, 952, 7, 107, 2, 2, 952, 953, 7, 112, 2, 2, 953, 954, 7, 118, 2, 2, 954, 955, 7, 51, 2, 2, 955, 956, 7, 56, 2, 2, 956, 1042, 7, 50, 2, 2, 957, 958, 7, 119, 2, 2, 958, 959, 7, 107, 2, 2, 959, 960, 7, 112, 2, 2, 960, 961, 7, 118, 2, 2, 961, 962, 7, 51, 2, 2, 962, 963, 7, 56, 2, 2, 963, 1042, 7, 58, 2, 2, 964, 965, 7, 119, 2, 2, 965, 966, 7, 107, 2, 2, 966, 967, 7, 112, 2, 2, 967, 968, 7, 118, 2, 2, 968, 969, 7, 51, 2, 2, 969, 970, 7, 57, 2, 2, 970, 1042, 7, 56, 2, 2, 971, 972, 7, 119, 2, 2, 972, 973, 7, 107, 2, 2, 973, 974, 7, 112, 2, 2, 974, 975, 7, 118, 2, 2, 975, 976, 7, 51, 2, 2, 976, 977, 7, 58, 2, 2, 977, 1042, 7, 54, 2, 2, 978, 979, 7, 119, 2, 2, 979, 980, 7, 107, 2, 2, 980, 981, 7, 112, 2, 2, 981, 982, 7, 118, 2, 2, 982, 983, 7, 51, 2, 2, 983, 984, 7, 59, 2, 2, 984, 1042, 7, 52, 2, 2, 985, 986, 7, 119, 2, 2, 986, 987, 7, 107, 2, 2, 987, 988, 7, 112, 2, 2, 988, 989, 7, 118, 2, 2, 989, 990, 7, 52, 2, 2, 990, 991, 7, 50, 2, 2, 991, 1042, 7, 50, 2, 2, 992, 993, 7, 119, 2, 2, 993, 994, 7, 107, 2, 2, 994, 995, 7, 112, 2, 2, 995, 996, 7, 118, 2, 2, 996, 997, 7, 52, 2, 2, 997, 998, 7, 50, 2, 2, 998, 1042, 7, 58, 2, 2, 999, 1000, 7, 119, 2, 2, 1000, 1001, 7, 107, 2, 2, 1001, 1002, 7, 112, 2, 2, 1002, 1003, 7, 118, 2, 2, 1003, 1004, 7, 52, 2, 2, 1004, 1005, 7, 51, 2, 2, 1005, 1042, 7, 56, 2, 2, 1006, 1007, 7, 119, 2, 2, 1007, 1008, 7, 107, 2, 2, 1008, 1009, 7, 112, 2, 2, 1009, 1010, 7, 118, 2, 2, 1010, 1011, 7, 52, 2, 2, 1011, 1012, 7, 52, 2, 2, 1012, 1042, 7, 54, 2, 2, 1013, 1014, 7, 119, 2, 2, 1014, 1015, 7, 107, 2, 2, 1015, 1016, 7, 112, 2, 2, 1016, 1017, 7, 118, 2, 2, 1017, 1018, 7, 52, 2, 2, 1018, 1019, 7, 53, 2, 2, 1019, 1042, 7, 52, 2, 2, 1020, 1021, 7, 119, 2, 2, 1021, 1022, 7, 107, 2, 2, 1022, 1023, 7, 112, 2, 2, 1023, 1024, 7, 118, 2, 2, 1024, 1025, 7, 52, 2, 2, 1025, 1026, 7, 54, 2, 2, 1026, 1042, 7, 50, 2, 2, 1027, 1028, 7, 119, 2, 2, 1028, 1029, 7, 107, 2, 2, 1029, 1030, 7, 112, 2, 2, 1030, 1031, 7, 118, 2, 2, 1031, 1032, 7, 52, 2, 2, 1032, 1033, 7, 54, 2, 2, 1033, 1042, 7, 58, 2, 2, 1034, 1035, 7, 119, 2, 2, 1035, 1036, 7, 107, 2, 2, 1036, 1037, 7, 112, 2, 2, 1037, 1038, 7, 118, 2, 2, 1038, 1039, 7, 52, 2, 2, 1039, 1040, 7, 55, 2, 2, 1040, 1042, 7, 56, 2, 2, 1041, 826, 3, 2, 2, 2, 1041, 830, 3, 2, 2, 2, 1041, 835, 3, 2, 2, 2, 1041, 841, 3, 2, 2, 2, 1041, 847, 3, 2, 2, 2, 1041, 853, 3, 2, 2, 2, 1041, 859, 3, 2, 2, 2, 1041, 865, 3, 2, 2, 2, 1041, 871, 3, 2, 2, 2, 1041, 877, 3, 2, 2, 2, 1041, 883, 3, 2, 2, 2, 1041, 889, 3, 2, 2, 2, 1041, 895, 3, 2, 2, 2, 1041, 901, 3, 2, 2, 2, 1041, 908, 3, 2, 2, 2, 1041, 915, 3, 2, 2, 2, 1041, 922, 3, 2, 2, 2, 1041, 929, 3, 2, 2, 2, 1041, 936, 3, 2, 2, 2, 1041, 943, 3, 2, 2, 2, 1041, 950, 3, 2, 2, 2, 1041, 957, 3, 2, 2, 2, 1041, 964, 3, 2, 2, 2, 1041, 971, 3, 2, 2, 2, 1041, 978, 3, 2, 2, 2, 1041, 985, 3, 2, 2, 2, 1041, 992, 3, 2, 2, 2, 1041, 999, 3, 2, 2, 2, 1041, 1006, 3, 2, 2, 2, 1041, 1013, 3, 2, 2, 2, 1041, 1020, 3, 2, 2, 2, 1041, 1027, 3, 2, 2, 2, 1041, 1034, 3, 2, 2, 2, 1042, 186, 3, 2, 2, 2, 1043, 1044, 7, 100, 2, 2, 1044, 1045, 7, 123, 2, 2, 1045, 1046, 7, 118, 2, 2, 1046, 1047, 7, 103, 2, 2, 1047, 1264, 7, 117, 2, 2, 1048, 1049, 7, 100, 2, 2, 1049, 1050, 7, 123, 2, 2, 1050, 1051, 7, 118, 2, 2, 1051, 1052, 7, 103, 2, 2, 1052, 1053, 7, 117, 2, 2, 1053, 1264, 7, 51, 2, 2, 1054, 1055, 7, 100, 2, 2, 1055, 1056, 7, 123, 2, 2, 1056, 1057, 7, 118, 2, 2, 1057, 1058, 7, 103, 2, 2, 1058, 1059, 7, 117, 2, 2, 1059, 1264, 7, 52, 2, 2, 1060, 1061, 7, 100, 2, 2, 1061, 1062, 7, 123, 2, 2, 1062, 1063, 7, 118, 2, 2, 1063, 1064, 7, 103, 2, 2, 1064, 1065, 7, 117, 2, 2, 1065, 1264, 7, 53, 2, 2, 1066, 1067, 7, 100, 2, 2, 1067, 1068, 7, 123, 2, 2, 1068, 1069, 7, 118, 2, 2, 1069, 1070, 7, 103, 2, 2, 1070, 1071, 7, 117, 2, 2, 1071, 1264, 7, 54, 2, 2, 1072, 1073, 7, 100, 2, 2, 1073, 1074, 7, 123, 2, 2, 1074, 1075, 7, 118, 2, 2, 1075, 1076, 7, 103, 2, 2, 1076, 1077, 7, 117, 2, 2, 1077, 1264, 7, 55, 2, 2, 1078, 1079, 7, 100, 2, 2, 1079, 1080, 7, 123, 2, 2, 1080, 1081, 7, 118, 2, 2, 1081, 1082, 7, 103, 2, 2, 1082, 1083, 7, 117, 2, 2, 1083, 1264, 7, 56, 2, 2, 1084, 1085, 7, 100, 2, 2, 1085, 1086, 7, 123, 2, 2, 1086, 1087, 7, 118, 2, 2, 1087, 1088, 7, 103, 2, 2, 1088, 1089, 7, 117, 2, 2, 1089, 1264, 7, 57, 2, 2, 1090, 1091, 7, 100, 2, 2, 1091, 1092, 7, 123, 2, 2, 1092, 1093, 7, 118, 2, 2, 1093, 1094, 7, 103, 2, 2, 1094, 1095, 7, 117, 2, 2, 1095, 1264, 7, 58, 2, 2, 1096, 1097, 7, 100, 2, 2, 1097, 1098, 7, 123, 2, 2, 1098, 1099, 7, 118, 2, 2, 1099, 1100, 7, 103, 2, 2, 1100, 1101, 7, 117, 2, 2, 1101, 1264, 7, 59, 2, 2, 1102, 1103, 7, 100, 2, 2, 1103, 1104, 7, 123, 2, 2, 1104, 1105, 7, 118, 2, 2, 1105, 1106, 7, 103, 2, 2, 1106, 1107, 7, 117, 2, 2, 1107, 1108, 7, 51, 2, 2, 1108, 1264, 7, 50, 2, 2, 1109, 1110, 7, 100, 2, 2, 1110, 1111, 7, 123, 2, 2, 1111, 1112, 7, 118, 2, 2, 1112, 1113, 7, 103, 2, 2, 1113, 1114, 7, 117, 2, 2, 1114, 1115, 7, 51, 2, 2, 1115, 1264, 7, 51, 2, 2, 1116, 1117, 7, 100, 2, 2, 1117, 1118, 7, 123, 2, 2, 1118, 1119, 7, 118, 2, 2, 1119, 1120, 7, 103, 2, 2, 1120, 1121, 7, 117, 2, 2, 1121, 1122, 7, 51, 2, 2, 1122, 1264, 7, 52, 2, 2, 1123, 1124, 7, 100, 2, 2, 1124, 1125, 7, 123, 2, 2, 1125, 1126, 7, 118, 2, 2, 1126, 1127, 7, 103, 2, 2, 1127, 1128, 7, 117, 2, 2, 1128, 1129, 7, 51, 2, 2, 1129, 1264, 7, 53, 2, 2, 1130, 1131, 7, 100, 2, 2, 1131, 1132, 7, 123, 2, 2, 1132, 1133, 7, 118, 2, 2, 1133, 1134, 7, 103, 2, 2, 1134, 1135, 7, 117, 2, 2, 1135, 1136, 7, 51, 2, 2, 1136, 1264, 7, 54, 2, 2, 1137, 1138, 7, 100, 2, 2, 1138, 1139, 7, 123, 2, 2, 1139, 1140, 7, 118, 2, 2, 1140, 1141, 7, 103, 2, 2, 1141, 1142, 7, 117, 2, 2, 1142, 1143, 7, 51, 2, 2, 1143, 1264, 7, 55, 2, 2, 1144, 1145, 7, 100, 2, 2, 1145, 1146, 7, 123, 2, 2, 1146, 1147, 7, 118, 2, 2, 1147, 1148, 7, 103, 2, 2, 1148, 1149, 7, 117, 2, 2, 1149, 1150, 7, 51, 2, 2, 1150, 1264, 7, 56, 2, 2, 1151, 1152, 7, 100, 2, 2, 1152, 1153, 7, 123, 2, 2, 1153, 1154, 7, 118, 2, 2, 1154, 1155, 7, 103, 2, 2, 1155, 1156, 7, 117, 2, 2, 1156, 1157, 7, 51, 2, 2, 1157, 1264, 7, 57, 2, 2, 1158, 1159, 7, 100, 2, 2, 1159, 1160, 7, 123, 2, 2, 1160, 1161, 7, 118, 2, 2, 1161, 1162, 7, 103, 2, 2, 1162, 1163, 7, 117, 2, 2, 1163, 1164, 7, 51, 2, 2, 1164, 1264, 7, 58, 2, 2, 1165, 1166, 7, 100, 2, 2, 1166, 1167, 7, 123, 2, 2, 1167, 1168, 7, 118, 2, 2, 1168, 1169, 7, 103, 2, 2, 1169, 1170, 7, 117, 2, 2, 1170, 1171, 7, 51, 2, 2, 1171, 1264, 7, 59, 2, 2, 1172, 1173, 7, 100, 2, 2, 1173, 1174, 7, 123, 2, 2, 1174, 1175, 7, 118, 2, 2, 1175, 1176, 7, 103, 2, 2, 1176, 1177, 7, 117, 2, 2, 1177, 1178, 7, 52, 2, 2, 1178, 1264, 7, 50, 2, 2, 1179, 1180, 7, 100, 2, 2, 1180, 1181, 7, 123, 2, 2, 1181, 1182, 7, 118, 2, 2, 1182, 1183, 7, 103, 2, 2, 1183, 1184, 7, 117, 2, 2, 1184, 1185, 7, 52, 2, 2, 1185, 1264, 7, 51, 2, 2, 1186, 1187, 7, 100, 2, 2, 1187, 1188, 7, 123, 2, 2, 1188, 1189, 7, 118, 2, 2, 1189, 1190, 7, 103, 2, 2, 1190, 1191, 7, 117, 2, 2, 1191, 1192, 7, 52, 2, 2, 1192, 1264, 7, 52, 2, 2, 1193, 1194, 7, 100, 2, 2, 1194, 1195, 7, 123, 2, 2, 1195, 1196, 7, 118, 2, 2, 1196, 1197, 7, 103, 2, 2, 1197, 1198, 7, 117, 2, 2, 1198, 1199, 7, 52, 2, 2, 1199, 1264, 7, 53, 2, 2, 1200, 1201, 7, 100, 2, 2, 1201, 1202, 7, 123, 2, 2, 1202, 1203, 7, 118, 2, 2, 1203, 1204, 7, 103, 2, 2, 1204, 1205, 7, 117, 2, 2, 1205, 1206, 7, 52, 2, 2, 1206, 1264, 7, 54, 2, 2, 1207, 1208, 7, 100, 2, 2, 1208, 1209, 7, 123, 2, 2, 1209, 1210, 7, 118, 2, 2, 1210, 1211, 7, 103, 2, 2, 1211, 1212, 7, 117, 2, 2, 1212, 1213, 7, 52, 2, 2, 1213, 1264, 7, 55, 2, 2, 1214, 1215, 7, 100, 2, 2, 1215, 1216, 7, 123, 2, 2, 1216, 1217, 7, 118, 2, 2, 1217, 1218, 7, 103, 2, 2, 1218, 1219, 7, 117, 2, 2, 1219, 1220, 7, 52, 2, 2, 1220, 1264, 7, 56, 2, 2, 1221, 1222, 7, 100, 2, 2, 1222, 1223, 7, 123, 2, 2, 1223, 1224, 7, 118, 2, 2, 1224, 1225, 7, 103, 2, 2, 1225, 1226, 7, 117, 2, 2, 1226, 1227, 7, 52, 2, 2, 1227, 1264, 7, 57, 2, 2, 1228, 1229, 7, 100, 2, 2, 1229, 1230, 7, 123, 2, 2, 1230, 1231, 7, 118, 2, 2, 1231, 1232, 7, 103, 2, 2, 1232, 1233, 7, 117, 2, 2, 1233, 1234, 7, 52, 2, 2, 1234, 1264, 7, 58, 2, 2, 1235, 1236, 7, 100, 2, 2, 1236, 1237, 7, 123, 2, 2, 1237, 1238, 7, 118, 2, 2, 1238, 1239, 7, 103, 2, 2, 1239, 1240, 7, 117, 2, 2, 1240, 1241, 7, 52, 2, 2, 1241, 1264, 7, 59, 2, 2, 1242, 1243, 7, 100, 2, 2, 1243, 1244, 7, 123, 2, 2, 1244, 1245, 7, 118, 2, 2, 1245, 1246, 7, 103, 2, 2, 1246, 1247, 7, 117, 2, 2, 1247, 1248, 7, 53, 2, 2, 1248, 1264, 7, 50, 2, 2, 1249, 1250, 7, 100, 2, 2, 1250, 1251, 7, 123, 2, 2, 1251, 1252, 7, 118, 2, 2, 1252, 1253, 7, 103, 2, 2, 1253, 1254, 7, 117, 2, 2, 1254, 1255, 7, 53, 2, 2, 1255, 1264, 7, 51, 2, 2, 1256, 1257, 7, 100, 2, 2, 1257, 1258, 7, 123, 2, 2, 1258, 1259, 7, 118, 2, 2, 1259, 1260, 7, 103, 2, 2, 1260, 1261, 7, 117, 2, 2, 1261, 1262, 7, 53, 2, 2, 1262, 1264, 7, 52, 2, 2, 1263, 1043, 3, 2, 2, 2, 1263, 1048, 3, 2, 2, 2, 1263, 1054, 3, 2, 2, 2, 1263, 1060, 3, 2, 2, 2, 1263, 1066, 3, 2, 2, 2, 1263, 1072, 3, 2, 2, 2, 1263, 1078, 3, 2, 2, 2, 1263, 1084, 3, 2, 2, 2, 1263, 1090, 3, 2, 2, 2, 1263, 1096, 3, 2, 2, 2, 1263, 1102, 3, 2, 2, 2, 1263, 1109, 3, 2, 2, 2, 1263, 1116, 3, 2, 2, 2, 1263, 1123, 3, 2, 2, 2, 1263, 1130, 3, 2, 2, 2, 1263, 1137, 3, 2, 2, 2, 1263, 1144, 3, 2, 2, 2, 1263, 1151, 3, 2, 2, 2, 1263, 1158, 3, 2, 2, 2, 1263, 1165, 3, 2, 2, 2, 1263, 1172, 3, 2, 2, 2, 1263, 1179, 3, 2, 2, 2, 1263, 1186, 3, 2, 2, 2, 1263, 1193, 3, 2, 2, 2, 1263, 1200, 3, 2, 2, 2, 1263, 1207, 3, 2, 2, 2, 1263, 1214, 3, 2, 2, 2, 1263, 1221, 3, 2, 2, 2, 1263, 1228, 3, 2, 2, 2, 1263, 1235, 3, 2, 2, 2, 1263, 1242, 3, 2, 2, 2, 1263, 1249, 3, 2, 2, 2, 1263, 1256, 3, 2, 2, 2, 1264, 188, 3, 2, 2, 2, 1265, 1266, 7, 104, 2, 2, 1266, 1267, 7, 107, 2, 2, 1267, 1268, 7, 122, 2, 2, 1268, 1269, 7, 103, 2, 2, 1269, 1288, 7, 102, 2, 2, 1270, 1271, 7, 104, 2, 2, 1271, 1272, 7, 107, 2, 2, 1272, 1273, 7, 122, 2, 2, 1273, 1274, 7, 103, 2, 2, 1274, 1275, 7, 102, 2, 2, 1275, 1277, 3, 2, 2, 2, 1276, 1278, 9, 2, 2, 2, 1277, 1276, 3, 2, 2, 2, 1278, 1279, 3, 2, 2, 2, 1279, 1277, 3, 2, 2, 2, 1279, 1280, 3, 2, 2, 2, 1280, 1281, 3, 2, 2, 2, 1281, 1283, 7, 122, 2, 2, 1282, 1284, 9, 2, 2, 2, 1283, 1282, 3, 2, 2, 2, 1284, 1285, 3, 2, 2, 2, 1285, 1283, 3, 2, 2, 2, 1285, 1286, 3, 2, 2, 2, 1286, 1288, 3, 2, 2, 2, 1287, 1265, 3, 2, 2, 2, 1287, 1270, 3, 2, 2, 2, 1288, 190, 3, 2, 2, 2, 1289, 1290, 7, 119, 2, 2, 1290, 1291, 7, 104, 2, 2, 1291, 1292, 7, 107, 2, 2, 1292, 1293, 7, 122, 2, 2, 1293, 1294, 7, 103, 2, 2, 1294, 1314, 7, 102, 2, 2, 1295, 1296, 7, 119, 2, 2, 1296, 1297, 7, 104, 2, 2, 1297, 1298, 7, 107, 2, 2, 1298, 1299, 7, 122, 2, 2, 1299, 1300, 7, 103, 2, 2, 1300, 1301, 7, 102, 2, 2, 1301, 1303, 3, 2, 2, 2, 1302, 1304, 9, 2, 2, 2, 1303, 1302, 3, 2, 2, 2, 1304, 1305, 3, 2, 2, 2, 1305, 1303, 3, 2, 2, 2, 1305, 1306, 3, 2, 2, 2, 1306, 1307, 3, 2, 2, 2, 1307, 1309, 7, 122, 2, 2, 1308, 1310, 9, 2, 2, 2, 1309, 1308, 3, 2, 2, 2, 1310, 1311, 3, 2, 2, 2, 1311, 1309, 3, 2, 2, 2, 1311, 1312, 3, 2, 2, 2, 1312, 1314, 3, 2, 2, 2, 1313, 1289, 3, 2, 2, 2, 1313, 1295, 3, 2, 2, 2, 1314, 192, 3, 2, 2, 2, 1315, 1317, 9, 2, 2, 2, 1316, 1315, 3, 2, 2, 2, 1317, 1318, 3, 2, 2, 2, 1318, 1316, 3, 2, 2, 2, 1318, 1319, 3, 2, 2, 2, 1319, 1320, 3, 2, 2, 2, 1320, 1322, 7, 48, 2, 2, 1321, 1323, 9, 2, 2, 2, 1322, 1321, 3, 2, 2, 2, 1323, 1324, 3, 2, 2, 2, 1324, 1322, 3, 2, 2, 2, 1324, 1325, 3, 2, 2, 2, 1325, 1326, 3, 2, 2, 2, 1326, 1328, 7, 48, 2, 2, 1327, 1329, 9, 2, 2, 2, 1328, 1327, 3, 2, 2, 2, 1329, 1330, 3, 2, 2, 2, 1330, 1328, 3, 2, 2, 2, 1330, 1331, 3, 2, 2, 2, 1331, 194, 3, 2, 2, 2, 1332, 1333, 7, 118, 2, 2, 1333, 1334, 7, 116, 2, 2, 1334, 1335, 7, 119, 2, 2, 1335, 1342, 7, 103, 2, 2, 1336, 1337, 7, 104, 2, 2, 1337, 1338, 7, 99, 2, 2, 1338, 1339, 7, 110, 2, 2, 1339, 1340, 7, 117, 2, 2, 1340, 1342, 7, 103, 2, 2, 1341, 1332, 3, 2, 2, 2, 1341, 1336, 3, 2, 2, 2, 1342, 196, 3, 2, 2, 2, 1343, 1345, 9, 2, 2, 2, 1344, 1343, 3, 2, 2, 2, 1345, 1346, 3, 2, 2, 2, 1346, 1344, 3, 2, 2, 2, 1346, 1347, 3, 2, 2, 2, 1347, 1361, 3, 2, 2, 2, 1348, 1350, 9, 2, 2, 2, 1349, 1348, 3, 2, 2, 2, 1350, 1353, 3, 2, 2, 2, 1351, 1349, 3, 2, 2, 2, 1351, 1352, 3, 2, 2, 2, 1352, 1354, 3, 2, 2, 2, 1353, 1351, 3, 2, 2, 2, 1354, 1356, 7, 48, 2, 2, 1355, 1357, 9, 2, 2, 2, 1356, 1355, 3, 2, 2, 2, 1357, 1358, 3, 2, 2, 2, 1358, 1356, 3, 2, 2, 2, 1358, 1359, 3, 2, 2, 2, 1359, 1361, 3, 2, 2, 2, 1360, 1344, 3, 2, 2, 2, 1360, 1351, 3, 2, 2, 2, 1361, 1368, 3, 2, 2, 2, 1362, 1364, 9, 3, 2, 2, 1363, 1365, 9, 2, 2, 2, 1364, 1363, 3, 2, 2, 2, 1365, 1366, 3, 2, 2, 2, 1366, 1364, 3, 2, 2, 2, 1366, 1367, 3, 2, 2, 2, 1367, 1369, 3, 2, 2, 2, 1368, 1362, 3, 2, 2, 2, 1368, 1369, 3, 2, 2, 2, 1369, 198, 3, 2, 2, 2, 1370, 1371, 7, 50, 2, 2, 1371, 1373, 9, 4, 2, 2, 1372, 1374, 5, 207, 104, 2, 1373, 1372, 3, 2, 2, 2, 1374, 1375, 3, 2, 2, 2, 1375, 1373, 3, 2, 2, 2, 1375, 1376, 3, 2, 2, 2, 1376, 200, 3, 2, 2, 2, 1377, 1378, 7, 121, 2, 2, 1378, 1379, 7, 103, 2, 2, 1379, 1430, 7, 107, 2, 2, 1380, 1381, 7, 117, 2, 2, 1381, 1382, 7, 124, 2, 2, 1382, 1383, 7, 99, 2, 2, 1383, 1384, 7, 100, 2, 2, 1384, 1430, 7, 113, 2, 2, 1385, 1386, 7, 104, 2, 2, 1386, 1387, 7, 107, 2, 2, 1387, 1388, 7, 112, 2, 2, 1388, 1389, 7, 112, 2, 2, 1389, 1390, 7, 103, 2, 2, 1390, 1430, 7, 123, 2, 2, 1391, 1392, 7, 103, 2, 2, 1392, 1393, 7, 118, 2, 2, 1393, 1394, 7, 106, 2, 2, 1394, 1395, 7, 103, 2, 2, 1395, 1430, 7, 116, 2, 2, 1396, 1397, 7, 117, 2, 2, 1397, 1398, 7, 103, 2, 2, 1398, 1399, 7, 101, 2, 2, 1399, 1400, 7, 113, 2, 2, 1400, 1401, 7, 112, 2, 2, 1401, 1402, 7, 102, 2, 2, 1402, 1430, 7, 117, 2, 2, 1403, 1404, 7, 111, 2, 2, 1404, 1405, 7, 107, 2, 2, 1405, 1406, 7, 112, 2, 2, 1406, 1407, 7, 119, 2, 2, 1407, 1408, 7, 118, 2, 2, 1408, 1409, 7, 103, 2, 2, 1409, 1430, 7, 117, 2, 2, 1410, 1411, 7, 106, 2, 2, 1411, 1412, 7, 113, 2, 2, 1412, 1413, 7, 119, 2, 2, 1413, 1414, 7, 116, 2, 2, 1414, 1430, 7, 117, 2, 2, 1415, 1416, 7, 102, 2, 2, 1416, 1417, 7, 99, 2, 2, 1417, 1418, 7, 123, 2, 2, 1418, 1430, 7, 117, 2, 2, 1419, 1420, 7, 121, 2, 2, 1420, 1421, 7, 103, 2, 2, 1421, 1422, 7, 103, 2, 2, 1422, 1423, 7, 109, 2, 2, 1423, 1430, 7, 117, 2, 2, 1424, 1425, 7, 123, 2, 2, 1425, 1426, 7, 103, 2, 2, 1426, 1427, 7, 99, 2, 2, 1427, 1428, 7, 116, 2, 2, 1428, 1430, 7, 117, 2, 2, 1429, 1377, 3, 2, 2, 2, 1429, 1380, 3, 2, 2, 2, 1429, 1385, 3, 2, 2, 2, 1429, 1391, 3, 2, 2, 2, 1429, 1396, 3, 2, 2, 2, 1429, 1403, 3, 2, 2, 2, 1429, 1410, 3, 2, 2, 2, 1429, 1415, 3, 2, 2, 2, 1429, 1419, 3, 2, 2, 2, 1429, 1424, 3, 2, 2, 2, 1430, 202, 3, 2, 2, 2, 1431, 1432, 7, 106, 2, 2, 1432, 1433, 7, 103, 2, 2, 1433, 1434, 7, 122, 2, 2, 1434, 1451, 3, 2, 2, 2, 1435, 1439, 7, 36, 2, 2, 1436, 1438, 5, 205, 103, 2, 1437, 1436, 3, 2, 2, 2, 1438, 1441, 3, 2, 2, 2, 1439, 1437, 3, 2, 2, 2, 1439, 1440, 3, 2, 2, 2, 1440, 1442, 3, 2, 2, 2, 1441, 1439, 3, 2, 2, 2, 1442, 1452, 7, 36, 2, 2, 1443, 1447, 7, 41, 2, 2, 1444, 1446, 5, 205, 103, 2, 1445, 1444, 3, 2, 2, 2, 1446, 1449, 3, 2, 2, 2, 1447, 1445, 3, 2, 2, 2, 1447, 1448, 3, 2, 2, 2, 1448, 1450, 3, 2, 2, 2, 1449, 1447, 3, 2, 2, 2, 1450, 1452, 7, 41, 2, 2, 1451, 1435, 3, 2, 2, 2, 1451, 1443, 3, 2, 2, 2, 1452, 204, 3, 2, 2, 2, 1453, 1454, 5, 207, 104, 2, 1454, 1455, 5, 207, 104, 2, 1455, 206, 3, 2, 2, 2, 1456, 1457, 9, 5, 2, 2, 1457, 208, 3, 2, 2, 2, 1458, 1459, 7, 99, 2, 2, 1459, 1460, 7, 100, 2, 2, 1460, 1461, 7, 117, 2, 2, 1461, 1462, 7, 118, 2, 2, 1462, 1463, 7, 116, 2, 2, 1463, 1464, 7, 99, 2, 2, 1464, 1465, 7, 101, 2, 2, 1465, 1551, 7, 118, 2, 2, 1466, 1467, 7, 99, 2, 2, 1467, 1468, 7, 104, 2, 2, 1468, 1469, 7, 118, 2, 2, 1469, 1470, 7, 103, 2, 2, 1470, 1551, 7, 116, 2, 2, 1471, 1472, 7, 101, 2, 2, 1472, 1473, 7, 99, 2, 2, 1473, 1474, 7, 117, 2, 2, 1474, 1551, 7, 103, 2, 2, 1475, 1476, 7, 101, 2, 2, 1476, 1477, 7, 99, 2, 2, 1477, 1478, 7, 118, 2, 2, 1478, 1479, 7, 101, 2, 2, 1479, 1551, 7, 106, 2, 2, 1480, 1481, 7, 102, 2, 2, 1481, 1482, 7, 103, 2, 2, 1482, 1483, 7, 104, 2, 2, 1483, 1484, 7, 99, 2, 2, 1484, 1485, 7, 119, 2, 2, 1485, 1486, 7, 110, 2, 2, 1486, 1551, 7, 118, 2, 2, 1487, 1488, 7, 104, 2, 2, 1488, 1489, 7, 107, 2, 2, 1489, 1490, 7, 112, 2, 2, 1490, 1491, 7, 99, 2, 2, 1491, 1551, 7, 110, 2, 2, 1492, 1493, 7, 107, 2, 2, 1493, 1551, 7, 112, 2, 2, 1494, 1495, 7, 107, 2, 2, 1495, 1496, 7, 112, 2, 2, 1496, 1497, 7, 110, 2, 2, 1497, 1498, 7, 107, 2, 2, 1498, 1499, 7, 112, 2, 2, 1499, 1551, 7, 103, 2, 2, 1500, 1501, 7, 110, 2, 2, 1501, 1502, 7, 103, 2, 2, 1502, 1551, 7, 118, 2, 2, 1503, 1504, 7, 111, 2, 2, 1504, 1505, 7, 99, 2, 2, 1505, 1506, 7, 118, 2, 2, 1506, 1507, 7, 101, 2, 2, 1507, 1551, 7, 106, 2, 2, 1508, 1509, 7, 112, 2, 2, 1509, 1510, 7, 119, 2, 2, 1510, 1511, 7, 110, 2, 2, 1511, 1551, 7, 110, 2, 2, 1512, 1513, 7, 113, 2, 2, 1513, 1551, 7, 104, 2, 2, 1514, 1515, 7, 116, 2, 2, 1515, 1516, 7, 103, 2, 2, 1516, 1517, 7, 110, 2, 2, 1517, 1518, 7, 113, 2, 2, 1518, 1519, 7, 101, 2, 2, 1519, 1520, 7, 99, 2, 2, 1520, 1521, 7, 118, 2, 2, 1521, 1522, 7, 99, 2, 2, 1522, 1523, 7, 100, 2, 2, 1523, 1524, 7, 110, 2, 2, 1524, 1551, 7, 103, 2, 2, 1525, 1526, 7, 117, 2, 2, 1526, 1527, 7, 118, 2, 2, 1527, 1528, 7, 99, 2, 2, 1528, 1529, 7, 118, 2, 2, 1529, 1530, 7, 107, 2, 2, 1530, 1551, 7, 101, 2, 2, 1531, 1532, 7, 117, 2, 2, 1532, 1533, 7, 121, 2, 2, 1533, 1534, 7, 107, 2, 2, 1534, 1535, 7, 118, 2, 2, 1535, 1536, 7, 101, 2, 2, 1536, 1551, 7, 106, 2, 2, 1537, 1538, 7, 118, 2, 2, 1538, 1539, 7, 116, 2, 2, 1539, 1551, 7, 123, 2, 2, 1540, 1541, 7, 118, 2, 2, 1541, 1542, 7, 123, 2, 2, 1542, 1543, 7, 114, 2, 2, 1543, 1551, 7, 103, 2, 2, 1544, 1545, 7, 118, 2, 2, 1545, 1546, 7, 123, 2, 2, 1546, 1547, 7, 114, 2, 2, 1547, 1548, 7, 103, 2, 2, 1548, 1549, 7, 113, 2, 2, 1549, 1551, 7, 104, 2, 2, 1550, 1458, 3, 2, 2, 2, 1550, 1466, 3, 2, 2, 2, 1550, 1471, 3, 2, 2, 2, 1550, 1475, 3, 2, 2, 2, 1550, 1480, 3, 2, 2, 2, 1550, 1487, 3, 2, 2, 2, 1550, 1492, 3, 2, 2, 2, 1550, 1494, 3, 2, 2, 2, 1550, 1500, 3, 2, 2, 2, 1550, 1503, 3, 2, 2, 2, 1550, 1508, 3, 2, 2, 2, 1550, 1512, 3, 2, 2, 2, 1550, 1514, 3, 2, 2, 2, 1550, 1525, 3, 2, 2, 2, 1550, 1531, 3, 2, 2, 2, 1550, 1537, 3, 2, 2, 2, 1550, 1540, 3, 2, 2, 2, 1550, 1544, 3, 2, 2, 2, 1551, 210, 3, 2, 2, 2, 1552, 1553, 7, 99, 2, 2, 1553, 1554, 7, 112, 2, 2, 1554, 1555, 7, 113, 2, 2, 1555, 1556, 7, 112, 2, 2, 1556, 1557, 7, 123, 2, 2, 1557, 1558, 7, 111, 2, 2, 1558, 1559, 7, 113, 2, 2, 1559, 1560, 7, 119, 2, 2, 1560, 1561, 7, 117, 2, 2, 1561, 212, 3, 2, 2, 2, 1562, 1563, 7, 100, 2, 2, 1563, 1564, 7, 116, 2, 2, 1564, 1565, 7, 103, 2, 2, 1565, 1566, 7, 99, 2, 2, 1566, 1567, 7, 109, 2, 2, 1567, 214, 3, 2, 2, 2, 1568, 1569, 7, 101, 2, 2, 1569, 1570, 7, 113, 2, 2, 1570, 1571, 7, 112, 2, 2, 1571, 1572, 7, 117, 2, 2, 1572, 1573, 7, 118, 2, 2, 1573, 1574, 7, 99, 2, 2, 1574, 1575, 7, 112, 2, 2, 1575, 1576, 7, 118, 2, 2, 1576, 216, 3, 2, 2, 2, 1577, 1578, 7, 101, 2, 2, 1578, 1579, 7, 113, 2, 2, 1579, 1580, 7, 112, 2, 2, 1580, 1581, 7, 118, 2, 2, 1581, 1582, 7, 107, 2, 2, 1582, 1583, 7, 112, 2, 2, 1583, 1584, 7, 119, 2, 2, 1584, 1585, 7, 103, 2, 2, 1585, 218, 3, 2, 2, 2, 1586, 1587, 7, 103, 2, 2, 1587, 1588, 7, 122, 2, 2, 1588, 1589, 7, 118, 2, 2, 1589, 1590, 7, 103, 2, 2, 1590, 1591, 7, 116, 2, 2, 1591, 1592, 7, 112, 2, 2, 1592, 1593, 7, 99, 2, 2, 1593, 1594, 7, 110, 2, 2, 1594, 220, 3, 2, 2, 2, 1595, 1596, 7, 107, 2, 2, 1596, 1597, 7, 112, 2, 2, 1597, 1598, 7, 102, 2, 2, 1598, 1599, 7, 103, 2, 2, 1599, 1600, 7, 122, 2, 2, 1600, 1601, 7, 103, 2, 2, 1601, 1602, 7, 102, 2, 2, 1602, 222, 3, 2, 2, 2, 1603, 1604, 7, 107, 2, 2, 1604, 1605, 7, 112, 2, 2, 1605, 1606, 7, 118, 2, 2, 1606, 1607, 7, 103, 2, 2, 1607, 1608, 7, 116, 2, 2, 1608, 1609, 7, 112, 2, 2, 1609, 1610, 7, 99, 2, 2, 1610, 1611, 7, 110, 2, 2, 1611, 224, 3, 2, 2, 2, 1612, 1613, 7, 114, 2, 2, 1613, 1614, 7, 99, 2, 2, 1614, 1615, 7, 123, 2, 2, 1615, 1616, 7, 99, 2, 2, 1616, 1617, 7, 100, 2, 2, 1617, 1618, 7, 110, 2, 2, 1618, 1619, 7, 103, 2, 2, 1619, 226, 3, 2, 2, 2, 1620, 1621, 7, 114, 2, 2, 1621, 1622, 7, 116, 2, 2, 1622, 1623, 7, 107, 2, 2, 1623, 1624, 7, 120, 2, 2, 1624, 1625, 7, 99, 2, 2, 1625, 1626, 7, 118, 2, 2, 1626, 1627, 7, 103, 2, 2, 1627, 228, 3, 2, 2, 2, 1628, 1629, 7, 114, 2, 2, 1629, 1630, 7, 119, 2, 2, 1630, 1631, 7, 100, 2, 2, 1631, 1632, 7, 110, 2, 2, 1632, 1633, 7, 107, 2, 2, 1633, 1634, 7, 101, 2, 2, 1634, 230, 3, 2, 2, 2, 1635, 1636, 7, 114, 2, 2, 1636, 1637, 7, 119, 2, 2, 1637, 1638, 7, 116, 2, 2, 1638, 1639, 7, 103, 2, 2, 1639, 232, 3, 2, 2, 2, 1640, 1641, 7, 120, 2, 2, 1641, 1642, 7, 107, 2, 2, 1642, 1643, 7, 103, 2, 2, 1643, 1644, 7, 121, 2, 2, 1644, 234, 3, 2, 2, 2, 1645, 1649, 5, 237, 119, 2, 1646, 1648, 5, 239, 120, 2, 1647, 1646, 3, 2, 2, 2, 1648, 1651, 3, 2, 2, 2, 1649, 1647, 3, 2, 2, 2, 1649, 1650, 3, 2, 2, 2, 1650, 236, 3, 2, 2, 2, 1651, 1649, 3, 2, 2, 2, 1652, 1653, 9, 6, 2, 2, 1653, 238, 3, 2, 2, 2, 1654, 1655, 9, 7, 2, 2, 1655, 240, 3, 2, 2, 2, 1656, 1660, 7, 36, 2, 2, 1657, 1659, 5, 243, 122, 2, 1658, 1657, 3, 2, 2, 2, 1659, 1662, 3, 2, 2, 2, 1660, 1658, 3, 2, 2, 2, 1660, 1661, 3, 2, 2, 2, 1661, 1663, 3, 2, 2, 2, 1662, 1660, 3, 2, 2, 2, 1663, 1673, 7, 36, 2, 2, 1664, 1668, 7, 41, 2, 2, 1665, 1667, 5, 245, 123, 2, 1666, 1665, 3, 2, 2, 2, 1667, 1670, 3, 2, 2, 2, 1668, 1666, 3, 2, 2, 2, 1668, 1669, 3, 2, 2, 2, 1669, 1671, 3, 2, 2, 2, 1670, 1668, 3, 2, 2, 2, 1671, 1673, 7, 41, 2, 2, 1672, 1656, 3, 2, 2, 2, 1672, 1664, 3, 2, 2, 2, 1673, 242, 3, 2, 2, 2, 1674, 1678, 10, 8, 2, 2, 1675, 1676, 7, 94, 2, 2, 1676, 1678, 11, 2, 2, 2, 1677, 1674, 3, 2, 2, 2, 1677, 1675, 3, 2, 2, 2, 1678, 244, 3, 2, 2, 2, 1679, 1683, 10, 9, 2, 2, 1680, 1681, 7, 94, 2, 2, 1681, 1683, 11, 2, 2, 2, 1682, 1679, 3, 2, 2, 2, 1682, 1680, 3, 2, 2, 2, 1683, 246, 3, 2, 2, 2, 1684, 1686, 9, 10, 2, 2, 1685, 1684, 3, 2, 2, 2, 1686, 1687, 3, 2, 2, 2, 1687, 1685, 3, 2, 2, 2, 1687, 1688, 3, 2, 2, 2, 1688, 1689, 3, 2, 2, 2, 1689, 1690, 8, 124, 2, 2, 1690, 248, 3, 2, 2, 2, 1691, 1692, 7, 49, 2, 2, 1692, 1693, 7, 44, 2, 2, 1693, 1697, 3, 2, 2, 2, 1694, 1696, 11, 2, 2, 2, 1695, 1694, 3, 2, 2, 2, 1696, 1699, 3, 2, 2, 2, 1697, 1698, 3, 2, 2, 2, 1697, 1695, 3, 2, 2, 2, 1698, 1700, 3, 2, 2, 2, 1699, 1697, 3, 2, 2, 2, 1700, 1701, 7, 44, 2, 2, 1701, 1702, 7, 49, 2, 2, 1702, 1703, 3, 2, 2, 2, 1703, 1704, 8, 125, 3, 2, 1704, 250, 3, 2, 2, 2, 1705, 1706, 7, 49, 2, 2, 1706, 1707, 7, 49, 2, 2, 1707, 1711, 3, 2, 2, 2, 1708, 1710, 10, 11, 2, 2, 1709, 1708, 3, 2, 2, 2, 1710, 1713, 3, 2, 2, 2, 1711, 1709, 3, 2, 2, 2, 1711, 1712, 3, 2, 2, 2, 1712, 1714, 3, 2, 2, 2, 1713, 1711, 3, 2, 2, 2, 1714, 1715, 8, 126, 3, 2, 1715, 252, 3, 2, 2, 2, 37, 2, 824, 1041, 1263, 1279, 1285, 1287, 1305, 1311, 1313, 1318, 1324, 1330, 1341, 1346, 1351, 1358, 1360, 1366, 1368, 1375, 1429, 1439, 1447, 1451, 1550, 1649, 1660, 1668, 1672, 1677, 1682, 1687, 1697, 1711, 4, 8, 2, 2, 2, 3, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 135, 1870, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 4, 122, 9, 122, 4, 123, 9, 123, 4, 124, 9, 124, 4, 125, 9, 125, 4, 126, 9, 126, 4, 127, 9, 127, 4, 128, 9, 128, 4, 129, 9, 129, 4, 130, 9, 130, 4, 131, 9, 131, 4, 132, 9, 132, 4, 133, 9, 133, 4, 134, 9, 134, 4, 135, 9, 135, 4, 136, 9, 136, 4, 137, 9, 137, 4, 138, 9, 138, 4, 139, 9, 139, 4, 140, 9, 140, 4, 141, 9, 141, 4, 142, 9, 142, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 64, 3, 64, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 3, 81, 3, 81, 3, 81, 3, 82, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 3, 90, 3, 90, 3, 90, 3, 90, 3, 91, 3, 91, 3, 91, 3, 92, 3, 92, 3, 92, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 96, 3, 96, 3, 96, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 5, 99, 905, 10, 99, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 5, 100, 1122, 10, 100, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 5, 101, 1344, 10, 101, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 6, 102, 1358, 10, 102, 13, 102, 14, 102, 1359, 3, 102, 3, 102, 6, 102, 1364, 10, 102, 13, 102, 14, 102, 1365, 5, 102, 1368, 10, 102, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 6, 103, 1384, 10, 103, 13, 103, 14, 103, 1385, 3, 103, 3, 103, 6, 103, 1390, 10, 103, 13, 103, 14, 103, 1391, 5, 103, 1394, 10, 103, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 5, 104, 1405, 10, 104, 3, 105, 3, 105, 5, 105, 1409, 10, 105, 3, 105, 3, 105, 5, 105, 1413, 10, 105, 3, 105, 3, 105, 5, 105, 1417, 10, 105, 3, 106, 3, 106, 5, 106, 1421, 10, 106, 3, 106, 7, 106, 1424, 10, 106, 12, 106, 14, 106, 1427, 11, 106, 3, 107, 3, 107, 3, 107, 3, 107, 3, 108, 3, 108, 5, 108, 1435, 10, 108, 3, 108, 7, 108, 1438, 10, 108, 12, 108, 14, 108, 1441, 11, 108, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 5, 109, 1499, 10, 109, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 5, 110, 1507, 10, 110, 3, 110, 3, 110, 3, 110, 5, 110, 1512, 10, 110, 3, 110, 5, 110, 1515, 10, 110, 3, 111, 3, 111, 3, 111, 3, 112, 3, 112, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 5, 113, 1610, 10, 113, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 127, 3, 127, 3, 127, 3, 127, 3, 127, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 133, 3, 133, 7, 133, 1765, 10, 133, 12, 133, 14, 133, 1768, 11, 133, 3, 134, 3, 134, 3, 135, 3, 135, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 5, 136, 1781, 10, 136, 3, 136, 3, 136, 7, 136, 1785, 10, 136, 12, 136, 14, 136, 1788, 11, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 5, 136, 1798, 10, 136, 3, 136, 3, 136, 7, 136, 1802, 10, 136, 12, 136, 14, 136, 1805, 11, 136, 3, 136, 5, 136, 1808, 10, 136, 3, 137, 3, 137, 3, 137, 5, 137, 1813, 10, 137, 3, 138, 3, 138, 3, 138, 5, 138, 1818, 10, 138, 3, 139, 6, 139, 1821, 10, 139, 13, 139, 14, 139, 1822, 3, 139, 3, 139, 6, 139, 1827, 10, 139, 13, 139, 14, 139, 1828, 3, 139, 3, 139, 6, 139, 1833, 10, 139, 13, 139, 14, 139, 1834, 5, 139, 1837, 10, 139, 3, 140, 6, 140, 1840, 10, 140, 13, 140, 14, 140, 1841, 3, 140, 3, 140, 3, 141, 3, 141, 3, 141, 3, 141, 7, 141, 1850, 10, 141, 12, 141, 14, 141, 1853, 11, 141, 3, 141, 3, 141, 3, 141, 3, 141, 3, 141, 3, 142, 3, 142, 3, 142, 3, 142, 7, 142, 1864, 10, 142, 12, 142, 14, 142, 1867, 11, 142, 3, 142, 3, 142, 3, 1851, 2, 143, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 75, 149, 76, 151, 77, 153, 78, 155, 79, 157, 80, 159, 81, 161, 82, 163, 83, 165, 84, 167, 85, 169, 86, 171, 87, 173, 88, 175, 89, 177, 90, 179, 91, 181, 92, 183, 93, 185, 94, 187, 95, 189, 96, 191, 97, 193, 98, 195, 99, 197, 100, 199, 101, 201, 102, 203, 103, 205, 104, 207, 105, 209, 106, 211, 2, 213, 107, 215, 2, 217, 108, 219, 109, 221, 2, 223, 2, 225, 110, 227, 111, 229, 112, 231, 113, 233, 114, 235, 115, 237, 116, 239, 117, 241, 118, 243, 119, 245, 120, 247, 121, 249, 122, 251, 123, 253, 124, 255, 125, 257, 126, 259, 127, 261, 128, 263, 129, 265, 130, 267, 2, 269, 2, 271, 131, 273, 2, 275, 2, 277, 132, 279, 133, 281, 134, 283, 135, 3, 2, 12, 3, 2, 50, 59, 4, 2, 71, 71, 103, 103, 4, 2, 90, 90, 122, 122, 5, 2, 50, 59, 67, 72, 99, 104, 6, 2, 38, 38, 67, 92, 97, 97, 99, 124, 7, 2, 38, 38, 50, 59, 67, 92, 97, 97, 99, 124, 6, 2, 12, 12, 15, 15, 36, 36, 94, 94, 6, 2, 12, 12, 15, 15, 41, 41, 94, 94, 5, 2, 11, 12, 14, 15, 34, 34, 4, 2, 12, 12, 15, 15, 2, 2015, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 2, 161, 3, 2, 2, 2, 2, 163, 3, 2, 2, 2, 2, 165, 3, 2, 2, 2, 2, 167, 3, 2, 2, 2, 2, 169, 3, 2, 2, 2, 2, 171, 3, 2, 2, 2, 2, 173, 3, 2, 2, 2, 2, 175, 3, 2, 2, 2, 2, 177, 3, 2, 2, 2, 2, 179, 3, 2, 2, 2, 2, 181, 3, 2, 2, 2, 2, 183, 3, 2, 2, 2, 2, 185, 3, 2, 2, 2, 2, 187, 3, 2, 2, 2, 2, 189, 3, 2, 2, 2, 2, 191, 3, 2, 2, 2, 2, 193, 3, 2, 2, 2, 2, 195, 3, 2, 2, 2, 2, 197, 3, 2, 2, 2, 2, 199, 3, 2, 2, 2, 2, 201, 3, 2, 2, 2, 2, 203, 3, 2, 2, 2, 2, 205, 3, 2, 2, 2, 2, 207, 3, 2, 2, 2, 2, 209, 3, 2, 2, 2, 2, 213, 3, 2, 2, 2, 2, 217, 3, 2, 2, 2, 2, 219, 3, 2, 2, 2, 2, 225, 3, 2, 2, 2, 2, 227, 3, 2, 2, 2, 2, 229, 3, 2, 2, 2, 2, 231, 3, 2, 2, 2, 2, 233, 3, 2, 2, 2, 2, 235, 3, 2, 2, 2, 2, 237, 3, 2, 2, 2, 2, 239, 3, 2, 2, 2, 2, 241, 3, 2, 2, 2, 2, 243, 3, 2, 2, 2, 2, 245, 3, 2, 2, 2, 2, 247, 3, 2, 2, 2, 2, 249, 3, 2, 2, 2, 2, 251, 3, 2, 2, 2, 2, 253, 3, 2, 2, 2, 2, 255, 3, 2, 2, 2, 2, 257, 3, 2, 2, 2, 2, 259, 3, 2, 2, 2, 2, 261, 3, 2, 2, 2, 2, 263, 3, 2, 2, 2, 2, 265, 3, 2, 2, 2, 2, 271, 3, 2, 2, 2, 2, 277, 3, 2, 2, 2, 2, 279, 3, 2, 2, 2, 2, 281, 3, 2, 2, 2, 2, 283, 3, 2, 2, 2, 3, 285, 3, 2, 2, 2, 5, 292, 3, 2, 2, 2, 7, 294, 3, 2, 2, 2, 9, 297, 3, 2, 2, 2, 11, 299, 3, 2, 2, 2, 13, 301, 3, 2, 2, 2, 15, 304, 3, 2, 2, 2, 17, 306, 3, 2, 2, 2, 19, 308, 3, 2, 2, 2, 21, 311, 3, 2, 2, 2, 23, 313, 3, 2, 2, 2, 25, 316, 3, 2, 2, 2, 27, 323, 3, 2, 2, 2, 29, 325, 3, 2, 2, 2, 31, 330, 3, 2, 2, 2, 33, 332, 3, 2, 2, 2, 35, 334, 3, 2, 2, 2, 37, 336, 3, 2, 2, 2, 39, 345, 3, 2, 2, 2, 41, 354, 3, 2, 2, 2, 43, 364, 3, 2, 2, 2, 45, 372, 3, 2, 2, 2, 47, 375, 3, 2, 2, 2, 49, 377, 3, 2, 2, 2, 51, 379, 3, 2, 2, 2, 53, 385, 3, 2, 2, 2, 55, 391, 3, 2, 2, 2, 57, 395, 3, 2, 2, 2, 59, 402, 3, 2, 2, 2, 61, 411, 3, 2, 2, 2, 63, 420, 3, 2, 2, 2, 65, 428, 3, 2, 2, 2, 67, 434, 3, 2, 2, 2, 69, 439, 3, 2, 2, 2, 71, 441, 3, 2, 2, 2, 73, 443, 3, 2, 2, 2, 75, 451, 3, 2, 2, 2, 77, 453, 3, 2, 2, 2, 79, 461, 3, 2, 2, 2, 81, 464, 3, 2, 2, 2, 83, 471, 3, 2, 2, 2, 85, 479, 3, 2, 2, 2, 87, 488, 3, 2, 2, 2, 89, 491, 3, 2, 2, 2, 91, 496, 3, 2, 2, 2, 93, 500, 3, 2, 2, 2, 95, 506, 3, 2, 2, 2, 97, 512, 3, 2, 2, 2, 99, 522, 3, 2, 2, 2, 101, 531, 3, 2, 2, 2, 103, 534, 3, 2, 2, 2, 105, 541, 3, 2, 2, 2, 107, 547, 3, 2, 2, 2, 109, 552, 3, 2, 2, 2, 111, 559, 3, 2, 2, 2, 113, 563, 3, 2, 2, 2, 115, 568, 3, 2, 2, 2, 117, 575, 3, 2, 2, 2, 119, 580, 3, 2, 2, 2, 121, 583, 3, 2, 2, 2, 123, 586, 3, 2, 2, 2, 125, 590, 3, 2, 2, 2, 127, 592, 3, 2, 2, 2, 129, 594, 3, 2, 2, 2, 131, 596, 3, 2, 2, 2, 133, 602, 3, 2, 2, 2, 135, 609, 3, 2, 2, 2, 137, 611, 3, 2, 2, 2, 139, 614, 3, 2, 2, 2, 141, 616, 3, 2, 2, 2, 143, 618, 3, 2, 2, 2, 145, 621, 3, 2, 2, 2, 147, 624, 3, 2, 2, 2, 149, 626, 3, 2, 2, 2, 151, 628, 3, 2, 2, 2, 153, 631, 3, 2, 2, 2, 155, 634, 3, 2, 2, 2, 157, 637, 3, 2, 2, 2, 159, 639, 3, 2, 2, 2, 161, 642, 3, 2, 2, 2, 163, 645, 3, 2, 2, 2, 165, 648, 3, 2, 2, 2, 167, 652, 3, 2, 2, 2, 169, 656, 3, 2, 2, 2, 171, 659, 3, 2, 2, 2, 173, 662, 3, 2, 2, 2, 175, 665, 3, 2, 2, 2, 177, 668, 3, 2, 2, 2, 179, 671, 3, 2, 2, 2, 181, 675, 3, 2, 2, 2, 183, 678, 3, 2, 2, 2, 185, 681, 3, 2, 2, 2, 187, 688, 3, 2, 2, 2, 189, 693, 3, 2, 2, 2, 191, 701, 3, 2, 2, 2, 193, 704, 3, 2, 2, 2, 195, 713, 3, 2, 2, 2, 197, 904, 3, 2, 2, 2, 199, 1121, 3, 2, 2, 2, 201, 1343, 3, 2, 2, 2, 203, 1367, 3, 2, 2, 2, 205, 1393, 3, 2, 2, 2, 207, 1404, 3, 2, 2, 2, 209, 1412, 3, 2, 2, 2, 211, 1418, 3, 2, 2, 2, 213, 1428, 3, 2, 2, 2, 215, 1432, 3, 2, 2, 2, 217, 1498, 3, 2, 2, 2, 219, 1500, 3, 2, 2, 2, 221, 1516, 3, 2, 2, 2, 223, 1519, 3, 2, 2, 2, 225, 1609, 3, 2, 2, 2, 227, 1611, 3, 2, 2, 2, 229, 1621, 3, 2, 2, 2, 231, 1627, 3, 2, 2, 2, 233, 1636, 3, 2, 2, 2, 235, 1646, 3, 2, 2, 2, 237, 1655, 3, 2, 2, 2, 239, 1661, 3, 2, 2, 2, 241, 1670, 3, 2, 2, 2, 243, 1678, 3, 2, 2, 2, 245, 1687, 3, 2, 2, 2, 247, 1695, 3, 2, 2, 2, 249, 1703, 3, 2, 2, 2, 251, 1710, 3, 2, 2, 2, 253, 1718, 3, 2, 2, 2, 255, 1723, 3, 2, 2, 2, 257, 1728, 3, 2, 2, 2, 259, 1733, 3, 2, 2, 2, 261, 1745, 3, 2, 2, 2, 263, 1754, 3, 2, 2, 2, 265, 1762, 3, 2, 2, 2, 267, 1769, 3, 2, 2, 2, 269, 1771, 3, 2, 2, 2, 271, 1807, 3, 2, 2, 2, 273, 1812, 3, 2, 2, 2, 275, 1817, 3, 2, 2, 2, 277, 1820, 3, 2, 2, 2, 279, 1839, 3, 2, 2, 2, 281, 1845, 3, 2, 2, 2, 283, 1859, 3, 2, 2, 2, 285, 286, 7, 114, 2, 2, 286, 287, 7, 116, 2, 2, 287, 288, 7, 99, 2, 2, 288, 289, 7, 105, 2, 2, 289, 290, 7, 111, 2, 2, 290, 291, 7, 99, 2, 2, 291, 4, 3, 2, 2, 2, 292, 293, 7, 61, 2, 2, 293, 6, 3, 2, 2, 2, 294, 295, 7, 126, 2, 2, 295, 296, 7, 126, 2, 2, 296, 8, 3, 2, 2, 2, 297, 298, 7, 96, 2, 2, 298, 10, 3, 2, 2, 2, 299, 300, 7, 128, 2, 2, 300, 12, 3, 2, 2, 2, 301, 302, 7, 64, 2, 2, 302, 303, 7, 63, 2, 2, 303, 14, 3, 2, 2, 2, 304, 305, 7, 64, 2, 2, 305, 16, 3, 2, 2, 2, 306, 307, 7, 62, 2, 2, 307, 18, 3, 2, 2, 2, 308, 309, 7, 62, 2, 2, 309, 310, 7, 63, 2, 2, 310, 20, 3, 2, 2, 2, 311, 312, 7, 63, 2, 2, 312, 22, 3, 2, 2, 2, 313, 314, 7, 99, 2, 2, 314, 315, 7, 117, 2, 2, 315, 24, 3, 2, 2, 2, 316, 317, 7, 107, 2, 2, 317, 318, 7, 111, 2, 2, 318, 319, 7, 114, 2, 2, 319, 320, 7, 113, 2, 2, 320, 321, 7, 116, 2, 2, 321, 322, 7, 118, 2, 2, 322, 26, 3, 2, 2, 2, 323, 324, 7, 44, 2, 2, 324, 28, 3, 2, 2, 2, 325, 326, 7, 104, 2, 2, 326, 327, 7, 116, 2, 2, 327, 328, 7, 113, 2, 2, 328, 329, 7, 111, 2, 2, 329, 30, 3, 2, 2, 2, 330, 331, 7, 125, 2, 2, 331, 32, 3, 2, 2, 2, 332, 333, 7, 46, 2, 2, 333, 34, 3, 2, 2, 2, 334, 335, 7, 127, 2, 2, 335, 36, 3, 2, 2, 2, 336, 337, 7, 99, 2, 2, 337, 338, 7, 100, 2, 2, 338, 339, 7, 117, 2, 2, 339, 340, 7, 118, 2, 2, 340, 341, 7, 116, 2, 2, 341, 342, 7, 99, 2, 2, 342, 343, 7, 101, 2, 2, 343, 344, 7, 118, 2, 2, 344, 38, 3, 2, 2, 2, 345, 346, 7, 101, 2, 2, 346, 347, 7, 113, 2, 2, 347, 348, 7, 112, 2, 2, 348, 349, 7, 118, 2, 2, 349, 350, 7, 116, 2, 2, 350, 351, 7, 99, 2, 2, 351, 352, 7, 101, 2, 2, 352, 353, 7, 118, 2, 2, 353, 40, 3, 2, 2, 2, 354, 355, 7, 107, 2, 2, 355, 356, 7, 112, 2, 2, 356, 357, 7, 118, 2, 2, 357, 358, 7, 103, 2, 2, 358, 359, 7, 116, 2, 2, 359, 360, 7, 104, 2, 2, 360, 361, 7, 99, 2, 2, 361, 362, 7, 101, 2, 2, 362, 363, 7, 103, 2, 2, 363, 42, 3, 2, 2, 2, 364, 365, 7, 110, 2, 2, 365, 366, 7, 107, 2, 2, 366, 367, 7, 100, 2, 2, 367, 368, 7, 116, 2, 2, 368, 369, 7, 99, 2, 2, 369, 370, 7, 116, 2, 2, 370, 371, 7, 123, 2, 2, 371, 44, 3, 2, 2, 2, 372, 373, 7, 107, 2, 2, 373, 374, 7, 117, 2, 2, 374, 46, 3, 2, 2, 2, 375, 376, 7, 42, 2, 2, 376, 48, 3, 2, 2, 2, 377, 378, 7, 43, 2, 2, 378, 50, 3, 2, 2, 2, 379, 380, 7, 103, 2, 2, 380, 381, 7, 116, 2, 2, 381, 382, 7, 116, 2, 2, 382, 383, 7, 113, 2, 2, 383, 384, 7, 116, 2, 2, 384, 52, 3, 2, 2, 2, 385, 386, 7, 119, 2, 2, 386, 387, 7, 117, 2, 2, 387, 388, 7, 107, 2, 2, 388, 389, 7, 112, 2, 2, 389, 390, 7, 105, 2, 2, 390, 54, 3, 2, 2, 2, 391, 392, 7, 104, 2, 2, 392, 393, 7, 113, 2, 2, 393, 394, 7, 116, 2, 2, 394, 56, 3, 2, 2, 2, 395, 396, 7, 117, 2, 2, 396, 397, 7, 118, 2, 2, 397, 398, 7, 116, 2, 2, 398, 399, 7, 119, 2, 2, 399, 400, 7, 101, 2, 2, 400, 401, 7, 118, 2, 2, 401, 58, 3, 2, 2, 2, 402, 403, 7, 111, 2, 2, 403, 404, 7, 113, 2, 2, 404, 405, 7, 102, 2, 2, 405, 406, 7, 107, 2, 2, 406, 407, 7, 104, 2, 2, 407, 408, 7, 107, 2, 2, 408, 409, 7, 103, 2, 2, 409, 410, 7, 116, 2, 2, 410, 60, 3, 2, 2, 2, 411, 412, 7, 104, 2, 2, 412, 413, 7, 119, 2, 2, 413, 414, 7, 112, 2, 2, 414, 415, 7, 101, 2, 2, 415, 416, 7, 118, 2, 2, 416, 417, 7, 107, 2, 2, 417, 418, 7, 113, 2, 2, 418, 419, 7, 112, 2, 2, 419, 62, 3, 2, 2, 2, 420, 421, 7, 116, 2, 2, 421, 422, 7, 103, 2, 2, 422, 423, 7, 118, 2, 2, 423, 424, 7, 119, 2, 2, 424, 425, 7, 116, 2, 2, 425, 426, 7, 112, 2, 2, 426, 427, 7, 117, 2, 2, 427, 64, 3, 2, 2, 2, 428, 429, 7, 103, 2, 2, 429, 430, 7, 120, 2, 2, 430, 431, 7, 103, 2, 2, 431, 432, 7, 112, 2, 2, 432, 433, 7, 118, 2, 2, 433, 66, 3, 2, 2, 2, 434, 435, 7, 103, 2, 2, 435, 436, 7, 112, 2, 2, 436, 437, 7, 119, 2, 2, 437, 438, 7, 111, 2, 2, 438, 68, 3, 2, 2, 2, 439, 440, 7, 93, 2, 2, 440, 70, 3, 2, 2, 2, 441, 442, 7, 95, 2, 2, 442, 72, 3, 2, 2, 2, 443, 444, 7, 99, 2, 2, 444, 445, 7, 102, 2, 2, 445, 446, 7, 102, 2, 2, 446, 447, 7, 116, 2, 2, 447, 448, 7, 103, 2, 2, 448, 449, 7, 117, 2, 2, 449, 450, 7, 117, 2, 2, 450, 74, 3, 2, 2, 2, 451, 452, 7, 48, 2, 2, 452, 76, 3, 2, 2, 2, 453, 454, 7, 111, 2, 2, 454, 455, 7, 99, 2, 2, 455, 456, 7, 114, 2, 2, 456, 457, 7, 114, 2, 2, 457, 458, 7, 107, 2, 2, 458, 459, 7, 112, 2, 2, 459, 460, 7, 105, 2, 2, 460, 78, 3, 2, 2, 2, 461, 462, 7, 63, 2, 2, 462, 463, 7, 64, 2, 2, 463, 80, 3, 2, 2, 2, 464, 465, 7, 111, 2, 2, 465, 466, 7, 103, 2, 2, 466, 467, 7, 111, 2, 2, 467, 468, 7, 113, 2, 2, 468, 469, 7, 116, 2, 2, 469, 470, 7, 123, 2, 2, 470, 82, 3, 2, 2, 2, 471, 472, 7, 117, 2, 2, 472, 473, 7, 118, 2, 2, 473, 474, 7, 113, 2, 2, 474, 475, 7, 116, 2, 2, 475, 476, 7, 99, 2, 2, 476, 477, 7, 105, 2, 2, 477, 478, 7, 103, 2, 2, 478, 84, 3, 2, 2, 2, 479, 480, 7, 101, 2, 2, 480, 481, 7, 99, 2, 2, 481, 482, 7, 110, 2, 2, 482, 483, 7, 110, 2, 2, 483, 484, 7, 102, 2, 2, 484, 485, 7, 99, 2, 2, 485, 486, 7, 118, 2, 2, 486, 487, 7, 99, 2, 2, 487, 86, 3, 2, 2, 2, 488, 489, 7, 107, 2, 2, 489, 490, 7, 104, 2, 2, 490, 88, 3, 2, 2, 2, 491, 492, 7, 103, 2, 2, 492, 493, 7, 110, 2, 2, 493, 494, 7, 117, 2, 2, 494, 495, 7, 103, 2, 2, 495, 90, 3, 2, 2, 2, 496, 497, 7, 118, 2, 2, 497, 498, 7, 116, 2, 2, 498, 499, 7, 123, 2, 2, 499, 92, 3, 2, 2, 2, 500, 501, 7, 101, 2, 2, 501, 502, 7, 99, 2, 2, 502, 503, 7, 118, 2, 2, 503, 504, 7, 101, 2, 2, 504, 505, 7, 106, 2, 2, 505, 94, 3, 2, 2, 2, 506, 507, 7, 121, 2, 2, 507, 508, 7, 106, 2, 2, 508, 509, 7, 107, 2, 2, 509, 510, 7, 110, 2, 2, 510, 511, 7, 103, 2, 2, 511, 96, 3, 2, 2, 2, 512, 513, 7, 119, 2, 2, 513, 514, 7, 112, 2, 2, 514, 515, 7, 101, 2, 2, 515, 516, 7, 106, 2, 2, 516, 517, 7, 103, 2, 2, 517, 518, 7, 101, 2, 2, 518, 519, 7, 109, 2, 2, 519, 520, 7, 103, 2, 2, 520, 521, 7, 102, 2, 2, 521, 98, 3, 2, 2, 2, 522, 523, 7, 99, 2, 2, 523, 524, 7, 117, 2, 2, 524, 525, 7, 117, 2, 2, 525, 526, 7, 103, 2, 2, 526, 527, 7, 111, 2, 2, 527, 528, 7, 100, 2, 2, 528, 529, 7, 110, 2, 2, 529, 530, 7, 123, 2, 2, 530, 100, 3, 2, 2, 2, 531, 532, 7, 102, 2, 2, 532, 533, 7, 113, 2, 2, 533, 102, 3, 2, 2, 2, 534, 535, 7, 116, 2, 2, 535, 536, 7, 103, 2, 2, 536, 537, 7, 118, 2, 2, 537, 538, 7, 119, 2, 2, 538, 539, 7, 116, 2, 2, 539, 540, 7, 112, 2, 2, 540, 104, 3, 2, 2, 2, 541, 542, 7, 118, 2, 2, 542, 543, 7, 106, 2, 2, 543, 544, 7, 116, 2, 2, 544, 545, 7, 113, 2, 2, 545, 546, 7, 121, 2, 2, 546, 106, 3, 2, 2, 2, 547, 548, 7, 103, 2, 2, 548, 549, 7, 111, 2, 2, 549, 550, 7, 107, 2, 2, 550, 551, 7, 118, 2, 2, 551, 108, 3, 2, 2, 2, 552, 553, 7, 116, 2, 2, 553, 554, 7, 103, 2, 2, 554, 555, 7, 120, 2, 2, 555, 556, 7, 103, 2, 2, 556, 557, 7, 116, 2, 2, 557, 558, 7, 118, 2, 2, 558, 110, 3, 2, 2, 2, 559, 560, 7, 120, 2, 2, 560, 561, 7, 99, 2, 2, 561, 562, 7, 116, 2, 2, 562, 112, 3, 2, 2, 2, 563, 564, 7, 100, 2, 2, 564, 565, 7, 113, 2, 2, 565, 566, 7, 113, 2, 2, 566, 567, 7, 110, 2, 2, 567, 114, 3, 2, 2, 2, 568, 569, 7, 117, 2, 2, 569, 570, 7, 118, 2, 2, 570, 571, 7, 116, 2, 2, 571, 572, 7, 107, 2, 2, 572, 573, 7, 112, 2, 2, 573, 574, 7, 105, 2, 2, 574, 116, 3, 2, 2, 2, 575, 576, 7, 100, 2, 2, 576, 577, 7, 123, 2, 2, 577, 578, 7, 118, 2, 2, 578, 579, 7, 103, 2, 2, 579, 118, 3, 2, 2, 2, 580, 581, 7, 45, 2, 2, 581, 582, 7, 45, 2, 2, 582, 120, 3, 2, 2, 2, 583, 584, 7, 47, 2, 2, 584, 585, 7, 47, 2, 2, 585, 122, 3, 2, 2, 2, 586, 587, 7, 112, 2, 2, 587, 588, 7, 103, 2, 2, 588, 589, 7, 121, 2, 2, 589, 124, 3, 2, 2, 2, 590, 591, 7, 60, 2, 2, 591, 126, 3, 2, 2, 2, 592, 593, 7, 45, 2, 2, 593, 128, 3, 2, 2, 2, 594, 595, 7, 47, 2, 2, 595, 130, 3, 2, 2, 2, 596, 597, 7, 99, 2, 2, 597, 598, 7, 104, 2, 2, 598, 599, 7, 118, 2, 2, 599, 600, 7, 103, 2, 2, 600, 601, 7, 116, 2, 2, 601, 132, 3, 2, 2, 2, 602, 603, 7, 102, 2, 2, 603, 604, 7, 103, 2, 2, 604, 605, 7, 110, 2, 2, 605, 606, 7, 103, 2, 2, 606, 607, 7, 118, 2, 2, 607, 608, 7, 103, 2, 2, 608, 134, 3, 2, 2, 2, 609, 610, 7, 35, 2, 2, 610, 136, 3, 2, 2, 2, 611, 612, 7, 44, 2, 2, 612, 613, 7, 44, 2, 2, 613, 138, 3, 2, 2, 2, 614, 615, 7, 49, 2, 2, 615, 140, 3, 2, 2, 2, 616, 617, 7, 39, 2, 2, 617, 142, 3, 2, 2, 2, 618, 619, 7, 62, 2, 2, 619, 620, 7, 62, 2, 2, 620, 144, 3, 2, 2, 2, 621, 622, 7, 64, 2, 2, 622, 623, 7, 64, 2, 2, 623, 146, 3, 2, 2, 2, 624, 625, 7, 40, 2, 2, 625, 148, 3, 2, 2, 2, 626, 627, 7, 126, 2, 2, 627, 150, 3, 2, 2, 2, 628, 629, 7, 63, 2, 2, 629, 630, 7, 63, 2, 2, 630, 152, 3, 2, 2, 2, 631, 632, 7, 35, 2, 2, 632, 633, 7, 63, 2, 2, 633, 154, 3, 2, 2, 2, 634, 635, 7, 40, 2, 2, 635, 636, 7, 40, 2, 2, 636, 156, 3, 2, 2, 2, 637, 638, 7, 65, 2, 2, 638, 158, 3, 2, 2, 2, 639, 640, 7, 126, 2, 2, 640, 641, 7, 63, 2, 2, 641, 160, 3, 2, 2, 2, 642, 643, 7, 96, 2, 2, 643, 644, 7, 63, 2, 2, 644, 162, 3, 2, 2, 2, 645, 646, 7, 40, 2, 2, 646, 647, 7, 63, 2, 2, 647, 164, 3, 2, 2, 2, 648, 649, 7, 62, 2, 2, 649, 650, 7, 62, 2, 2, 650, 651, 7, 63, 2, 2, 651, 166, 3, 2, 2, 2, 652, 653, 7, 64, 2, 2, 653, 654, 7, 64, 2, 2, 654, 655, 7, 63, 2, 2, 655, 168, 3, 2, 2, 2, 656, 657, 7, 45, 2, 2, 657, 658, 7, 63, 2, 2, 658, 170, 3, 2, 2, 2, 659, 660, 7, 47, 2, 2, 660, 661, 7, 63, 2, 2, 661, 172, 3, 2, 2, 2, 662, 663, 7, 44, 2, 2, 663, 664, 7, 63, 2, 2, 664, 174, 3, 2, 2, 2, 665, 666, 7, 49, 2, 2, 666, 667, 7, 63, 2, 2, 667, 176, 3, 2, 2, 2, 668, 669, 7, 39, 2, 2, 669, 670, 7, 63, 2, 2, 670, 178, 3, 2, 2, 2, 671, 672, 7, 110, 2, 2, 672, 673, 7, 103, 2, 2, 673, 674, 7, 118, 2, 2, 674, 180, 3, 2, 2, 2, 675, 676, 7, 60, 2, 2, 676, 677, 7, 63, 2, 2, 677, 182, 3, 2, 2, 2, 678, 679, 7, 63, 2, 2, 679, 680, 7, 60, 2, 2, 680, 184, 3, 2, 2, 2, 681, 682, 7, 117, 2, 2, 682, 683, 7, 121, 2, 2, 683, 684, 7, 107, 2, 2, 684, 685, 7, 118, 2, 2, 685, 686, 7, 101, 2, 2, 686, 687, 7, 106, 2, 2, 687, 186, 3, 2, 2, 2, 688, 689, 7, 101, 2, 2, 689, 690, 7, 99, 2, 2, 690, 691, 7, 117, 2, 2, 691, 692, 7, 103, 2, 2, 692, 188, 3, 2, 2, 2, 693, 694, 7, 102, 2, 2, 694, 695, 7, 103, 2, 2, 695, 696, 7, 104, 2, 2, 696, 697, 7, 99, 2, 2, 697, 698, 7, 119, 2, 2, 698, 699, 7, 110, 2, 2, 699, 700, 7, 118, 2, 2, 700, 190, 3, 2, 2, 2, 701, 702, 7, 47, 2, 2, 702, 703, 7, 64, 2, 2, 703, 192, 3, 2, 2, 2, 704, 705, 7, 101, 2, 2, 705, 706, 7, 99, 2, 2, 706, 707, 7, 110, 2, 2, 707, 708, 7, 110, 2, 2, 708, 709, 7, 100, 2, 2, 709, 710, 7, 99, 2, 2, 710, 711, 7, 101, 2, 2, 711, 712, 7, 109, 2, 2, 712, 194, 3, 2, 2, 2, 713, 714, 7, 113, 2, 2, 714, 715, 7, 120, 2, 2, 715, 716, 7, 103, 2, 2, 716, 717, 7, 116, 2, 2, 717, 718, 7, 116, 2, 2, 718, 719, 7, 107, 2, 2, 719, 720, 7, 102, 2, 2, 720, 721, 7, 103, 2, 2, 721, 196, 3, 2, 2, 2, 722, 723, 7, 107, 2, 2, 723, 724, 7, 112, 2, 2, 724, 905, 7, 118, 2, 2, 725, 726, 7, 107, 2, 2, 726, 727, 7, 112, 2, 2, 727, 728, 7, 118, 2, 2, 728, 905, 7, 58, 2, 2, 729, 730, 7, 107, 2, 2, 730, 731, 7, 112, 2, 2, 731, 732, 7, 118, 2, 2, 732, 733, 7, 51, 2, 2, 733, 905, 7, 56, 2, 2, 734, 735, 7, 107, 2, 2, 735, 736, 7, 112, 2, 2, 736, 737, 7, 118, 2, 2, 737, 738, 7, 52, 2, 2, 738, 905, 7, 54, 2, 2, 739, 740, 7, 107, 2, 2, 740, 741, 7, 112, 2, 2, 741, 742, 7, 118, 2, 2, 742, 743, 7, 53, 2, 2, 743, 905, 7, 52, 2, 2, 744, 745, 7, 107, 2, 2, 745, 746, 7, 112, 2, 2, 746, 747, 7, 118, 2, 2, 747, 748, 7, 54, 2, 2, 748, 905, 7, 50, 2, 2, 749, 750, 7, 107, 2, 2, 750, 751, 7, 112, 2, 2, 751, 752, 7, 118, 2, 2, 752, 753, 7, 54, 2, 2, 753, 905, 7, 58, 2, 2, 754, 755, 7, 107, 2, 2, 755, 756, 7, 112, 2, 2, 756, 757, 7, 118, 2, 2, 757, 758, 7, 55, 2, 2, 758, 905, 7, 56, 2, 2, 759, 760, 7, 107, 2, 2, 760, 761, 7, 112, 2, 2, 761, 762, 7, 118, 2, 2, 762, 763, 7, 56, 2, 2, 763, 905, 7, 54, 2, 2, 764, 765, 7, 107, 2, 2, 765, 766, 7, 112, 2, 2, 766, 767, 7, 118, 2, 2, 767, 768, 7, 57, 2, 2, 768, 905, 7, 52, 2, 2, 769, 770, 7, 107, 2, 2, 770, 771, 7, 112, 2, 2, 771, 772, 7, 118, 2, 2, 772, 773, 7, 58, 2, 2, 773, 905, 7, 50, 2, 2, 774, 775, 7, 107, 2, 2, 775, 776, 7, 112, 2, 2, 776, 777, 7, 118, 2, 2, 777, 778, 7, 58, 2, 2, 778, 905, 7, 58, 2, 2, 779, 780, 7, 107, 2, 2, 780, 781, 7, 112, 2, 2, 781, 782, 7, 118, 2, 2, 782, 783, 7, 59, 2, 2, 783, 905, 7, 56, 2, 2, 784, 785, 7, 107, 2, 2, 785, 786, 7, 112, 2, 2, 786, 787, 7, 118, 2, 2, 787, 788, 7, 51, 2, 2, 788, 789, 7, 50, 2, 2, 789, 905, 7, 54, 2, 2, 790, 791, 7, 107, 2, 2, 791, 792, 7, 112, 2, 2, 792, 793, 7, 118, 2, 2, 793, 794, 7, 51, 2, 2, 794, 795, 7, 51, 2, 2, 795, 905, 7, 52, 2, 2, 796, 797, 7, 107, 2, 2, 797, 798, 7, 112, 2, 2, 798, 799, 7, 118, 2, 2, 799, 800, 7, 51, 2, 2, 800, 801, 7, 52, 2, 2, 801, 905, 7, 50, 2, 2, 802, 803, 7, 107, 2, 2, 803, 804, 7, 112, 2, 2, 804, 805, 7, 118, 2, 2, 805, 806, 7, 51, 2, 2, 806, 807, 7, 52, 2, 2, 807, 905, 7, 58, 2, 2, 808, 809, 7, 107, 2, 2, 809, 810, 7, 112, 2, 2, 810, 811, 7, 118, 2, 2, 811, 812, 7, 51, 2, 2, 812, 813, 7, 53, 2, 2, 813, 905, 7, 56, 2, 2, 814, 815, 7, 107, 2, 2, 815, 816, 7, 112, 2, 2, 816, 817, 7, 118, 2, 2, 817, 818, 7, 51, 2, 2, 818, 819, 7, 54, 2, 2, 819, 905, 7, 54, 2, 2, 820, 821, 7, 107, 2, 2, 821, 822, 7, 112, 2, 2, 822, 823, 7, 118, 2, 2, 823, 824, 7, 51, 2, 2, 824, 825, 7, 55, 2, 2, 825, 905, 7, 52, 2, 2, 826, 827, 7, 107, 2, 2, 827, 828, 7, 112, 2, 2, 828, 829, 7, 118, 2, 2, 829, 830, 7, 51, 2, 2, 830, 831, 7, 56, 2, 2, 831, 905, 7, 50, 2, 2, 832, 833, 7, 107, 2, 2, 833, 834, 7, 112, 2, 2, 834, 835, 7, 118, 2, 2, 835, 836, 7, 51, 2, 2, 836, 837, 7, 56, 2, 2, 837, 905, 7, 58, 2, 2, 838, 839, 7, 107, 2, 2, 839, 840, 7, 112, 2, 2, 840, 841, 7, 118, 2, 2, 841, 842, 7, 51, 2, 2, 842, 843, 7, 57, 2, 2, 843, 905, 7, 56, 2, 2, 844, 845, 7, 107, 2, 2, 845, 846, 7, 112, 2, 2, 846, 847, 7, 118, 2, 2, 847, 848, 7, 51, 2, 2, 848, 849, 7, 58, 2, 2, 849, 905, 7, 54, 2, 2, 850, 851, 7, 107, 2, 2, 851, 852, 7, 112, 2, 2, 852, 853, 7, 118, 2, 2, 853, 854, 7, 51, 2, 2, 854, 855, 7, 59, 2, 2, 855, 905, 7, 52, 2, 2, 856, 857, 7, 107, 2, 2, 857, 858, 7, 112, 2, 2, 858, 859, 7, 118, 2, 2, 859, 860, 7, 52, 2, 2, 860, 861, 7, 50, 2, 2, 861, 905, 7, 50, 2, 2, 862, 863, 7, 107, 2, 2, 863, 864, 7, 112, 2, 2, 864, 865, 7, 118, 2, 2, 865, 866, 7, 52, 2, 2, 866, 867, 7, 50, 2, 2, 867, 905, 7, 58, 2, 2, 868, 869, 7, 107, 2, 2, 869, 870, 7, 112, 2, 2, 870, 871, 7, 118, 2, 2, 871, 872, 7, 52, 2, 2, 872, 873, 7, 51, 2, 2, 873, 905, 7, 56, 2, 2, 874, 875, 7, 107, 2, 2, 875, 876, 7, 112, 2, 2, 876, 877, 7, 118, 2, 2, 877, 878, 7, 52, 2, 2, 878, 879, 7, 52, 2, 2, 879, 905, 7, 54, 2, 2, 880, 881, 7, 107, 2, 2, 881, 882, 7, 112, 2, 2, 882, 883, 7, 118, 2, 2, 883, 884, 7, 52, 2, 2, 884, 885, 7, 53, 2, 2, 885, 905, 7, 52, 2, 2, 886, 887, 7, 107, 2, 2, 887, 888, 7, 112, 2, 2, 888, 889, 7, 118, 2, 2, 889, 890, 7, 52, 2, 2, 890, 891, 7, 54, 2, 2, 891, 905, 7, 50, 2, 2, 892, 893, 7, 107, 2, 2, 893, 894, 7, 112, 2, 2, 894, 895, 7, 118, 2, 2, 895, 896, 7, 52, 2, 2, 896, 897, 7, 54, 2, 2, 897, 905, 7, 58, 2, 2, 898, 899, 7, 107, 2, 2, 899, 900, 7, 112, 2, 2, 900, 901, 7, 118, 2, 2, 901, 902, 7, 52, 2, 2, 902, 903, 7, 55, 2, 2, 903, 905, 7, 56, 2, 2, 904, 722, 3, 2, 2, 2, 904, 725, 3, 2, 2, 2, 904, 729, 3, 2, 2, 2, 904, 734, 3, 2, 2, 2, 904, 739, 3, 2, 2, 2, 904, 744, 3, 2, 2, 2, 904, 749, 3, 2, 2, 2, 904, 754, 3, 2, 2, 2, 904, 759, 3, 2, 2, 2, 904, 764, 3, 2, 2, 2, 904, 769, 3, 2, 2, 2, 904, 774, 3, 2, 2, 2, 904, 779, 3, 2, 2, 2, 904, 784, 3, 2, 2, 2, 904, 790, 3, 2, 2, 2, 904, 796, 3, 2, 2, 2, 904, 802, 3, 2, 2, 2, 904, 808, 3, 2, 2, 2, 904, 814, 3, 2, 2, 2, 904, 820, 3, 2, 2, 2, 904, 826, 3, 2, 2, 2, 904, 832, 3, 2, 2, 2, 904, 838, 3, 2, 2, 2, 904, 844, 3, 2, 2, 2, 904, 850, 3, 2, 2, 2, 904, 856, 3, 2, 2, 2, 904, 862, 3, 2, 2, 2, 904, 868, 3, 2, 2, 2, 904, 874, 3, 2, 2, 2, 904, 880, 3, 2, 2, 2, 904, 886, 3, 2, 2, 2, 904, 892, 3, 2, 2, 2, 904, 898, 3, 2, 2, 2, 905, 198, 3, 2, 2, 2, 906, 907, 7, 119, 2, 2, 907, 908, 7, 107, 2, 2, 908, 909, 7, 112, 2, 2, 909, 1122, 7, 118, 2, 2, 910, 911, 7, 119, 2, 2, 911, 912, 7, 107, 2, 2, 912, 913, 7, 112, 2, 2, 913, 914, 7, 118, 2, 2, 914, 1122, 7, 58, 2, 2, 915, 916, 7, 119, 2, 2, 916, 917, 7, 107, 2, 2, 917, 918, 7, 112, 2, 2, 918, 919, 7, 118, 2, 2, 919, 920, 7, 51, 2, 2, 920, 1122, 7, 56, 2, 2, 921, 922, 7, 119, 2, 2, 922, 923, 7, 107, 2, 2, 923, 924, 7, 112, 2, 2, 924, 925, 7, 118, 2, 2, 925, 926, 7, 52, 2, 2, 926, 1122, 7, 54, 2, 2, 927, 928, 7, 119, 2, 2, 928, 929, 7, 107, 2, 2, 929, 930, 7, 112, 2, 2, 930, 931, 7, 118, 2, 2, 931, 932, 7, 53, 2, 2, 932, 1122, 7, 52, 2, 2, 933, 934, 7, 119, 2, 2, 934, 935, 7, 107, 2, 2, 935, 936, 7, 112, 2, 2, 936, 937, 7, 118, 2, 2, 937, 938, 7, 54, 2, 2, 938, 1122, 7, 50, 2, 2, 939, 940, 7, 119, 2, 2, 940, 941, 7, 107, 2, 2, 941, 942, 7, 112, 2, 2, 942, 943, 7, 118, 2, 2, 943, 944, 7, 54, 2, 2, 944, 1122, 7, 58, 2, 2, 945, 946, 7, 119, 2, 2, 946, 947, 7, 107, 2, 2, 947, 948, 7, 112, 2, 2, 948, 949, 7, 118, 2, 2, 949, 950, 7, 55, 2, 2, 950, 1122, 7, 56, 2, 2, 951, 952, 7, 119, 2, 2, 952, 953, 7, 107, 2, 2, 953, 954, 7, 112, 2, 2, 954, 955, 7, 118, 2, 2, 955, 956, 7, 56, 2, 2, 956, 1122, 7, 54, 2, 2, 957, 958, 7, 119, 2, 2, 958, 959, 7, 107, 2, 2, 959, 960, 7, 112, 2, 2, 960, 961, 7, 118, 2, 2, 961, 962, 7, 57, 2, 2, 962, 1122, 7, 52, 2, 2, 963, 964, 7, 119, 2, 2, 964, 965, 7, 107, 2, 2, 965, 966, 7, 112, 2, 2, 966, 967, 7, 118, 2, 2, 967, 968, 7, 58, 2, 2, 968, 1122, 7, 50, 2, 2, 969, 970, 7, 119, 2, 2, 970, 971, 7, 107, 2, 2, 971, 972, 7, 112, 2, 2, 972, 973, 7, 118, 2, 2, 973, 974, 7, 58, 2, 2, 974, 1122, 7, 58, 2, 2, 975, 976, 7, 119, 2, 2, 976, 977, 7, 107, 2, 2, 977, 978, 7, 112, 2, 2, 978, 979, 7, 118, 2, 2, 979, 980, 7, 59, 2, 2, 980, 1122, 7, 56, 2, 2, 981, 982, 7, 119, 2, 2, 982, 983, 7, 107, 2, 2, 983, 984, 7, 112, 2, 2, 984, 985, 7, 118, 2, 2, 985, 986, 7, 51, 2, 2, 986, 987, 7, 50, 2, 2, 987, 1122, 7, 54, 2, 2, 988, 989, 7, 119, 2, 2, 989, 990, 7, 107, 2, 2, 990, 991, 7, 112, 2, 2, 991, 992, 7, 118, 2, 2, 992, 993, 7, 51, 2, 2, 993, 994, 7, 51, 2, 2, 994, 1122, 7, 52, 2, 2, 995, 996, 7, 119, 2, 2, 996, 997, 7, 107, 2, 2, 997, 998, 7, 112, 2, 2, 998, 999, 7, 118, 2, 2, 999, 1000, 7, 51, 2, 2, 1000, 1001, 7, 52, 2, 2, 1001, 1122, 7, 50, 2, 2, 1002, 1003, 7, 119, 2, 2, 1003, 1004, 7, 107, 2, 2, 1004, 1005, 7, 112, 2, 2, 1005, 1006, 7, 118, 2, 2, 1006, 1007, 7, 51, 2, 2, 1007, 1008, 7, 52, 2, 2, 1008, 1122, 7, 58, 2, 2, 1009, 1010, 7, 119, 2, 2, 1010, 1011, 7, 107, 2, 2, 1011, 1012, 7, 112, 2, 2, 1012, 1013, 7, 118, 2, 2, 1013, 1014, 7, 51, 2, 2, 1014, 1015, 7, 53, 2, 2, 1015, 1122, 7, 56, 2, 2, 1016, 1017, 7, 119, 2, 2, 1017, 1018, 7, 107, 2, 2, 1018, 1019, 7, 112, 2, 2, 1019, 1020, 7, 118, 2, 2, 1020, 1021, 7, 51, 2, 2, 1021, 1022, 7, 54, 2, 2, 1022, 1122, 7, 54, 2, 2, 1023, 1024, 7, 119, 2, 2, 1024, 1025, 7, 107, 2, 2, 1025, 1026, 7, 112, 2, 2, 1026, 1027, 7, 118, 2, 2, 1027, 1028, 7, 51, 2, 2, 1028, 1029, 7, 55, 2, 2, 1029, 1122, 7, 52, 2, 2, 1030, 1031, 7, 119, 2, 2, 1031, 1032, 7, 107, 2, 2, 1032, 1033, 7, 112, 2, 2, 1033, 1034, 7, 118, 2, 2, 1034, 1035, 7, 51, 2, 2, 1035, 1036, 7, 56, 2, 2, 1036, 1122, 7, 50, 2, 2, 1037, 1038, 7, 119, 2, 2, 1038, 1039, 7, 107, 2, 2, 1039, 1040, 7, 112, 2, 2, 1040, 1041, 7, 118, 2, 2, 1041, 1042, 7, 51, 2, 2, 1042, 1043, 7, 56, 2, 2, 1043, 1122, 7, 58, 2, 2, 1044, 1045, 7, 119, 2, 2, 1045, 1046, 7, 107, 2, 2, 1046, 1047, 7, 112, 2, 2, 1047, 1048, 7, 118, 2, 2, 1048, 1049, 7, 51, 2, 2, 1049, 1050, 7, 57, 2, 2, 1050, 1122, 7, 56, 2, 2, 1051, 1052, 7, 119, 2, 2, 1052, 1053, 7, 107, 2, 2, 1053, 1054, 7, 112, 2, 2, 1054, 1055, 7, 118, 2, 2, 1055, 1056, 7, 51, 2, 2, 1056, 1057, 7, 58, 2, 2, 1057, 1122, 7, 54, 2, 2, 1058, 1059, 7, 119, 2, 2, 1059, 1060, 7, 107, 2, 2, 1060, 1061, 7, 112, 2, 2, 1061, 1062, 7, 118, 2, 2, 1062, 1063, 7, 51, 2, 2, 1063, 1064, 7, 59, 2, 2, 1064, 1122, 7, 52, 2, 2, 1065, 1066, 7, 119, 2, 2, 1066, 1067, 7, 107, 2, 2, 1067, 1068, 7, 112, 2, 2, 1068, 1069, 7, 118, 2, 2, 1069, 1070, 7, 52, 2, 2, 1070, 1071, 7, 50, 2, 2, 1071, 1122, 7, 50, 2, 2, 1072, 1073, 7, 119, 2, 2, 1073, 1074, 7, 107, 2, 2, 1074, 1075, 7, 112, 2, 2, 1075, 1076, 7, 118, 2, 2, 1076, 1077, 7, 52, 2, 2, 1077, 1078, 7, 50, 2, 2, 1078, 1122, 7, 58, 2, 2, 1079, 1080, 7, 119, 2, 2, 1080, 1081, 7, 107, 2, 2, 1081, 1082, 7, 112, 2, 2, 1082, 1083, 7, 118, 2, 2, 1083, 1084, 7, 52, 2, 2, 1084, 1085, 7, 51, 2, 2, 1085, 1122, 7, 56, 2, 2, 1086, 1087, 7, 119, 2, 2, 1087, 1088, 7, 107, 2, 2, 1088, 1089, 7, 112, 2, 2, 1089, 1090, 7, 118, 2, 2, 1090, 1091, 7, 52, 2, 2, 1091, 1092, 7, 52, 2, 2, 1092, 1122, 7, 54, 2, 2, 1093, 1094, 7, 119, 2, 2, 1094, 1095, 7, 107, 2, 2, 1095, 1096, 7, 112, 2, 2, 1096, 1097, 7, 118, 2, 2, 1097, 1098, 7, 52, 2, 2, 1098, 1099, 7, 53, 2, 2, 1099, 1122, 7, 52, 2, 2, 1100, 1101, 7, 119, 2, 2, 1101, 1102, 7, 107, 2, 2, 1102, 1103, 7, 112, 2, 2, 1103, 1104, 7, 118, 2, 2, 1104, 1105, 7, 52, 2, 2, 1105, 1106, 7, 54, 2, 2, 1106, 1122, 7, 50, 2, 2, 1107, 1108, 7, 119, 2, 2, 1108, 1109, 7, 107, 2, 2, 1109, 1110, 7, 112, 2, 2, 1110, 1111, 7, 118, 2, 2, 1111, 1112, 7, 52, 2, 2, 1112, 1113, 7, 54, 2, 2, 1113, 1122, 7, 58, 2, 2, 1114, 1115, 7, 119, 2, 2, 1115, 1116, 7, 107, 2, 2, 1116, 1117, 7, 112, 2, 2, 1117, 1118, 7, 118, 2, 2, 1118, 1119, 7, 52, 2, 2, 1119, 1120, 7, 55, 2, 2, 1120, 1122, 7, 56, 2, 2, 1121, 906, 3, 2, 2, 2, 1121, 910, 3, 2, 2, 2, 1121, 915, 3, 2, 2, 2, 1121, 921, 3, 2, 2, 2, 1121, 927, 3, 2, 2, 2, 1121, 933, 3, 2, 2, 2, 1121, 939, 3, 2, 2, 2, 1121, 945, 3, 2, 2, 2, 1121, 951, 3, 2, 2, 2, 1121, 957, 3, 2, 2, 2, 1121, 963, 3, 2, 2, 2, 1121, 969, 3, 2, 2, 2, 1121, 975, 3, 2, 2, 2, 1121, 981, 3, 2, 2, 2, 1121, 988, 3, 2, 2, 2, 1121, 995, 3, 2, 2, 2, 1121, 1002, 3, 2, 2, 2, 1121, 1009, 3, 2, 2, 2, 1121, 1016, 3, 2, 2, 2, 1121, 1023, 3, 2, 2, 2, 1121, 1030, 3, 2, 2, 2, 1121, 1037, 3, 2, 2, 2, 1121, 1044, 3, 2, 2, 2, 1121, 1051, 3, 2, 2, 2, 1121, 1058, 3, 2, 2, 2, 1121, 1065, 3, 2, 2, 2, 1121, 1072, 3, 2, 2, 2, 1121, 1079, 3, 2, 2, 2, 1121, 1086, 3, 2, 2, 2, 1121, 1093, 3, 2, 2, 2, 1121, 1100, 3, 2, 2, 2, 1121, 1107, 3, 2, 2, 2, 1121, 1114, 3, 2, 2, 2, 1122, 200, 3, 2, 2, 2, 1123, 1124, 7, 100, 2, 2, 1124, 1125, 7, 123, 2, 2, 1125, 1126, 7, 118, 2, 2, 1126, 1127, 7, 103, 2, 2, 1127, 1344, 7, 117, 2, 2, 1128, 1129, 7, 100, 2, 2, 1129, 1130, 7, 123, 2, 2, 1130, 1131, 7, 118, 2, 2, 1131, 1132, 7, 103, 2, 2, 1132, 1133, 7, 117, 2, 2, 1133, 1344, 7, 51, 2, 2, 1134, 1135, 7, 100, 2, 2, 1135, 1136, 7, 123, 2, 2, 1136, 1137, 7, 118, 2, 2, 1137, 1138, 7, 103, 2, 2, 1138, 1139, 7, 117, 2, 2, 1139, 1344, 7, 52, 2, 2, 1140, 1141, 7, 100, 2, 2, 1141, 1142, 7, 123, 2, 2, 1142, 1143, 7, 118, 2, 2, 1143, 1144, 7, 103, 2, 2, 1144, 1145, 7, 117, 2, 2, 1145, 1344, 7, 53, 2, 2, 1146, 1147, 7, 100, 2, 2, 1147, 1148, 7, 123, 2, 2, 1148, 1149, 7, 118, 2, 2, 1149, 1150, 7, 103, 2, 2, 1150, 1151, 7, 117, 2, 2, 1151, 1344, 7, 54, 2, 2, 1152, 1153, 7, 100, 2, 2, 1153, 1154, 7, 123, 2, 2, 1154, 1155, 7, 118, 2, 2, 1155, 1156, 7, 103, 2, 2, 1156, 1157, 7, 117, 2, 2, 1157, 1344, 7, 55, 2, 2, 1158, 1159, 7, 100, 2, 2, 1159, 1160, 7, 123, 2, 2, 1160, 1161, 7, 118, 2, 2, 1161, 1162, 7, 103, 2, 2, 1162, 1163, 7, 117, 2, 2, 1163, 1344, 7, 56, 2, 2, 1164, 1165, 7, 100, 2, 2, 1165, 1166, 7, 123, 2, 2, 1166, 1167, 7, 118, 2, 2, 1167, 1168, 7, 103, 2, 2, 1168, 1169, 7, 117, 2, 2, 1169, 1344, 7, 57, 2, 2, 1170, 1171, 7, 100, 2, 2, 1171, 1172, 7, 123, 2, 2, 1172, 1173, 7, 118, 2, 2, 1173, 1174, 7, 103, 2, 2, 1174, 1175, 7, 117, 2, 2, 1175, 1344, 7, 58, 2, 2, 1176, 1177, 7, 100, 2, 2, 1177, 1178, 7, 123, 2, 2, 1178, 1179, 7, 118, 2, 2, 1179, 1180, 7, 103, 2, 2, 1180, 1181, 7, 117, 2, 2, 1181, 1344, 7, 59, 2, 2, 1182, 1183, 7, 100, 2, 2, 1183, 1184, 7, 123, 2, 2, 1184, 1185, 7, 118, 2, 2, 1185, 1186, 7, 103, 2, 2, 1186, 1187, 7, 117, 2, 2, 1187, 1188, 7, 51, 2, 2, 1188, 1344, 7, 50, 2, 2, 1189, 1190, 7, 100, 2, 2, 1190, 1191, 7, 123, 2, 2, 1191, 1192, 7, 118, 2, 2, 1192, 1193, 7, 103, 2, 2, 1193, 1194, 7, 117, 2, 2, 1194, 1195, 7, 51, 2, 2, 1195, 1344, 7, 51, 2, 2, 1196, 1197, 7, 100, 2, 2, 1197, 1198, 7, 123, 2, 2, 1198, 1199, 7, 118, 2, 2, 1199, 1200, 7, 103, 2, 2, 1200, 1201, 7, 117, 2, 2, 1201, 1202, 7, 51, 2, 2, 1202, 1344, 7, 52, 2, 2, 1203, 1204, 7, 100, 2, 2, 1204, 1205, 7, 123, 2, 2, 1205, 1206, 7, 118, 2, 2, 1206, 1207, 7, 103, 2, 2, 1207, 1208, 7, 117, 2, 2, 1208, 1209, 7, 51, 2, 2, 1209, 1344, 7, 53, 2, 2, 1210, 1211, 7, 100, 2, 2, 1211, 1212, 7, 123, 2, 2, 1212, 1213, 7, 118, 2, 2, 1213, 1214, 7, 103, 2, 2, 1214, 1215, 7, 117, 2, 2, 1215, 1216, 7, 51, 2, 2, 1216, 1344, 7, 54, 2, 2, 1217, 1218, 7, 100, 2, 2, 1218, 1219, 7, 123, 2, 2, 1219, 1220, 7, 118, 2, 2, 1220, 1221, 7, 103, 2, 2, 1221, 1222, 7, 117, 2, 2, 1222, 1223, 7, 51, 2, 2, 1223, 1344, 7, 55, 2, 2, 1224, 1225, 7, 100, 2, 2, 1225, 1226, 7, 123, 2, 2, 1226, 1227, 7, 118, 2, 2, 1227, 1228, 7, 103, 2, 2, 1228, 1229, 7, 117, 2, 2, 1229, 1230, 7, 51, 2, 2, 1230, 1344, 7, 56, 2, 2, 1231, 1232, 7, 100, 2, 2, 1232, 1233, 7, 123, 2, 2, 1233, 1234, 7, 118, 2, 2, 1234, 1235, 7, 103, 2, 2, 1235, 1236, 7, 117, 2, 2, 1236, 1237, 7, 51, 2, 2, 1237, 1344, 7, 57, 2, 2, 1238, 1239, 7, 100, 2, 2, 1239, 1240, 7, 123, 2, 2, 1240, 1241, 7, 118, 2, 2, 1241, 1242, 7, 103, 2, 2, 1242, 1243, 7, 117, 2, 2, 1243, 1244, 7, 51, 2, 2, 1244, 1344, 7, 58, 2, 2, 1245, 1246, 7, 100, 2, 2, 1246, 1247, 7, 123, 2, 2, 1247, 1248, 7, 118, 2, 2, 1248, 1249, 7, 103, 2, 2, 1249, 1250, 7, 117, 2, 2, 1250, 1251, 7, 51, 2, 2, 1251, 1344, 7, 59, 2, 2, 1252, 1253, 7, 100, 2, 2, 1253, 1254, 7, 123, 2, 2, 1254, 1255, 7, 118, 2, 2, 1255, 1256, 7, 103, 2, 2, 1256, 1257, 7, 117, 2, 2, 1257, 1258, 7, 52, 2, 2, 1258, 1344, 7, 50, 2, 2, 1259, 1260, 7, 100, 2, 2, 1260, 1261, 7, 123, 2, 2, 1261, 1262, 7, 118, 2, 2, 1262, 1263, 7, 103, 2, 2, 1263, 1264, 7, 117, 2, 2, 1264, 1265, 7, 52, 2, 2, 1265, 1344, 7, 51, 2, 2, 1266, 1267, 7, 100, 2, 2, 1267, 1268, 7, 123, 2, 2, 1268, 1269, 7, 118, 2, 2, 1269, 1270, 7, 103, 2, 2, 1270, 1271, 7, 117, 2, 2, 1271, 1272, 7, 52, 2, 2, 1272, 1344, 7, 52, 2, 2, 1273, 1274, 7, 100, 2, 2, 1274, 1275, 7, 123, 2, 2, 1275, 1276, 7, 118, 2, 2, 1276, 1277, 7, 103, 2, 2, 1277, 1278, 7, 117, 2, 2, 1278, 1279, 7, 52, 2, 2, 1279, 1344, 7, 53, 2, 2, 1280, 1281, 7, 100, 2, 2, 1281, 1282, 7, 123, 2, 2, 1282, 1283, 7, 118, 2, 2, 1283, 1284, 7, 103, 2, 2, 1284, 1285, 7, 117, 2, 2, 1285, 1286, 7, 52, 2, 2, 1286, 1344, 7, 54, 2, 2, 1287, 1288, 7, 100, 2, 2, 1288, 1289, 7, 123, 2, 2, 1289, 1290, 7, 118, 2, 2, 1290, 1291, 7, 103, 2, 2, 1291, 1292, 7, 117, 2, 2, 1292, 1293, 7, 52, 2, 2, 1293, 1344, 7, 55, 2, 2, 1294, 1295, 7, 100, 2, 2, 1295, 1296, 7, 123, 2, 2, 1296, 1297, 7, 118, 2, 2, 1297, 1298, 7, 103, 2, 2, 1298, 1299, 7, 117, 2, 2, 1299, 1300, 7, 52, 2, 2, 1300, 1344, 7, 56, 2, 2, 1301, 1302, 7, 100, 2, 2, 1302, 1303, 7, 123, 2, 2, 1303, 1304, 7, 118, 2, 2, 1304, 1305, 7, 103, 2, 2, 1305, 1306, 7, 117, 2, 2, 1306, 1307, 7, 52, 2, 2, 1307, 1344, 7, 57, 2, 2, 1308, 1309, 7, 100, 2, 2, 1309, 1310, 7, 123, 2, 2, 1310, 1311, 7, 118, 2, 2, 1311, 1312, 7, 103, 2, 2, 1312, 1313, 7, 117, 2, 2, 1313, 1314, 7, 52, 2, 2, 1314, 1344, 7, 58, 2, 2, 1315, 1316, 7, 100, 2, 2, 1316, 1317, 7, 123, 2, 2, 1317, 1318, 7, 118, 2, 2, 1318, 1319, 7, 103, 2, 2, 1319, 1320, 7, 117, 2, 2, 1320, 1321, 7, 52, 2, 2, 1321, 1344, 7, 59, 2, 2, 1322, 1323, 7, 100, 2, 2, 1323, 1324, 7, 123, 2, 2, 1324, 1325, 7, 118, 2, 2, 1325, 1326, 7, 103, 2, 2, 1326, 1327, 7, 117, 2, 2, 1327, 1328, 7, 53, 2, 2, 1328, 1344, 7, 50, 2, 2, 1329, 1330, 7, 100, 2, 2, 1330, 1331, 7, 123, 2, 2, 1331, 1332, 7, 118, 2, 2, 1332, 1333, 7, 103, 2, 2, 1333, 1334, 7, 117, 2, 2, 1334, 1335, 7, 53, 2, 2, 1335, 1344, 7, 51, 2, 2, 1336, 1337, 7, 100, 2, 2, 1337, 1338, 7, 123, 2, 2, 1338, 1339, 7, 118, 2, 2, 1339, 1340, 7, 103, 2, 2, 1340, 1341, 7, 117, 2, 2, 1341, 1342, 7, 53, 2, 2, 1342, 1344, 7, 52, 2, 2, 1343, 1123, 3, 2, 2, 2, 1343, 1128, 3, 2, 2, 2, 1343, 1134, 3, 2, 2, 2, 1343, 1140, 3, 2, 2, 2, 1343, 1146, 3, 2, 2, 2, 1343, 1152, 3, 2, 2, 2, 1343, 1158, 3, 2, 2, 2, 1343, 1164, 3, 2, 2, 2, 1343, 1170, 3, 2, 2, 2, 1343, 1176, 3, 2, 2, 2, 1343, 1182, 3, 2, 2, 2, 1343, 1189, 3, 2, 2, 2, 1343, 1196, 3, 2, 2, 2, 1343, 1203, 3, 2, 2, 2, 1343, 1210, 3, 2, 2, 2, 1343, 1217, 3, 2, 2, 2, 1343, 1224, 3, 2, 2, 2, 1343, 1231, 3, 2, 2, 2, 1343, 1238, 3, 2, 2, 2, 1343, 1245, 3, 2, 2, 2, 1343, 1252, 3, 2, 2, 2, 1343, 1259, 3, 2, 2, 2, 1343, 1266, 3, 2, 2, 2, 1343, 1273, 3, 2, 2, 2, 1343, 1280, 3, 2, 2, 2, 1343, 1287, 3, 2, 2, 2, 1343, 1294, 3, 2, 2, 2, 1343, 1301, 3, 2, 2, 2, 1343, 1308, 3, 2, 2, 2, 1343, 1315, 3, 2, 2, 2, 1343, 1322, 3, 2, 2, 2, 1343, 1329, 3, 2, 2, 2, 1343, 1336, 3, 2, 2, 2, 1344, 202, 3, 2, 2, 2, 1345, 1346, 7, 104, 2, 2, 1346, 1347, 7, 107, 2, 2, 1347, 1348, 7, 122, 2, 2, 1348, 1349, 7, 103, 2, 2, 1349, 1368, 7, 102, 2, 2, 1350, 1351, 7, 104, 2, 2, 1351, 1352, 7, 107, 2, 2, 1352, 1353, 7, 122, 2, 2, 1353, 1354, 7, 103, 2, 2, 1354, 1355, 7, 102, 2, 2, 1355, 1357, 3, 2, 2, 2, 1356, 1358, 9, 2, 2, 2, 1357, 1356, 3, 2, 2, 2, 1358, 1359, 3, 2, 2, 2, 1359, 1357, 3, 2, 2, 2, 1359, 1360, 3, 2, 2, 2, 1360, 1361, 3, 2, 2, 2, 1361, 1363, 7, 122, 2, 2, 1362, 1364, 9, 2, 2, 2, 1363, 1362, 3, 2, 2, 2, 1364, 1365, 3, 2, 2, 2, 1365, 1363, 3, 2, 2, 2, 1365, 1366, 3, 2, 2, 2, 1366, 1368, 3, 2, 2, 2, 1367, 1345, 3, 2, 2, 2, 1367, 1350, 3, 2, 2, 2, 1368, 204, 3, 2, 2, 2, 1369, 1370, 7, 119, 2, 2, 1370, 1371, 7, 104, 2, 2, 1371, 1372, 7, 107, 2, 2, 1372, 1373, 7, 122, 2, 2, 1373, 1374, 7, 103, 2, 2, 1374, 1394, 7, 102, 2, 2, 1375, 1376, 7, 119, 2, 2, 1376, 1377, 7, 104, 2, 2, 1377, 1378, 7, 107, 2, 2, 1378, 1379, 7, 122, 2, 2, 1379, 1380, 7, 103, 2, 2, 1380, 1381, 7, 102, 2, 2, 1381, 1383, 3, 2, 2, 2, 1382, 1384, 9, 2, 2, 2, 1383, 1382, 3, 2, 2, 2, 1384, 1385, 3, 2, 2, 2, 1385, 1383, 3, 2, 2, 2, 1385, 1386, 3, 2, 2, 2, 1386, 1387, 3, 2, 2, 2, 1387, 1389, 7, 122, 2, 2, 1388, 1390, 9, 2, 2, 2, 1389, 1388, 3, 2, 2, 2, 1390, 1391, 3, 2, 2, 2, 1391, 1389, 3, 2, 2, 2, 1391, 1392, 3, 2, 2, 2, 1392, 1394, 3, 2, 2, 2, 1393, 1369, 3, 2, 2, 2, 1393, 1375, 3, 2, 2, 2, 1394, 206, 3, 2, 2, 2, 1395, 1396, 7, 118, 2, 2, 1396, 1397, 7, 116, 2, 2, 1397, 1398, 7, 119, 2, 2, 1398, 1405, 7, 103, 2, 2, 1399, 1400, 7, 104, 2, 2, 1400, 1401, 7, 99, 2, 2, 1401, 1402, 7, 110, 2, 2, 1402, 1403, 7, 117, 2, 2, 1403, 1405, 7, 103, 2, 2, 1404, 1395, 3, 2, 2, 2, 1404, 1399, 3, 2, 2, 2, 1405, 208, 3, 2, 2, 2, 1406, 1413, 5, 211, 106, 2, 1407, 1409, 5, 211, 106, 2, 1408, 1407, 3, 2, 2, 2, 1408, 1409, 3, 2, 2, 2, 1409, 1410, 3, 2, 2, 2, 1410, 1411, 7, 48, 2, 2, 1411, 1413, 5, 211, 106, 2, 1412, 1406, 3, 2, 2, 2, 1412, 1408, 3, 2, 2, 2, 1413, 1416, 3, 2, 2, 2, 1414, 1415, 9, 3, 2, 2, 1415, 1417, 5, 211, 106, 2, 1416, 1414, 3, 2, 2, 2, 1416, 1417, 3, 2, 2, 2, 1417, 210, 3, 2, 2, 2, 1418, 1425, 9, 2, 2, 2, 1419, 1421, 7, 97, 2, 2, 1420, 1419, 3, 2, 2, 2, 1420, 1421, 3, 2, 2, 2, 1421, 1422, 3, 2, 2, 2, 1422, 1424, 9, 2, 2, 2, 1423, 1420, 3, 2, 2, 2, 1424, 1427, 3, 2, 2, 2, 1425, 1423, 3, 2, 2, 2, 1425, 1426, 3, 2, 2, 2, 1426, 212, 3, 2, 2, 2, 1427, 1425, 3, 2, 2, 2, 1428, 1429, 7, 50, 2, 2, 1429, 1430, 9, 4, 2, 2, 1430, 1431, 5, 215, 108, 2, 1431, 214, 3, 2, 2, 2, 1432, 1439, 5, 223, 112, 2, 1433, 1435, 7, 97, 2, 2, 1434, 1433, 3, 2, 2, 2, 1434, 1435, 3, 2, 2, 2, 1435, 1436, 3, 2, 2, 2, 1436, 1438, 5, 223, 112, 2, 1437, 1434, 3, 2, 2, 2, 1438, 1441, 3, 2, 2, 2, 1439, 1437, 3, 2, 2, 2, 1439, 1440, 3, 2, 2, 2, 1440, 216, 3, 2, 2, 2, 1441, 1439, 3, 2, 2, 2, 1442, 1443, 7, 121, 2, 2, 1443, 1444, 7, 103, 2, 2, 1444, 1499, 7, 107, 2, 2, 1445, 1446, 7, 105, 2, 2, 1446, 1447, 7, 121, 2, 2, 1447, 1448, 7, 103, 2, 2, 1448, 1499, 7, 107, 2, 2, 1449, 1450, 7, 117, 2, 2, 1450, 1451, 7, 124, 2, 2, 1451, 1452, 7, 99, 2, 2, 1452, 1453, 7, 100, 2, 2, 1453, 1499, 7, 113, 2, 2, 1454, 1455, 7, 104, 2, 2, 1455, 1456, 7, 107, 2, 2, 1456, 1457, 7, 112, 2, 2, 1457, 1458, 7, 112, 2, 2, 1458, 1459, 7, 103, 2, 2, 1459, 1499, 7, 123, 2, 2, 1460, 1461, 7, 103, 2, 2, 1461, 1462, 7, 118, 2, 2, 1462, 1463, 7, 106, 2, 2, 1463, 1464, 7, 103, 2, 2, 1464, 1499, 7, 116, 2, 2, 1465, 1466, 7, 117, 2, 2, 1466, 1467, 7, 103, 2, 2, 1467, 1468, 7, 101, 2, 2, 1468, 1469, 7, 113, 2, 2, 1469, 1470, 7, 112, 2, 2, 1470, 1471, 7, 102, 2, 2, 1471, 1499, 7, 117, 2, 2, 1472, 1473, 7, 111, 2, 2, 1473, 1474, 7, 107, 2, 2, 1474, 1475, 7, 112, 2, 2, 1475, 1476, 7, 119, 2, 2, 1476, 1477, 7, 118, 2, 2, 1477, 1478, 7, 103, 2, 2, 1478, 1499, 7, 117, 2, 2, 1479, 1480, 7, 106, 2, 2, 1480, 1481, 7, 113, 2, 2, 1481, 1482, 7, 119, 2, 2, 1482, 1483, 7, 116, 2, 2, 1483, 1499, 7, 117, 2, 2, 1484, 1485, 7, 102, 2, 2, 1485, 1486, 7, 99, 2, 2, 1486, 1487, 7, 123, 2, 2, 1487, 1499, 7, 117, 2, 2, 1488, 1489, 7, 121, 2, 2, 1489, 1490, 7, 103, 2, 2, 1490, 1491, 7, 103, 2, 2, 1491, 1492, 7, 109, 2, 2, 1492, 1499, 7, 117, 2, 2, 1493, 1494, 7, 123, 2, 2, 1494, 1495, 7, 103, 2, 2, 1495, 1496, 7, 99, 2, 2, 1496, 1497, 7, 116, 2, 2, 1497, 1499, 7, 117, 2, 2, 1498, 1442, 3, 2, 2, 2, 1498, 1445, 3, 2, 2, 2, 1498, 1449, 3, 2, 2, 2, 1498, 1454, 3, 2, 2, 2, 1498, 1460, 3, 2, 2, 2, 1498, 1465, 3, 2, 2, 2, 1498, 1472, 3, 2, 2, 2, 1498, 1479, 3, 2, 2, 2, 1498, 1484, 3, 2, 2, 2, 1498, 1488, 3, 2, 2, 2, 1498, 1493, 3, 2, 2, 2, 1499, 218, 3, 2, 2, 2, 1500, 1501, 7, 106, 2, 2, 1501, 1502, 7, 103, 2, 2, 1502, 1503, 7, 122, 2, 2, 1503, 1514, 3, 2, 2, 2, 1504, 1506, 7, 36, 2, 2, 1505, 1507, 5, 215, 108, 2, 1506, 1505, 3, 2, 2, 2, 1506, 1507, 3, 2, 2, 2, 1507, 1508, 3, 2, 2, 2, 1508, 1515, 7, 36, 2, 2, 1509, 1511, 7, 41, 2, 2, 1510, 1512, 5, 215, 108, 2, 1511, 1510, 3, 2, 2, 2, 1511, 1512, 3, 2, 2, 2, 1512, 1513, 3, 2, 2, 2, 1513, 1515, 7, 41, 2, 2, 1514, 1504, 3, 2, 2, 2, 1514, 1509, 3, 2, 2, 2, 1515, 220, 3, 2, 2, 2, 1516, 1517, 5, 223, 112, 2, 1517, 1518, 5, 223, 112, 2, 1518, 222, 3, 2, 2, 2, 1519, 1520, 9, 5, 2, 2, 1520, 224, 3, 2, 2, 2, 1521, 1522, 7, 99, 2, 2, 1522, 1523, 7, 100, 2, 2, 1523, 1524, 7, 117, 2, 2, 1524, 1525, 7, 118, 2, 2, 1525, 1526, 7, 116, 2, 2, 1526, 1527, 7, 99, 2, 2, 1527, 1528, 7, 101, 2, 2, 1528, 1610, 7, 118, 2, 2, 1529, 1530, 7, 99, 2, 2, 1530, 1531, 7, 104, 2, 2, 1531, 1532, 7, 118, 2, 2, 1532, 1533, 7, 103, 2, 2, 1533, 1610, 7, 116, 2, 2, 1534, 1535, 7, 101, 2, 2, 1535, 1536, 7, 99, 2, 2, 1536, 1537, 7, 117, 2, 2, 1537, 1610, 7, 103, 2, 2, 1538, 1539, 7, 101, 2, 2, 1539, 1540, 7, 99, 2, 2, 1540, 1541, 7, 118, 2, 2, 1541, 1542, 7, 101, 2, 2, 1542, 1610, 7, 106, 2, 2, 1543, 1544, 7, 102, 2, 2, 1544, 1545, 7, 103, 2, 2, 1545, 1546, 7, 104, 2, 2, 1546, 1547, 7, 99, 2, 2, 1547, 1548, 7, 119, 2, 2, 1548, 1549, 7, 110, 2, 2, 1549, 1610, 7, 118, 2, 2, 1550, 1551, 7, 104, 2, 2, 1551, 1552, 7, 107, 2, 2, 1552, 1553, 7, 112, 2, 2, 1553, 1554, 7, 99, 2, 2, 1554, 1610, 7, 110, 2, 2, 1555, 1556, 7, 107, 2, 2, 1556, 1610, 7, 112, 2, 2, 1557, 1558, 7, 107, 2, 2, 1558, 1559, 7, 112, 2, 2, 1559, 1560, 7, 110, 2, 2, 1560, 1561, 7, 107, 2, 2, 1561, 1562, 7, 112, 2, 2, 1562, 1610, 7, 103, 2, 2, 1563, 1564, 7, 110, 2, 2, 1564, 1565, 7, 103, 2, 2, 1565, 1610, 7, 118, 2, 2, 1566, 1567, 7, 111, 2, 2, 1567, 1568, 7, 99, 2, 2, 1568, 1569, 7, 118, 2, 2, 1569, 1570, 7, 101, 2, 2, 1570, 1610, 7, 106, 2, 2, 1571, 1572, 7, 112, 2, 2, 1572, 1573, 7, 119, 2, 2, 1573, 1574, 7, 110, 2, 2, 1574, 1610, 7, 110, 2, 2, 1575, 1576, 7, 113, 2, 2, 1576, 1610, 7, 104, 2, 2, 1577, 1578, 7, 116, 2, 2, 1578, 1579, 7, 103, 2, 2, 1579, 1580, 7, 110, 2, 2, 1580, 1581, 7, 113, 2, 2, 1581, 1582, 7, 101, 2, 2, 1582, 1583, 7, 99, 2, 2, 1583, 1584, 7, 118, 2, 2, 1584, 1585, 7, 99, 2, 2, 1585, 1586, 7, 100, 2, 2, 1586, 1587, 7, 110, 2, 2, 1587, 1610, 7, 103, 2, 2, 1588, 1589, 7, 117, 2, 2, 1589, 1590, 7, 118, 2, 2, 1590, 1591, 7, 99, 2, 2, 1591, 1592, 7, 118, 2, 2, 1592, 1593, 7, 107, 2, 2, 1593, 1610, 7, 101, 2, 2, 1594, 1595, 7, 117, 2, 2, 1595, 1596, 7, 121, 2, 2, 1596, 1597, 7, 107, 2, 2, 1597, 1598, 7, 118, 2, 2, 1598, 1599, 7, 101, 2, 2, 1599, 1610, 7, 106, 2, 2, 1600, 1601, 7, 118, 2, 2, 1601, 1602, 7, 116, 2, 2, 1602, 1610, 7, 123, 2, 2, 1603, 1604, 7, 118, 2, 2, 1604, 1605, 7, 123, 2, 2, 1605, 1606, 7, 114, 2, 2, 1606, 1607, 7, 103, 2, 2, 1607, 1608, 7, 113, 2, 2, 1608, 1610, 7, 104, 2, 2, 1609, 1521, 3, 2, 2, 2, 1609, 1529, 3, 2, 2, 2, 1609, 1534, 3, 2, 2, 2, 1609, 1538, 3, 2, 2, 2, 1609, 1543, 3, 2, 2, 2, 1609, 1550, 3, 2, 2, 2, 1609, 1555, 3, 2, 2, 2, 1609, 1557, 3, 2, 2, 2, 1609, 1563, 3, 2, 2, 2, 1609, 1566, 3, 2, 2, 2, 1609, 1571, 3, 2, 2, 2, 1609, 1575, 3, 2, 2, 2, 1609, 1577, 3, 2, 2, 2, 1609, 1588, 3, 2, 2, 2, 1609, 1594, 3, 2, 2, 2, 1609, 1600, 3, 2, 2, 2, 1609, 1603, 3, 2, 2, 2, 1610, 226, 3, 2, 2, 2, 1611, 1612, 7, 99, 2, 2, 1612, 1613, 7, 112, 2, 2, 1613, 1614, 7, 113, 2, 2, 1614, 1615, 7, 112, 2, 2, 1615, 1616, 7, 123, 2, 2, 1616, 1617, 7, 111, 2, 2, 1617, 1618, 7, 113, 2, 2, 1618, 1619, 7, 119, 2, 2, 1619, 1620, 7, 117, 2, 2, 1620, 228, 3, 2, 2, 2, 1621, 1622, 7, 100, 2, 2, 1622, 1623, 7, 116, 2, 2, 1623, 1624, 7, 103, 2, 2, 1624, 1625, 7, 99, 2, 2, 1625, 1626, 7, 109, 2, 2, 1626, 230, 3, 2, 2, 2, 1627, 1628, 7, 101, 2, 2, 1628, 1629, 7, 113, 2, 2, 1629, 1630, 7, 112, 2, 2, 1630, 1631, 7, 117, 2, 2, 1631, 1632, 7, 118, 2, 2, 1632, 1633, 7, 99, 2, 2, 1633, 1634, 7, 112, 2, 2, 1634, 1635, 7, 118, 2, 2, 1635, 232, 3, 2, 2, 2, 1636, 1637, 7, 107, 2, 2, 1637, 1638, 7, 111, 2, 2, 1638, 1639, 7, 111, 2, 2, 1639, 1640, 7, 119, 2, 2, 1640, 1641, 7, 118, 2, 2, 1641, 1642, 7, 99, 2, 2, 1642, 1643, 7, 100, 2, 2, 1643, 1644, 7, 110, 2, 2, 1644, 1645, 7, 103, 2, 2, 1645, 234, 3, 2, 2, 2, 1646, 1647, 7, 101, 2, 2, 1647, 1648, 7, 113, 2, 2, 1648, 1649, 7, 112, 2, 2, 1649, 1650, 7, 118, 2, 2, 1650, 1651, 7, 107, 2, 2, 1651, 1652, 7, 112, 2, 2, 1652, 1653, 7, 119, 2, 2, 1653, 1654, 7, 103, 2, 2, 1654, 236, 3, 2, 2, 2, 1655, 1656, 7, 110, 2, 2, 1656, 1657, 7, 103, 2, 2, 1657, 1658, 7, 99, 2, 2, 1658, 1659, 7, 120, 2, 2, 1659, 1660, 7, 103, 2, 2, 1660, 238, 3, 2, 2, 2, 1661, 1662, 7, 103, 2, 2, 1662, 1663, 7, 122, 2, 2, 1663, 1664, 7, 118, 2, 2, 1664, 1665, 7, 103, 2, 2, 1665, 1666, 7, 116, 2, 2, 1666, 1667, 7, 112, 2, 2, 1667, 1668, 7, 99, 2, 2, 1668, 1669, 7, 110, 2, 2, 1669, 240, 3, 2, 2, 2, 1670, 1671, 7, 107, 2, 2, 1671, 1672, 7, 112, 2, 2, 1672, 1673, 7, 102, 2, 2, 1673, 1674, 7, 103, 2, 2, 1674, 1675, 7, 122, 2, 2, 1675, 1676, 7, 103, 2, 2, 1676, 1677, 7, 102, 2, 2, 1677, 242, 3, 2, 2, 2, 1678, 1679, 7, 107, 2, 2, 1679, 1680, 7, 112, 2, 2, 1680, 1681, 7, 118, 2, 2, 1681, 1682, 7, 103, 2, 2, 1682, 1683, 7, 116, 2, 2, 1683, 1684, 7, 112, 2, 2, 1684, 1685, 7, 99, 2, 2, 1685, 1686, 7, 110, 2, 2, 1686, 244, 3, 2, 2, 2, 1687, 1688, 7, 114, 2, 2, 1688, 1689, 7, 99, 2, 2, 1689, 1690, 7, 123, 2, 2, 1690, 1691, 7, 99, 2, 2, 1691, 1692, 7, 100, 2, 2, 1692, 1693, 7, 110, 2, 2, 1693, 1694, 7, 103, 2, 2, 1694, 246, 3, 2, 2, 2, 1695, 1696, 7, 114, 2, 2, 1696, 1697, 7, 116, 2, 2, 1697, 1698, 7, 107, 2, 2, 1698, 1699, 7, 120, 2, 2, 1699, 1700, 7, 99, 2, 2, 1700, 1701, 7, 118, 2, 2, 1701, 1702, 7, 103, 2, 2, 1702, 248, 3, 2, 2, 2, 1703, 1704, 7, 114, 2, 2, 1704, 1705, 7, 119, 2, 2, 1705, 1706, 7, 100, 2, 2, 1706, 1707, 7, 110, 2, 2, 1707, 1708, 7, 107, 2, 2, 1708, 1709, 7, 101, 2, 2, 1709, 250, 3, 2, 2, 2, 1710, 1711, 7, 120, 2, 2, 1711, 1712, 7, 107, 2, 2, 1712, 1713, 7, 116, 2, 2, 1713, 1714, 7, 118, 2, 2, 1714, 1715, 7, 119, 2, 2, 1715, 1716, 7, 99, 2, 2, 1716, 1717, 7, 110, 2, 2, 1717, 252, 3, 2, 2, 2, 1718, 1719, 7, 114, 2, 2, 1719, 1720, 7, 119, 2, 2, 1720, 1721, 7, 116, 2, 2, 1721, 1722, 7, 103, 2, 2, 1722, 254, 3, 2, 2, 2, 1723, 1724, 7, 118, 2, 2, 1724, 1725, 7, 123, 2, 2, 1725, 1726, 7, 114, 2, 2, 1726, 1727, 7, 103, 2, 2, 1727, 256, 3, 2, 2, 2, 1728, 1729, 7, 120, 2, 2, 1729, 1730, 7, 107, 2, 2, 1730, 1731, 7, 103, 2, 2, 1731, 1732, 7, 121, 2, 2, 1732, 258, 3, 2, 2, 2, 1733, 1734, 7, 101, 2, 2, 1734, 1735, 7, 113, 2, 2, 1735, 1736, 7, 112, 2, 2, 1736, 1737, 7, 117, 2, 2, 1737, 1738, 7, 118, 2, 2, 1738, 1739, 7, 116, 2, 2, 1739, 1740, 7, 119, 2, 2, 1740, 1741, 7, 101, 2, 2, 1741, 1742, 7, 118, 2, 2, 1742, 1743, 7, 113, 2, 2, 1743, 1744, 7, 116, 2, 2, 1744, 260, 3, 2, 2, 2, 1745, 1746, 7, 104, 2, 2, 1746, 1747, 7, 99, 2, 2, 1747, 1748, 7, 110, 2, 2, 1748, 1749, 7, 110, 2, 2, 1749, 1750, 7, 100, 2, 2, 1750, 1751, 7, 99, 2, 2, 1751, 1752, 7, 101, 2, 2, 1752, 1753, 7, 109, 2, 2, 1753, 262, 3, 2, 2, 2, 1754, 1755, 7, 116, 2, 2, 1755, 1756, 7, 103, 2, 2, 1756, 1757, 7, 101, 2, 2, 1757, 1758, 7, 103, 2, 2, 1758, 1759, 7, 107, 2, 2, 1759, 1760, 7, 120, 2, 2, 1760, 1761, 7, 103, 2, 2, 1761, 264, 3, 2, 2, 2, 1762, 1766, 5, 267, 134, 2, 1763, 1765, 5, 269, 135, 2, 1764, 1763, 3, 2, 2, 2, 1765, 1768, 3, 2, 2, 2, 1766, 1764, 3, 2, 2, 2, 1766, 1767, 3, 2, 2, 2, 1767, 266, 3, 2, 2, 2, 1768, 1766, 3, 2, 2, 2, 1769, 1770, 9, 6, 2, 2, 1770, 268, 3, 2, 2, 2, 1771, 1772, 9, 7, 2, 2, 1772, 270, 3, 2, 2, 2, 1773, 1774, 7, 119, 2, 2, 1774, 1775, 7, 112, 2, 2, 1775, 1776, 7, 107, 2, 2, 1776, 1777, 7, 101, 2, 2, 1777, 1778, 7, 113, 2, 2, 1778, 1779, 7, 102, 2, 2, 1779, 1781, 7, 103, 2, 2, 1780, 1773, 3, 2, 2, 2, 1780, 1781, 3, 2, 2, 2, 1781, 1782, 3, 2, 2, 2, 1782, 1786, 7, 36, 2, 2, 1783, 1785, 5, 273, 137, 2, 1784, 1783, 3, 2, 2, 2, 1785, 1788, 3, 2, 2, 2, 1786, 1784, 3, 2, 2, 2, 1786, 1787, 3, 2, 2, 2, 1787, 1789, 3, 2, 2, 2, 1788, 1786, 3, 2, 2, 2, 1789, 1808, 7, 36, 2, 2, 1790, 1791, 7, 119, 2, 2, 1791, 1792, 7, 112, 2, 2, 1792, 1793, 7, 107, 2, 2, 1793, 1794, 7, 101, 2, 2, 1794, 1795, 7, 113, 2, 2, 1795, 1796, 7, 102, 2, 2, 1796, 1798, 7, 103, 2, 2, 1797, 1790, 3, 2, 2, 2, 1797, 1798, 3, 2, 2, 2, 1798, 1799, 3, 2, 2, 2, 1799, 1803, 7, 41, 2, 2, 1800, 1802, 5, 275, 138, 2, 1801, 1800, 3, 2, 2, 2, 1802, 1805, 3, 2, 2, 2, 1803, 1801, 3, 2, 2, 2, 1803, 1804, 3, 2, 2, 2, 1804, 1806, 3, 2, 2, 2, 1805, 1803, 3, 2, 2, 2, 1806, 1808, 7, 41, 2, 2, 1807, 1780, 3, 2, 2, 2, 1807, 1797, 3, 2, 2, 2, 1808, 272, 3, 2, 2, 2, 1809, 1813, 10, 8, 2, 2, 1810, 1811, 7, 94, 2, 2, 1811, 1813, 11, 2, 2, 2, 1812, 1809, 3, 2, 2, 2, 1812, 1810, 3, 2, 2, 2, 1813, 274, 3, 2, 2, 2, 1814, 1818, 10, 9, 2, 2, 1815, 1816, 7, 94, 2, 2, 1816, 1818, 11, 2, 2, 2, 1817, 1814, 3, 2, 2, 2, 1817, 1815, 3, 2, 2, 2, 1818, 276, 3, 2, 2, 2, 1819, 1821, 9, 2, 2, 2, 1820, 1819, 3, 2, 2, 2, 1821, 1822, 3, 2, 2, 2, 1822, 1820, 3, 2, 2, 2, 1822, 1823, 3, 2, 2, 2, 1823, 1824, 3, 2, 2, 2, 1824, 1826, 7, 48, 2, 2, 1825, 1827, 9, 2, 2, 2, 1826, 1825, 3, 2, 2, 2, 1827, 1828, 3, 2, 2, 2, 1828, 1826, 3, 2, 2, 2, 1828, 1829, 3, 2, 2, 2, 1829, 1836, 3, 2, 2, 2, 1830, 1832, 7, 48, 2, 2, 1831, 1833, 9, 2, 2, 2, 1832, 1831, 3, 2, 2, 2, 1833, 1834, 3, 2, 2, 2, 1834, 1832, 3, 2, 2, 2, 1834, 1835, 3, 2, 2, 2, 1835, 1837, 3, 2, 2, 2, 1836, 1830, 3, 2, 2, 2, 1836, 1837, 3, 2, 2, 2, 1837, 278, 3, 2, 2, 2, 1838, 1840, 9, 10, 2, 2, 1839, 1838, 3, 2, 2, 2, 1840, 1841, 3, 2, 2, 2, 1841, 1839, 3, 2, 2, 2, 1841, 1842, 3, 2, 2, 2, 1842, 1843, 3, 2, 2, 2, 1843, 1844, 8, 140, 2, 2, 1844, 280, 3, 2, 2, 2, 1845, 1846, 7, 49, 2, 2, 1846, 1847, 7, 44, 2, 2, 1847, 1851, 3, 2, 2, 2, 1848, 1850, 11, 2, 2, 2, 1849, 1848, 3, 2, 2, 2, 1850, 1853, 3, 2, 2, 2, 1851, 1852, 3, 2, 2, 2, 1851, 1849, 3, 2, 2, 2, 1852, 1854, 3, 2, 2, 2, 1853, 1851, 3, 2, 2, 2, 1854, 1855, 7, 44, 2, 2, 1855, 1856, 7, 49, 2, 2, 1856, 1857, 3, 2, 2, 2, 1857, 1858, 8, 141, 3, 2, 1858, 282, 3, 2, 2, 2, 1859, 1860, 7, 49, 2, 2, 1860, 1861, 7, 49, 2, 2, 1861, 1865, 3, 2, 2, 2, 1862, 1864, 10, 11, 2, 2, 1863, 1862, 3, 2, 2, 2, 1864, 1867, 3, 2, 2, 2, 1865, 1863, 3, 2, 2, 2, 1865, 1866, 3, 2, 2, 2, 1866, 1868, 3, 2, 2, 2, 1867, 1865, 3, 2, 2, 2, 1868, 1869, 8, 142, 3, 2, 1869, 284, 3, 2, 2, 2, 40, 2, 904, 1121, 1343, 1359, 1365, 1367, 1385, 1391, 1393, 1404, 1408, 1412, 1416, 1420, 1425, 1434, 1439, 1498, 1506, 1511, 1514, 1609, 1766, 1780, 1786, 1797, 1803, 1807, 1812, 1817, 1822, 1828, 1834, 1836, 1841, 1851, 1865, 4, 8, 2, 2, 2, 3, 2] \ No newline at end of file diff --git a/solidity_parser/solidity_antlr4/SolidityLexer.py b/solidity_parser/solidity_antlr4/SolidityLexer.py index f097f71..7c5a6b5 100644 --- a/solidity_parser/solidity_antlr4/SolidityLexer.py +++ b/solidity_parser/solidity_antlr4/SolidityLexer.py @@ -1,15 +1,18 @@ -# Generated from solidity-antlr4/Solidity.g4 by ANTLR 4.7.2 +# Generated from solidity-antlr4/Solidity.g4 by ANTLR 4.9.3 from antlr4 import * from io import StringIO -from typing.io import TextIO import sys +if sys.version_info[1] > 5: + from typing import TextIO +else: + from typing.io import TextIO def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2y") - buf.write("\u06b4\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\u0087") + buf.write("\u074e\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") @@ -25,758 +28,835 @@ def serializedATN(): buf.write("^\t^\4_\t_\4`\t`\4a\ta\4b\tb\4c\tc\4d\td\4e\te\4f\tf\4") buf.write("g\tg\4h\th\4i\ti\4j\tj\4k\tk\4l\tl\4m\tm\4n\tn\4o\to\4") buf.write("p\tp\4q\tq\4r\tr\4s\ts\4t\tt\4u\tu\4v\tv\4w\tw\4x\tx\4") - buf.write("y\ty\4z\tz\4{\t{\4|\t|\4}\t}\4~\t~\3\2\3\2\3\2\3\2\3\2") - buf.write("\3\2\3\2\3\3\3\3\3\4\3\4\3\5\3\5\3\6\3\6\3\6\3\7\3\7\3") - buf.write("\b\3\b\3\t\3\t\3\t\3\n\3\n\3\13\3\13\3\13\3\f\3\f\3\f") - buf.write("\3\f\3\f\3\f\3\f\3\r\3\r\3\16\3\16\3\16\3\16\3\16\3\17") - buf.write("\3\17\3\20\3\20\3\21\3\21\3\22\3\22\3\22\3\22\3\22\3\22") - buf.write("\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23") - buf.write("\3\23\3\23\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\25") - buf.write("\3\25\3\25\3\26\3\26\3\27\3\27\3\30\3\30\3\30\3\30\3\30") - buf.write("\3\30\3\31\3\31\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3\32") - buf.write("\3\32\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33") - buf.write("\3\33\3\33\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34") - buf.write("\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\36\3\36") - buf.write("\3\36\3\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37\3\37") - buf.write("\3\37\3 \3 \3 \3 \3 \3!\3!\3\"\3\"\3#\3#\3#\3#\3#\3#\3") - buf.write("#\3#\3$\3$\3%\3%\3%\3%\3%\3%\3%\3%\3&\3&\3&\3\'\3\'\3") - buf.write("\'\3\'\3\'\3\'\3\'\3(\3(\3(\3(\3(\3(\3(\3(\3)\3)\3)\3") - buf.write(")\3)\3)\3)\3)\3)\3*\3*\3*\3+\3+\3+\3+\3+\3,\3,\3,\3,\3") - buf.write(",\3,\3-\3-\3-\3-\3-\3-\3-\3-\3-\3.\3.\3.\3/\3/\3/\3/\3") - buf.write("/\3/\3/\3\60\3\60\3\60\3\60\3\60\3\60\3\61\3\61\3\61\3") - buf.write("\61\3\61\3\62\3\62\3\62\3\62\3\63\3\63\3\63\3\63\3\63") - buf.write("\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\65\3\65\3\65\3\65") - buf.write("\3\65\3\66\3\66\3\66\3\67\3\67\3\67\38\38\38\38\39\39") - buf.write("\3:\3:\3;\3;\3;\3;\3;\3;\3<\3<\3<\3<\3<\3<\3<\3=\3=\3") - buf.write(">\3>\3>\3?\3?\3@\3@\3A\3A\3A\3B\3B\3B\3C\3C\3D\3D\3E\3") - buf.write("E\3E\3F\3F\3F\3G\3G\3G\3H\3H\3H\3I\3I\3J\3J\3K\3K\3K\3") - buf.write("L\3L\3L\3M\3M\3M\3N\3N\3N\3N\3O\3O\3O\3O\3P\3P\3P\3Q\3") - buf.write("Q\3Q\3R\3R\3R\3S\3S\3S\3T\3T\3T\3U\3U\3U\3U\3V\3V\3V\3") - buf.write("W\3W\3W\3X\3X\3X\3X\3X\3X\3X\3Y\3Y\3Y\3Y\3Y\3Z\3Z\3Z\3") - buf.write("Z\3Z\3Z\3Z\3Z\3[\3[\3[\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\") - buf.write("\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3") - buf.write("\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\") - buf.write("\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3") - buf.write("\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\") - buf.write("\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3") - buf.write("\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\") - buf.write("\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3") - buf.write("\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\") - buf.write("\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3") - buf.write("\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\") - buf.write("\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3") - buf.write("\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\") - buf.write("\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\5\\\u0339") - buf.write("\n\\\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3") - buf.write("]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3") - buf.write("]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3") - buf.write("]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3") - buf.write("]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3") - buf.write("]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3") - buf.write("]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3") - buf.write("]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3") - buf.write("]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3") - buf.write("]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3") - buf.write("]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3") - buf.write("]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3]\3") - buf.write("]\5]\u0412\n]\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3") - buf.write("^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3") - buf.write("^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3") - buf.write("^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3") - buf.write("^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3") - buf.write("^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3") - buf.write("^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3") - buf.write("^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3") - buf.write("^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3") - buf.write("^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3") - buf.write("^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3") - buf.write("^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3") - buf.write("^\3^\3^\3^\3^\3^\3^\3^\3^\5^\u04f0\n^\3_\3_\3_\3_\3_\3") - buf.write("_\3_\3_\3_\3_\3_\3_\6_\u04fe\n_\r_\16_\u04ff\3_\3_\6_") - buf.write("\u0504\n_\r_\16_\u0505\5_\u0508\n_\3`\3`\3`\3`\3`\3`\3") - buf.write("`\3`\3`\3`\3`\3`\3`\3`\6`\u0518\n`\r`\16`\u0519\3`\3`") - buf.write("\6`\u051e\n`\r`\16`\u051f\5`\u0522\n`\3a\6a\u0525\na\r") - buf.write("a\16a\u0526\3a\3a\6a\u052b\na\ra\16a\u052c\3a\3a\6a\u0531") - buf.write("\na\ra\16a\u0532\3b\3b\3b\3b\3b\3b\3b\3b\3b\5b\u053e\n") - buf.write("b\3c\6c\u0541\nc\rc\16c\u0542\3c\7c\u0546\nc\fc\16c\u0549") - buf.write("\13c\3c\3c\6c\u054d\nc\rc\16c\u054e\5c\u0551\nc\3c\3c") - buf.write("\6c\u0555\nc\rc\16c\u0556\5c\u0559\nc\3d\3d\3d\6d\u055e") - buf.write("\nd\rd\16d\u055f\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3") + buf.write("y\ty\4z\tz\4{\t{\4|\t|\4}\t}\4~\t~\4\177\t\177\4\u0080") + buf.write("\t\u0080\4\u0081\t\u0081\4\u0082\t\u0082\4\u0083\t\u0083") + buf.write("\4\u0084\t\u0084\4\u0085\t\u0085\4\u0086\t\u0086\4\u0087") + buf.write("\t\u0087\4\u0088\t\u0088\4\u0089\t\u0089\4\u008a\t\u008a") + buf.write("\4\u008b\t\u008b\4\u008c\t\u008c\4\u008d\t\u008d\4\u008e") + buf.write("\t\u008e\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\3\3\3\3\4\3\4\3") + buf.write("\4\3\5\3\5\3\6\3\6\3\7\3\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n") + buf.write("\3\n\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r") + buf.write("\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\20\3\20\3\21\3\21") + buf.write("\3\22\3\22\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23") + buf.write("\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\25\3\25") + buf.write("\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\26\3\26\3\26") + buf.write("\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\30\3\30\3\31") + buf.write("\3\31\3\32\3\32\3\32\3\32\3\32\3\32\3\33\3\33\3\33\3\33") + buf.write("\3\33\3\33\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35") + buf.write("\3\35\3\35\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36") + buf.write("\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3 \3 \3") + buf.write(" \3 \3 \3 \3 \3 \3!\3!\3!\3!\3!\3!\3\"\3\"\3\"\3\"\3\"") + buf.write("\3#\3#\3$\3$\3%\3%\3%\3%\3%\3%\3%\3%\3&\3&\3\'\3\'\3\'") + buf.write("\3\'\3\'\3\'\3\'\3\'\3(\3(\3(\3)\3)\3)\3)\3)\3)\3)\3*") + buf.write("\3*\3*\3*\3*\3*\3*\3*\3+\3+\3+\3+\3+\3+\3+\3+\3+\3,\3") + buf.write(",\3,\3-\3-\3-\3-\3-\3.\3.\3.\3.\3/\3/\3/\3/\3/\3/\3\60") + buf.write("\3\60\3\60\3\60\3\60\3\60\3\61\3\61\3\61\3\61\3\61\3\61") + buf.write("\3\61\3\61\3\61\3\61\3\62\3\62\3\62\3\62\3\62\3\62\3\62") + buf.write("\3\62\3\62\3\63\3\63\3\63\3\64\3\64\3\64\3\64\3\64\3\64") + buf.write("\3\64\3\65\3\65\3\65\3\65\3\65\3\65\3\66\3\66\3\66\3\66") + buf.write("\3\66\3\67\3\67\3\67\3\67\3\67\3\67\3\67\38\38\38\38\3") + buf.write("9\39\39\39\39\3:\3:\3:\3:\3:\3:\3:\3;\3;\3;\3;\3;\3<\3") + buf.write("<\3<\3=\3=\3=\3>\3>\3>\3>\3?\3?\3@\3@\3A\3A\3B\3B\3B\3") + buf.write("B\3B\3B\3C\3C\3C\3C\3C\3C\3C\3D\3D\3E\3E\3E\3F\3F\3G\3") + buf.write("G\3H\3H\3H\3I\3I\3I\3J\3J\3K\3K\3L\3L\3L\3M\3M\3M\3N\3") + buf.write("N\3N\3O\3O\3P\3P\3P\3Q\3Q\3Q\3R\3R\3R\3S\3S\3S\3S\3T\3") + buf.write("T\3T\3T\3U\3U\3U\3V\3V\3V\3W\3W\3W\3X\3X\3X\3Y\3Y\3Y\3") + buf.write("Z\3Z\3Z\3Z\3[\3[\3[\3\\\3\\\3\\\3]\3]\3]\3]\3]\3]\3]\3") + buf.write("^\3^\3^\3^\3^\3_\3_\3_\3_\3_\3_\3_\3_\3`\3`\3`\3a\3a\3") + buf.write("a\3a\3a\3a\3a\3a\3a\3b\3b\3b\3b\3b\3b\3b\3b\3b\3c\3c\3") + buf.write("c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3") + buf.write("c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3") + buf.write("c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3") + buf.write("c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3") + buf.write("c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3") + buf.write("c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3") + buf.write("c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3") + buf.write("c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3") + buf.write("c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3") + buf.write("c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\5") + buf.write("c\u0389\nc\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3") + buf.write("d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3") + buf.write("d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3") + buf.write("d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3") + buf.write("d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3") + buf.write("d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3") + buf.write("d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3") + buf.write("d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3") + buf.write("d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3") + buf.write("d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3") + buf.write("d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3") + buf.write("d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3") + buf.write("d\3d\3d\5d\u0462\nd\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3") buf.write("e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3") buf.write("e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3") - buf.write("e\3e\3e\3e\5e\u0596\ne\3f\3f\3f\3f\3f\3f\7f\u059e\nf\f") - buf.write("f\16f\u05a1\13f\3f\3f\3f\7f\u05a6\nf\ff\16f\u05a9\13f") - buf.write("\3f\5f\u05ac\nf\3g\3g\3g\3h\3h\3i\3i\3i\3i\3i\3i\3i\3") - buf.write("i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3") - buf.write("i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3") - buf.write("i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3") - buf.write("i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3") - buf.write("i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\5i\u060f\ni\3j\3") - buf.write("j\3j\3j\3j\3j\3j\3j\3j\3j\3k\3k\3k\3k\3k\3k\3l\3l\3l\3") - buf.write("l\3l\3l\3l\3l\3l\3m\3m\3m\3m\3m\3m\3m\3m\3m\3n\3n\3n\3") - buf.write("n\3n\3n\3n\3n\3n\3o\3o\3o\3o\3o\3o\3o\3o\3p\3p\3p\3p\3") - buf.write("p\3p\3p\3p\3p\3q\3q\3q\3q\3q\3q\3q\3q\3r\3r\3r\3r\3r\3") - buf.write("r\3r\3r\3s\3s\3s\3s\3s\3s\3s\3t\3t\3t\3t\3t\3u\3u\3u\3") - buf.write("u\3u\3v\3v\7v\u0670\nv\fv\16v\u0673\13v\3w\3w\3x\3x\3") - buf.write("y\3y\7y\u067b\ny\fy\16y\u067e\13y\3y\3y\3y\7y\u0683\n") - buf.write("y\fy\16y\u0686\13y\3y\5y\u0689\ny\3z\3z\3z\5z\u068e\n") - buf.write("z\3{\3{\3{\5{\u0693\n{\3|\6|\u0696\n|\r|\16|\u0697\3|") - buf.write("\3|\3}\3}\3}\3}\7}\u06a0\n}\f}\16}\u06a3\13}\3}\3}\3}") - buf.write("\3}\3}\3~\3~\3~\3~\7~\u06ae\n~\f~\16~\u06b1\13~\3~\3~") - buf.write("\3\u06a1\2\177\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13") - buf.write("\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26") - buf.write("+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#") - buf.write("E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66") - buf.write("k\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087") - buf.write("E\u0089F\u008bG\u008dH\u008fI\u0091J\u0093K\u0095L\u0097") - buf.write("M\u0099N\u009bO\u009dP\u009fQ\u00a1R\u00a3S\u00a5T\u00a7") - buf.write("U\u00a9V\u00abW\u00adX\u00afY\u00b1Z\u00b3[\u00b5\\\u00b7") - buf.write("]\u00b9^\u00bb_\u00bd`\u00bfa\u00c1b\u00c3c\u00c5d\u00c7") - buf.write("e\u00c9f\u00cbg\u00cd\2\u00cf\2\u00d1h\u00d3i\u00d5j\u00d7") - buf.write("k\u00d9l\u00dbm\u00ddn\u00dfo\u00e1p\u00e3q\u00e5r\u00e7") - buf.write("s\u00e9t\u00ebu\u00ed\2\u00ef\2\u00f1v\u00f3\2\u00f5\2") - buf.write("\u00f7w\u00f9x\u00fby\3\2\f\3\2\62;\4\2GGgg\4\2ZZzz\5") - buf.write("\2\62;CHch\6\2&&C\\aac|\7\2&&\62;C\\aac|\6\2\f\f\17\17") - buf.write("$$^^\6\2\f\f\17\17))^^\5\2\13\f\16\17\"\"\4\2\f\f\17\17") - buf.write("\2\u0744\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2") - buf.write("\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2") - buf.write("\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2") - buf.write("\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3") - buf.write("\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2") - buf.write("-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3") - buf.write("\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2") - buf.write("?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2") - buf.write("\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2") - buf.write("\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2") - buf.write("\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3") - buf.write("\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o") - buf.write("\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2") - buf.write("y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081") - buf.write("\3\2\2\2\2\u0083\3\2\2\2\2\u0085\3\2\2\2\2\u0087\3\2\2") - buf.write("\2\2\u0089\3\2\2\2\2\u008b\3\2\2\2\2\u008d\3\2\2\2\2\u008f") - buf.write("\3\2\2\2\2\u0091\3\2\2\2\2\u0093\3\2\2\2\2\u0095\3\2\2") - buf.write("\2\2\u0097\3\2\2\2\2\u0099\3\2\2\2\2\u009b\3\2\2\2\2\u009d") - buf.write("\3\2\2\2\2\u009f\3\2\2\2\2\u00a1\3\2\2\2\2\u00a3\3\2\2") - buf.write("\2\2\u00a5\3\2\2\2\2\u00a7\3\2\2\2\2\u00a9\3\2\2\2\2\u00ab") - buf.write("\3\2\2\2\2\u00ad\3\2\2\2\2\u00af\3\2\2\2\2\u00b1\3\2\2") - buf.write("\2\2\u00b3\3\2\2\2\2\u00b5\3\2\2\2\2\u00b7\3\2\2\2\2\u00b9") - buf.write("\3\2\2\2\2\u00bb\3\2\2\2\2\u00bd\3\2\2\2\2\u00bf\3\2\2") - buf.write("\2\2\u00c1\3\2\2\2\2\u00c3\3\2\2\2\2\u00c5\3\2\2\2\2\u00c7") - buf.write("\3\2\2\2\2\u00c9\3\2\2\2\2\u00cb\3\2\2\2\2\u00d1\3\2\2") - buf.write("\2\2\u00d3\3\2\2\2\2\u00d5\3\2\2\2\2\u00d7\3\2\2\2\2\u00d9") - buf.write("\3\2\2\2\2\u00db\3\2\2\2\2\u00dd\3\2\2\2\2\u00df\3\2\2") - buf.write("\2\2\u00e1\3\2\2\2\2\u00e3\3\2\2\2\2\u00e5\3\2\2\2\2\u00e7") - buf.write("\3\2\2\2\2\u00e9\3\2\2\2\2\u00eb\3\2\2\2\2\u00f1\3\2\2") - buf.write("\2\2\u00f7\3\2\2\2\2\u00f9\3\2\2\2\2\u00fb\3\2\2\2\3\u00fd") - buf.write("\3\2\2\2\5\u0104\3\2\2\2\7\u0106\3\2\2\2\t\u0108\3\2\2") - buf.write("\2\13\u010a\3\2\2\2\r\u010d\3\2\2\2\17\u010f\3\2\2\2\21") - buf.write("\u0111\3\2\2\2\23\u0114\3\2\2\2\25\u0116\3\2\2\2\27\u0119") - buf.write("\3\2\2\2\31\u0120\3\2\2\2\33\u0122\3\2\2\2\35\u0127\3") - buf.write("\2\2\2\37\u0129\3\2\2\2!\u012b\3\2\2\2#\u012d\3\2\2\2") - buf.write("%\u0136\3\2\2\2\'\u0140\3\2\2\2)\u0148\3\2\2\2+\u014b") - buf.write("\3\2\2\2-\u014d\3\2\2\2/\u014f\3\2\2\2\61\u0155\3\2\2") - buf.write("\2\63\u0159\3\2\2\2\65\u0160\3\2\2\2\67\u016c\3\2\2\2") - buf.write("9\u0175\3\2\2\2;\u017e\3\2\2\2=\u0186\3\2\2\2?\u018c\3") - buf.write("\2\2\2A\u0191\3\2\2\2C\u0193\3\2\2\2E\u0195\3\2\2\2G\u019d") - buf.write("\3\2\2\2I\u019f\3\2\2\2K\u01a7\3\2\2\2M\u01aa\3\2\2\2") - buf.write("O\u01b1\3\2\2\2Q\u01b9\3\2\2\2S\u01c2\3\2\2\2U\u01c5\3") - buf.write("\2\2\2W\u01ca\3\2\2\2Y\u01d0\3\2\2\2[\u01d9\3\2\2\2]\u01dc") - buf.write("\3\2\2\2_\u01e3\3\2\2\2a\u01e9\3\2\2\2c\u01ee\3\2\2\2") - buf.write("e\u01f2\3\2\2\2g\u01f7\3\2\2\2i\u01fe\3\2\2\2k\u0203\3") - buf.write("\2\2\2m\u0206\3\2\2\2o\u0209\3\2\2\2q\u020d\3\2\2\2s\u020f") - buf.write("\3\2\2\2u\u0211\3\2\2\2w\u0217\3\2\2\2y\u021e\3\2\2\2") - buf.write("{\u0220\3\2\2\2}\u0223\3\2\2\2\177\u0225\3\2\2\2\u0081") - buf.write("\u0227\3\2\2\2\u0083\u022a\3\2\2\2\u0085\u022d\3\2\2\2") - buf.write("\u0087\u022f\3\2\2\2\u0089\u0231\3\2\2\2\u008b\u0234\3") - buf.write("\2\2\2\u008d\u0237\3\2\2\2\u008f\u023a\3\2\2\2\u0091\u023d") - buf.write("\3\2\2\2\u0093\u023f\3\2\2\2\u0095\u0241\3\2\2\2\u0097") - buf.write("\u0244\3\2\2\2\u0099\u0247\3\2\2\2\u009b\u024a\3\2\2\2") - buf.write("\u009d\u024e\3\2\2\2\u009f\u0252\3\2\2\2\u00a1\u0255\3") - buf.write("\2\2\2\u00a3\u0258\3\2\2\2\u00a5\u025b\3\2\2\2\u00a7\u025e") - buf.write("\3\2\2\2\u00a9\u0261\3\2\2\2\u00ab\u0265\3\2\2\2\u00ad") - buf.write("\u0268\3\2\2\2\u00af\u026b\3\2\2\2\u00b1\u0272\3\2\2\2") - buf.write("\u00b3\u0277\3\2\2\2\u00b5\u027f\3\2\2\2\u00b7\u0338\3") - buf.write("\2\2\2\u00b9\u0411\3\2\2\2\u00bb\u04ef\3\2\2\2\u00bd\u0507") - buf.write("\3\2\2\2\u00bf\u0521\3\2\2\2\u00c1\u0524\3\2\2\2\u00c3") - buf.write("\u053d\3\2\2\2\u00c5\u0550\3\2\2\2\u00c7\u055a\3\2\2\2") - buf.write("\u00c9\u0595\3\2\2\2\u00cb\u0597\3\2\2\2\u00cd\u05ad\3") - buf.write("\2\2\2\u00cf\u05b0\3\2\2\2\u00d1\u060e\3\2\2\2\u00d3\u0610") - buf.write("\3\2\2\2\u00d5\u061a\3\2\2\2\u00d7\u0620\3\2\2\2\u00d9") - buf.write("\u0629\3\2\2\2\u00db\u0632\3\2\2\2\u00dd\u063b\3\2\2\2") - buf.write("\u00df\u0643\3\2\2\2\u00e1\u064c\3\2\2\2\u00e3\u0654\3") - buf.write("\2\2\2\u00e5\u065c\3\2\2\2\u00e7\u0663\3\2\2\2\u00e9\u0668") - buf.write("\3\2\2\2\u00eb\u066d\3\2\2\2\u00ed\u0674\3\2\2\2\u00ef") - buf.write("\u0676\3\2\2\2\u00f1\u0688\3\2\2\2\u00f3\u068d\3\2\2\2") - buf.write("\u00f5\u0692\3\2\2\2\u00f7\u0695\3\2\2\2\u00f9\u069b\3") - buf.write("\2\2\2\u00fb\u06a9\3\2\2\2\u00fd\u00fe\7r\2\2\u00fe\u00ff") - buf.write("\7t\2\2\u00ff\u0100\7c\2\2\u0100\u0101\7i\2\2\u0101\u0102") - buf.write("\7o\2\2\u0102\u0103\7c\2\2\u0103\4\3\2\2\2\u0104\u0105") - buf.write("\7=\2\2\u0105\6\3\2\2\2\u0106\u0107\7`\2\2\u0107\b\3\2") - buf.write("\2\2\u0108\u0109\7\u0080\2\2\u0109\n\3\2\2\2\u010a\u010b") - buf.write("\7@\2\2\u010b\u010c\7?\2\2\u010c\f\3\2\2\2\u010d\u010e") - buf.write("\7@\2\2\u010e\16\3\2\2\2\u010f\u0110\7>\2\2\u0110\20\3") - buf.write("\2\2\2\u0111\u0112\7>\2\2\u0112\u0113\7?\2\2\u0113\22") - buf.write("\3\2\2\2\u0114\u0115\7?\2\2\u0115\24\3\2\2\2\u0116\u0117") - buf.write("\7c\2\2\u0117\u0118\7u\2\2\u0118\26\3\2\2\2\u0119\u011a") - buf.write("\7k\2\2\u011a\u011b\7o\2\2\u011b\u011c\7r\2\2\u011c\u011d") - buf.write("\7q\2\2\u011d\u011e\7t\2\2\u011e\u011f\7v\2\2\u011f\30") - buf.write("\3\2\2\2\u0120\u0121\7,\2\2\u0121\32\3\2\2\2\u0122\u0123") - buf.write("\7h\2\2\u0123\u0124\7t\2\2\u0124\u0125\7q\2\2\u0125\u0126") - buf.write("\7o\2\2\u0126\34\3\2\2\2\u0127\u0128\7}\2\2\u0128\36\3") - buf.write("\2\2\2\u0129\u012a\7.\2\2\u012a \3\2\2\2\u012b\u012c\7") - buf.write("\177\2\2\u012c\"\3\2\2\2\u012d\u012e\7e\2\2\u012e\u012f") - buf.write("\7q\2\2\u012f\u0130\7p\2\2\u0130\u0131\7v\2\2\u0131\u0132") - buf.write("\7t\2\2\u0132\u0133\7c\2\2\u0133\u0134\7e\2\2\u0134\u0135") - buf.write("\7v\2\2\u0135$\3\2\2\2\u0136\u0137\7k\2\2\u0137\u0138") - buf.write("\7p\2\2\u0138\u0139\7v\2\2\u0139\u013a\7g\2\2\u013a\u013b") - buf.write("\7t\2\2\u013b\u013c\7h\2\2\u013c\u013d\7c\2\2\u013d\u013e") - buf.write("\7e\2\2\u013e\u013f\7g\2\2\u013f&\3\2\2\2\u0140\u0141") - buf.write("\7n\2\2\u0141\u0142\7k\2\2\u0142\u0143\7d\2\2\u0143\u0144") - buf.write("\7t\2\2\u0144\u0145\7c\2\2\u0145\u0146\7t\2\2\u0146\u0147") - buf.write("\7{\2\2\u0147(\3\2\2\2\u0148\u0149\7k\2\2\u0149\u014a") - buf.write("\7u\2\2\u014a*\3\2\2\2\u014b\u014c\7*\2\2\u014c,\3\2\2") - buf.write("\2\u014d\u014e\7+\2\2\u014e.\3\2\2\2\u014f\u0150\7w\2") - buf.write("\2\u0150\u0151\7u\2\2\u0151\u0152\7k\2\2\u0152\u0153\7") - buf.write("p\2\2\u0153\u0154\7i\2\2\u0154\60\3\2\2\2\u0155\u0156") - buf.write("\7h\2\2\u0156\u0157\7q\2\2\u0157\u0158\7t\2\2\u0158\62") - buf.write("\3\2\2\2\u0159\u015a\7u\2\2\u015a\u015b\7v\2\2\u015b\u015c") - buf.write("\7t\2\2\u015c\u015d\7w\2\2\u015d\u015e\7e\2\2\u015e\u015f") - buf.write("\7v\2\2\u015f\64\3\2\2\2\u0160\u0161\7e\2\2\u0161\u0162") - buf.write("\7q\2\2\u0162\u0163\7p\2\2\u0163\u0164\7u\2\2\u0164\u0165") - buf.write("\7v\2\2\u0165\u0166\7t\2\2\u0166\u0167\7w\2\2\u0167\u0168") - buf.write("\7e\2\2\u0168\u0169\7v\2\2\u0169\u016a\7q\2\2\u016a\u016b") - buf.write("\7t\2\2\u016b\66\3\2\2\2\u016c\u016d\7o\2\2\u016d\u016e") - buf.write("\7q\2\2\u016e\u016f\7f\2\2\u016f\u0170\7k\2\2\u0170\u0171") - buf.write("\7h\2\2\u0171\u0172\7k\2\2\u0172\u0173\7g\2\2\u0173\u0174") - buf.write("\7t\2\2\u01748\3\2\2\2\u0175\u0176\7h\2\2\u0176\u0177") - buf.write("\7w\2\2\u0177\u0178\7p\2\2\u0178\u0179\7e\2\2\u0179\u017a") - buf.write("\7v\2\2\u017a\u017b\7k\2\2\u017b\u017c\7q\2\2\u017c\u017d") - buf.write("\7p\2\2\u017d:\3\2\2\2\u017e\u017f\7t\2\2\u017f\u0180") - buf.write("\7g\2\2\u0180\u0181\7v\2\2\u0181\u0182\7w\2\2\u0182\u0183") - buf.write("\7t\2\2\u0183\u0184\7p\2\2\u0184\u0185\7u\2\2\u0185<\3") - buf.write("\2\2\2\u0186\u0187\7g\2\2\u0187\u0188\7x\2\2\u0188\u0189") - buf.write("\7g\2\2\u0189\u018a\7p\2\2\u018a\u018b\7v\2\2\u018b>\3") - buf.write("\2\2\2\u018c\u018d\7g\2\2\u018d\u018e\7p\2\2\u018e\u018f") - buf.write("\7w\2\2\u018f\u0190\7o\2\2\u0190@\3\2\2\2\u0191\u0192") - buf.write("\7]\2\2\u0192B\3\2\2\2\u0193\u0194\7_\2\2\u0194D\3\2\2") - buf.write("\2\u0195\u0196\7c\2\2\u0196\u0197\7f\2\2\u0197\u0198\7") - buf.write("f\2\2\u0198\u0199\7t\2\2\u0199\u019a\7g\2\2\u019a\u019b") - buf.write("\7u\2\2\u019b\u019c\7u\2\2\u019cF\3\2\2\2\u019d\u019e") - buf.write("\7\60\2\2\u019eH\3\2\2\2\u019f\u01a0\7o\2\2\u01a0\u01a1") - buf.write("\7c\2\2\u01a1\u01a2\7r\2\2\u01a2\u01a3\7r\2\2\u01a3\u01a4") - buf.write("\7k\2\2\u01a4\u01a5\7p\2\2\u01a5\u01a6\7i\2\2\u01a6J\3") - buf.write("\2\2\2\u01a7\u01a8\7?\2\2\u01a8\u01a9\7@\2\2\u01a9L\3") - buf.write("\2\2\2\u01aa\u01ab\7o\2\2\u01ab\u01ac\7g\2\2\u01ac\u01ad") - buf.write("\7o\2\2\u01ad\u01ae\7q\2\2\u01ae\u01af\7t\2\2\u01af\u01b0") - buf.write("\7{\2\2\u01b0N\3\2\2\2\u01b1\u01b2\7u\2\2\u01b2\u01b3") - buf.write("\7v\2\2\u01b3\u01b4\7q\2\2\u01b4\u01b5\7t\2\2\u01b5\u01b6") - buf.write("\7c\2\2\u01b6\u01b7\7i\2\2\u01b7\u01b8\7g\2\2\u01b8P\3") - buf.write("\2\2\2\u01b9\u01ba\7e\2\2\u01ba\u01bb\7c\2\2\u01bb\u01bc") - buf.write("\7n\2\2\u01bc\u01bd\7n\2\2\u01bd\u01be\7f\2\2\u01be\u01bf") - buf.write("\7c\2\2\u01bf\u01c0\7v\2\2\u01c0\u01c1\7c\2\2\u01c1R\3") - buf.write("\2\2\2\u01c2\u01c3\7k\2\2\u01c3\u01c4\7h\2\2\u01c4T\3") - buf.write("\2\2\2\u01c5\u01c6\7g\2\2\u01c6\u01c7\7n\2\2\u01c7\u01c8") - buf.write("\7u\2\2\u01c8\u01c9\7g\2\2\u01c9V\3\2\2\2\u01ca\u01cb") - buf.write("\7y\2\2\u01cb\u01cc\7j\2\2\u01cc\u01cd\7k\2\2\u01cd\u01ce") - buf.write("\7n\2\2\u01ce\u01cf\7g\2\2\u01cfX\3\2\2\2\u01d0\u01d1") - buf.write("\7c\2\2\u01d1\u01d2\7u\2\2\u01d2\u01d3\7u\2\2\u01d3\u01d4") - buf.write("\7g\2\2\u01d4\u01d5\7o\2\2\u01d5\u01d6\7d\2\2\u01d6\u01d7") - buf.write("\7n\2\2\u01d7\u01d8\7{\2\2\u01d8Z\3\2\2\2\u01d9\u01da") - buf.write("\7f\2\2\u01da\u01db\7q\2\2\u01db\\\3\2\2\2\u01dc\u01dd") - buf.write("\7t\2\2\u01dd\u01de\7g\2\2\u01de\u01df\7v\2\2\u01df\u01e0") - buf.write("\7w\2\2\u01e0\u01e1\7t\2\2\u01e1\u01e2\7p\2\2\u01e2^\3") - buf.write("\2\2\2\u01e3\u01e4\7v\2\2\u01e4\u01e5\7j\2\2\u01e5\u01e6") - buf.write("\7t\2\2\u01e6\u01e7\7q\2\2\u01e7\u01e8\7y\2\2\u01e8`\3") - buf.write("\2\2\2\u01e9\u01ea\7g\2\2\u01ea\u01eb\7o\2\2\u01eb\u01ec") - buf.write("\7k\2\2\u01ec\u01ed\7v\2\2\u01edb\3\2\2\2\u01ee\u01ef") - buf.write("\7x\2\2\u01ef\u01f0\7c\2\2\u01f0\u01f1\7t\2\2\u01f1d\3") - buf.write("\2\2\2\u01f2\u01f3\7d\2\2\u01f3\u01f4\7q\2\2\u01f4\u01f5") - buf.write("\7q\2\2\u01f5\u01f6\7n\2\2\u01f6f\3\2\2\2\u01f7\u01f8") - buf.write("\7u\2\2\u01f8\u01f9\7v\2\2\u01f9\u01fa\7t\2\2\u01fa\u01fb") - buf.write("\7k\2\2\u01fb\u01fc\7p\2\2\u01fc\u01fd\7i\2\2\u01fdh\3") - buf.write("\2\2\2\u01fe\u01ff\7d\2\2\u01ff\u0200\7{\2\2\u0200\u0201") - buf.write("\7v\2\2\u0201\u0202\7g\2\2\u0202j\3\2\2\2\u0203\u0204") - buf.write("\7-\2\2\u0204\u0205\7-\2\2\u0205l\3\2\2\2\u0206\u0207") - buf.write("\7/\2\2\u0207\u0208\7/\2\2\u0208n\3\2\2\2\u0209\u020a") - buf.write("\7p\2\2\u020a\u020b\7g\2\2\u020b\u020c\7y\2\2\u020cp\3") - buf.write("\2\2\2\u020d\u020e\7-\2\2\u020er\3\2\2\2\u020f\u0210\7") - buf.write("/\2\2\u0210t\3\2\2\2\u0211\u0212\7c\2\2\u0212\u0213\7") - buf.write("h\2\2\u0213\u0214\7v\2\2\u0214\u0215\7g\2\2\u0215\u0216") - buf.write("\7t\2\2\u0216v\3\2\2\2\u0217\u0218\7f\2\2\u0218\u0219") - buf.write("\7g\2\2\u0219\u021a\7n\2\2\u021a\u021b\7g\2\2\u021b\u021c") - buf.write("\7v\2\2\u021c\u021d\7g\2\2\u021dx\3\2\2\2\u021e\u021f") - buf.write("\7#\2\2\u021fz\3\2\2\2\u0220\u0221\7,\2\2\u0221\u0222") - buf.write("\7,\2\2\u0222|\3\2\2\2\u0223\u0224\7\61\2\2\u0224~\3\2") - buf.write("\2\2\u0225\u0226\7\'\2\2\u0226\u0080\3\2\2\2\u0227\u0228") - buf.write("\7>\2\2\u0228\u0229\7>\2\2\u0229\u0082\3\2\2\2\u022a\u022b") - buf.write("\7@\2\2\u022b\u022c\7@\2\2\u022c\u0084\3\2\2\2\u022d\u022e") - buf.write("\7(\2\2\u022e\u0086\3\2\2\2\u022f\u0230\7~\2\2\u0230\u0088") - buf.write("\3\2\2\2\u0231\u0232\7?\2\2\u0232\u0233\7?\2\2\u0233\u008a") - buf.write("\3\2\2\2\u0234\u0235\7#\2\2\u0235\u0236\7?\2\2\u0236\u008c") - buf.write("\3\2\2\2\u0237\u0238\7(\2\2\u0238\u0239\7(\2\2\u0239\u008e") - buf.write("\3\2\2\2\u023a\u023b\7~\2\2\u023b\u023c\7~\2\2\u023c\u0090") - buf.write("\3\2\2\2\u023d\u023e\7A\2\2\u023e\u0092\3\2\2\2\u023f") - buf.write("\u0240\7<\2\2\u0240\u0094\3\2\2\2\u0241\u0242\7~\2\2\u0242") - buf.write("\u0243\7?\2\2\u0243\u0096\3\2\2\2\u0244\u0245\7`\2\2\u0245") - buf.write("\u0246\7?\2\2\u0246\u0098\3\2\2\2\u0247\u0248\7(\2\2\u0248") - buf.write("\u0249\7?\2\2\u0249\u009a\3\2\2\2\u024a\u024b\7>\2\2\u024b") - buf.write("\u024c\7>\2\2\u024c\u024d\7?\2\2\u024d\u009c\3\2\2\2\u024e") - buf.write("\u024f\7@\2\2\u024f\u0250\7@\2\2\u0250\u0251\7?\2\2\u0251") - buf.write("\u009e\3\2\2\2\u0252\u0253\7-\2\2\u0253\u0254\7?\2\2\u0254") - buf.write("\u00a0\3\2\2\2\u0255\u0256\7/\2\2\u0256\u0257\7?\2\2\u0257") - buf.write("\u00a2\3\2\2\2\u0258\u0259\7,\2\2\u0259\u025a\7?\2\2\u025a") - buf.write("\u00a4\3\2\2\2\u025b\u025c\7\61\2\2\u025c\u025d\7?\2\2") - buf.write("\u025d\u00a6\3\2\2\2\u025e\u025f\7\'\2\2\u025f\u0260\7") - buf.write("?\2\2\u0260\u00a8\3\2\2\2\u0261\u0262\7n\2\2\u0262\u0263") - buf.write("\7g\2\2\u0263\u0264\7v\2\2\u0264\u00aa\3\2\2\2\u0265\u0266") - buf.write("\7<\2\2\u0266\u0267\7?\2\2\u0267\u00ac\3\2\2\2\u0268\u0269") - buf.write("\7?\2\2\u0269\u026a\7<\2\2\u026a\u00ae\3\2\2\2\u026b\u026c") - buf.write("\7u\2\2\u026c\u026d\7y\2\2\u026d\u026e\7k\2\2\u026e\u026f") - buf.write("\7v\2\2\u026f\u0270\7e\2\2\u0270\u0271\7j\2\2\u0271\u00b0") - buf.write("\3\2\2\2\u0272\u0273\7e\2\2\u0273\u0274\7c\2\2\u0274\u0275") - buf.write("\7u\2\2\u0275\u0276\7g\2\2\u0276\u00b2\3\2\2\2\u0277\u0278") - buf.write("\7f\2\2\u0278\u0279\7g\2\2\u0279\u027a\7h\2\2\u027a\u027b") - buf.write("\7c\2\2\u027b\u027c\7w\2\2\u027c\u027d\7n\2\2\u027d\u027e") - buf.write("\7v\2\2\u027e\u00b4\3\2\2\2\u027f\u0280\7/\2\2\u0280\u0281") - buf.write("\7@\2\2\u0281\u00b6\3\2\2\2\u0282\u0283\7k\2\2\u0283\u0284") - buf.write("\7p\2\2\u0284\u0339\7v\2\2\u0285\u0286\7k\2\2\u0286\u0287") - buf.write("\7p\2\2\u0287\u0288\7v\2\2\u0288\u0339\7:\2\2\u0289\u028a") - buf.write("\7k\2\2\u028a\u028b\7p\2\2\u028b\u028c\7v\2\2\u028c\u028d") - buf.write("\7\63\2\2\u028d\u0339\78\2\2\u028e\u028f\7k\2\2\u028f") - buf.write("\u0290\7p\2\2\u0290\u0291\7v\2\2\u0291\u0292\7\64\2\2") - buf.write("\u0292\u0339\7\66\2\2\u0293\u0294\7k\2\2\u0294\u0295\7") - buf.write("p\2\2\u0295\u0296\7v\2\2\u0296\u0297\7\65\2\2\u0297\u0339") - buf.write("\7\64\2\2\u0298\u0299\7k\2\2\u0299\u029a\7p\2\2\u029a") - buf.write("\u029b\7v\2\2\u029b\u029c\7\66\2\2\u029c\u0339\7\62\2") - buf.write("\2\u029d\u029e\7k\2\2\u029e\u029f\7p\2\2\u029f\u02a0\7") - buf.write("v\2\2\u02a0\u02a1\7\66\2\2\u02a1\u0339\7:\2\2\u02a2\u02a3") - buf.write("\7k\2\2\u02a3\u02a4\7p\2\2\u02a4\u02a5\7v\2\2\u02a5\u02a6") - buf.write("\7\67\2\2\u02a6\u0339\78\2\2\u02a7\u02a8\7k\2\2\u02a8") - buf.write("\u02a9\7p\2\2\u02a9\u02aa\7v\2\2\u02aa\u02ab\78\2\2\u02ab") - buf.write("\u0339\7\66\2\2\u02ac\u02ad\7k\2\2\u02ad\u02ae\7p\2\2") - buf.write("\u02ae\u02af\7v\2\2\u02af\u02b0\79\2\2\u02b0\u0339\7\64") - buf.write("\2\2\u02b1\u02b2\7k\2\2\u02b2\u02b3\7p\2\2\u02b3\u02b4") - buf.write("\7v\2\2\u02b4\u02b5\7:\2\2\u02b5\u0339\7\62\2\2\u02b6") - buf.write("\u02b7\7k\2\2\u02b7\u02b8\7p\2\2\u02b8\u02b9\7v\2\2\u02b9") - buf.write("\u02ba\7:\2\2\u02ba\u0339\7:\2\2\u02bb\u02bc\7k\2\2\u02bc") - buf.write("\u02bd\7p\2\2\u02bd\u02be\7v\2\2\u02be\u02bf\7;\2\2\u02bf") - buf.write("\u0339\78\2\2\u02c0\u02c1\7k\2\2\u02c1\u02c2\7p\2\2\u02c2") - buf.write("\u02c3\7v\2\2\u02c3\u02c4\7\63\2\2\u02c4\u02c5\7\62\2") - buf.write("\2\u02c5\u0339\7\66\2\2\u02c6\u02c7\7k\2\2\u02c7\u02c8") - buf.write("\7p\2\2\u02c8\u02c9\7v\2\2\u02c9\u02ca\7\63\2\2\u02ca") - buf.write("\u02cb\7\63\2\2\u02cb\u0339\7\64\2\2\u02cc\u02cd\7k\2") - buf.write("\2\u02cd\u02ce\7p\2\2\u02ce\u02cf\7v\2\2\u02cf\u02d0\7") - buf.write("\63\2\2\u02d0\u02d1\7\64\2\2\u02d1\u0339\7\62\2\2\u02d2") - buf.write("\u02d3\7k\2\2\u02d3\u02d4\7p\2\2\u02d4\u02d5\7v\2\2\u02d5") - buf.write("\u02d6\7\63\2\2\u02d6\u02d7\7\64\2\2\u02d7\u0339\7:\2") - buf.write("\2\u02d8\u02d9\7k\2\2\u02d9\u02da\7p\2\2\u02da\u02db\7") - buf.write("v\2\2\u02db\u02dc\7\63\2\2\u02dc\u02dd\7\65\2\2\u02dd") - buf.write("\u0339\78\2\2\u02de\u02df\7k\2\2\u02df\u02e0\7p\2\2\u02e0") - buf.write("\u02e1\7v\2\2\u02e1\u02e2\7\63\2\2\u02e2\u02e3\7\66\2") - buf.write("\2\u02e3\u0339\7\66\2\2\u02e4\u02e5\7k\2\2\u02e5\u02e6") - buf.write("\7p\2\2\u02e6\u02e7\7v\2\2\u02e7\u02e8\7\63\2\2\u02e8") - buf.write("\u02e9\7\67\2\2\u02e9\u0339\7\64\2\2\u02ea\u02eb\7k\2") - buf.write("\2\u02eb\u02ec\7p\2\2\u02ec\u02ed\7v\2\2\u02ed\u02ee\7") - buf.write("\63\2\2\u02ee\u02ef\78\2\2\u02ef\u0339\7\62\2\2\u02f0") - buf.write("\u02f1\7k\2\2\u02f1\u02f2\7p\2\2\u02f2\u02f3\7v\2\2\u02f3") - buf.write("\u02f4\7\63\2\2\u02f4\u02f5\78\2\2\u02f5\u0339\7:\2\2") - buf.write("\u02f6\u02f7\7k\2\2\u02f7\u02f8\7p\2\2\u02f8\u02f9\7v") - buf.write("\2\2\u02f9\u02fa\7\63\2\2\u02fa\u02fb\79\2\2\u02fb\u0339") - buf.write("\78\2\2\u02fc\u02fd\7k\2\2\u02fd\u02fe\7p\2\2\u02fe\u02ff") - buf.write("\7v\2\2\u02ff\u0300\7\63\2\2\u0300\u0301\7:\2\2\u0301") - buf.write("\u0339\7\66\2\2\u0302\u0303\7k\2\2\u0303\u0304\7p\2\2") - buf.write("\u0304\u0305\7v\2\2\u0305\u0306\7\63\2\2\u0306\u0307\7") - buf.write(";\2\2\u0307\u0339\7\64\2\2\u0308\u0309\7k\2\2\u0309\u030a") - buf.write("\7p\2\2\u030a\u030b\7v\2\2\u030b\u030c\7\64\2\2\u030c") - buf.write("\u030d\7\62\2\2\u030d\u0339\7\62\2\2\u030e\u030f\7k\2") - buf.write("\2\u030f\u0310\7p\2\2\u0310\u0311\7v\2\2\u0311\u0312\7") - buf.write("\64\2\2\u0312\u0313\7\62\2\2\u0313\u0339\7:\2\2\u0314") - buf.write("\u0315\7k\2\2\u0315\u0316\7p\2\2\u0316\u0317\7v\2\2\u0317") - buf.write("\u0318\7\64\2\2\u0318\u0319\7\63\2\2\u0319\u0339\78\2") - buf.write("\2\u031a\u031b\7k\2\2\u031b\u031c\7p\2\2\u031c\u031d\7") - buf.write("v\2\2\u031d\u031e\7\64\2\2\u031e\u031f\7\64\2\2\u031f") - buf.write("\u0339\7\66\2\2\u0320\u0321\7k\2\2\u0321\u0322\7p\2\2") - buf.write("\u0322\u0323\7v\2\2\u0323\u0324\7\64\2\2\u0324\u0325\7") - buf.write("\65\2\2\u0325\u0339\7\64\2\2\u0326\u0327\7k\2\2\u0327") - buf.write("\u0328\7p\2\2\u0328\u0329\7v\2\2\u0329\u032a\7\64\2\2") - buf.write("\u032a\u032b\7\66\2\2\u032b\u0339\7\62\2\2\u032c\u032d") - buf.write("\7k\2\2\u032d\u032e\7p\2\2\u032e\u032f\7v\2\2\u032f\u0330") - buf.write("\7\64\2\2\u0330\u0331\7\66\2\2\u0331\u0339\7:\2\2\u0332") - buf.write("\u0333\7k\2\2\u0333\u0334\7p\2\2\u0334\u0335\7v\2\2\u0335") - buf.write("\u0336\7\64\2\2\u0336\u0337\7\67\2\2\u0337\u0339\78\2") - buf.write("\2\u0338\u0282\3\2\2\2\u0338\u0285\3\2\2\2\u0338\u0289") - buf.write("\3\2\2\2\u0338\u028e\3\2\2\2\u0338\u0293\3\2\2\2\u0338") - buf.write("\u0298\3\2\2\2\u0338\u029d\3\2\2\2\u0338\u02a2\3\2\2\2") - buf.write("\u0338\u02a7\3\2\2\2\u0338\u02ac\3\2\2\2\u0338\u02b1\3") - buf.write("\2\2\2\u0338\u02b6\3\2\2\2\u0338\u02bb\3\2\2\2\u0338\u02c0") - buf.write("\3\2\2\2\u0338\u02c6\3\2\2\2\u0338\u02cc\3\2\2\2\u0338") - buf.write("\u02d2\3\2\2\2\u0338\u02d8\3\2\2\2\u0338\u02de\3\2\2\2") - buf.write("\u0338\u02e4\3\2\2\2\u0338\u02ea\3\2\2\2\u0338\u02f0\3") - buf.write("\2\2\2\u0338\u02f6\3\2\2\2\u0338\u02fc\3\2\2\2\u0338\u0302") - buf.write("\3\2\2\2\u0338\u0308\3\2\2\2\u0338\u030e\3\2\2\2\u0338") - buf.write("\u0314\3\2\2\2\u0338\u031a\3\2\2\2\u0338\u0320\3\2\2\2") - buf.write("\u0338\u0326\3\2\2\2\u0338\u032c\3\2\2\2\u0338\u0332\3") - buf.write("\2\2\2\u0339\u00b8\3\2\2\2\u033a\u033b\7w\2\2\u033b\u033c") - buf.write("\7k\2\2\u033c\u033d\7p\2\2\u033d\u0412\7v\2\2\u033e\u033f") - buf.write("\7w\2\2\u033f\u0340\7k\2\2\u0340\u0341\7p\2\2\u0341\u0342") - buf.write("\7v\2\2\u0342\u0412\7:\2\2\u0343\u0344\7w\2\2\u0344\u0345") - buf.write("\7k\2\2\u0345\u0346\7p\2\2\u0346\u0347\7v\2\2\u0347\u0348") - buf.write("\7\63\2\2\u0348\u0412\78\2\2\u0349\u034a\7w\2\2\u034a") - buf.write("\u034b\7k\2\2\u034b\u034c\7p\2\2\u034c\u034d\7v\2\2\u034d") - buf.write("\u034e\7\64\2\2\u034e\u0412\7\66\2\2\u034f\u0350\7w\2") - buf.write("\2\u0350\u0351\7k\2\2\u0351\u0352\7p\2\2\u0352\u0353\7") - buf.write("v\2\2\u0353\u0354\7\65\2\2\u0354\u0412\7\64\2\2\u0355") - buf.write("\u0356\7w\2\2\u0356\u0357\7k\2\2\u0357\u0358\7p\2\2\u0358") - buf.write("\u0359\7v\2\2\u0359\u035a\7\66\2\2\u035a\u0412\7\62\2") - buf.write("\2\u035b\u035c\7w\2\2\u035c\u035d\7k\2\2\u035d\u035e\7") - buf.write("p\2\2\u035e\u035f\7v\2\2\u035f\u0360\7\66\2\2\u0360\u0412") - buf.write("\7:\2\2\u0361\u0362\7w\2\2\u0362\u0363\7k\2\2\u0363\u0364") - buf.write("\7p\2\2\u0364\u0365\7v\2\2\u0365\u0366\7\67\2\2\u0366") - buf.write("\u0412\78\2\2\u0367\u0368\7w\2\2\u0368\u0369\7k\2\2\u0369") - buf.write("\u036a\7p\2\2\u036a\u036b\7v\2\2\u036b\u036c\78\2\2\u036c") - buf.write("\u0412\7\66\2\2\u036d\u036e\7w\2\2\u036e\u036f\7k\2\2") - buf.write("\u036f\u0370\7p\2\2\u0370\u0371\7v\2\2\u0371\u0372\79") - buf.write("\2\2\u0372\u0412\7\64\2\2\u0373\u0374\7w\2\2\u0374\u0375") - buf.write("\7k\2\2\u0375\u0376\7p\2\2\u0376\u0377\7v\2\2\u0377\u0378") - buf.write("\7:\2\2\u0378\u0412\7\62\2\2\u0379\u037a\7w\2\2\u037a") - buf.write("\u037b\7k\2\2\u037b\u037c\7p\2\2\u037c\u037d\7v\2\2\u037d") - buf.write("\u037e\7:\2\2\u037e\u0412\7:\2\2\u037f\u0380\7w\2\2\u0380") - buf.write("\u0381\7k\2\2\u0381\u0382\7p\2\2\u0382\u0383\7v\2\2\u0383") - buf.write("\u0384\7;\2\2\u0384\u0412\78\2\2\u0385\u0386\7w\2\2\u0386") - buf.write("\u0387\7k\2\2\u0387\u0388\7p\2\2\u0388\u0389\7v\2\2\u0389") - buf.write("\u038a\7\63\2\2\u038a\u038b\7\62\2\2\u038b\u0412\7\66") - buf.write("\2\2\u038c\u038d\7w\2\2\u038d\u038e\7k\2\2\u038e\u038f") - buf.write("\7p\2\2\u038f\u0390\7v\2\2\u0390\u0391\7\63\2\2\u0391") - buf.write("\u0392\7\63\2\2\u0392\u0412\7\64\2\2\u0393\u0394\7w\2") - buf.write("\2\u0394\u0395\7k\2\2\u0395\u0396\7p\2\2\u0396\u0397\7") - buf.write("v\2\2\u0397\u0398\7\63\2\2\u0398\u0399\7\64\2\2\u0399") - buf.write("\u0412\7\62\2\2\u039a\u039b\7w\2\2\u039b\u039c\7k\2\2") - buf.write("\u039c\u039d\7p\2\2\u039d\u039e\7v\2\2\u039e\u039f\7\63") - buf.write("\2\2\u039f\u03a0\7\64\2\2\u03a0\u0412\7:\2\2\u03a1\u03a2") - buf.write("\7w\2\2\u03a2\u03a3\7k\2\2\u03a3\u03a4\7p\2\2\u03a4\u03a5") - buf.write("\7v\2\2\u03a5\u03a6\7\63\2\2\u03a6\u03a7\7\65\2\2\u03a7") - buf.write("\u0412\78\2\2\u03a8\u03a9\7w\2\2\u03a9\u03aa\7k\2\2\u03aa") - buf.write("\u03ab\7p\2\2\u03ab\u03ac\7v\2\2\u03ac\u03ad\7\63\2\2") - buf.write("\u03ad\u03ae\7\66\2\2\u03ae\u0412\7\66\2\2\u03af\u03b0") - buf.write("\7w\2\2\u03b0\u03b1\7k\2\2\u03b1\u03b2\7p\2\2\u03b2\u03b3") - buf.write("\7v\2\2\u03b3\u03b4\7\63\2\2\u03b4\u03b5\7\67\2\2\u03b5") - buf.write("\u0412\7\64\2\2\u03b6\u03b7\7w\2\2\u03b7\u03b8\7k\2\2") - buf.write("\u03b8\u03b9\7p\2\2\u03b9\u03ba\7v\2\2\u03ba\u03bb\7\63") - buf.write("\2\2\u03bb\u03bc\78\2\2\u03bc\u0412\7\62\2\2\u03bd\u03be") - buf.write("\7w\2\2\u03be\u03bf\7k\2\2\u03bf\u03c0\7p\2\2\u03c0\u03c1") - buf.write("\7v\2\2\u03c1\u03c2\7\63\2\2\u03c2\u03c3\78\2\2\u03c3") - buf.write("\u0412\7:\2\2\u03c4\u03c5\7w\2\2\u03c5\u03c6\7k\2\2\u03c6") - buf.write("\u03c7\7p\2\2\u03c7\u03c8\7v\2\2\u03c8\u03c9\7\63\2\2") - buf.write("\u03c9\u03ca\79\2\2\u03ca\u0412\78\2\2\u03cb\u03cc\7w") - buf.write("\2\2\u03cc\u03cd\7k\2\2\u03cd\u03ce\7p\2\2\u03ce\u03cf") - buf.write("\7v\2\2\u03cf\u03d0\7\63\2\2\u03d0\u03d1\7:\2\2\u03d1") - buf.write("\u0412\7\66\2\2\u03d2\u03d3\7w\2\2\u03d3\u03d4\7k\2\2") - buf.write("\u03d4\u03d5\7p\2\2\u03d5\u03d6\7v\2\2\u03d6\u03d7\7\63") - buf.write("\2\2\u03d7\u03d8\7;\2\2\u03d8\u0412\7\64\2\2\u03d9\u03da") - buf.write("\7w\2\2\u03da\u03db\7k\2\2\u03db\u03dc\7p\2\2\u03dc\u03dd") - buf.write("\7v\2\2\u03dd\u03de\7\64\2\2\u03de\u03df\7\62\2\2\u03df") - buf.write("\u0412\7\62\2\2\u03e0\u03e1\7w\2\2\u03e1\u03e2\7k\2\2") - buf.write("\u03e2\u03e3\7p\2\2\u03e3\u03e4\7v\2\2\u03e4\u03e5\7\64") - buf.write("\2\2\u03e5\u03e6\7\62\2\2\u03e6\u0412\7:\2\2\u03e7\u03e8") - buf.write("\7w\2\2\u03e8\u03e9\7k\2\2\u03e9\u03ea\7p\2\2\u03ea\u03eb") - buf.write("\7v\2\2\u03eb\u03ec\7\64\2\2\u03ec\u03ed\7\63\2\2\u03ed") - buf.write("\u0412\78\2\2\u03ee\u03ef\7w\2\2\u03ef\u03f0\7k\2\2\u03f0") - buf.write("\u03f1\7p\2\2\u03f1\u03f2\7v\2\2\u03f2\u03f3\7\64\2\2") - buf.write("\u03f3\u03f4\7\64\2\2\u03f4\u0412\7\66\2\2\u03f5\u03f6") - buf.write("\7w\2\2\u03f6\u03f7\7k\2\2\u03f7\u03f8\7p\2\2\u03f8\u03f9") - buf.write("\7v\2\2\u03f9\u03fa\7\64\2\2\u03fa\u03fb\7\65\2\2\u03fb") - buf.write("\u0412\7\64\2\2\u03fc\u03fd\7w\2\2\u03fd\u03fe\7k\2\2") - buf.write("\u03fe\u03ff\7p\2\2\u03ff\u0400\7v\2\2\u0400\u0401\7\64") - buf.write("\2\2\u0401\u0402\7\66\2\2\u0402\u0412\7\62\2\2\u0403\u0404") - buf.write("\7w\2\2\u0404\u0405\7k\2\2\u0405\u0406\7p\2\2\u0406\u0407") - buf.write("\7v\2\2\u0407\u0408\7\64\2\2\u0408\u0409\7\66\2\2\u0409") - buf.write("\u0412\7:\2\2\u040a\u040b\7w\2\2\u040b\u040c\7k\2\2\u040c") - buf.write("\u040d\7p\2\2\u040d\u040e\7v\2\2\u040e\u040f\7\64\2\2") - buf.write("\u040f\u0410\7\67\2\2\u0410\u0412\78\2\2\u0411\u033a\3") - buf.write("\2\2\2\u0411\u033e\3\2\2\2\u0411\u0343\3\2\2\2\u0411\u0349") - buf.write("\3\2\2\2\u0411\u034f\3\2\2\2\u0411\u0355\3\2\2\2\u0411") - buf.write("\u035b\3\2\2\2\u0411\u0361\3\2\2\2\u0411\u0367\3\2\2\2") - buf.write("\u0411\u036d\3\2\2\2\u0411\u0373\3\2\2\2\u0411\u0379\3") - buf.write("\2\2\2\u0411\u037f\3\2\2\2\u0411\u0385\3\2\2\2\u0411\u038c") - buf.write("\3\2\2\2\u0411\u0393\3\2\2\2\u0411\u039a\3\2\2\2\u0411") - buf.write("\u03a1\3\2\2\2\u0411\u03a8\3\2\2\2\u0411\u03af\3\2\2\2") - buf.write("\u0411\u03b6\3\2\2\2\u0411\u03bd\3\2\2\2\u0411\u03c4\3") - buf.write("\2\2\2\u0411\u03cb\3\2\2\2\u0411\u03d2\3\2\2\2\u0411\u03d9") - buf.write("\3\2\2\2\u0411\u03e0\3\2\2\2\u0411\u03e7\3\2\2\2\u0411") - buf.write("\u03ee\3\2\2\2\u0411\u03f5\3\2\2\2\u0411\u03fc\3\2\2\2") - buf.write("\u0411\u0403\3\2\2\2\u0411\u040a\3\2\2\2\u0412\u00ba\3") - buf.write("\2\2\2\u0413\u0414\7d\2\2\u0414\u0415\7{\2\2\u0415\u0416") - buf.write("\7v\2\2\u0416\u0417\7g\2\2\u0417\u04f0\7u\2\2\u0418\u0419") - buf.write("\7d\2\2\u0419\u041a\7{\2\2\u041a\u041b\7v\2\2\u041b\u041c") - buf.write("\7g\2\2\u041c\u041d\7u\2\2\u041d\u04f0\7\63\2\2\u041e") - buf.write("\u041f\7d\2\2\u041f\u0420\7{\2\2\u0420\u0421\7v\2\2\u0421") - buf.write("\u0422\7g\2\2\u0422\u0423\7u\2\2\u0423\u04f0\7\64\2\2") - buf.write("\u0424\u0425\7d\2\2\u0425\u0426\7{\2\2\u0426\u0427\7v") - buf.write("\2\2\u0427\u0428\7g\2\2\u0428\u0429\7u\2\2\u0429\u04f0") - buf.write("\7\65\2\2\u042a\u042b\7d\2\2\u042b\u042c\7{\2\2\u042c") - buf.write("\u042d\7v\2\2\u042d\u042e\7g\2\2\u042e\u042f\7u\2\2\u042f") - buf.write("\u04f0\7\66\2\2\u0430\u0431\7d\2\2\u0431\u0432\7{\2\2") - buf.write("\u0432\u0433\7v\2\2\u0433\u0434\7g\2\2\u0434\u0435\7u") - buf.write("\2\2\u0435\u04f0\7\67\2\2\u0436\u0437\7d\2\2\u0437\u0438") - buf.write("\7{\2\2\u0438\u0439\7v\2\2\u0439\u043a\7g\2\2\u043a\u043b") - buf.write("\7u\2\2\u043b\u04f0\78\2\2\u043c\u043d\7d\2\2\u043d\u043e") - buf.write("\7{\2\2\u043e\u043f\7v\2\2\u043f\u0440\7g\2\2\u0440\u0441") - buf.write("\7u\2\2\u0441\u04f0\79\2\2\u0442\u0443\7d\2\2\u0443\u0444") - buf.write("\7{\2\2\u0444\u0445\7v\2\2\u0445\u0446\7g\2\2\u0446\u0447") - buf.write("\7u\2\2\u0447\u04f0\7:\2\2\u0448\u0449\7d\2\2\u0449\u044a") - buf.write("\7{\2\2\u044a\u044b\7v\2\2\u044b\u044c\7g\2\2\u044c\u044d") - buf.write("\7u\2\2\u044d\u04f0\7;\2\2\u044e\u044f\7d\2\2\u044f\u0450") - buf.write("\7{\2\2\u0450\u0451\7v\2\2\u0451\u0452\7g\2\2\u0452\u0453") - buf.write("\7u\2\2\u0453\u0454\7\63\2\2\u0454\u04f0\7\62\2\2\u0455") - buf.write("\u0456\7d\2\2\u0456\u0457\7{\2\2\u0457\u0458\7v\2\2\u0458") - buf.write("\u0459\7g\2\2\u0459\u045a\7u\2\2\u045a\u045b\7\63\2\2") - buf.write("\u045b\u04f0\7\63\2\2\u045c\u045d\7d\2\2\u045d\u045e\7") - buf.write("{\2\2\u045e\u045f\7v\2\2\u045f\u0460\7g\2\2\u0460\u0461") - buf.write("\7u\2\2\u0461\u0462\7\63\2\2\u0462\u04f0\7\64\2\2\u0463") - buf.write("\u0464\7d\2\2\u0464\u0465\7{\2\2\u0465\u0466\7v\2\2\u0466") - buf.write("\u0467\7g\2\2\u0467\u0468\7u\2\2\u0468\u0469\7\63\2\2") - buf.write("\u0469\u04f0\7\65\2\2\u046a\u046b\7d\2\2\u046b\u046c\7") - buf.write("{\2\2\u046c\u046d\7v\2\2\u046d\u046e\7g\2\2\u046e\u046f") - buf.write("\7u\2\2\u046f\u0470\7\63\2\2\u0470\u04f0\7\66\2\2\u0471") - buf.write("\u0472\7d\2\2\u0472\u0473\7{\2\2\u0473\u0474\7v\2\2\u0474") - buf.write("\u0475\7g\2\2\u0475\u0476\7u\2\2\u0476\u0477\7\63\2\2") - buf.write("\u0477\u04f0\7\67\2\2\u0478\u0479\7d\2\2\u0479\u047a\7") - buf.write("{\2\2\u047a\u047b\7v\2\2\u047b\u047c\7g\2\2\u047c\u047d") - buf.write("\7u\2\2\u047d\u047e\7\63\2\2\u047e\u04f0\78\2\2\u047f") - buf.write("\u0480\7d\2\2\u0480\u0481\7{\2\2\u0481\u0482\7v\2\2\u0482") - buf.write("\u0483\7g\2\2\u0483\u0484\7u\2\2\u0484\u0485\7\63\2\2") - buf.write("\u0485\u04f0\79\2\2\u0486\u0487\7d\2\2\u0487\u0488\7{") - buf.write("\2\2\u0488\u0489\7v\2\2\u0489\u048a\7g\2\2\u048a\u048b") - buf.write("\7u\2\2\u048b\u048c\7\63\2\2\u048c\u04f0\7:\2\2\u048d") - buf.write("\u048e\7d\2\2\u048e\u048f\7{\2\2\u048f\u0490\7v\2\2\u0490") - buf.write("\u0491\7g\2\2\u0491\u0492\7u\2\2\u0492\u0493\7\63\2\2") - buf.write("\u0493\u04f0\7;\2\2\u0494\u0495\7d\2\2\u0495\u0496\7{") - buf.write("\2\2\u0496\u0497\7v\2\2\u0497\u0498\7g\2\2\u0498\u0499") - buf.write("\7u\2\2\u0499\u049a\7\64\2\2\u049a\u04f0\7\62\2\2\u049b") - buf.write("\u049c\7d\2\2\u049c\u049d\7{\2\2\u049d\u049e\7v\2\2\u049e") - buf.write("\u049f\7g\2\2\u049f\u04a0\7u\2\2\u04a0\u04a1\7\64\2\2") - buf.write("\u04a1\u04f0\7\63\2\2\u04a2\u04a3\7d\2\2\u04a3\u04a4\7") - buf.write("{\2\2\u04a4\u04a5\7v\2\2\u04a5\u04a6\7g\2\2\u04a6\u04a7") - buf.write("\7u\2\2\u04a7\u04a8\7\64\2\2\u04a8\u04f0\7\64\2\2\u04a9") - buf.write("\u04aa\7d\2\2\u04aa\u04ab\7{\2\2\u04ab\u04ac\7v\2\2\u04ac") - buf.write("\u04ad\7g\2\2\u04ad\u04ae\7u\2\2\u04ae\u04af\7\64\2\2") - buf.write("\u04af\u04f0\7\65\2\2\u04b0\u04b1\7d\2\2\u04b1\u04b2\7") - buf.write("{\2\2\u04b2\u04b3\7v\2\2\u04b3\u04b4\7g\2\2\u04b4\u04b5") - buf.write("\7u\2\2\u04b5\u04b6\7\64\2\2\u04b6\u04f0\7\66\2\2\u04b7") - buf.write("\u04b8\7d\2\2\u04b8\u04b9\7{\2\2\u04b9\u04ba\7v\2\2\u04ba") - buf.write("\u04bb\7g\2\2\u04bb\u04bc\7u\2\2\u04bc\u04bd\7\64\2\2") - buf.write("\u04bd\u04f0\7\67\2\2\u04be\u04bf\7d\2\2\u04bf\u04c0\7") - buf.write("{\2\2\u04c0\u04c1\7v\2\2\u04c1\u04c2\7g\2\2\u04c2\u04c3") - buf.write("\7u\2\2\u04c3\u04c4\7\64\2\2\u04c4\u04f0\78\2\2\u04c5") - buf.write("\u04c6\7d\2\2\u04c6\u04c7\7{\2\2\u04c7\u04c8\7v\2\2\u04c8") - buf.write("\u04c9\7g\2\2\u04c9\u04ca\7u\2\2\u04ca\u04cb\7\64\2\2") - buf.write("\u04cb\u04f0\79\2\2\u04cc\u04cd\7d\2\2\u04cd\u04ce\7{") - buf.write("\2\2\u04ce\u04cf\7v\2\2\u04cf\u04d0\7g\2\2\u04d0\u04d1") - buf.write("\7u\2\2\u04d1\u04d2\7\64\2\2\u04d2\u04f0\7:\2\2\u04d3") - buf.write("\u04d4\7d\2\2\u04d4\u04d5\7{\2\2\u04d5\u04d6\7v\2\2\u04d6") - buf.write("\u04d7\7g\2\2\u04d7\u04d8\7u\2\2\u04d8\u04d9\7\64\2\2") - buf.write("\u04d9\u04f0\7;\2\2\u04da\u04db\7d\2\2\u04db\u04dc\7{") - buf.write("\2\2\u04dc\u04dd\7v\2\2\u04dd\u04de\7g\2\2\u04de\u04df") - buf.write("\7u\2\2\u04df\u04e0\7\65\2\2\u04e0\u04f0\7\62\2\2\u04e1") - buf.write("\u04e2\7d\2\2\u04e2\u04e3\7{\2\2\u04e3\u04e4\7v\2\2\u04e4") - buf.write("\u04e5\7g\2\2\u04e5\u04e6\7u\2\2\u04e6\u04e7\7\65\2\2") - buf.write("\u04e7\u04f0\7\63\2\2\u04e8\u04e9\7d\2\2\u04e9\u04ea\7") - buf.write("{\2\2\u04ea\u04eb\7v\2\2\u04eb\u04ec\7g\2\2\u04ec\u04ed") - buf.write("\7u\2\2\u04ed\u04ee\7\65\2\2\u04ee\u04f0\7\64\2\2\u04ef") - buf.write("\u0413\3\2\2\2\u04ef\u0418\3\2\2\2\u04ef\u041e\3\2\2\2") - buf.write("\u04ef\u0424\3\2\2\2\u04ef\u042a\3\2\2\2\u04ef\u0430\3") - buf.write("\2\2\2\u04ef\u0436\3\2\2\2\u04ef\u043c\3\2\2\2\u04ef\u0442") - buf.write("\3\2\2\2\u04ef\u0448\3\2\2\2\u04ef\u044e\3\2\2\2\u04ef") - buf.write("\u0455\3\2\2\2\u04ef\u045c\3\2\2\2\u04ef\u0463\3\2\2\2") - buf.write("\u04ef\u046a\3\2\2\2\u04ef\u0471\3\2\2\2\u04ef\u0478\3") - buf.write("\2\2\2\u04ef\u047f\3\2\2\2\u04ef\u0486\3\2\2\2\u04ef\u048d") - buf.write("\3\2\2\2\u04ef\u0494\3\2\2\2\u04ef\u049b\3\2\2\2\u04ef") - buf.write("\u04a2\3\2\2\2\u04ef\u04a9\3\2\2\2\u04ef\u04b0\3\2\2\2") - buf.write("\u04ef\u04b7\3\2\2\2\u04ef\u04be\3\2\2\2\u04ef\u04c5\3") - buf.write("\2\2\2\u04ef\u04cc\3\2\2\2\u04ef\u04d3\3\2\2\2\u04ef\u04da") - buf.write("\3\2\2\2\u04ef\u04e1\3\2\2\2\u04ef\u04e8\3\2\2\2\u04f0") - buf.write("\u00bc\3\2\2\2\u04f1\u04f2\7h\2\2\u04f2\u04f3\7k\2\2\u04f3") - buf.write("\u04f4\7z\2\2\u04f4\u04f5\7g\2\2\u04f5\u0508\7f\2\2\u04f6") - buf.write("\u04f7\7h\2\2\u04f7\u04f8\7k\2\2\u04f8\u04f9\7z\2\2\u04f9") - buf.write("\u04fa\7g\2\2\u04fa\u04fb\7f\2\2\u04fb\u04fd\3\2\2\2\u04fc") - buf.write("\u04fe\t\2\2\2\u04fd\u04fc\3\2\2\2\u04fe\u04ff\3\2\2\2") - buf.write("\u04ff\u04fd\3\2\2\2\u04ff\u0500\3\2\2\2\u0500\u0501\3") - buf.write("\2\2\2\u0501\u0503\7z\2\2\u0502\u0504\t\2\2\2\u0503\u0502") - buf.write("\3\2\2\2\u0504\u0505\3\2\2\2\u0505\u0503\3\2\2\2\u0505") - buf.write("\u0506\3\2\2\2\u0506\u0508\3\2\2\2\u0507\u04f1\3\2\2\2") - buf.write("\u0507\u04f6\3\2\2\2\u0508\u00be\3\2\2\2\u0509\u050a\7") - buf.write("w\2\2\u050a\u050b\7h\2\2\u050b\u050c\7k\2\2\u050c\u050d") - buf.write("\7z\2\2\u050d\u050e\7g\2\2\u050e\u0522\7f\2\2\u050f\u0510") - buf.write("\7w\2\2\u0510\u0511\7h\2\2\u0511\u0512\7k\2\2\u0512\u0513") - buf.write("\7z\2\2\u0513\u0514\7g\2\2\u0514\u0515\7f\2\2\u0515\u0517") - buf.write("\3\2\2\2\u0516\u0518\t\2\2\2\u0517\u0516\3\2\2\2\u0518") - buf.write("\u0519\3\2\2\2\u0519\u0517\3\2\2\2\u0519\u051a\3\2\2\2") - buf.write("\u051a\u051b\3\2\2\2\u051b\u051d\7z\2\2\u051c\u051e\t") - buf.write("\2\2\2\u051d\u051c\3\2\2\2\u051e\u051f\3\2\2\2\u051f\u051d") - buf.write("\3\2\2\2\u051f\u0520\3\2\2\2\u0520\u0522\3\2\2\2\u0521") - buf.write("\u0509\3\2\2\2\u0521\u050f\3\2\2\2\u0522\u00c0\3\2\2\2") - buf.write("\u0523\u0525\t\2\2\2\u0524\u0523\3\2\2\2\u0525\u0526\3") - buf.write("\2\2\2\u0526\u0524\3\2\2\2\u0526\u0527\3\2\2\2\u0527\u0528") - buf.write("\3\2\2\2\u0528\u052a\7\60\2\2\u0529\u052b\t\2\2\2\u052a") - buf.write("\u0529\3\2\2\2\u052b\u052c\3\2\2\2\u052c\u052a\3\2\2\2") - buf.write("\u052c\u052d\3\2\2\2\u052d\u052e\3\2\2\2\u052e\u0530\7") - buf.write("\60\2\2\u052f\u0531\t\2\2\2\u0530\u052f\3\2\2\2\u0531") - buf.write("\u0532\3\2\2\2\u0532\u0530\3\2\2\2\u0532\u0533\3\2\2\2") - buf.write("\u0533\u00c2\3\2\2\2\u0534\u0535\7v\2\2\u0535\u0536\7") - buf.write("t\2\2\u0536\u0537\7w\2\2\u0537\u053e\7g\2\2\u0538\u0539") - buf.write("\7h\2\2\u0539\u053a\7c\2\2\u053a\u053b\7n\2\2\u053b\u053c") - buf.write("\7u\2\2\u053c\u053e\7g\2\2\u053d\u0534\3\2\2\2\u053d\u0538") - buf.write("\3\2\2\2\u053e\u00c4\3\2\2\2\u053f\u0541\t\2\2\2\u0540") - buf.write("\u053f\3\2\2\2\u0541\u0542\3\2\2\2\u0542\u0540\3\2\2\2") - buf.write("\u0542\u0543\3\2\2\2\u0543\u0551\3\2\2\2\u0544\u0546\t") - buf.write("\2\2\2\u0545\u0544\3\2\2\2\u0546\u0549\3\2\2\2\u0547\u0545") - buf.write("\3\2\2\2\u0547\u0548\3\2\2\2\u0548\u054a\3\2\2\2\u0549") - buf.write("\u0547\3\2\2\2\u054a\u054c\7\60\2\2\u054b\u054d\t\2\2") - buf.write("\2\u054c\u054b\3\2\2\2\u054d\u054e\3\2\2\2\u054e\u054c") - buf.write("\3\2\2\2\u054e\u054f\3\2\2\2\u054f\u0551\3\2\2\2\u0550") - buf.write("\u0540\3\2\2\2\u0550\u0547\3\2\2\2\u0551\u0558\3\2\2\2") - buf.write("\u0552\u0554\t\3\2\2\u0553\u0555\t\2\2\2\u0554\u0553\3") - buf.write("\2\2\2\u0555\u0556\3\2\2\2\u0556\u0554\3\2\2\2\u0556\u0557") - buf.write("\3\2\2\2\u0557\u0559\3\2\2\2\u0558\u0552\3\2\2\2\u0558") - buf.write("\u0559\3\2\2\2\u0559\u00c6\3\2\2\2\u055a\u055b\7\62\2") - buf.write("\2\u055b\u055d\t\4\2\2\u055c\u055e\5\u00cfh\2\u055d\u055c") - buf.write("\3\2\2\2\u055e\u055f\3\2\2\2\u055f\u055d\3\2\2\2\u055f") - buf.write("\u0560\3\2\2\2\u0560\u00c8\3\2\2\2\u0561\u0562\7y\2\2") - buf.write("\u0562\u0563\7g\2\2\u0563\u0596\7k\2\2\u0564\u0565\7u") - buf.write("\2\2\u0565\u0566\7|\2\2\u0566\u0567\7c\2\2\u0567\u0568") - buf.write("\7d\2\2\u0568\u0596\7q\2\2\u0569\u056a\7h\2\2\u056a\u056b") - buf.write("\7k\2\2\u056b\u056c\7p\2\2\u056c\u056d\7p\2\2\u056d\u056e") - buf.write("\7g\2\2\u056e\u0596\7{\2\2\u056f\u0570\7g\2\2\u0570\u0571") - buf.write("\7v\2\2\u0571\u0572\7j\2\2\u0572\u0573\7g\2\2\u0573\u0596") - buf.write("\7t\2\2\u0574\u0575\7u\2\2\u0575\u0576\7g\2\2\u0576\u0577") - buf.write("\7e\2\2\u0577\u0578\7q\2\2\u0578\u0579\7p\2\2\u0579\u057a") - buf.write("\7f\2\2\u057a\u0596\7u\2\2\u057b\u057c\7o\2\2\u057c\u057d") - buf.write("\7k\2\2\u057d\u057e\7p\2\2\u057e\u057f\7w\2\2\u057f\u0580") - buf.write("\7v\2\2\u0580\u0581\7g\2\2\u0581\u0596\7u\2\2\u0582\u0583") - buf.write("\7j\2\2\u0583\u0584\7q\2\2\u0584\u0585\7w\2\2\u0585\u0586") - buf.write("\7t\2\2\u0586\u0596\7u\2\2\u0587\u0588\7f\2\2\u0588\u0589") - buf.write("\7c\2\2\u0589\u058a\7{\2\2\u058a\u0596\7u\2\2\u058b\u058c") - buf.write("\7y\2\2\u058c\u058d\7g\2\2\u058d\u058e\7g\2\2\u058e\u058f") - buf.write("\7m\2\2\u058f\u0596\7u\2\2\u0590\u0591\7{\2\2\u0591\u0592") - buf.write("\7g\2\2\u0592\u0593\7c\2\2\u0593\u0594\7t\2\2\u0594\u0596") - buf.write("\7u\2\2\u0595\u0561\3\2\2\2\u0595\u0564\3\2\2\2\u0595") - buf.write("\u0569\3\2\2\2\u0595\u056f\3\2\2\2\u0595\u0574\3\2\2\2") - buf.write("\u0595\u057b\3\2\2\2\u0595\u0582\3\2\2\2\u0595\u0587\3") - buf.write("\2\2\2\u0595\u058b\3\2\2\2\u0595\u0590\3\2\2\2\u0596\u00ca") - buf.write("\3\2\2\2\u0597\u0598\7j\2\2\u0598\u0599\7g\2\2\u0599\u059a") - buf.write("\7z\2\2\u059a\u05ab\3\2\2\2\u059b\u059f\7$\2\2\u059c\u059e") - buf.write("\5\u00cdg\2\u059d\u059c\3\2\2\2\u059e\u05a1\3\2\2\2\u059f") - buf.write("\u059d\3\2\2\2\u059f\u05a0\3\2\2\2\u05a0\u05a2\3\2\2\2") - buf.write("\u05a1\u059f\3\2\2\2\u05a2\u05ac\7$\2\2\u05a3\u05a7\7") - buf.write(")\2\2\u05a4\u05a6\5\u00cdg\2\u05a5\u05a4\3\2\2\2\u05a6") - buf.write("\u05a9\3\2\2\2\u05a7\u05a5\3\2\2\2\u05a7\u05a8\3\2\2\2") - buf.write("\u05a8\u05aa\3\2\2\2\u05a9\u05a7\3\2\2\2\u05aa\u05ac\7") - buf.write(")\2\2\u05ab\u059b\3\2\2\2\u05ab\u05a3\3\2\2\2\u05ac\u00cc") - buf.write("\3\2\2\2\u05ad\u05ae\5\u00cfh\2\u05ae\u05af\5\u00cfh\2") - buf.write("\u05af\u00ce\3\2\2\2\u05b0\u05b1\t\5\2\2\u05b1\u00d0\3") - buf.write("\2\2\2\u05b2\u05b3\7c\2\2\u05b3\u05b4\7d\2\2\u05b4\u05b5") - buf.write("\7u\2\2\u05b5\u05b6\7v\2\2\u05b6\u05b7\7t\2\2\u05b7\u05b8") - buf.write("\7c\2\2\u05b8\u05b9\7e\2\2\u05b9\u060f\7v\2\2\u05ba\u05bb") - buf.write("\7c\2\2\u05bb\u05bc\7h\2\2\u05bc\u05bd\7v\2\2\u05bd\u05be") - buf.write("\7g\2\2\u05be\u060f\7t\2\2\u05bf\u05c0\7e\2\2\u05c0\u05c1") - buf.write("\7c\2\2\u05c1\u05c2\7u\2\2\u05c2\u060f\7g\2\2\u05c3\u05c4") - buf.write("\7e\2\2\u05c4\u05c5\7c\2\2\u05c5\u05c6\7v\2\2\u05c6\u05c7") - buf.write("\7e\2\2\u05c7\u060f\7j\2\2\u05c8\u05c9\7f\2\2\u05c9\u05ca") - buf.write("\7g\2\2\u05ca\u05cb\7h\2\2\u05cb\u05cc\7c\2\2\u05cc\u05cd") - buf.write("\7w\2\2\u05cd\u05ce\7n\2\2\u05ce\u060f\7v\2\2\u05cf\u05d0") - buf.write("\7h\2\2\u05d0\u05d1\7k\2\2\u05d1\u05d2\7p\2\2\u05d2\u05d3") - buf.write("\7c\2\2\u05d3\u060f\7n\2\2\u05d4\u05d5\7k\2\2\u05d5\u060f") - buf.write("\7p\2\2\u05d6\u05d7\7k\2\2\u05d7\u05d8\7p\2\2\u05d8\u05d9") - buf.write("\7n\2\2\u05d9\u05da\7k\2\2\u05da\u05db\7p\2\2\u05db\u060f") - buf.write("\7g\2\2\u05dc\u05dd\7n\2\2\u05dd\u05de\7g\2\2\u05de\u060f") - buf.write("\7v\2\2\u05df\u05e0\7o\2\2\u05e0\u05e1\7c\2\2\u05e1\u05e2") - buf.write("\7v\2\2\u05e2\u05e3\7e\2\2\u05e3\u060f\7j\2\2\u05e4\u05e5") - buf.write("\7p\2\2\u05e5\u05e6\7w\2\2\u05e6\u05e7\7n\2\2\u05e7\u060f") - buf.write("\7n\2\2\u05e8\u05e9\7q\2\2\u05e9\u060f\7h\2\2\u05ea\u05eb") - buf.write("\7t\2\2\u05eb\u05ec\7g\2\2\u05ec\u05ed\7n\2\2\u05ed\u05ee") - buf.write("\7q\2\2\u05ee\u05ef\7e\2\2\u05ef\u05f0\7c\2\2\u05f0\u05f1") - buf.write("\7v\2\2\u05f1\u05f2\7c\2\2\u05f2\u05f3\7d\2\2\u05f3\u05f4") - buf.write("\7n\2\2\u05f4\u060f\7g\2\2\u05f5\u05f6\7u\2\2\u05f6\u05f7") - buf.write("\7v\2\2\u05f7\u05f8\7c\2\2\u05f8\u05f9\7v\2\2\u05f9\u05fa") - buf.write("\7k\2\2\u05fa\u060f\7e\2\2\u05fb\u05fc\7u\2\2\u05fc\u05fd") - buf.write("\7y\2\2\u05fd\u05fe\7k\2\2\u05fe\u05ff\7v\2\2\u05ff\u0600") - buf.write("\7e\2\2\u0600\u060f\7j\2\2\u0601\u0602\7v\2\2\u0602\u0603") - buf.write("\7t\2\2\u0603\u060f\7{\2\2\u0604\u0605\7v\2\2\u0605\u0606") - buf.write("\7{\2\2\u0606\u0607\7r\2\2\u0607\u060f\7g\2\2\u0608\u0609") - buf.write("\7v\2\2\u0609\u060a\7{\2\2\u060a\u060b\7r\2\2\u060b\u060c") - buf.write("\7g\2\2\u060c\u060d\7q\2\2\u060d\u060f\7h\2\2\u060e\u05b2") - buf.write("\3\2\2\2\u060e\u05ba\3\2\2\2\u060e\u05bf\3\2\2\2\u060e") - buf.write("\u05c3\3\2\2\2\u060e\u05c8\3\2\2\2\u060e\u05cf\3\2\2\2") - buf.write("\u060e\u05d4\3\2\2\2\u060e\u05d6\3\2\2\2\u060e\u05dc\3") - buf.write("\2\2\2\u060e\u05df\3\2\2\2\u060e\u05e4\3\2\2\2\u060e\u05e8") - buf.write("\3\2\2\2\u060e\u05ea\3\2\2\2\u060e\u05f5\3\2\2\2\u060e") - buf.write("\u05fb\3\2\2\2\u060e\u0601\3\2\2\2\u060e\u0604\3\2\2\2") - buf.write("\u060e\u0608\3\2\2\2\u060f\u00d2\3\2\2\2\u0610\u0611\7") - buf.write("c\2\2\u0611\u0612\7p\2\2\u0612\u0613\7q\2\2\u0613\u0614") - buf.write("\7p\2\2\u0614\u0615\7{\2\2\u0615\u0616\7o\2\2\u0616\u0617") - buf.write("\7q\2\2\u0617\u0618\7w\2\2\u0618\u0619\7u\2\2\u0619\u00d4") - buf.write("\3\2\2\2\u061a\u061b\7d\2\2\u061b\u061c\7t\2\2\u061c\u061d") - buf.write("\7g\2\2\u061d\u061e\7c\2\2\u061e\u061f\7m\2\2\u061f\u00d6") - buf.write("\3\2\2\2\u0620\u0621\7e\2\2\u0621\u0622\7q\2\2\u0622\u0623") - buf.write("\7p\2\2\u0623\u0624\7u\2\2\u0624\u0625\7v\2\2\u0625\u0626") - buf.write("\7c\2\2\u0626\u0627\7p\2\2\u0627\u0628\7v\2\2\u0628\u00d8") - buf.write("\3\2\2\2\u0629\u062a\7e\2\2\u062a\u062b\7q\2\2\u062b\u062c") - buf.write("\7p\2\2\u062c\u062d\7v\2\2\u062d\u062e\7k\2\2\u062e\u062f") - buf.write("\7p\2\2\u062f\u0630\7w\2\2\u0630\u0631\7g\2\2\u0631\u00da") - buf.write("\3\2\2\2\u0632\u0633\7g\2\2\u0633\u0634\7z\2\2\u0634\u0635") - buf.write("\7v\2\2\u0635\u0636\7g\2\2\u0636\u0637\7t\2\2\u0637\u0638") - buf.write("\7p\2\2\u0638\u0639\7c\2\2\u0639\u063a\7n\2\2\u063a\u00dc") - buf.write("\3\2\2\2\u063b\u063c\7k\2\2\u063c\u063d\7p\2\2\u063d\u063e") - buf.write("\7f\2\2\u063e\u063f\7g\2\2\u063f\u0640\7z\2\2\u0640\u0641") - buf.write("\7g\2\2\u0641\u0642\7f\2\2\u0642\u00de\3\2\2\2\u0643\u0644") - buf.write("\7k\2\2\u0644\u0645\7p\2\2\u0645\u0646\7v\2\2\u0646\u0647") - buf.write("\7g\2\2\u0647\u0648\7t\2\2\u0648\u0649\7p\2\2\u0649\u064a") - buf.write("\7c\2\2\u064a\u064b\7n\2\2\u064b\u00e0\3\2\2\2\u064c\u064d") - buf.write("\7r\2\2\u064d\u064e\7c\2\2\u064e\u064f\7{\2\2\u064f\u0650") - buf.write("\7c\2\2\u0650\u0651\7d\2\2\u0651\u0652\7n\2\2\u0652\u0653") - buf.write("\7g\2\2\u0653\u00e2\3\2\2\2\u0654\u0655\7r\2\2\u0655\u0656") - buf.write("\7t\2\2\u0656\u0657\7k\2\2\u0657\u0658\7x\2\2\u0658\u0659") - buf.write("\7c\2\2\u0659\u065a\7v\2\2\u065a\u065b\7g\2\2\u065b\u00e4") - buf.write("\3\2\2\2\u065c\u065d\7r\2\2\u065d\u065e\7w\2\2\u065e\u065f") - buf.write("\7d\2\2\u065f\u0660\7n\2\2\u0660\u0661\7k\2\2\u0661\u0662") - buf.write("\7e\2\2\u0662\u00e6\3\2\2\2\u0663\u0664\7r\2\2\u0664\u0665") - buf.write("\7w\2\2\u0665\u0666\7t\2\2\u0666\u0667\7g\2\2\u0667\u00e8") - buf.write("\3\2\2\2\u0668\u0669\7x\2\2\u0669\u066a\7k\2\2\u066a\u066b") - buf.write("\7g\2\2\u066b\u066c\7y\2\2\u066c\u00ea\3\2\2\2\u066d\u0671") - buf.write("\5\u00edw\2\u066e\u0670\5\u00efx\2\u066f\u066e\3\2\2\2") - buf.write("\u0670\u0673\3\2\2\2\u0671\u066f\3\2\2\2\u0671\u0672\3") - buf.write("\2\2\2\u0672\u00ec\3\2\2\2\u0673\u0671\3\2\2\2\u0674\u0675") - buf.write("\t\6\2\2\u0675\u00ee\3\2\2\2\u0676\u0677\t\7\2\2\u0677") - buf.write("\u00f0\3\2\2\2\u0678\u067c\7$\2\2\u0679\u067b\5\u00f3") - buf.write("z\2\u067a\u0679\3\2\2\2\u067b\u067e\3\2\2\2\u067c\u067a") - buf.write("\3\2\2\2\u067c\u067d\3\2\2\2\u067d\u067f\3\2\2\2\u067e") - buf.write("\u067c\3\2\2\2\u067f\u0689\7$\2\2\u0680\u0684\7)\2\2\u0681") - buf.write("\u0683\5\u00f5{\2\u0682\u0681\3\2\2\2\u0683\u0686\3\2") - buf.write("\2\2\u0684\u0682\3\2\2\2\u0684\u0685\3\2\2\2\u0685\u0687") - buf.write("\3\2\2\2\u0686\u0684\3\2\2\2\u0687\u0689\7)\2\2\u0688") - buf.write("\u0678\3\2\2\2\u0688\u0680\3\2\2\2\u0689\u00f2\3\2\2\2") - buf.write("\u068a\u068e\n\b\2\2\u068b\u068c\7^\2\2\u068c\u068e\13") - buf.write("\2\2\2\u068d\u068a\3\2\2\2\u068d\u068b\3\2\2\2\u068e\u00f4") - buf.write("\3\2\2\2\u068f\u0693\n\t\2\2\u0690\u0691\7^\2\2\u0691") - buf.write("\u0693\13\2\2\2\u0692\u068f\3\2\2\2\u0692\u0690\3\2\2") - buf.write("\2\u0693\u00f6\3\2\2\2\u0694\u0696\t\n\2\2\u0695\u0694") - buf.write("\3\2\2\2\u0696\u0697\3\2\2\2\u0697\u0695\3\2\2\2\u0697") - buf.write("\u0698\3\2\2\2\u0698\u0699\3\2\2\2\u0699\u069a\b|\2\2") - buf.write("\u069a\u00f8\3\2\2\2\u069b\u069c\7\61\2\2\u069c\u069d") - buf.write("\7,\2\2\u069d\u06a1\3\2\2\2\u069e\u06a0\13\2\2\2\u069f") - buf.write("\u069e\3\2\2\2\u06a0\u06a3\3\2\2\2\u06a1\u06a2\3\2\2\2") - buf.write("\u06a1\u069f\3\2\2\2\u06a2\u06a4\3\2\2\2\u06a3\u06a1\3") - buf.write("\2\2\2\u06a4\u06a5\7,\2\2\u06a5\u06a6\7\61\2\2\u06a6\u06a7") - buf.write("\3\2\2\2\u06a7\u06a8\b}\3\2\u06a8\u00fa\3\2\2\2\u06a9") - buf.write("\u06aa\7\61\2\2\u06aa\u06ab\7\61\2\2\u06ab\u06af\3\2\2") - buf.write("\2\u06ac\u06ae\n\13\2\2\u06ad\u06ac\3\2\2\2\u06ae\u06b1") - buf.write("\3\2\2\2\u06af\u06ad\3\2\2\2\u06af\u06b0\3\2\2\2\u06b0") - buf.write("\u06b2\3\2\2\2\u06b1\u06af\3\2\2\2\u06b2\u06b3\b~\3\2") - buf.write("\u06b3\u00fc\3\2\2\2%\2\u0338\u0411\u04ef\u04ff\u0505") - buf.write("\u0507\u0519\u051f\u0521\u0526\u052c\u0532\u053d\u0542") - buf.write("\u0547\u054e\u0550\u0556\u0558\u055f\u0595\u059f\u05a7") - buf.write("\u05ab\u060e\u0671\u067c\u0684\u0688\u068d\u0692\u0697") - buf.write("\u06a1\u06af\4\b\2\2\2\3\2") + buf.write("e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3") + buf.write("e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3") + buf.write("e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3") + buf.write("e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3") + buf.write("e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3") + buf.write("e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3") + buf.write("e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3") + buf.write("e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3") + buf.write("e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3") + buf.write("e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\5e\u0540\ne\3f\3f\3f\3") + buf.write("f\3f\3f\3f\3f\3f\3f\3f\3f\6f\u054e\nf\rf\16f\u054f\3f") + buf.write("\3f\6f\u0554\nf\rf\16f\u0555\5f\u0558\nf\3g\3g\3g\3g\3") + buf.write("g\3g\3g\3g\3g\3g\3g\3g\3g\3g\6g\u0568\ng\rg\16g\u0569") + buf.write("\3g\3g\6g\u056e\ng\rg\16g\u056f\5g\u0572\ng\3h\3h\3h\3") + buf.write("h\3h\3h\3h\3h\3h\5h\u057d\nh\3i\3i\5i\u0581\ni\3i\3i\5") + buf.write("i\u0585\ni\3i\3i\5i\u0589\ni\3j\3j\5j\u058d\nj\3j\7j\u0590") + buf.write("\nj\fj\16j\u0593\13j\3k\3k\3k\3k\3l\3l\5l\u059b\nl\3l") + buf.write("\7l\u059e\nl\fl\16l\u05a1\13l\3m\3m\3m\3m\3m\3m\3m\3m") + buf.write("\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3") + buf.write("m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3") + buf.write("m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\5m\u05db\nm\3n\3") + buf.write("n\3n\3n\3n\3n\5n\u05e3\nn\3n\3n\3n\5n\u05e8\nn\3n\5n\u05eb") + buf.write("\nn\3o\3o\3o\3p\3p\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3") + buf.write("q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3") + buf.write("q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3") + buf.write("q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3") + buf.write("q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3") + buf.write("q\3q\3q\3q\3q\5q\u064a\nq\3r\3r\3r\3r\3r\3r\3r\3r\3r\3") + buf.write("r\3s\3s\3s\3s\3s\3s\3t\3t\3t\3t\3t\3t\3t\3t\3t\3u\3u\3") + buf.write("u\3u\3u\3u\3u\3u\3u\3u\3v\3v\3v\3v\3v\3v\3v\3v\3v\3w\3") + buf.write("w\3w\3w\3w\3w\3x\3x\3x\3x\3x\3x\3x\3x\3x\3y\3y\3y\3y\3") + buf.write("y\3y\3y\3y\3z\3z\3z\3z\3z\3z\3z\3z\3z\3{\3{\3{\3{\3{\3") + buf.write("{\3{\3{\3|\3|\3|\3|\3|\3|\3|\3|\3}\3}\3}\3}\3}\3}\3}\3") + buf.write("~\3~\3~\3~\3~\3~\3~\3~\3\177\3\177\3\177\3\177\3\177\3") + buf.write("\u0080\3\u0080\3\u0080\3\u0080\3\u0080\3\u0081\3\u0081") + buf.write("\3\u0081\3\u0081\3\u0081\3\u0082\3\u0082\3\u0082\3\u0082") + buf.write("\3\u0082\3\u0082\3\u0082\3\u0082\3\u0082\3\u0082\3\u0082") + buf.write("\3\u0082\3\u0083\3\u0083\3\u0083\3\u0083\3\u0083\3\u0083") + buf.write("\3\u0083\3\u0083\3\u0083\3\u0084\3\u0084\3\u0084\3\u0084") + buf.write("\3\u0084\3\u0084\3\u0084\3\u0084\3\u0085\3\u0085\7\u0085") + buf.write("\u06e5\n\u0085\f\u0085\16\u0085\u06e8\13\u0085\3\u0086") + buf.write("\3\u0086\3\u0087\3\u0087\3\u0088\3\u0088\3\u0088\3\u0088") + buf.write("\3\u0088\3\u0088\3\u0088\5\u0088\u06f5\n\u0088\3\u0088") + buf.write("\3\u0088\7\u0088\u06f9\n\u0088\f\u0088\16\u0088\u06fc") + buf.write("\13\u0088\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088") + buf.write("\3\u0088\3\u0088\5\u0088\u0706\n\u0088\3\u0088\3\u0088") + buf.write("\7\u0088\u070a\n\u0088\f\u0088\16\u0088\u070d\13\u0088") + buf.write("\3\u0088\5\u0088\u0710\n\u0088\3\u0089\3\u0089\3\u0089") + buf.write("\5\u0089\u0715\n\u0089\3\u008a\3\u008a\3\u008a\5\u008a") + buf.write("\u071a\n\u008a\3\u008b\6\u008b\u071d\n\u008b\r\u008b\16") + buf.write("\u008b\u071e\3\u008b\3\u008b\6\u008b\u0723\n\u008b\r\u008b") + buf.write("\16\u008b\u0724\3\u008b\3\u008b\6\u008b\u0729\n\u008b") + buf.write("\r\u008b\16\u008b\u072a\5\u008b\u072d\n\u008b\3\u008c") + buf.write("\6\u008c\u0730\n\u008c\r\u008c\16\u008c\u0731\3\u008c") + buf.write("\3\u008c\3\u008d\3\u008d\3\u008d\3\u008d\7\u008d\u073a") + buf.write("\n\u008d\f\u008d\16\u008d\u073d\13\u008d\3\u008d\3\u008d") + buf.write("\3\u008d\3\u008d\3\u008d\3\u008e\3\u008e\3\u008e\3\u008e") + buf.write("\7\u008e\u0748\n\u008e\f\u008e\16\u008e\u074b\13\u008e") + buf.write("\3\u008e\3\u008e\3\u073b\2\u008f\3\3\5\4\7\5\t\6\13\7") + buf.write("\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21") + buf.write("!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67") + buf.write("\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61") + buf.write("a\62c\63e\64g\65i\66k\67m8o9q:s;u{?}@\177A\u0081") + buf.write("B\u0083C\u0085D\u0087E\u0089F\u008bG\u008dH\u008fI\u0091") + buf.write("J\u0093K\u0095L\u0097M\u0099N\u009bO\u009dP\u009fQ\u00a1") + buf.write("R\u00a3S\u00a5T\u00a7U\u00a9V\u00abW\u00adX\u00afY\u00b1") + buf.write("Z\u00b3[\u00b5\\\u00b7]\u00b9^\u00bb_\u00bd`\u00bfa\u00c1") + buf.write("b\u00c3c\u00c5d\u00c7e\u00c9f\u00cbg\u00cdh\u00cfi\u00d1") + buf.write("j\u00d3\2\u00d5k\u00d7\2\u00d9l\u00dbm\u00dd\2\u00df\2") + buf.write("\u00e1n\u00e3o\u00e5p\u00e7q\u00e9r\u00ebs\u00edt\u00ef") + buf.write("u\u00f1v\u00f3w\u00f5x\u00f7y\u00f9z\u00fb{\u00fd|\u00ff") + buf.write("}\u0101~\u0103\177\u0105\u0080\u0107\u0081\u0109\u0082") + buf.write("\u010b\2\u010d\2\u010f\u0083\u0111\2\u0113\2\u0115\u0084") + buf.write("\u0117\u0085\u0119\u0086\u011b\u0087\3\2\f\3\2\62;\4\2") + buf.write("GGgg\4\2ZZzz\5\2\62;CHch\6\2&&C\\aac|\7\2&&\62;C\\aac") + buf.write("|\6\2\f\f\17\17$$^^\6\2\f\f\17\17))^^\5\2\13\f\16\17\"") + buf.write("\"\4\2\f\f\17\17\2\u07df\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3") + buf.write("\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2") + buf.write("\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2") + buf.write("\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2") + buf.write("!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2") + buf.write("\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3") + buf.write("\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2") + buf.write("\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2") + buf.write("\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2") + buf.write("\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3") + buf.write("\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c") + buf.write("\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2") + buf.write("m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2") + buf.write("\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2") + buf.write("\2\2\2\u0081\3\2\2\2\2\u0083\3\2\2\2\2\u0085\3\2\2\2\2") + buf.write("\u0087\3\2\2\2\2\u0089\3\2\2\2\2\u008b\3\2\2\2\2\u008d") + buf.write("\3\2\2\2\2\u008f\3\2\2\2\2\u0091\3\2\2\2\2\u0093\3\2\2") + buf.write("\2\2\u0095\3\2\2\2\2\u0097\3\2\2\2\2\u0099\3\2\2\2\2\u009b") + buf.write("\3\2\2\2\2\u009d\3\2\2\2\2\u009f\3\2\2\2\2\u00a1\3\2\2") + buf.write("\2\2\u00a3\3\2\2\2\2\u00a5\3\2\2\2\2\u00a7\3\2\2\2\2\u00a9") + buf.write("\3\2\2\2\2\u00ab\3\2\2\2\2\u00ad\3\2\2\2\2\u00af\3\2\2") + buf.write("\2\2\u00b1\3\2\2\2\2\u00b3\3\2\2\2\2\u00b5\3\2\2\2\2\u00b7") + buf.write("\3\2\2\2\2\u00b9\3\2\2\2\2\u00bb\3\2\2\2\2\u00bd\3\2\2") + buf.write("\2\2\u00bf\3\2\2\2\2\u00c1\3\2\2\2\2\u00c3\3\2\2\2\2\u00c5") + buf.write("\3\2\2\2\2\u00c7\3\2\2\2\2\u00c9\3\2\2\2\2\u00cb\3\2\2") + buf.write("\2\2\u00cd\3\2\2\2\2\u00cf\3\2\2\2\2\u00d1\3\2\2\2\2\u00d5") + buf.write("\3\2\2\2\2\u00d9\3\2\2\2\2\u00db\3\2\2\2\2\u00e1\3\2\2") + buf.write("\2\2\u00e3\3\2\2\2\2\u00e5\3\2\2\2\2\u00e7\3\2\2\2\2\u00e9") + buf.write("\3\2\2\2\2\u00eb\3\2\2\2\2\u00ed\3\2\2\2\2\u00ef\3\2\2") + buf.write("\2\2\u00f1\3\2\2\2\2\u00f3\3\2\2\2\2\u00f5\3\2\2\2\2\u00f7") + buf.write("\3\2\2\2\2\u00f9\3\2\2\2\2\u00fb\3\2\2\2\2\u00fd\3\2\2") + buf.write("\2\2\u00ff\3\2\2\2\2\u0101\3\2\2\2\2\u0103\3\2\2\2\2\u0105") + buf.write("\3\2\2\2\2\u0107\3\2\2\2\2\u0109\3\2\2\2\2\u010f\3\2\2") + buf.write("\2\2\u0115\3\2\2\2\2\u0117\3\2\2\2\2\u0119\3\2\2\2\2\u011b") + buf.write("\3\2\2\2\3\u011d\3\2\2\2\5\u0124\3\2\2\2\7\u0126\3\2\2") + buf.write("\2\t\u0129\3\2\2\2\13\u012b\3\2\2\2\r\u012d\3\2\2\2\17") + buf.write("\u0130\3\2\2\2\21\u0132\3\2\2\2\23\u0134\3\2\2\2\25\u0137") + buf.write("\3\2\2\2\27\u0139\3\2\2\2\31\u013c\3\2\2\2\33\u0143\3") + buf.write("\2\2\2\35\u0145\3\2\2\2\37\u014a\3\2\2\2!\u014c\3\2\2") + buf.write("\2#\u014e\3\2\2\2%\u0150\3\2\2\2\'\u0159\3\2\2\2)\u0162") + buf.write("\3\2\2\2+\u016c\3\2\2\2-\u0174\3\2\2\2/\u0177\3\2\2\2") + buf.write("\61\u0179\3\2\2\2\63\u017b\3\2\2\2\65\u0181\3\2\2\2\67") + buf.write("\u0187\3\2\2\29\u018b\3\2\2\2;\u0192\3\2\2\2=\u019b\3") + buf.write("\2\2\2?\u01a4\3\2\2\2A\u01ac\3\2\2\2C\u01b2\3\2\2\2E\u01b7") + buf.write("\3\2\2\2G\u01b9\3\2\2\2I\u01bb\3\2\2\2K\u01c3\3\2\2\2") + buf.write("M\u01c5\3\2\2\2O\u01cd\3\2\2\2Q\u01d0\3\2\2\2S\u01d7\3") + buf.write("\2\2\2U\u01df\3\2\2\2W\u01e8\3\2\2\2Y\u01eb\3\2\2\2[\u01f0") + buf.write("\3\2\2\2]\u01f4\3\2\2\2_\u01fa\3\2\2\2a\u0200\3\2\2\2") + buf.write("c\u020a\3\2\2\2e\u0213\3\2\2\2g\u0216\3\2\2\2i\u021d\3") + buf.write("\2\2\2k\u0223\3\2\2\2m\u0228\3\2\2\2o\u022f\3\2\2\2q\u0233") + buf.write("\3\2\2\2s\u0238\3\2\2\2u\u023f\3\2\2\2w\u0244\3\2\2\2") + buf.write("y\u0247\3\2\2\2{\u024a\3\2\2\2}\u024e\3\2\2\2\177\u0250") + buf.write("\3\2\2\2\u0081\u0252\3\2\2\2\u0083\u0254\3\2\2\2\u0085") + buf.write("\u025a\3\2\2\2\u0087\u0261\3\2\2\2\u0089\u0263\3\2\2\2") + buf.write("\u008b\u0266\3\2\2\2\u008d\u0268\3\2\2\2\u008f\u026a\3") + buf.write("\2\2\2\u0091\u026d\3\2\2\2\u0093\u0270\3\2\2\2\u0095\u0272") + buf.write("\3\2\2\2\u0097\u0274\3\2\2\2\u0099\u0277\3\2\2\2\u009b") + buf.write("\u027a\3\2\2\2\u009d\u027d\3\2\2\2\u009f\u027f\3\2\2\2") + buf.write("\u00a1\u0282\3\2\2\2\u00a3\u0285\3\2\2\2\u00a5\u0288\3") + buf.write("\2\2\2\u00a7\u028c\3\2\2\2\u00a9\u0290\3\2\2\2\u00ab\u0293") + buf.write("\3\2\2\2\u00ad\u0296\3\2\2\2\u00af\u0299\3\2\2\2\u00b1") + buf.write("\u029c\3\2\2\2\u00b3\u029f\3\2\2\2\u00b5\u02a3\3\2\2\2") + buf.write("\u00b7\u02a6\3\2\2\2\u00b9\u02a9\3\2\2\2\u00bb\u02b0\3") + buf.write("\2\2\2\u00bd\u02b5\3\2\2\2\u00bf\u02bd\3\2\2\2\u00c1\u02c0") + buf.write("\3\2\2\2\u00c3\u02c9\3\2\2\2\u00c5\u0388\3\2\2\2\u00c7") + buf.write("\u0461\3\2\2\2\u00c9\u053f\3\2\2\2\u00cb\u0557\3\2\2\2") + buf.write("\u00cd\u0571\3\2\2\2\u00cf\u057c\3\2\2\2\u00d1\u0584\3") + buf.write("\2\2\2\u00d3\u058a\3\2\2\2\u00d5\u0594\3\2\2\2\u00d7\u0598") + buf.write("\3\2\2\2\u00d9\u05da\3\2\2\2\u00db\u05dc\3\2\2\2\u00dd") + buf.write("\u05ec\3\2\2\2\u00df\u05ef\3\2\2\2\u00e1\u0649\3\2\2\2") + buf.write("\u00e3\u064b\3\2\2\2\u00e5\u0655\3\2\2\2\u00e7\u065b\3") + buf.write("\2\2\2\u00e9\u0664\3\2\2\2\u00eb\u066e\3\2\2\2\u00ed\u0677") + buf.write("\3\2\2\2\u00ef\u067d\3\2\2\2\u00f1\u0686\3\2\2\2\u00f3") + buf.write("\u068e\3\2\2\2\u00f5\u0697\3\2\2\2\u00f7\u069f\3\2\2\2") + buf.write("\u00f9\u06a7\3\2\2\2\u00fb\u06ae\3\2\2\2\u00fd\u06b6\3") + buf.write("\2\2\2\u00ff\u06bb\3\2\2\2\u0101\u06c0\3\2\2\2\u0103\u06c5") + buf.write("\3\2\2\2\u0105\u06d1\3\2\2\2\u0107\u06da\3\2\2\2\u0109") + buf.write("\u06e2\3\2\2\2\u010b\u06e9\3\2\2\2\u010d\u06eb\3\2\2\2") + buf.write("\u010f\u070f\3\2\2\2\u0111\u0714\3\2\2\2\u0113\u0719\3") + buf.write("\2\2\2\u0115\u071c\3\2\2\2\u0117\u072f\3\2\2\2\u0119\u0735") + buf.write("\3\2\2\2\u011b\u0743\3\2\2\2\u011d\u011e\7r\2\2\u011e") + buf.write("\u011f\7t\2\2\u011f\u0120\7c\2\2\u0120\u0121\7i\2\2\u0121") + buf.write("\u0122\7o\2\2\u0122\u0123\7c\2\2\u0123\4\3\2\2\2\u0124") + buf.write("\u0125\7=\2\2\u0125\6\3\2\2\2\u0126\u0127\7~\2\2\u0127") + buf.write("\u0128\7~\2\2\u0128\b\3\2\2\2\u0129\u012a\7`\2\2\u012a") + buf.write("\n\3\2\2\2\u012b\u012c\7\u0080\2\2\u012c\f\3\2\2\2\u012d") + buf.write("\u012e\7@\2\2\u012e\u012f\7?\2\2\u012f\16\3\2\2\2\u0130") + buf.write("\u0131\7@\2\2\u0131\20\3\2\2\2\u0132\u0133\7>\2\2\u0133") + buf.write("\22\3\2\2\2\u0134\u0135\7>\2\2\u0135\u0136\7?\2\2\u0136") + buf.write("\24\3\2\2\2\u0137\u0138\7?\2\2\u0138\26\3\2\2\2\u0139") + buf.write("\u013a\7c\2\2\u013a\u013b\7u\2\2\u013b\30\3\2\2\2\u013c") + buf.write("\u013d\7k\2\2\u013d\u013e\7o\2\2\u013e\u013f\7r\2\2\u013f") + buf.write("\u0140\7q\2\2\u0140\u0141\7t\2\2\u0141\u0142\7v\2\2\u0142") + buf.write("\32\3\2\2\2\u0143\u0144\7,\2\2\u0144\34\3\2\2\2\u0145") + buf.write("\u0146\7h\2\2\u0146\u0147\7t\2\2\u0147\u0148\7q\2\2\u0148") + buf.write("\u0149\7o\2\2\u0149\36\3\2\2\2\u014a\u014b\7}\2\2\u014b") + buf.write(" \3\2\2\2\u014c\u014d\7.\2\2\u014d\"\3\2\2\2\u014e\u014f") + buf.write("\7\177\2\2\u014f$\3\2\2\2\u0150\u0151\7c\2\2\u0151\u0152") + buf.write("\7d\2\2\u0152\u0153\7u\2\2\u0153\u0154\7v\2\2\u0154\u0155") + buf.write("\7t\2\2\u0155\u0156\7c\2\2\u0156\u0157\7e\2\2\u0157\u0158") + buf.write("\7v\2\2\u0158&\3\2\2\2\u0159\u015a\7e\2\2\u015a\u015b") + buf.write("\7q\2\2\u015b\u015c\7p\2\2\u015c\u015d\7v\2\2\u015d\u015e") + buf.write("\7t\2\2\u015e\u015f\7c\2\2\u015f\u0160\7e\2\2\u0160\u0161") + buf.write("\7v\2\2\u0161(\3\2\2\2\u0162\u0163\7k\2\2\u0163\u0164") + buf.write("\7p\2\2\u0164\u0165\7v\2\2\u0165\u0166\7g\2\2\u0166\u0167") + buf.write("\7t\2\2\u0167\u0168\7h\2\2\u0168\u0169\7c\2\2\u0169\u016a") + buf.write("\7e\2\2\u016a\u016b\7g\2\2\u016b*\3\2\2\2\u016c\u016d") + buf.write("\7n\2\2\u016d\u016e\7k\2\2\u016e\u016f\7d\2\2\u016f\u0170") + buf.write("\7t\2\2\u0170\u0171\7c\2\2\u0171\u0172\7t\2\2\u0172\u0173") + buf.write("\7{\2\2\u0173,\3\2\2\2\u0174\u0175\7k\2\2\u0175\u0176") + buf.write("\7u\2\2\u0176.\3\2\2\2\u0177\u0178\7*\2\2\u0178\60\3\2") + buf.write("\2\2\u0179\u017a\7+\2\2\u017a\62\3\2\2\2\u017b\u017c\7") + buf.write("g\2\2\u017c\u017d\7t\2\2\u017d\u017e\7t\2\2\u017e\u017f") + buf.write("\7q\2\2\u017f\u0180\7t\2\2\u0180\64\3\2\2\2\u0181\u0182") + buf.write("\7w\2\2\u0182\u0183\7u\2\2\u0183\u0184\7k\2\2\u0184\u0185") + buf.write("\7p\2\2\u0185\u0186\7i\2\2\u0186\66\3\2\2\2\u0187\u0188") + buf.write("\7h\2\2\u0188\u0189\7q\2\2\u0189\u018a\7t\2\2\u018a8\3") + buf.write("\2\2\2\u018b\u018c\7u\2\2\u018c\u018d\7v\2\2\u018d\u018e") + buf.write("\7t\2\2\u018e\u018f\7w\2\2\u018f\u0190\7e\2\2\u0190\u0191") + buf.write("\7v\2\2\u0191:\3\2\2\2\u0192\u0193\7o\2\2\u0193\u0194") + buf.write("\7q\2\2\u0194\u0195\7f\2\2\u0195\u0196\7k\2\2\u0196\u0197") + buf.write("\7h\2\2\u0197\u0198\7k\2\2\u0198\u0199\7g\2\2\u0199\u019a") + buf.write("\7t\2\2\u019a<\3\2\2\2\u019b\u019c\7h\2\2\u019c\u019d") + buf.write("\7w\2\2\u019d\u019e\7p\2\2\u019e\u019f\7e\2\2\u019f\u01a0") + buf.write("\7v\2\2\u01a0\u01a1\7k\2\2\u01a1\u01a2\7q\2\2\u01a2\u01a3") + buf.write("\7p\2\2\u01a3>\3\2\2\2\u01a4\u01a5\7t\2\2\u01a5\u01a6") + buf.write("\7g\2\2\u01a6\u01a7\7v\2\2\u01a7\u01a8\7w\2\2\u01a8\u01a9") + buf.write("\7t\2\2\u01a9\u01aa\7p\2\2\u01aa\u01ab\7u\2\2\u01ab@\3") + buf.write("\2\2\2\u01ac\u01ad\7g\2\2\u01ad\u01ae\7x\2\2\u01ae\u01af") + buf.write("\7g\2\2\u01af\u01b0\7p\2\2\u01b0\u01b1\7v\2\2\u01b1B\3") + buf.write("\2\2\2\u01b2\u01b3\7g\2\2\u01b3\u01b4\7p\2\2\u01b4\u01b5") + buf.write("\7w\2\2\u01b5\u01b6\7o\2\2\u01b6D\3\2\2\2\u01b7\u01b8") + buf.write("\7]\2\2\u01b8F\3\2\2\2\u01b9\u01ba\7_\2\2\u01baH\3\2\2") + buf.write("\2\u01bb\u01bc\7c\2\2\u01bc\u01bd\7f\2\2\u01bd\u01be\7") + buf.write("f\2\2\u01be\u01bf\7t\2\2\u01bf\u01c0\7g\2\2\u01c0\u01c1") + buf.write("\7u\2\2\u01c1\u01c2\7u\2\2\u01c2J\3\2\2\2\u01c3\u01c4") + buf.write("\7\60\2\2\u01c4L\3\2\2\2\u01c5\u01c6\7o\2\2\u01c6\u01c7") + buf.write("\7c\2\2\u01c7\u01c8\7r\2\2\u01c8\u01c9\7r\2\2\u01c9\u01ca") + buf.write("\7k\2\2\u01ca\u01cb\7p\2\2\u01cb\u01cc\7i\2\2\u01ccN\3") + buf.write("\2\2\2\u01cd\u01ce\7?\2\2\u01ce\u01cf\7@\2\2\u01cfP\3") + buf.write("\2\2\2\u01d0\u01d1\7o\2\2\u01d1\u01d2\7g\2\2\u01d2\u01d3") + buf.write("\7o\2\2\u01d3\u01d4\7q\2\2\u01d4\u01d5\7t\2\2\u01d5\u01d6") + buf.write("\7{\2\2\u01d6R\3\2\2\2\u01d7\u01d8\7u\2\2\u01d8\u01d9") + buf.write("\7v\2\2\u01d9\u01da\7q\2\2\u01da\u01db\7t\2\2\u01db\u01dc") + buf.write("\7c\2\2\u01dc\u01dd\7i\2\2\u01dd\u01de\7g\2\2\u01deT\3") + buf.write("\2\2\2\u01df\u01e0\7e\2\2\u01e0\u01e1\7c\2\2\u01e1\u01e2") + buf.write("\7n\2\2\u01e2\u01e3\7n\2\2\u01e3\u01e4\7f\2\2\u01e4\u01e5") + buf.write("\7c\2\2\u01e5\u01e6\7v\2\2\u01e6\u01e7\7c\2\2\u01e7V\3") + buf.write("\2\2\2\u01e8\u01e9\7k\2\2\u01e9\u01ea\7h\2\2\u01eaX\3") + buf.write("\2\2\2\u01eb\u01ec\7g\2\2\u01ec\u01ed\7n\2\2\u01ed\u01ee") + buf.write("\7u\2\2\u01ee\u01ef\7g\2\2\u01efZ\3\2\2\2\u01f0\u01f1") + buf.write("\7v\2\2\u01f1\u01f2\7t\2\2\u01f2\u01f3\7{\2\2\u01f3\\") + buf.write("\3\2\2\2\u01f4\u01f5\7e\2\2\u01f5\u01f6\7c\2\2\u01f6\u01f7") + buf.write("\7v\2\2\u01f7\u01f8\7e\2\2\u01f8\u01f9\7j\2\2\u01f9^\3") + buf.write("\2\2\2\u01fa\u01fb\7y\2\2\u01fb\u01fc\7j\2\2\u01fc\u01fd") + buf.write("\7k\2\2\u01fd\u01fe\7n\2\2\u01fe\u01ff\7g\2\2\u01ff`\3") + buf.write("\2\2\2\u0200\u0201\7w\2\2\u0201\u0202\7p\2\2\u0202\u0203") + buf.write("\7e\2\2\u0203\u0204\7j\2\2\u0204\u0205\7g\2\2\u0205\u0206") + buf.write("\7e\2\2\u0206\u0207\7m\2\2\u0207\u0208\7g\2\2\u0208\u0209") + buf.write("\7f\2\2\u0209b\3\2\2\2\u020a\u020b\7c\2\2\u020b\u020c") + buf.write("\7u\2\2\u020c\u020d\7u\2\2\u020d\u020e\7g\2\2\u020e\u020f") + buf.write("\7o\2\2\u020f\u0210\7d\2\2\u0210\u0211\7n\2\2\u0211\u0212") + buf.write("\7{\2\2\u0212d\3\2\2\2\u0213\u0214\7f\2\2\u0214\u0215") + buf.write("\7q\2\2\u0215f\3\2\2\2\u0216\u0217\7t\2\2\u0217\u0218") + buf.write("\7g\2\2\u0218\u0219\7v\2\2\u0219\u021a\7w\2\2\u021a\u021b") + buf.write("\7t\2\2\u021b\u021c\7p\2\2\u021ch\3\2\2\2\u021d\u021e") + buf.write("\7v\2\2\u021e\u021f\7j\2\2\u021f\u0220\7t\2\2\u0220\u0221") + buf.write("\7q\2\2\u0221\u0222\7y\2\2\u0222j\3\2\2\2\u0223\u0224") + buf.write("\7g\2\2\u0224\u0225\7o\2\2\u0225\u0226\7k\2\2\u0226\u0227") + buf.write("\7v\2\2\u0227l\3\2\2\2\u0228\u0229\7t\2\2\u0229\u022a") + buf.write("\7g\2\2\u022a\u022b\7x\2\2\u022b\u022c\7g\2\2\u022c\u022d") + buf.write("\7t\2\2\u022d\u022e\7v\2\2\u022en\3\2\2\2\u022f\u0230") + buf.write("\7x\2\2\u0230\u0231\7c\2\2\u0231\u0232\7t\2\2\u0232p\3") + buf.write("\2\2\2\u0233\u0234\7d\2\2\u0234\u0235\7q\2\2\u0235\u0236") + buf.write("\7q\2\2\u0236\u0237\7n\2\2\u0237r\3\2\2\2\u0238\u0239") + buf.write("\7u\2\2\u0239\u023a\7v\2\2\u023a\u023b\7t\2\2\u023b\u023c") + buf.write("\7k\2\2\u023c\u023d\7p\2\2\u023d\u023e\7i\2\2\u023et\3") + buf.write("\2\2\2\u023f\u0240\7d\2\2\u0240\u0241\7{\2\2\u0241\u0242") + buf.write("\7v\2\2\u0242\u0243\7g\2\2\u0243v\3\2\2\2\u0244\u0245") + buf.write("\7-\2\2\u0245\u0246\7-\2\2\u0246x\3\2\2\2\u0247\u0248") + buf.write("\7/\2\2\u0248\u0249\7/\2\2\u0249z\3\2\2\2\u024a\u024b") + buf.write("\7p\2\2\u024b\u024c\7g\2\2\u024c\u024d\7y\2\2\u024d|\3") + buf.write("\2\2\2\u024e\u024f\7<\2\2\u024f~\3\2\2\2\u0250\u0251\7") + buf.write("-\2\2\u0251\u0080\3\2\2\2\u0252\u0253\7/\2\2\u0253\u0082") + buf.write("\3\2\2\2\u0254\u0255\7c\2\2\u0255\u0256\7h\2\2\u0256\u0257") + buf.write("\7v\2\2\u0257\u0258\7g\2\2\u0258\u0259\7t\2\2\u0259\u0084") + buf.write("\3\2\2\2\u025a\u025b\7f\2\2\u025b\u025c\7g\2\2\u025c\u025d") + buf.write("\7n\2\2\u025d\u025e\7g\2\2\u025e\u025f\7v\2\2\u025f\u0260") + buf.write("\7g\2\2\u0260\u0086\3\2\2\2\u0261\u0262\7#\2\2\u0262\u0088") + buf.write("\3\2\2\2\u0263\u0264\7,\2\2\u0264\u0265\7,\2\2\u0265\u008a") + buf.write("\3\2\2\2\u0266\u0267\7\61\2\2\u0267\u008c\3\2\2\2\u0268") + buf.write("\u0269\7\'\2\2\u0269\u008e\3\2\2\2\u026a\u026b\7>\2\2") + buf.write("\u026b\u026c\7>\2\2\u026c\u0090\3\2\2\2\u026d\u026e\7") + buf.write("@\2\2\u026e\u026f\7@\2\2\u026f\u0092\3\2\2\2\u0270\u0271") + buf.write("\7(\2\2\u0271\u0094\3\2\2\2\u0272\u0273\7~\2\2\u0273\u0096") + buf.write("\3\2\2\2\u0274\u0275\7?\2\2\u0275\u0276\7?\2\2\u0276\u0098") + buf.write("\3\2\2\2\u0277\u0278\7#\2\2\u0278\u0279\7?\2\2\u0279\u009a") + buf.write("\3\2\2\2\u027a\u027b\7(\2\2\u027b\u027c\7(\2\2\u027c\u009c") + buf.write("\3\2\2\2\u027d\u027e\7A\2\2\u027e\u009e\3\2\2\2\u027f") + buf.write("\u0280\7~\2\2\u0280\u0281\7?\2\2\u0281\u00a0\3\2\2\2\u0282") + buf.write("\u0283\7`\2\2\u0283\u0284\7?\2\2\u0284\u00a2\3\2\2\2\u0285") + buf.write("\u0286\7(\2\2\u0286\u0287\7?\2\2\u0287\u00a4\3\2\2\2\u0288") + buf.write("\u0289\7>\2\2\u0289\u028a\7>\2\2\u028a\u028b\7?\2\2\u028b") + buf.write("\u00a6\3\2\2\2\u028c\u028d\7@\2\2\u028d\u028e\7@\2\2\u028e") + buf.write("\u028f\7?\2\2\u028f\u00a8\3\2\2\2\u0290\u0291\7-\2\2\u0291") + buf.write("\u0292\7?\2\2\u0292\u00aa\3\2\2\2\u0293\u0294\7/\2\2\u0294") + buf.write("\u0295\7?\2\2\u0295\u00ac\3\2\2\2\u0296\u0297\7,\2\2\u0297") + buf.write("\u0298\7?\2\2\u0298\u00ae\3\2\2\2\u0299\u029a\7\61\2\2") + buf.write("\u029a\u029b\7?\2\2\u029b\u00b0\3\2\2\2\u029c\u029d\7") + buf.write("\'\2\2\u029d\u029e\7?\2\2\u029e\u00b2\3\2\2\2\u029f\u02a0") + buf.write("\7n\2\2\u02a0\u02a1\7g\2\2\u02a1\u02a2\7v\2\2\u02a2\u00b4") + buf.write("\3\2\2\2\u02a3\u02a4\7<\2\2\u02a4\u02a5\7?\2\2\u02a5\u00b6") + buf.write("\3\2\2\2\u02a6\u02a7\7?\2\2\u02a7\u02a8\7<\2\2\u02a8\u00b8") + buf.write("\3\2\2\2\u02a9\u02aa\7u\2\2\u02aa\u02ab\7y\2\2\u02ab\u02ac") + buf.write("\7k\2\2\u02ac\u02ad\7v\2\2\u02ad\u02ae\7e\2\2\u02ae\u02af") + buf.write("\7j\2\2\u02af\u00ba\3\2\2\2\u02b0\u02b1\7e\2\2\u02b1\u02b2") + buf.write("\7c\2\2\u02b2\u02b3\7u\2\2\u02b3\u02b4\7g\2\2\u02b4\u00bc") + buf.write("\3\2\2\2\u02b5\u02b6\7f\2\2\u02b6\u02b7\7g\2\2\u02b7\u02b8") + buf.write("\7h\2\2\u02b8\u02b9\7c\2\2\u02b9\u02ba\7w\2\2\u02ba\u02bb") + buf.write("\7n\2\2\u02bb\u02bc\7v\2\2\u02bc\u00be\3\2\2\2\u02bd\u02be") + buf.write("\7/\2\2\u02be\u02bf\7@\2\2\u02bf\u00c0\3\2\2\2\u02c0\u02c1") + buf.write("\7e\2\2\u02c1\u02c2\7c\2\2\u02c2\u02c3\7n\2\2\u02c3\u02c4") + buf.write("\7n\2\2\u02c4\u02c5\7d\2\2\u02c5\u02c6\7c\2\2\u02c6\u02c7") + buf.write("\7e\2\2\u02c7\u02c8\7m\2\2\u02c8\u00c2\3\2\2\2\u02c9\u02ca") + buf.write("\7q\2\2\u02ca\u02cb\7x\2\2\u02cb\u02cc\7g\2\2\u02cc\u02cd") + buf.write("\7t\2\2\u02cd\u02ce\7t\2\2\u02ce\u02cf\7k\2\2\u02cf\u02d0") + buf.write("\7f\2\2\u02d0\u02d1\7g\2\2\u02d1\u00c4\3\2\2\2\u02d2\u02d3") + buf.write("\7k\2\2\u02d3\u02d4\7p\2\2\u02d4\u0389\7v\2\2\u02d5\u02d6") + buf.write("\7k\2\2\u02d6\u02d7\7p\2\2\u02d7\u02d8\7v\2\2\u02d8\u0389") + buf.write("\7:\2\2\u02d9\u02da\7k\2\2\u02da\u02db\7p\2\2\u02db\u02dc") + buf.write("\7v\2\2\u02dc\u02dd\7\63\2\2\u02dd\u0389\78\2\2\u02de") + buf.write("\u02df\7k\2\2\u02df\u02e0\7p\2\2\u02e0\u02e1\7v\2\2\u02e1") + buf.write("\u02e2\7\64\2\2\u02e2\u0389\7\66\2\2\u02e3\u02e4\7k\2") + buf.write("\2\u02e4\u02e5\7p\2\2\u02e5\u02e6\7v\2\2\u02e6\u02e7\7") + buf.write("\65\2\2\u02e7\u0389\7\64\2\2\u02e8\u02e9\7k\2\2\u02e9") + buf.write("\u02ea\7p\2\2\u02ea\u02eb\7v\2\2\u02eb\u02ec\7\66\2\2") + buf.write("\u02ec\u0389\7\62\2\2\u02ed\u02ee\7k\2\2\u02ee\u02ef\7") + buf.write("p\2\2\u02ef\u02f0\7v\2\2\u02f0\u02f1\7\66\2\2\u02f1\u0389") + buf.write("\7:\2\2\u02f2\u02f3\7k\2\2\u02f3\u02f4\7p\2\2\u02f4\u02f5") + buf.write("\7v\2\2\u02f5\u02f6\7\67\2\2\u02f6\u0389\78\2\2\u02f7") + buf.write("\u02f8\7k\2\2\u02f8\u02f9\7p\2\2\u02f9\u02fa\7v\2\2\u02fa") + buf.write("\u02fb\78\2\2\u02fb\u0389\7\66\2\2\u02fc\u02fd\7k\2\2") + buf.write("\u02fd\u02fe\7p\2\2\u02fe\u02ff\7v\2\2\u02ff\u0300\79") + buf.write("\2\2\u0300\u0389\7\64\2\2\u0301\u0302\7k\2\2\u0302\u0303") + buf.write("\7p\2\2\u0303\u0304\7v\2\2\u0304\u0305\7:\2\2\u0305\u0389") + buf.write("\7\62\2\2\u0306\u0307\7k\2\2\u0307\u0308\7p\2\2\u0308") + buf.write("\u0309\7v\2\2\u0309\u030a\7:\2\2\u030a\u0389\7:\2\2\u030b") + buf.write("\u030c\7k\2\2\u030c\u030d\7p\2\2\u030d\u030e\7v\2\2\u030e") + buf.write("\u030f\7;\2\2\u030f\u0389\78\2\2\u0310\u0311\7k\2\2\u0311") + buf.write("\u0312\7p\2\2\u0312\u0313\7v\2\2\u0313\u0314\7\63\2\2") + buf.write("\u0314\u0315\7\62\2\2\u0315\u0389\7\66\2\2\u0316\u0317") + buf.write("\7k\2\2\u0317\u0318\7p\2\2\u0318\u0319\7v\2\2\u0319\u031a") + buf.write("\7\63\2\2\u031a\u031b\7\63\2\2\u031b\u0389\7\64\2\2\u031c") + buf.write("\u031d\7k\2\2\u031d\u031e\7p\2\2\u031e\u031f\7v\2\2\u031f") + buf.write("\u0320\7\63\2\2\u0320\u0321\7\64\2\2\u0321\u0389\7\62") + buf.write("\2\2\u0322\u0323\7k\2\2\u0323\u0324\7p\2\2\u0324\u0325") + buf.write("\7v\2\2\u0325\u0326\7\63\2\2\u0326\u0327\7\64\2\2\u0327") + buf.write("\u0389\7:\2\2\u0328\u0329\7k\2\2\u0329\u032a\7p\2\2\u032a") + buf.write("\u032b\7v\2\2\u032b\u032c\7\63\2\2\u032c\u032d\7\65\2") + buf.write("\2\u032d\u0389\78\2\2\u032e\u032f\7k\2\2\u032f\u0330\7") + buf.write("p\2\2\u0330\u0331\7v\2\2\u0331\u0332\7\63\2\2\u0332\u0333") + buf.write("\7\66\2\2\u0333\u0389\7\66\2\2\u0334\u0335\7k\2\2\u0335") + buf.write("\u0336\7p\2\2\u0336\u0337\7v\2\2\u0337\u0338\7\63\2\2") + buf.write("\u0338\u0339\7\67\2\2\u0339\u0389\7\64\2\2\u033a\u033b") + buf.write("\7k\2\2\u033b\u033c\7p\2\2\u033c\u033d\7v\2\2\u033d\u033e") + buf.write("\7\63\2\2\u033e\u033f\78\2\2\u033f\u0389\7\62\2\2\u0340") + buf.write("\u0341\7k\2\2\u0341\u0342\7p\2\2\u0342\u0343\7v\2\2\u0343") + buf.write("\u0344\7\63\2\2\u0344\u0345\78\2\2\u0345\u0389\7:\2\2") + buf.write("\u0346\u0347\7k\2\2\u0347\u0348\7p\2\2\u0348\u0349\7v") + buf.write("\2\2\u0349\u034a\7\63\2\2\u034a\u034b\79\2\2\u034b\u0389") + buf.write("\78\2\2\u034c\u034d\7k\2\2\u034d\u034e\7p\2\2\u034e\u034f") + buf.write("\7v\2\2\u034f\u0350\7\63\2\2\u0350\u0351\7:\2\2\u0351") + buf.write("\u0389\7\66\2\2\u0352\u0353\7k\2\2\u0353\u0354\7p\2\2") + buf.write("\u0354\u0355\7v\2\2\u0355\u0356\7\63\2\2\u0356\u0357\7") + buf.write(";\2\2\u0357\u0389\7\64\2\2\u0358\u0359\7k\2\2\u0359\u035a") + buf.write("\7p\2\2\u035a\u035b\7v\2\2\u035b\u035c\7\64\2\2\u035c") + buf.write("\u035d\7\62\2\2\u035d\u0389\7\62\2\2\u035e\u035f\7k\2") + buf.write("\2\u035f\u0360\7p\2\2\u0360\u0361\7v\2\2\u0361\u0362\7") + buf.write("\64\2\2\u0362\u0363\7\62\2\2\u0363\u0389\7:\2\2\u0364") + buf.write("\u0365\7k\2\2\u0365\u0366\7p\2\2\u0366\u0367\7v\2\2\u0367") + buf.write("\u0368\7\64\2\2\u0368\u0369\7\63\2\2\u0369\u0389\78\2") + buf.write("\2\u036a\u036b\7k\2\2\u036b\u036c\7p\2\2\u036c\u036d\7") + buf.write("v\2\2\u036d\u036e\7\64\2\2\u036e\u036f\7\64\2\2\u036f") + buf.write("\u0389\7\66\2\2\u0370\u0371\7k\2\2\u0371\u0372\7p\2\2") + buf.write("\u0372\u0373\7v\2\2\u0373\u0374\7\64\2\2\u0374\u0375\7") + buf.write("\65\2\2\u0375\u0389\7\64\2\2\u0376\u0377\7k\2\2\u0377") + buf.write("\u0378\7p\2\2\u0378\u0379\7v\2\2\u0379\u037a\7\64\2\2") + buf.write("\u037a\u037b\7\66\2\2\u037b\u0389\7\62\2\2\u037c\u037d") + buf.write("\7k\2\2\u037d\u037e\7p\2\2\u037e\u037f\7v\2\2\u037f\u0380") + buf.write("\7\64\2\2\u0380\u0381\7\66\2\2\u0381\u0389\7:\2\2\u0382") + buf.write("\u0383\7k\2\2\u0383\u0384\7p\2\2\u0384\u0385\7v\2\2\u0385") + buf.write("\u0386\7\64\2\2\u0386\u0387\7\67\2\2\u0387\u0389\78\2") + buf.write("\2\u0388\u02d2\3\2\2\2\u0388\u02d5\3\2\2\2\u0388\u02d9") + buf.write("\3\2\2\2\u0388\u02de\3\2\2\2\u0388\u02e3\3\2\2\2\u0388") + buf.write("\u02e8\3\2\2\2\u0388\u02ed\3\2\2\2\u0388\u02f2\3\2\2\2") + buf.write("\u0388\u02f7\3\2\2\2\u0388\u02fc\3\2\2\2\u0388\u0301\3") + buf.write("\2\2\2\u0388\u0306\3\2\2\2\u0388\u030b\3\2\2\2\u0388\u0310") + buf.write("\3\2\2\2\u0388\u0316\3\2\2\2\u0388\u031c\3\2\2\2\u0388") + buf.write("\u0322\3\2\2\2\u0388\u0328\3\2\2\2\u0388\u032e\3\2\2\2") + buf.write("\u0388\u0334\3\2\2\2\u0388\u033a\3\2\2\2\u0388\u0340\3") + buf.write("\2\2\2\u0388\u0346\3\2\2\2\u0388\u034c\3\2\2\2\u0388\u0352") + buf.write("\3\2\2\2\u0388\u0358\3\2\2\2\u0388\u035e\3\2\2\2\u0388") + buf.write("\u0364\3\2\2\2\u0388\u036a\3\2\2\2\u0388\u0370\3\2\2\2") + buf.write("\u0388\u0376\3\2\2\2\u0388\u037c\3\2\2\2\u0388\u0382\3") + buf.write("\2\2\2\u0389\u00c6\3\2\2\2\u038a\u038b\7w\2\2\u038b\u038c") + buf.write("\7k\2\2\u038c\u038d\7p\2\2\u038d\u0462\7v\2\2\u038e\u038f") + buf.write("\7w\2\2\u038f\u0390\7k\2\2\u0390\u0391\7p\2\2\u0391\u0392") + buf.write("\7v\2\2\u0392\u0462\7:\2\2\u0393\u0394\7w\2\2\u0394\u0395") + buf.write("\7k\2\2\u0395\u0396\7p\2\2\u0396\u0397\7v\2\2\u0397\u0398") + buf.write("\7\63\2\2\u0398\u0462\78\2\2\u0399\u039a\7w\2\2\u039a") + buf.write("\u039b\7k\2\2\u039b\u039c\7p\2\2\u039c\u039d\7v\2\2\u039d") + buf.write("\u039e\7\64\2\2\u039e\u0462\7\66\2\2\u039f\u03a0\7w\2") + buf.write("\2\u03a0\u03a1\7k\2\2\u03a1\u03a2\7p\2\2\u03a2\u03a3\7") + buf.write("v\2\2\u03a3\u03a4\7\65\2\2\u03a4\u0462\7\64\2\2\u03a5") + buf.write("\u03a6\7w\2\2\u03a6\u03a7\7k\2\2\u03a7\u03a8\7p\2\2\u03a8") + buf.write("\u03a9\7v\2\2\u03a9\u03aa\7\66\2\2\u03aa\u0462\7\62\2") + buf.write("\2\u03ab\u03ac\7w\2\2\u03ac\u03ad\7k\2\2\u03ad\u03ae\7") + buf.write("p\2\2\u03ae\u03af\7v\2\2\u03af\u03b0\7\66\2\2\u03b0\u0462") + buf.write("\7:\2\2\u03b1\u03b2\7w\2\2\u03b2\u03b3\7k\2\2\u03b3\u03b4") + buf.write("\7p\2\2\u03b4\u03b5\7v\2\2\u03b5\u03b6\7\67\2\2\u03b6") + buf.write("\u0462\78\2\2\u03b7\u03b8\7w\2\2\u03b8\u03b9\7k\2\2\u03b9") + buf.write("\u03ba\7p\2\2\u03ba\u03bb\7v\2\2\u03bb\u03bc\78\2\2\u03bc") + buf.write("\u0462\7\66\2\2\u03bd\u03be\7w\2\2\u03be\u03bf\7k\2\2") + buf.write("\u03bf\u03c0\7p\2\2\u03c0\u03c1\7v\2\2\u03c1\u03c2\79") + buf.write("\2\2\u03c2\u0462\7\64\2\2\u03c3\u03c4\7w\2\2\u03c4\u03c5") + buf.write("\7k\2\2\u03c5\u03c6\7p\2\2\u03c6\u03c7\7v\2\2\u03c7\u03c8") + buf.write("\7:\2\2\u03c8\u0462\7\62\2\2\u03c9\u03ca\7w\2\2\u03ca") + buf.write("\u03cb\7k\2\2\u03cb\u03cc\7p\2\2\u03cc\u03cd\7v\2\2\u03cd") + buf.write("\u03ce\7:\2\2\u03ce\u0462\7:\2\2\u03cf\u03d0\7w\2\2\u03d0") + buf.write("\u03d1\7k\2\2\u03d1\u03d2\7p\2\2\u03d2\u03d3\7v\2\2\u03d3") + buf.write("\u03d4\7;\2\2\u03d4\u0462\78\2\2\u03d5\u03d6\7w\2\2\u03d6") + buf.write("\u03d7\7k\2\2\u03d7\u03d8\7p\2\2\u03d8\u03d9\7v\2\2\u03d9") + buf.write("\u03da\7\63\2\2\u03da\u03db\7\62\2\2\u03db\u0462\7\66") + buf.write("\2\2\u03dc\u03dd\7w\2\2\u03dd\u03de\7k\2\2\u03de\u03df") + buf.write("\7p\2\2\u03df\u03e0\7v\2\2\u03e0\u03e1\7\63\2\2\u03e1") + buf.write("\u03e2\7\63\2\2\u03e2\u0462\7\64\2\2\u03e3\u03e4\7w\2") + buf.write("\2\u03e4\u03e5\7k\2\2\u03e5\u03e6\7p\2\2\u03e6\u03e7\7") + buf.write("v\2\2\u03e7\u03e8\7\63\2\2\u03e8\u03e9\7\64\2\2\u03e9") + buf.write("\u0462\7\62\2\2\u03ea\u03eb\7w\2\2\u03eb\u03ec\7k\2\2") + buf.write("\u03ec\u03ed\7p\2\2\u03ed\u03ee\7v\2\2\u03ee\u03ef\7\63") + buf.write("\2\2\u03ef\u03f0\7\64\2\2\u03f0\u0462\7:\2\2\u03f1\u03f2") + buf.write("\7w\2\2\u03f2\u03f3\7k\2\2\u03f3\u03f4\7p\2\2\u03f4\u03f5") + buf.write("\7v\2\2\u03f5\u03f6\7\63\2\2\u03f6\u03f7\7\65\2\2\u03f7") + buf.write("\u0462\78\2\2\u03f8\u03f9\7w\2\2\u03f9\u03fa\7k\2\2\u03fa") + buf.write("\u03fb\7p\2\2\u03fb\u03fc\7v\2\2\u03fc\u03fd\7\63\2\2") + buf.write("\u03fd\u03fe\7\66\2\2\u03fe\u0462\7\66\2\2\u03ff\u0400") + buf.write("\7w\2\2\u0400\u0401\7k\2\2\u0401\u0402\7p\2\2\u0402\u0403") + buf.write("\7v\2\2\u0403\u0404\7\63\2\2\u0404\u0405\7\67\2\2\u0405") + buf.write("\u0462\7\64\2\2\u0406\u0407\7w\2\2\u0407\u0408\7k\2\2") + buf.write("\u0408\u0409\7p\2\2\u0409\u040a\7v\2\2\u040a\u040b\7\63") + buf.write("\2\2\u040b\u040c\78\2\2\u040c\u0462\7\62\2\2\u040d\u040e") + buf.write("\7w\2\2\u040e\u040f\7k\2\2\u040f\u0410\7p\2\2\u0410\u0411") + buf.write("\7v\2\2\u0411\u0412\7\63\2\2\u0412\u0413\78\2\2\u0413") + buf.write("\u0462\7:\2\2\u0414\u0415\7w\2\2\u0415\u0416\7k\2\2\u0416") + buf.write("\u0417\7p\2\2\u0417\u0418\7v\2\2\u0418\u0419\7\63\2\2") + buf.write("\u0419\u041a\79\2\2\u041a\u0462\78\2\2\u041b\u041c\7w") + buf.write("\2\2\u041c\u041d\7k\2\2\u041d\u041e\7p\2\2\u041e\u041f") + buf.write("\7v\2\2\u041f\u0420\7\63\2\2\u0420\u0421\7:\2\2\u0421") + buf.write("\u0462\7\66\2\2\u0422\u0423\7w\2\2\u0423\u0424\7k\2\2") + buf.write("\u0424\u0425\7p\2\2\u0425\u0426\7v\2\2\u0426\u0427\7\63") + buf.write("\2\2\u0427\u0428\7;\2\2\u0428\u0462\7\64\2\2\u0429\u042a") + buf.write("\7w\2\2\u042a\u042b\7k\2\2\u042b\u042c\7p\2\2\u042c\u042d") + buf.write("\7v\2\2\u042d\u042e\7\64\2\2\u042e\u042f\7\62\2\2\u042f") + buf.write("\u0462\7\62\2\2\u0430\u0431\7w\2\2\u0431\u0432\7k\2\2") + buf.write("\u0432\u0433\7p\2\2\u0433\u0434\7v\2\2\u0434\u0435\7\64") + buf.write("\2\2\u0435\u0436\7\62\2\2\u0436\u0462\7:\2\2\u0437\u0438") + buf.write("\7w\2\2\u0438\u0439\7k\2\2\u0439\u043a\7p\2\2\u043a\u043b") + buf.write("\7v\2\2\u043b\u043c\7\64\2\2\u043c\u043d\7\63\2\2\u043d") + buf.write("\u0462\78\2\2\u043e\u043f\7w\2\2\u043f\u0440\7k\2\2\u0440") + buf.write("\u0441\7p\2\2\u0441\u0442\7v\2\2\u0442\u0443\7\64\2\2") + buf.write("\u0443\u0444\7\64\2\2\u0444\u0462\7\66\2\2\u0445\u0446") + buf.write("\7w\2\2\u0446\u0447\7k\2\2\u0447\u0448\7p\2\2\u0448\u0449") + buf.write("\7v\2\2\u0449\u044a\7\64\2\2\u044a\u044b\7\65\2\2\u044b") + buf.write("\u0462\7\64\2\2\u044c\u044d\7w\2\2\u044d\u044e\7k\2\2") + buf.write("\u044e\u044f\7p\2\2\u044f\u0450\7v\2\2\u0450\u0451\7\64") + buf.write("\2\2\u0451\u0452\7\66\2\2\u0452\u0462\7\62\2\2\u0453\u0454") + buf.write("\7w\2\2\u0454\u0455\7k\2\2\u0455\u0456\7p\2\2\u0456\u0457") + buf.write("\7v\2\2\u0457\u0458\7\64\2\2\u0458\u0459\7\66\2\2\u0459") + buf.write("\u0462\7:\2\2\u045a\u045b\7w\2\2\u045b\u045c\7k\2\2\u045c") + buf.write("\u045d\7p\2\2\u045d\u045e\7v\2\2\u045e\u045f\7\64\2\2") + buf.write("\u045f\u0460\7\67\2\2\u0460\u0462\78\2\2\u0461\u038a\3") + buf.write("\2\2\2\u0461\u038e\3\2\2\2\u0461\u0393\3\2\2\2\u0461\u0399") + buf.write("\3\2\2\2\u0461\u039f\3\2\2\2\u0461\u03a5\3\2\2\2\u0461") + buf.write("\u03ab\3\2\2\2\u0461\u03b1\3\2\2\2\u0461\u03b7\3\2\2\2") + buf.write("\u0461\u03bd\3\2\2\2\u0461\u03c3\3\2\2\2\u0461\u03c9\3") + buf.write("\2\2\2\u0461\u03cf\3\2\2\2\u0461\u03d5\3\2\2\2\u0461\u03dc") + buf.write("\3\2\2\2\u0461\u03e3\3\2\2\2\u0461\u03ea\3\2\2\2\u0461") + buf.write("\u03f1\3\2\2\2\u0461\u03f8\3\2\2\2\u0461\u03ff\3\2\2\2") + buf.write("\u0461\u0406\3\2\2\2\u0461\u040d\3\2\2\2\u0461\u0414\3") + buf.write("\2\2\2\u0461\u041b\3\2\2\2\u0461\u0422\3\2\2\2\u0461\u0429") + buf.write("\3\2\2\2\u0461\u0430\3\2\2\2\u0461\u0437\3\2\2\2\u0461") + buf.write("\u043e\3\2\2\2\u0461\u0445\3\2\2\2\u0461\u044c\3\2\2\2") + buf.write("\u0461\u0453\3\2\2\2\u0461\u045a\3\2\2\2\u0462\u00c8\3") + buf.write("\2\2\2\u0463\u0464\7d\2\2\u0464\u0465\7{\2\2\u0465\u0466") + buf.write("\7v\2\2\u0466\u0467\7g\2\2\u0467\u0540\7u\2\2\u0468\u0469") + buf.write("\7d\2\2\u0469\u046a\7{\2\2\u046a\u046b\7v\2\2\u046b\u046c") + buf.write("\7g\2\2\u046c\u046d\7u\2\2\u046d\u0540\7\63\2\2\u046e") + buf.write("\u046f\7d\2\2\u046f\u0470\7{\2\2\u0470\u0471\7v\2\2\u0471") + buf.write("\u0472\7g\2\2\u0472\u0473\7u\2\2\u0473\u0540\7\64\2\2") + buf.write("\u0474\u0475\7d\2\2\u0475\u0476\7{\2\2\u0476\u0477\7v") + buf.write("\2\2\u0477\u0478\7g\2\2\u0478\u0479\7u\2\2\u0479\u0540") + buf.write("\7\65\2\2\u047a\u047b\7d\2\2\u047b\u047c\7{\2\2\u047c") + buf.write("\u047d\7v\2\2\u047d\u047e\7g\2\2\u047e\u047f\7u\2\2\u047f") + buf.write("\u0540\7\66\2\2\u0480\u0481\7d\2\2\u0481\u0482\7{\2\2") + buf.write("\u0482\u0483\7v\2\2\u0483\u0484\7g\2\2\u0484\u0485\7u") + buf.write("\2\2\u0485\u0540\7\67\2\2\u0486\u0487\7d\2\2\u0487\u0488") + buf.write("\7{\2\2\u0488\u0489\7v\2\2\u0489\u048a\7g\2\2\u048a\u048b") + buf.write("\7u\2\2\u048b\u0540\78\2\2\u048c\u048d\7d\2\2\u048d\u048e") + buf.write("\7{\2\2\u048e\u048f\7v\2\2\u048f\u0490\7g\2\2\u0490\u0491") + buf.write("\7u\2\2\u0491\u0540\79\2\2\u0492\u0493\7d\2\2\u0493\u0494") + buf.write("\7{\2\2\u0494\u0495\7v\2\2\u0495\u0496\7g\2\2\u0496\u0497") + buf.write("\7u\2\2\u0497\u0540\7:\2\2\u0498\u0499\7d\2\2\u0499\u049a") + buf.write("\7{\2\2\u049a\u049b\7v\2\2\u049b\u049c\7g\2\2\u049c\u049d") + buf.write("\7u\2\2\u049d\u0540\7;\2\2\u049e\u049f\7d\2\2\u049f\u04a0") + buf.write("\7{\2\2\u04a0\u04a1\7v\2\2\u04a1\u04a2\7g\2\2\u04a2\u04a3") + buf.write("\7u\2\2\u04a3\u04a4\7\63\2\2\u04a4\u0540\7\62\2\2\u04a5") + buf.write("\u04a6\7d\2\2\u04a6\u04a7\7{\2\2\u04a7\u04a8\7v\2\2\u04a8") + buf.write("\u04a9\7g\2\2\u04a9\u04aa\7u\2\2\u04aa\u04ab\7\63\2\2") + buf.write("\u04ab\u0540\7\63\2\2\u04ac\u04ad\7d\2\2\u04ad\u04ae\7") + buf.write("{\2\2\u04ae\u04af\7v\2\2\u04af\u04b0\7g\2\2\u04b0\u04b1") + buf.write("\7u\2\2\u04b1\u04b2\7\63\2\2\u04b2\u0540\7\64\2\2\u04b3") + buf.write("\u04b4\7d\2\2\u04b4\u04b5\7{\2\2\u04b5\u04b6\7v\2\2\u04b6") + buf.write("\u04b7\7g\2\2\u04b7\u04b8\7u\2\2\u04b8\u04b9\7\63\2\2") + buf.write("\u04b9\u0540\7\65\2\2\u04ba\u04bb\7d\2\2\u04bb\u04bc\7") + buf.write("{\2\2\u04bc\u04bd\7v\2\2\u04bd\u04be\7g\2\2\u04be\u04bf") + buf.write("\7u\2\2\u04bf\u04c0\7\63\2\2\u04c0\u0540\7\66\2\2\u04c1") + buf.write("\u04c2\7d\2\2\u04c2\u04c3\7{\2\2\u04c3\u04c4\7v\2\2\u04c4") + buf.write("\u04c5\7g\2\2\u04c5\u04c6\7u\2\2\u04c6\u04c7\7\63\2\2") + buf.write("\u04c7\u0540\7\67\2\2\u04c8\u04c9\7d\2\2\u04c9\u04ca\7") + buf.write("{\2\2\u04ca\u04cb\7v\2\2\u04cb\u04cc\7g\2\2\u04cc\u04cd") + buf.write("\7u\2\2\u04cd\u04ce\7\63\2\2\u04ce\u0540\78\2\2\u04cf") + buf.write("\u04d0\7d\2\2\u04d0\u04d1\7{\2\2\u04d1\u04d2\7v\2\2\u04d2") + buf.write("\u04d3\7g\2\2\u04d3\u04d4\7u\2\2\u04d4\u04d5\7\63\2\2") + buf.write("\u04d5\u0540\79\2\2\u04d6\u04d7\7d\2\2\u04d7\u04d8\7{") + buf.write("\2\2\u04d8\u04d9\7v\2\2\u04d9\u04da\7g\2\2\u04da\u04db") + buf.write("\7u\2\2\u04db\u04dc\7\63\2\2\u04dc\u0540\7:\2\2\u04dd") + buf.write("\u04de\7d\2\2\u04de\u04df\7{\2\2\u04df\u04e0\7v\2\2\u04e0") + buf.write("\u04e1\7g\2\2\u04e1\u04e2\7u\2\2\u04e2\u04e3\7\63\2\2") + buf.write("\u04e3\u0540\7;\2\2\u04e4\u04e5\7d\2\2\u04e5\u04e6\7{") + buf.write("\2\2\u04e6\u04e7\7v\2\2\u04e7\u04e8\7g\2\2\u04e8\u04e9") + buf.write("\7u\2\2\u04e9\u04ea\7\64\2\2\u04ea\u0540\7\62\2\2\u04eb") + buf.write("\u04ec\7d\2\2\u04ec\u04ed\7{\2\2\u04ed\u04ee\7v\2\2\u04ee") + buf.write("\u04ef\7g\2\2\u04ef\u04f0\7u\2\2\u04f0\u04f1\7\64\2\2") + buf.write("\u04f1\u0540\7\63\2\2\u04f2\u04f3\7d\2\2\u04f3\u04f4\7") + buf.write("{\2\2\u04f4\u04f5\7v\2\2\u04f5\u04f6\7g\2\2\u04f6\u04f7") + buf.write("\7u\2\2\u04f7\u04f8\7\64\2\2\u04f8\u0540\7\64\2\2\u04f9") + buf.write("\u04fa\7d\2\2\u04fa\u04fb\7{\2\2\u04fb\u04fc\7v\2\2\u04fc") + buf.write("\u04fd\7g\2\2\u04fd\u04fe\7u\2\2\u04fe\u04ff\7\64\2\2") + buf.write("\u04ff\u0540\7\65\2\2\u0500\u0501\7d\2\2\u0501\u0502\7") + buf.write("{\2\2\u0502\u0503\7v\2\2\u0503\u0504\7g\2\2\u0504\u0505") + buf.write("\7u\2\2\u0505\u0506\7\64\2\2\u0506\u0540\7\66\2\2\u0507") + buf.write("\u0508\7d\2\2\u0508\u0509\7{\2\2\u0509\u050a\7v\2\2\u050a") + buf.write("\u050b\7g\2\2\u050b\u050c\7u\2\2\u050c\u050d\7\64\2\2") + buf.write("\u050d\u0540\7\67\2\2\u050e\u050f\7d\2\2\u050f\u0510\7") + buf.write("{\2\2\u0510\u0511\7v\2\2\u0511\u0512\7g\2\2\u0512\u0513") + buf.write("\7u\2\2\u0513\u0514\7\64\2\2\u0514\u0540\78\2\2\u0515") + buf.write("\u0516\7d\2\2\u0516\u0517\7{\2\2\u0517\u0518\7v\2\2\u0518") + buf.write("\u0519\7g\2\2\u0519\u051a\7u\2\2\u051a\u051b\7\64\2\2") + buf.write("\u051b\u0540\79\2\2\u051c\u051d\7d\2\2\u051d\u051e\7{") + buf.write("\2\2\u051e\u051f\7v\2\2\u051f\u0520\7g\2\2\u0520\u0521") + buf.write("\7u\2\2\u0521\u0522\7\64\2\2\u0522\u0540\7:\2\2\u0523") + buf.write("\u0524\7d\2\2\u0524\u0525\7{\2\2\u0525\u0526\7v\2\2\u0526") + buf.write("\u0527\7g\2\2\u0527\u0528\7u\2\2\u0528\u0529\7\64\2\2") + buf.write("\u0529\u0540\7;\2\2\u052a\u052b\7d\2\2\u052b\u052c\7{") + buf.write("\2\2\u052c\u052d\7v\2\2\u052d\u052e\7g\2\2\u052e\u052f") + buf.write("\7u\2\2\u052f\u0530\7\65\2\2\u0530\u0540\7\62\2\2\u0531") + buf.write("\u0532\7d\2\2\u0532\u0533\7{\2\2\u0533\u0534\7v\2\2\u0534") + buf.write("\u0535\7g\2\2\u0535\u0536\7u\2\2\u0536\u0537\7\65\2\2") + buf.write("\u0537\u0540\7\63\2\2\u0538\u0539\7d\2\2\u0539\u053a\7") + buf.write("{\2\2\u053a\u053b\7v\2\2\u053b\u053c\7g\2\2\u053c\u053d") + buf.write("\7u\2\2\u053d\u053e\7\65\2\2\u053e\u0540\7\64\2\2\u053f") + buf.write("\u0463\3\2\2\2\u053f\u0468\3\2\2\2\u053f\u046e\3\2\2\2") + buf.write("\u053f\u0474\3\2\2\2\u053f\u047a\3\2\2\2\u053f\u0480\3") + buf.write("\2\2\2\u053f\u0486\3\2\2\2\u053f\u048c\3\2\2\2\u053f\u0492") + buf.write("\3\2\2\2\u053f\u0498\3\2\2\2\u053f\u049e\3\2\2\2\u053f") + buf.write("\u04a5\3\2\2\2\u053f\u04ac\3\2\2\2\u053f\u04b3\3\2\2\2") + buf.write("\u053f\u04ba\3\2\2\2\u053f\u04c1\3\2\2\2\u053f\u04c8\3") + buf.write("\2\2\2\u053f\u04cf\3\2\2\2\u053f\u04d6\3\2\2\2\u053f\u04dd") + buf.write("\3\2\2\2\u053f\u04e4\3\2\2\2\u053f\u04eb\3\2\2\2\u053f") + buf.write("\u04f2\3\2\2\2\u053f\u04f9\3\2\2\2\u053f\u0500\3\2\2\2") + buf.write("\u053f\u0507\3\2\2\2\u053f\u050e\3\2\2\2\u053f\u0515\3") + buf.write("\2\2\2\u053f\u051c\3\2\2\2\u053f\u0523\3\2\2\2\u053f\u052a") + buf.write("\3\2\2\2\u053f\u0531\3\2\2\2\u053f\u0538\3\2\2\2\u0540") + buf.write("\u00ca\3\2\2\2\u0541\u0542\7h\2\2\u0542\u0543\7k\2\2\u0543") + buf.write("\u0544\7z\2\2\u0544\u0545\7g\2\2\u0545\u0558\7f\2\2\u0546") + buf.write("\u0547\7h\2\2\u0547\u0548\7k\2\2\u0548\u0549\7z\2\2\u0549") + buf.write("\u054a\7g\2\2\u054a\u054b\7f\2\2\u054b\u054d\3\2\2\2\u054c") + buf.write("\u054e\t\2\2\2\u054d\u054c\3\2\2\2\u054e\u054f\3\2\2\2") + buf.write("\u054f\u054d\3\2\2\2\u054f\u0550\3\2\2\2\u0550\u0551\3") + buf.write("\2\2\2\u0551\u0553\7z\2\2\u0552\u0554\t\2\2\2\u0553\u0552") + buf.write("\3\2\2\2\u0554\u0555\3\2\2\2\u0555\u0553\3\2\2\2\u0555") + buf.write("\u0556\3\2\2\2\u0556\u0558\3\2\2\2\u0557\u0541\3\2\2\2") + buf.write("\u0557\u0546\3\2\2\2\u0558\u00cc\3\2\2\2\u0559\u055a\7") + buf.write("w\2\2\u055a\u055b\7h\2\2\u055b\u055c\7k\2\2\u055c\u055d") + buf.write("\7z\2\2\u055d\u055e\7g\2\2\u055e\u0572\7f\2\2\u055f\u0560") + buf.write("\7w\2\2\u0560\u0561\7h\2\2\u0561\u0562\7k\2\2\u0562\u0563") + buf.write("\7z\2\2\u0563\u0564\7g\2\2\u0564\u0565\7f\2\2\u0565\u0567") + buf.write("\3\2\2\2\u0566\u0568\t\2\2\2\u0567\u0566\3\2\2\2\u0568") + buf.write("\u0569\3\2\2\2\u0569\u0567\3\2\2\2\u0569\u056a\3\2\2\2") + buf.write("\u056a\u056b\3\2\2\2\u056b\u056d\7z\2\2\u056c\u056e\t") + buf.write("\2\2\2\u056d\u056c\3\2\2\2\u056e\u056f\3\2\2\2\u056f\u056d") + buf.write("\3\2\2\2\u056f\u0570\3\2\2\2\u0570\u0572\3\2\2\2\u0571") + buf.write("\u0559\3\2\2\2\u0571\u055f\3\2\2\2\u0572\u00ce\3\2\2\2") + buf.write("\u0573\u0574\7v\2\2\u0574\u0575\7t\2\2\u0575\u0576\7w") + buf.write("\2\2\u0576\u057d\7g\2\2\u0577\u0578\7h\2\2\u0578\u0579") + buf.write("\7c\2\2\u0579\u057a\7n\2\2\u057a\u057b\7u\2\2\u057b\u057d") + buf.write("\7g\2\2\u057c\u0573\3\2\2\2\u057c\u0577\3\2\2\2\u057d") + buf.write("\u00d0\3\2\2\2\u057e\u0585\5\u00d3j\2\u057f\u0581\5\u00d3") + buf.write("j\2\u0580\u057f\3\2\2\2\u0580\u0581\3\2\2\2\u0581\u0582") + buf.write("\3\2\2\2\u0582\u0583\7\60\2\2\u0583\u0585\5\u00d3j\2\u0584") + buf.write("\u057e\3\2\2\2\u0584\u0580\3\2\2\2\u0585\u0588\3\2\2\2") + buf.write("\u0586\u0587\t\3\2\2\u0587\u0589\5\u00d3j\2\u0588\u0586") + buf.write("\3\2\2\2\u0588\u0589\3\2\2\2\u0589\u00d2\3\2\2\2\u058a") + buf.write("\u0591\t\2\2\2\u058b\u058d\7a\2\2\u058c\u058b\3\2\2\2") + buf.write("\u058c\u058d\3\2\2\2\u058d\u058e\3\2\2\2\u058e\u0590\t") + buf.write("\2\2\2\u058f\u058c\3\2\2\2\u0590\u0593\3\2\2\2\u0591\u058f") + buf.write("\3\2\2\2\u0591\u0592\3\2\2\2\u0592\u00d4\3\2\2\2\u0593") + buf.write("\u0591\3\2\2\2\u0594\u0595\7\62\2\2\u0595\u0596\t\4\2") + buf.write("\2\u0596\u0597\5\u00d7l\2\u0597\u00d6\3\2\2\2\u0598\u059f") + buf.write("\5\u00dfp\2\u0599\u059b\7a\2\2\u059a\u0599\3\2\2\2\u059a") + buf.write("\u059b\3\2\2\2\u059b\u059c\3\2\2\2\u059c\u059e\5\u00df") + buf.write("p\2\u059d\u059a\3\2\2\2\u059e\u05a1\3\2\2\2\u059f\u059d") + buf.write("\3\2\2\2\u059f\u05a0\3\2\2\2\u05a0\u00d8\3\2\2\2\u05a1") + buf.write("\u059f\3\2\2\2\u05a2\u05a3\7y\2\2\u05a3\u05a4\7g\2\2\u05a4") + buf.write("\u05db\7k\2\2\u05a5\u05a6\7i\2\2\u05a6\u05a7\7y\2\2\u05a7") + buf.write("\u05a8\7g\2\2\u05a8\u05db\7k\2\2\u05a9\u05aa\7u\2\2\u05aa") + buf.write("\u05ab\7|\2\2\u05ab\u05ac\7c\2\2\u05ac\u05ad\7d\2\2\u05ad") + buf.write("\u05db\7q\2\2\u05ae\u05af\7h\2\2\u05af\u05b0\7k\2\2\u05b0") + buf.write("\u05b1\7p\2\2\u05b1\u05b2\7p\2\2\u05b2\u05b3\7g\2\2\u05b3") + buf.write("\u05db\7{\2\2\u05b4\u05b5\7g\2\2\u05b5\u05b6\7v\2\2\u05b6") + buf.write("\u05b7\7j\2\2\u05b7\u05b8\7g\2\2\u05b8\u05db\7t\2\2\u05b9") + buf.write("\u05ba\7u\2\2\u05ba\u05bb\7g\2\2\u05bb\u05bc\7e\2\2\u05bc") + buf.write("\u05bd\7q\2\2\u05bd\u05be\7p\2\2\u05be\u05bf\7f\2\2\u05bf") + buf.write("\u05db\7u\2\2\u05c0\u05c1\7o\2\2\u05c1\u05c2\7k\2\2\u05c2") + buf.write("\u05c3\7p\2\2\u05c3\u05c4\7w\2\2\u05c4\u05c5\7v\2\2\u05c5") + buf.write("\u05c6\7g\2\2\u05c6\u05db\7u\2\2\u05c7\u05c8\7j\2\2\u05c8") + buf.write("\u05c9\7q\2\2\u05c9\u05ca\7w\2\2\u05ca\u05cb\7t\2\2\u05cb") + buf.write("\u05db\7u\2\2\u05cc\u05cd\7f\2\2\u05cd\u05ce\7c\2\2\u05ce") + buf.write("\u05cf\7{\2\2\u05cf\u05db\7u\2\2\u05d0\u05d1\7y\2\2\u05d1") + buf.write("\u05d2\7g\2\2\u05d2\u05d3\7g\2\2\u05d3\u05d4\7m\2\2\u05d4") + buf.write("\u05db\7u\2\2\u05d5\u05d6\7{\2\2\u05d6\u05d7\7g\2\2\u05d7") + buf.write("\u05d8\7c\2\2\u05d8\u05d9\7t\2\2\u05d9\u05db\7u\2\2\u05da") + buf.write("\u05a2\3\2\2\2\u05da\u05a5\3\2\2\2\u05da\u05a9\3\2\2\2") + buf.write("\u05da\u05ae\3\2\2\2\u05da\u05b4\3\2\2\2\u05da\u05b9\3") + buf.write("\2\2\2\u05da\u05c0\3\2\2\2\u05da\u05c7\3\2\2\2\u05da\u05cc") + buf.write("\3\2\2\2\u05da\u05d0\3\2\2\2\u05da\u05d5\3\2\2\2\u05db") + buf.write("\u00da\3\2\2\2\u05dc\u05dd\7j\2\2\u05dd\u05de\7g\2\2\u05de") + buf.write("\u05df\7z\2\2\u05df\u05ea\3\2\2\2\u05e0\u05e2\7$\2\2\u05e1") + buf.write("\u05e3\5\u00d7l\2\u05e2\u05e1\3\2\2\2\u05e2\u05e3\3\2") + buf.write("\2\2\u05e3\u05e4\3\2\2\2\u05e4\u05eb\7$\2\2\u05e5\u05e7") + buf.write("\7)\2\2\u05e6\u05e8\5\u00d7l\2\u05e7\u05e6\3\2\2\2\u05e7") + buf.write("\u05e8\3\2\2\2\u05e8\u05e9\3\2\2\2\u05e9\u05eb\7)\2\2") + buf.write("\u05ea\u05e0\3\2\2\2\u05ea\u05e5\3\2\2\2\u05eb\u00dc\3") + buf.write("\2\2\2\u05ec\u05ed\5\u00dfp\2\u05ed\u05ee\5\u00dfp\2\u05ee") + buf.write("\u00de\3\2\2\2\u05ef\u05f0\t\5\2\2\u05f0\u00e0\3\2\2\2") + buf.write("\u05f1\u05f2\7c\2\2\u05f2\u05f3\7d\2\2\u05f3\u05f4\7u") + buf.write("\2\2\u05f4\u05f5\7v\2\2\u05f5\u05f6\7t\2\2\u05f6\u05f7") + buf.write("\7c\2\2\u05f7\u05f8\7e\2\2\u05f8\u064a\7v\2\2\u05f9\u05fa") + buf.write("\7c\2\2\u05fa\u05fb\7h\2\2\u05fb\u05fc\7v\2\2\u05fc\u05fd") + buf.write("\7g\2\2\u05fd\u064a\7t\2\2\u05fe\u05ff\7e\2\2\u05ff\u0600") + buf.write("\7c\2\2\u0600\u0601\7u\2\2\u0601\u064a\7g\2\2\u0602\u0603") + buf.write("\7e\2\2\u0603\u0604\7c\2\2\u0604\u0605\7v\2\2\u0605\u0606") + buf.write("\7e\2\2\u0606\u064a\7j\2\2\u0607\u0608\7f\2\2\u0608\u0609") + buf.write("\7g\2\2\u0609\u060a\7h\2\2\u060a\u060b\7c\2\2\u060b\u060c") + buf.write("\7w\2\2\u060c\u060d\7n\2\2\u060d\u064a\7v\2\2\u060e\u060f") + buf.write("\7h\2\2\u060f\u0610\7k\2\2\u0610\u0611\7p\2\2\u0611\u0612") + buf.write("\7c\2\2\u0612\u064a\7n\2\2\u0613\u0614\7k\2\2\u0614\u064a") + buf.write("\7p\2\2\u0615\u0616\7k\2\2\u0616\u0617\7p\2\2\u0617\u0618") + buf.write("\7n\2\2\u0618\u0619\7k\2\2\u0619\u061a\7p\2\2\u061a\u064a") + buf.write("\7g\2\2\u061b\u061c\7n\2\2\u061c\u061d\7g\2\2\u061d\u064a") + buf.write("\7v\2\2\u061e\u061f\7o\2\2\u061f\u0620\7c\2\2\u0620\u0621") + buf.write("\7v\2\2\u0621\u0622\7e\2\2\u0622\u064a\7j\2\2\u0623\u0624") + buf.write("\7p\2\2\u0624\u0625\7w\2\2\u0625\u0626\7n\2\2\u0626\u064a") + buf.write("\7n\2\2\u0627\u0628\7q\2\2\u0628\u064a\7h\2\2\u0629\u062a") + buf.write("\7t\2\2\u062a\u062b\7g\2\2\u062b\u062c\7n\2\2\u062c\u062d") + buf.write("\7q\2\2\u062d\u062e\7e\2\2\u062e\u062f\7c\2\2\u062f\u0630") + buf.write("\7v\2\2\u0630\u0631\7c\2\2\u0631\u0632\7d\2\2\u0632\u0633") + buf.write("\7n\2\2\u0633\u064a\7g\2\2\u0634\u0635\7u\2\2\u0635\u0636") + buf.write("\7v\2\2\u0636\u0637\7c\2\2\u0637\u0638\7v\2\2\u0638\u0639") + buf.write("\7k\2\2\u0639\u064a\7e\2\2\u063a\u063b\7u\2\2\u063b\u063c") + buf.write("\7y\2\2\u063c\u063d\7k\2\2\u063d\u063e\7v\2\2\u063e\u063f") + buf.write("\7e\2\2\u063f\u064a\7j\2\2\u0640\u0641\7v\2\2\u0641\u0642") + buf.write("\7t\2\2\u0642\u064a\7{\2\2\u0643\u0644\7v\2\2\u0644\u0645") + buf.write("\7{\2\2\u0645\u0646\7r\2\2\u0646\u0647\7g\2\2\u0647\u0648") + buf.write("\7q\2\2\u0648\u064a\7h\2\2\u0649\u05f1\3\2\2\2\u0649\u05f9") + buf.write("\3\2\2\2\u0649\u05fe\3\2\2\2\u0649\u0602\3\2\2\2\u0649") + buf.write("\u0607\3\2\2\2\u0649\u060e\3\2\2\2\u0649\u0613\3\2\2\2") + buf.write("\u0649\u0615\3\2\2\2\u0649\u061b\3\2\2\2\u0649\u061e\3") + buf.write("\2\2\2\u0649\u0623\3\2\2\2\u0649\u0627\3\2\2\2\u0649\u0629") + buf.write("\3\2\2\2\u0649\u0634\3\2\2\2\u0649\u063a\3\2\2\2\u0649") + buf.write("\u0640\3\2\2\2\u0649\u0643\3\2\2\2\u064a\u00e2\3\2\2\2") + buf.write("\u064b\u064c\7c\2\2\u064c\u064d\7p\2\2\u064d\u064e\7q") + buf.write("\2\2\u064e\u064f\7p\2\2\u064f\u0650\7{\2\2\u0650\u0651") + buf.write("\7o\2\2\u0651\u0652\7q\2\2\u0652\u0653\7w\2\2\u0653\u0654") + buf.write("\7u\2\2\u0654\u00e4\3\2\2\2\u0655\u0656\7d\2\2\u0656\u0657") + buf.write("\7t\2\2\u0657\u0658\7g\2\2\u0658\u0659\7c\2\2\u0659\u065a") + buf.write("\7m\2\2\u065a\u00e6\3\2\2\2\u065b\u065c\7e\2\2\u065c\u065d") + buf.write("\7q\2\2\u065d\u065e\7p\2\2\u065e\u065f\7u\2\2\u065f\u0660") + buf.write("\7v\2\2\u0660\u0661\7c\2\2\u0661\u0662\7p\2\2\u0662\u0663") + buf.write("\7v\2\2\u0663\u00e8\3\2\2\2\u0664\u0665\7k\2\2\u0665\u0666") + buf.write("\7o\2\2\u0666\u0667\7o\2\2\u0667\u0668\7w\2\2\u0668\u0669") + buf.write("\7v\2\2\u0669\u066a\7c\2\2\u066a\u066b\7d\2\2\u066b\u066c") + buf.write("\7n\2\2\u066c\u066d\7g\2\2\u066d\u00ea\3\2\2\2\u066e\u066f") + buf.write("\7e\2\2\u066f\u0670\7q\2\2\u0670\u0671\7p\2\2\u0671\u0672") + buf.write("\7v\2\2\u0672\u0673\7k\2\2\u0673\u0674\7p\2\2\u0674\u0675") + buf.write("\7w\2\2\u0675\u0676\7g\2\2\u0676\u00ec\3\2\2\2\u0677\u0678") + buf.write("\7n\2\2\u0678\u0679\7g\2\2\u0679\u067a\7c\2\2\u067a\u067b") + buf.write("\7x\2\2\u067b\u067c\7g\2\2\u067c\u00ee\3\2\2\2\u067d\u067e") + buf.write("\7g\2\2\u067e\u067f\7z\2\2\u067f\u0680\7v\2\2\u0680\u0681") + buf.write("\7g\2\2\u0681\u0682\7t\2\2\u0682\u0683\7p\2\2\u0683\u0684") + buf.write("\7c\2\2\u0684\u0685\7n\2\2\u0685\u00f0\3\2\2\2\u0686\u0687") + buf.write("\7k\2\2\u0687\u0688\7p\2\2\u0688\u0689\7f\2\2\u0689\u068a") + buf.write("\7g\2\2\u068a\u068b\7z\2\2\u068b\u068c\7g\2\2\u068c\u068d") + buf.write("\7f\2\2\u068d\u00f2\3\2\2\2\u068e\u068f\7k\2\2\u068f\u0690") + buf.write("\7p\2\2\u0690\u0691\7v\2\2\u0691\u0692\7g\2\2\u0692\u0693") + buf.write("\7t\2\2\u0693\u0694\7p\2\2\u0694\u0695\7c\2\2\u0695\u0696") + buf.write("\7n\2\2\u0696\u00f4\3\2\2\2\u0697\u0698\7r\2\2\u0698\u0699") + buf.write("\7c\2\2\u0699\u069a\7{\2\2\u069a\u069b\7c\2\2\u069b\u069c") + buf.write("\7d\2\2\u069c\u069d\7n\2\2\u069d\u069e\7g\2\2\u069e\u00f6") + buf.write("\3\2\2\2\u069f\u06a0\7r\2\2\u06a0\u06a1\7t\2\2\u06a1\u06a2") + buf.write("\7k\2\2\u06a2\u06a3\7x\2\2\u06a3\u06a4\7c\2\2\u06a4\u06a5") + buf.write("\7v\2\2\u06a5\u06a6\7g\2\2\u06a6\u00f8\3\2\2\2\u06a7\u06a8") + buf.write("\7r\2\2\u06a8\u06a9\7w\2\2\u06a9\u06aa\7d\2\2\u06aa\u06ab") + buf.write("\7n\2\2\u06ab\u06ac\7k\2\2\u06ac\u06ad\7e\2\2\u06ad\u00fa") + buf.write("\3\2\2\2\u06ae\u06af\7x\2\2\u06af\u06b0\7k\2\2\u06b0\u06b1") + buf.write("\7t\2\2\u06b1\u06b2\7v\2\2\u06b2\u06b3\7w\2\2\u06b3\u06b4") + buf.write("\7c\2\2\u06b4\u06b5\7n\2\2\u06b5\u00fc\3\2\2\2\u06b6\u06b7") + buf.write("\7r\2\2\u06b7\u06b8\7w\2\2\u06b8\u06b9\7t\2\2\u06b9\u06ba") + buf.write("\7g\2\2\u06ba\u00fe\3\2\2\2\u06bb\u06bc\7v\2\2\u06bc\u06bd") + buf.write("\7{\2\2\u06bd\u06be\7r\2\2\u06be\u06bf\7g\2\2\u06bf\u0100") + buf.write("\3\2\2\2\u06c0\u06c1\7x\2\2\u06c1\u06c2\7k\2\2\u06c2\u06c3") + buf.write("\7g\2\2\u06c3\u06c4\7y\2\2\u06c4\u0102\3\2\2\2\u06c5\u06c6") + buf.write("\7e\2\2\u06c6\u06c7\7q\2\2\u06c7\u06c8\7p\2\2\u06c8\u06c9") + buf.write("\7u\2\2\u06c9\u06ca\7v\2\2\u06ca\u06cb\7t\2\2\u06cb\u06cc") + buf.write("\7w\2\2\u06cc\u06cd\7e\2\2\u06cd\u06ce\7v\2\2\u06ce\u06cf") + buf.write("\7q\2\2\u06cf\u06d0\7t\2\2\u06d0\u0104\3\2\2\2\u06d1\u06d2") + buf.write("\7h\2\2\u06d2\u06d3\7c\2\2\u06d3\u06d4\7n\2\2\u06d4\u06d5") + buf.write("\7n\2\2\u06d5\u06d6\7d\2\2\u06d6\u06d7\7c\2\2\u06d7\u06d8") + buf.write("\7e\2\2\u06d8\u06d9\7m\2\2\u06d9\u0106\3\2\2\2\u06da\u06db") + buf.write("\7t\2\2\u06db\u06dc\7g\2\2\u06dc\u06dd\7e\2\2\u06dd\u06de") + buf.write("\7g\2\2\u06de\u06df\7k\2\2\u06df\u06e0\7x\2\2\u06e0\u06e1") + buf.write("\7g\2\2\u06e1\u0108\3\2\2\2\u06e2\u06e6\5\u010b\u0086") + buf.write("\2\u06e3\u06e5\5\u010d\u0087\2\u06e4\u06e3\3\2\2\2\u06e5") + buf.write("\u06e8\3\2\2\2\u06e6\u06e4\3\2\2\2\u06e6\u06e7\3\2\2\2") + buf.write("\u06e7\u010a\3\2\2\2\u06e8\u06e6\3\2\2\2\u06e9\u06ea\t") + buf.write("\6\2\2\u06ea\u010c\3\2\2\2\u06eb\u06ec\t\7\2\2\u06ec\u010e") + buf.write("\3\2\2\2\u06ed\u06ee\7w\2\2\u06ee\u06ef\7p\2\2\u06ef\u06f0") + buf.write("\7k\2\2\u06f0\u06f1\7e\2\2\u06f1\u06f2\7q\2\2\u06f2\u06f3") + buf.write("\7f\2\2\u06f3\u06f5\7g\2\2\u06f4\u06ed\3\2\2\2\u06f4\u06f5") + buf.write("\3\2\2\2\u06f5\u06f6\3\2\2\2\u06f6\u06fa\7$\2\2\u06f7") + buf.write("\u06f9\5\u0111\u0089\2\u06f8\u06f7\3\2\2\2\u06f9\u06fc") + buf.write("\3\2\2\2\u06fa\u06f8\3\2\2\2\u06fa\u06fb\3\2\2\2\u06fb") + buf.write("\u06fd\3\2\2\2\u06fc\u06fa\3\2\2\2\u06fd\u0710\7$\2\2") + buf.write("\u06fe\u06ff\7w\2\2\u06ff\u0700\7p\2\2\u0700\u0701\7k") + buf.write("\2\2\u0701\u0702\7e\2\2\u0702\u0703\7q\2\2\u0703\u0704") + buf.write("\7f\2\2\u0704\u0706\7g\2\2\u0705\u06fe\3\2\2\2\u0705\u0706") + buf.write("\3\2\2\2\u0706\u0707\3\2\2\2\u0707\u070b\7)\2\2\u0708") + buf.write("\u070a\5\u0113\u008a\2\u0709\u0708\3\2\2\2\u070a\u070d") + buf.write("\3\2\2\2\u070b\u0709\3\2\2\2\u070b\u070c\3\2\2\2\u070c") + buf.write("\u070e\3\2\2\2\u070d\u070b\3\2\2\2\u070e\u0710\7)\2\2") + buf.write("\u070f\u06f4\3\2\2\2\u070f\u0705\3\2\2\2\u0710\u0110\3") + buf.write("\2\2\2\u0711\u0715\n\b\2\2\u0712\u0713\7^\2\2\u0713\u0715") + buf.write("\13\2\2\2\u0714\u0711\3\2\2\2\u0714\u0712\3\2\2\2\u0715") + buf.write("\u0112\3\2\2\2\u0716\u071a\n\t\2\2\u0717\u0718\7^\2\2") + buf.write("\u0718\u071a\13\2\2\2\u0719\u0716\3\2\2\2\u0719\u0717") + buf.write("\3\2\2\2\u071a\u0114\3\2\2\2\u071b\u071d\t\2\2\2\u071c") + buf.write("\u071b\3\2\2\2\u071d\u071e\3\2\2\2\u071e\u071c\3\2\2\2") + buf.write("\u071e\u071f\3\2\2\2\u071f\u0720\3\2\2\2\u0720\u0722\7") + buf.write("\60\2\2\u0721\u0723\t\2\2\2\u0722\u0721\3\2\2\2\u0723") + buf.write("\u0724\3\2\2\2\u0724\u0722\3\2\2\2\u0724\u0725\3\2\2\2") + buf.write("\u0725\u072c\3\2\2\2\u0726\u0728\7\60\2\2\u0727\u0729") + buf.write("\t\2\2\2\u0728\u0727\3\2\2\2\u0729\u072a\3\2\2\2\u072a") + buf.write("\u0728\3\2\2\2\u072a\u072b\3\2\2\2\u072b\u072d\3\2\2\2") + buf.write("\u072c\u0726\3\2\2\2\u072c\u072d\3\2\2\2\u072d\u0116\3") + buf.write("\2\2\2\u072e\u0730\t\n\2\2\u072f\u072e\3\2\2\2\u0730\u0731") + buf.write("\3\2\2\2\u0731\u072f\3\2\2\2\u0731\u0732\3\2\2\2\u0732") + buf.write("\u0733\3\2\2\2\u0733\u0734\b\u008c\2\2\u0734\u0118\3\2") + buf.write("\2\2\u0735\u0736\7\61\2\2\u0736\u0737\7,\2\2\u0737\u073b") + buf.write("\3\2\2\2\u0738\u073a\13\2\2\2\u0739\u0738\3\2\2\2\u073a") + buf.write("\u073d\3\2\2\2\u073b\u073c\3\2\2\2\u073b\u0739\3\2\2\2") + buf.write("\u073c\u073e\3\2\2\2\u073d\u073b\3\2\2\2\u073e\u073f\7") + buf.write(",\2\2\u073f\u0740\7\61\2\2\u0740\u0741\3\2\2\2\u0741\u0742") + buf.write("\b\u008d\3\2\u0742\u011a\3\2\2\2\u0743\u0744\7\61\2\2") + buf.write("\u0744\u0745\7\61\2\2\u0745\u0749\3\2\2\2\u0746\u0748") + buf.write("\n\13\2\2\u0747\u0746\3\2\2\2\u0748\u074b\3\2\2\2\u0749") + buf.write("\u0747\3\2\2\2\u0749\u074a\3\2\2\2\u074a\u074c\3\2\2\2") + buf.write("\u074b\u0749\3\2\2\2\u074c\u074d\b\u008e\3\2\u074d\u011c") + buf.write("\3\2\2\2(\2\u0388\u0461\u053f\u054f\u0555\u0557\u0569") + buf.write("\u056f\u0571\u057c\u0580\u0584\u0588\u058c\u0591\u059a") + buf.write("\u059f\u05da\u05e2\u05e7\u05ea\u0649\u06e6\u06f4\u06fa") + buf.write("\u0705\u070b\u070f\u0714\u0719\u071e\u0724\u072a\u072c") + buf.write("\u0731\u073b\u0749\4\b\2\2\2\3\2") return buf.getvalue() @@ -876,66 +956,84 @@ class SolidityLexer(Lexer): T__87 = 88 T__88 = 89 T__89 = 90 - Int = 91 - Uint = 92 - Byte = 93 - Fixed = 94 - Ufixed = 95 - VersionLiteral = 96 - BooleanLiteral = 97 - DecimalNumber = 98 - HexNumber = 99 - NumberUnit = 100 - HexLiteral = 101 - ReservedKeyword = 102 - AnonymousKeyword = 103 - BreakKeyword = 104 - ConstantKeyword = 105 - ContinueKeyword = 106 - ExternalKeyword = 107 - IndexedKeyword = 108 - InternalKeyword = 109 - PayableKeyword = 110 - PrivateKeyword = 111 - PublicKeyword = 112 - PureKeyword = 113 - ViewKeyword = 114 - Identifier = 115 - StringLiteral = 116 - WS = 117 - COMMENT = 118 - LINE_COMMENT = 119 + T__90 = 91 + T__91 = 92 + T__92 = 93 + T__93 = 94 + T__94 = 95 + T__95 = 96 + T__96 = 97 + Int = 98 + Uint = 99 + Byte = 100 + Fixed = 101 + Ufixed = 102 + BooleanLiteral = 103 + DecimalNumber = 104 + HexNumber = 105 + NumberUnit = 106 + HexLiteralFragment = 107 + ReservedKeyword = 108 + AnonymousKeyword = 109 + BreakKeyword = 110 + ConstantKeyword = 111 + ImmutableKeyword = 112 + ContinueKeyword = 113 + LeaveKeyword = 114 + ExternalKeyword = 115 + IndexedKeyword = 116 + InternalKeyword = 117 + PayableKeyword = 118 + PrivateKeyword = 119 + PublicKeyword = 120 + VirtualKeyword = 121 + PureKeyword = 122 + TypeKeyword = 123 + ViewKeyword = 124 + ConstructorKeyword = 125 + FallbackKeyword = 126 + ReceiveKeyword = 127 + Identifier = 128 + StringLiteralFragment = 129 + VersionLiteral = 130 + WS = 131 + COMMENT = 132 + LINE_COMMENT = 133 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] modeNames = [ "DEFAULT_MODE" ] literalNames = [ "", - "'pragma'", "';'", "'^'", "'~'", "'>='", "'>'", "'<'", "'<='", - "'='", "'as'", "'import'", "'*'", "'from'", "'{'", "','", "'}'", - "'contract'", "'interface'", "'library'", "'is'", "'('", "')'", - "'using'", "'for'", "'struct'", "'constructor'", "'modifier'", - "'function'", "'returns'", "'event'", "'enum'", "'['", "']'", - "'address'", "'.'", "'mapping'", "'=>'", "'memory'", "'storage'", - "'calldata'", "'if'", "'else'", "'while'", "'assembly'", "'do'", - "'return'", "'throw'", "'emit'", "'var'", "'bool'", "'string'", - "'byte'", "'++'", "'--'", "'new'", "'+'", "'-'", "'after'", + "'pragma'", "';'", "'||'", "'^'", "'~'", "'>='", "'>'", "'<'", + "'<='", "'='", "'as'", "'import'", "'*'", "'from'", "'{'", "','", + "'}'", "'abstract'", "'contract'", "'interface'", "'library'", + "'is'", "'('", "')'", "'error'", "'using'", "'for'", "'struct'", + "'modifier'", "'function'", "'returns'", "'event'", "'enum'", + "'['", "']'", "'address'", "'.'", "'mapping'", "'=>'", "'memory'", + "'storage'", "'calldata'", "'if'", "'else'", "'try'", "'catch'", + "'while'", "'unchecked'", "'assembly'", "'do'", "'return'", + "'throw'", "'emit'", "'revert'", "'var'", "'bool'", "'string'", + "'byte'", "'++'", "'--'", "'new'", "':'", "'+'", "'-'", "'after'", "'delete'", "'!'", "'**'", "'/'", "'%'", "'<<'", "'>>'", "'&'", - "'|'", "'=='", "'!='", "'&&'", "'||'", "'?'", "':'", "'|='", - "'^='", "'&='", "'<<='", "'>>='", "'+='", "'-='", "'*='", "'/='", - "'%='", "'let'", "':='", "'=:'", "'switch'", "'case'", "'default'", - "'->'", "'anonymous'", "'break'", "'constant'", "'continue'", - "'external'", "'indexed'", "'internal'", "'payable'", "'private'", - "'public'", "'pure'", "'view'" ] + "'|'", "'=='", "'!='", "'&&'", "'?'", "'|='", "'^='", "'&='", + "'<<='", "'>>='", "'+='", "'-='", "'*='", "'/='", "'%='", "'let'", + "':='", "'=:'", "'switch'", "'case'", "'default'", "'->'", "'callback'", + "'override'", "'anonymous'", "'break'", "'constant'", "'immutable'", + "'continue'", "'leave'", "'external'", "'indexed'", "'internal'", + "'payable'", "'private'", "'public'", "'virtual'", "'pure'", + "'type'", "'view'", "'constructor'", "'fallback'", "'receive'" ] symbolicNames = [ "", - "Int", "Uint", "Byte", "Fixed", "Ufixed", "VersionLiteral", - "BooleanLiteral", "DecimalNumber", "HexNumber", "NumberUnit", - "HexLiteral", "ReservedKeyword", "AnonymousKeyword", "BreakKeyword", - "ConstantKeyword", "ContinueKeyword", "ExternalKeyword", "IndexedKeyword", - "InternalKeyword", "PayableKeyword", "PrivateKeyword", "PublicKeyword", - "PureKeyword", "ViewKeyword", "Identifier", "StringLiteral", - "WS", "COMMENT", "LINE_COMMENT" ] + "Int", "Uint", "Byte", "Fixed", "Ufixed", "BooleanLiteral", + "DecimalNumber", "HexNumber", "NumberUnit", "HexLiteralFragment", + "ReservedKeyword", "AnonymousKeyword", "BreakKeyword", "ConstantKeyword", + "ImmutableKeyword", "ContinueKeyword", "LeaveKeyword", "ExternalKeyword", + "IndexedKeyword", "InternalKeyword", "PayableKeyword", "PrivateKeyword", + "PublicKeyword", "VirtualKeyword", "PureKeyword", "TypeKeyword", + "ViewKeyword", "ConstructorKeyword", "FallbackKeyword", "ReceiveKeyword", + "Identifier", "StringLiteralFragment", "VersionLiteral", "WS", + "COMMENT", "LINE_COMMENT" ] ruleNames = [ "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8", "T__9", "T__10", "T__11", "T__12", "T__13", @@ -951,22 +1049,26 @@ class SolidityLexer(Lexer): "T__68", "T__69", "T__70", "T__71", "T__72", "T__73", "T__74", "T__75", "T__76", "T__77", "T__78", "T__79", "T__80", "T__81", "T__82", "T__83", "T__84", "T__85", - "T__86", "T__87", "T__88", "T__89", "Int", "Uint", "Byte", - "Fixed", "Ufixed", "VersionLiteral", "BooleanLiteral", - "DecimalNumber", "HexNumber", "NumberUnit", "HexLiteral", - "HexPair", "HexCharacter", "ReservedKeyword", "AnonymousKeyword", - "BreakKeyword", "ConstantKeyword", "ContinueKeyword", + "T__86", "T__87", "T__88", "T__89", "T__90", "T__91", + "T__92", "T__93", "T__94", "T__95", "T__96", "Int", "Uint", + "Byte", "Fixed", "Ufixed", "BooleanLiteral", "DecimalNumber", + "DecimalDigits", "HexNumber", "HexDigits", "NumberUnit", + "HexLiteralFragment", "HexPair", "HexCharacter", "ReservedKeyword", + "AnonymousKeyword", "BreakKeyword", "ConstantKeyword", + "ImmutableKeyword", "ContinueKeyword", "LeaveKeyword", "ExternalKeyword", "IndexedKeyword", "InternalKeyword", - "PayableKeyword", "PrivateKeyword", "PublicKeyword", "PureKeyword", - "ViewKeyword", "Identifier", "IdentifierStart", "IdentifierPart", - "StringLiteral", "DoubleQuotedStringCharacter", "SingleQuotedStringCharacter", - "WS", "COMMENT", "LINE_COMMENT" ] + "PayableKeyword", "PrivateKeyword", "PublicKeyword", "VirtualKeyword", + "PureKeyword", "TypeKeyword", "ViewKeyword", "ConstructorKeyword", + "FallbackKeyword", "ReceiveKeyword", "Identifier", "IdentifierStart", + "IdentifierPart", "StringLiteralFragment", "DoubleQuotedStringCharacter", + "SingleQuotedStringCharacter", "VersionLiteral", "WS", + "COMMENT", "LINE_COMMENT" ] grammarFileName = "Solidity.g4" def __init__(self, input=None, output:TextIO = sys.stdout): super().__init__(input, output) - self.checkVersion("4.7.2") + self.checkVersion("4.9.3") self._interp = LexerATNSimulator(self, self.atn, self.decisionsToDFA, PredictionContextCache()) self._actions = None self._predicates = None diff --git a/solidity_parser/solidity_antlr4/SolidityLexer.tokens b/solidity_parser/solidity_antlr4/SolidityLexer.tokens index 9164f31..58e78b7 100644 --- a/solidity_parser/solidity_antlr4/SolidityLexer.tokens +++ b/solidity_parser/solidity_antlr4/SolidityLexer.tokens @@ -88,134 +88,162 @@ T__86=87 T__87=88 T__88=89 T__89=90 -Int=91 -Uint=92 -Byte=93 -Fixed=94 -Ufixed=95 -VersionLiteral=96 -BooleanLiteral=97 -DecimalNumber=98 -HexNumber=99 -NumberUnit=100 -HexLiteral=101 -ReservedKeyword=102 -AnonymousKeyword=103 -BreakKeyword=104 -ConstantKeyword=105 -ContinueKeyword=106 -ExternalKeyword=107 -IndexedKeyword=108 -InternalKeyword=109 -PayableKeyword=110 -PrivateKeyword=111 -PublicKeyword=112 -PureKeyword=113 -ViewKeyword=114 -Identifier=115 -StringLiteral=116 -WS=117 -COMMENT=118 -LINE_COMMENT=119 +T__90=91 +T__91=92 +T__92=93 +T__93=94 +T__94=95 +T__95=96 +T__96=97 +Int=98 +Uint=99 +Byte=100 +Fixed=101 +Ufixed=102 +BooleanLiteral=103 +DecimalNumber=104 +HexNumber=105 +NumberUnit=106 +HexLiteralFragment=107 +ReservedKeyword=108 +AnonymousKeyword=109 +BreakKeyword=110 +ConstantKeyword=111 +ImmutableKeyword=112 +ContinueKeyword=113 +LeaveKeyword=114 +ExternalKeyword=115 +IndexedKeyword=116 +InternalKeyword=117 +PayableKeyword=118 +PrivateKeyword=119 +PublicKeyword=120 +VirtualKeyword=121 +PureKeyword=122 +TypeKeyword=123 +ViewKeyword=124 +ConstructorKeyword=125 +FallbackKeyword=126 +ReceiveKeyword=127 +Identifier=128 +StringLiteralFragment=129 +VersionLiteral=130 +WS=131 +COMMENT=132 +LINE_COMMENT=133 'pragma'=1 ';'=2 -'^'=3 -'~'=4 -'>='=5 -'>'=6 -'<'=7 -'<='=8 -'='=9 -'as'=10 -'import'=11 -'*'=12 -'from'=13 -'{'=14 -','=15 -'}'=16 -'contract'=17 -'interface'=18 -'library'=19 -'is'=20 -'('=21 -')'=22 -'using'=23 -'for'=24 -'struct'=25 -'constructor'=26 -'modifier'=27 -'function'=28 -'returns'=29 -'event'=30 -'enum'=31 -'['=32 -']'=33 -'address'=34 -'.'=35 -'mapping'=36 -'=>'=37 -'memory'=38 -'storage'=39 -'calldata'=40 -'if'=41 -'else'=42 -'while'=43 -'assembly'=44 -'do'=45 -'return'=46 -'throw'=47 -'emit'=48 -'var'=49 -'bool'=50 -'string'=51 -'byte'=52 -'++'=53 -'--'=54 -'new'=55 -'+'=56 -'-'=57 -'after'=58 -'delete'=59 -'!'=60 -'**'=61 -'/'=62 -'%'=63 -'<<'=64 -'>>'=65 -'&'=66 -'|'=67 -'=='=68 -'!='=69 -'&&'=70 -'||'=71 -'?'=72 -':'=73 -'|='=74 -'^='=75 -'&='=76 -'<<='=77 -'>>='=78 -'+='=79 -'-='=80 -'*='=81 -'/='=82 -'%='=83 -'let'=84 -':='=85 -'=:'=86 -'switch'=87 -'case'=88 -'default'=89 -'->'=90 -'anonymous'=103 -'break'=104 -'constant'=105 -'continue'=106 -'external'=107 -'indexed'=108 -'internal'=109 -'payable'=110 -'private'=111 -'public'=112 -'pure'=113 -'view'=114 +'||'=3 +'^'=4 +'~'=5 +'>='=6 +'>'=7 +'<'=8 +'<='=9 +'='=10 +'as'=11 +'import'=12 +'*'=13 +'from'=14 +'{'=15 +','=16 +'}'=17 +'abstract'=18 +'contract'=19 +'interface'=20 +'library'=21 +'is'=22 +'('=23 +')'=24 +'error'=25 +'using'=26 +'for'=27 +'struct'=28 +'modifier'=29 +'function'=30 +'returns'=31 +'event'=32 +'enum'=33 +'['=34 +']'=35 +'address'=36 +'.'=37 +'mapping'=38 +'=>'=39 +'memory'=40 +'storage'=41 +'calldata'=42 +'if'=43 +'else'=44 +'try'=45 +'catch'=46 +'while'=47 +'unchecked'=48 +'assembly'=49 +'do'=50 +'return'=51 +'throw'=52 +'emit'=53 +'revert'=54 +'var'=55 +'bool'=56 +'string'=57 +'byte'=58 +'++'=59 +'--'=60 +'new'=61 +':'=62 +'+'=63 +'-'=64 +'after'=65 +'delete'=66 +'!'=67 +'**'=68 +'/'=69 +'%'=70 +'<<'=71 +'>>'=72 +'&'=73 +'|'=74 +'=='=75 +'!='=76 +'&&'=77 +'?'=78 +'|='=79 +'^='=80 +'&='=81 +'<<='=82 +'>>='=83 +'+='=84 +'-='=85 +'*='=86 +'/='=87 +'%='=88 +'let'=89 +':='=90 +'=:'=91 +'switch'=92 +'case'=93 +'default'=94 +'->'=95 +'callback'=96 +'override'=97 +'anonymous'=109 +'break'=110 +'constant'=111 +'immutable'=112 +'continue'=113 +'leave'=114 +'external'=115 +'indexed'=116 +'internal'=117 +'payable'=118 +'private'=119 +'public'=120 +'virtual'=121 +'pure'=122 +'type'=123 +'view'=124 +'constructor'=125 +'fallback'=126 +'receive'=127 diff --git a/solidity_parser/solidity_antlr4/SolidityListener.py b/solidity_parser/solidity_antlr4/SolidityListener.py index a5e4cdb..0cd5c6d 100644 --- a/solidity_parser/solidity_antlr4/SolidityListener.py +++ b/solidity_parser/solidity_antlr4/SolidityListener.py @@ -1,4 +1,4 @@ -# Generated from solidity-antlr4/Solidity.g4 by ANTLR 4.7.2 +# Generated from solidity-antlr4/Solidity.g4 by ANTLR 4.9.3 from antlr4 import * if __name__ is not None and "." in __name__: from .SolidityParser import SolidityParser @@ -89,6 +89,15 @@ def exitImportDirective(self, ctx:SolidityParser.ImportDirectiveContext): pass + # Enter a parse tree produced by SolidityParser#importPath. + def enterImportPath(self, ctx:SolidityParser.ImportPathContext): + pass + + # Exit a parse tree produced by SolidityParser#importPath. + def exitImportPath(self, ctx:SolidityParser.ImportPathContext): + pass + + # Enter a parse tree produced by SolidityParser#contractDefinition. def enterContractDefinition(self, ctx:SolidityParser.ContractDefinitionContext): pass @@ -125,6 +134,33 @@ def exitStateVariableDeclaration(self, ctx:SolidityParser.StateVariableDeclarati pass + # Enter a parse tree produced by SolidityParser#fileLevelConstant. + def enterFileLevelConstant(self, ctx:SolidityParser.FileLevelConstantContext): + pass + + # Exit a parse tree produced by SolidityParser#fileLevelConstant. + def exitFileLevelConstant(self, ctx:SolidityParser.FileLevelConstantContext): + pass + + + # Enter a parse tree produced by SolidityParser#customErrorDefinition. + def enterCustomErrorDefinition(self, ctx:SolidityParser.CustomErrorDefinitionContext): + pass + + # Exit a parse tree produced by SolidityParser#customErrorDefinition. + def exitCustomErrorDefinition(self, ctx:SolidityParser.CustomErrorDefinitionContext): + pass + + + # Enter a parse tree produced by SolidityParser#typeDefinition. + def enterTypeDefinition(self, ctx:SolidityParser.TypeDefinitionContext): + pass + + # Exit a parse tree produced by SolidityParser#typeDefinition. + def exitTypeDefinition(self, ctx:SolidityParser.TypeDefinitionContext): + pass + + # Enter a parse tree produced by SolidityParser#usingForDeclaration. def enterUsingForDeclaration(self, ctx:SolidityParser.UsingForDeclarationContext): pass @@ -143,15 +179,6 @@ def exitStructDefinition(self, ctx:SolidityParser.StructDefinitionContext): pass - # Enter a parse tree produced by SolidityParser#constructorDefinition. - def enterConstructorDefinition(self, ctx:SolidityParser.ConstructorDefinitionContext): - pass - - # Exit a parse tree produced by SolidityParser#constructorDefinition. - def exitConstructorDefinition(self, ctx:SolidityParser.ConstructorDefinitionContext): - pass - - # Enter a parse tree produced by SolidityParser#modifierDefinition. def enterModifierDefinition(self, ctx:SolidityParser.ModifierDefinitionContext): pass @@ -179,6 +206,15 @@ def exitFunctionDefinition(self, ctx:SolidityParser.FunctionDefinitionContext): pass + # Enter a parse tree produced by SolidityParser#functionDescriptor. + def enterFunctionDescriptor(self, ctx:SolidityParser.FunctionDescriptorContext): + pass + + # Exit a parse tree produced by SolidityParser#functionDescriptor. + def exitFunctionDescriptor(self, ctx:SolidityParser.FunctionDescriptorContext): + pass + + # Enter a parse tree produced by SolidityParser#returnParameters. def enterReturnParameters(self, ctx:SolidityParser.ReturnParametersContext): pass @@ -305,6 +341,15 @@ def exitUserDefinedTypeName(self, ctx:SolidityParser.UserDefinedTypeNameContext) pass + # Enter a parse tree produced by SolidityParser#mappingKey. + def enterMappingKey(self, ctx:SolidityParser.MappingKeyContext): + pass + + # Exit a parse tree produced by SolidityParser#mappingKey. + def exitMappingKey(self, ctx:SolidityParser.MappingKeyContext): + pass + + # Enter a parse tree produced by SolidityParser#mapping. def enterMapping(self, ctx:SolidityParser.MappingContext): pass @@ -377,6 +422,24 @@ def exitIfStatement(self, ctx:SolidityParser.IfStatementContext): pass + # Enter a parse tree produced by SolidityParser#tryStatement. + def enterTryStatement(self, ctx:SolidityParser.TryStatementContext): + pass + + # Exit a parse tree produced by SolidityParser#tryStatement. + def exitTryStatement(self, ctx:SolidityParser.TryStatementContext): + pass + + + # Enter a parse tree produced by SolidityParser#catchClause. + def enterCatchClause(self, ctx:SolidityParser.CatchClauseContext): + pass + + # Exit a parse tree produced by SolidityParser#catchClause. + def exitCatchClause(self, ctx:SolidityParser.CatchClauseContext): + pass + + # Enter a parse tree produced by SolidityParser#whileStatement. def enterWhileStatement(self, ctx:SolidityParser.WhileStatementContext): pass @@ -395,6 +458,15 @@ def exitSimpleStatement(self, ctx:SolidityParser.SimpleStatementContext): pass + # Enter a parse tree produced by SolidityParser#uncheckedStatement. + def enterUncheckedStatement(self, ctx:SolidityParser.UncheckedStatementContext): + pass + + # Exit a parse tree produced by SolidityParser#uncheckedStatement. + def exitUncheckedStatement(self, ctx:SolidityParser.UncheckedStatementContext): + pass + + # Enter a parse tree produced by SolidityParser#forStatement. def enterForStatement(self, ctx:SolidityParser.ForStatementContext): pass @@ -467,6 +539,15 @@ def exitEmitStatement(self, ctx:SolidityParser.EmitStatementContext): pass + # Enter a parse tree produced by SolidityParser#revertStatement. + def enterRevertStatement(self, ctx:SolidityParser.RevertStatementContext): + pass + + # Exit a parse tree produced by SolidityParser#revertStatement. + def exitRevertStatement(self, ctx:SolidityParser.RevertStatementContext): + pass + + # Enter a parse tree produced by SolidityParser#variableDeclarationStatement. def enterVariableDeclarationStatement(self, ctx:SolidityParser.VariableDeclarationStatementContext): pass @@ -593,6 +674,15 @@ def exitAssemblyExpression(self, ctx:SolidityParser.AssemblyExpressionContext): pass + # Enter a parse tree produced by SolidityParser#assemblyMember. + def enterAssemblyMember(self, ctx:SolidityParser.AssemblyMemberContext): + pass + + # Exit a parse tree produced by SolidityParser#assemblyMember. + def exitAssemblyMember(self, ctx:SolidityParser.AssemblyMemberContext): + pass + + # Enter a parse tree produced by SolidityParser#assemblyCall. def enterAssemblyCall(self, ctx:SolidityParser.AssemblyCallContext): pass @@ -737,12 +827,12 @@ def exitTupleExpression(self, ctx:SolidityParser.TupleExpressionContext): pass - # Enter a parse tree produced by SolidityParser#elementaryTypeNameExpression. - def enterElementaryTypeNameExpression(self, ctx:SolidityParser.ElementaryTypeNameExpressionContext): + # Enter a parse tree produced by SolidityParser#typeNameExpression. + def enterTypeNameExpression(self, ctx:SolidityParser.TypeNameExpressionContext): pass - # Exit a parse tree produced by SolidityParser#elementaryTypeNameExpression. - def exitElementaryTypeNameExpression(self, ctx:SolidityParser.ElementaryTypeNameExpressionContext): + # Exit a parse tree produced by SolidityParser#typeNameExpression. + def exitTypeNameExpression(self, ctx:SolidityParser.TypeNameExpressionContext): pass @@ -764,3 +854,32 @@ def exitIdentifier(self, ctx:SolidityParser.IdentifierContext): pass + # Enter a parse tree produced by SolidityParser#hexLiteral. + def enterHexLiteral(self, ctx:SolidityParser.HexLiteralContext): + pass + + # Exit a parse tree produced by SolidityParser#hexLiteral. + def exitHexLiteral(self, ctx:SolidityParser.HexLiteralContext): + pass + + + # Enter a parse tree produced by SolidityParser#overrideSpecifier. + def enterOverrideSpecifier(self, ctx:SolidityParser.OverrideSpecifierContext): + pass + + # Exit a parse tree produced by SolidityParser#overrideSpecifier. + def exitOverrideSpecifier(self, ctx:SolidityParser.OverrideSpecifierContext): + pass + + + # Enter a parse tree produced by SolidityParser#stringLiteral. + def enterStringLiteral(self, ctx:SolidityParser.StringLiteralContext): + pass + + # Exit a parse tree produced by SolidityParser#stringLiteral. + def exitStringLiteral(self, ctx:SolidityParser.StringLiteralContext): + pass + + + +del SolidityParser \ No newline at end of file diff --git a/solidity_parser/solidity_antlr4/SolidityParser.py b/solidity_parser/solidity_antlr4/SolidityParser.py index e60d065..791b283 100644 --- a/solidity_parser/solidity_antlr4/SolidityParser.py +++ b/solidity_parser/solidity_antlr4/SolidityParser.py @@ -1,15 +1,18 @@ -# Generated from solidity-antlr4/Solidity.g4 by ANTLR 4.7.2 +# Generated from solidity-antlr4/Solidity.g4 by ANTLR 4.9.3 # encoding: utf-8 from antlr4 import * from io import StringIO -from typing.io import TextIO import sys +if sys.version_info[1] > 5: + from typing import TextIO +else: + from typing.io import TextIO def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3y") - buf.write("\u03c5\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\u0087") + buf.write("\u046d\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16") buf.write("\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23\t\23") buf.write("\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31") @@ -20,472 +23,570 @@ def serializedATN(): buf.write("\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t") buf.write(";\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\t") buf.write("D\4E\tE\4F\tF\4G\tG\4H\tH\4I\tI\4J\tJ\4K\tK\4L\tL\4M\t") - buf.write("M\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR\4S\tS\4T\tT\4U\tU\3\2") - buf.write("\3\2\3\2\7\2\u00ae\n\2\f\2\16\2\u00b1\13\2\3\2\3\2\3\3") - buf.write("\3\3\3\3\3\3\3\3\3\4\3\4\3\5\3\5\5\5\u00be\n\5\3\6\3\6") - buf.write("\5\6\u00c2\n\6\3\7\3\7\3\b\5\b\u00c7\n\b\3\b\3\b\3\t\3") - buf.write("\t\3\t\5\t\u00ce\n\t\3\n\3\n\3\n\3\n\5\n\u00d4\n\n\3\n") - buf.write("\3\n\3\n\3\n\5\n\u00da\n\n\3\n\3\n\5\n\u00de\n\n\3\n\3") - buf.write("\n\3\n\3\n\3\n\3\n\3\n\3\n\7\n\u00e8\n\n\f\n\16\n\u00eb") - buf.write("\13\n\3\n\3\n\3\n\3\n\3\n\5\n\u00f2\n\n\3\13\3\13\3\13") - buf.write("\3\13\3\13\3\13\7\13\u00fa\n\13\f\13\16\13\u00fd\13\13") - buf.write("\5\13\u00ff\n\13\3\13\3\13\7\13\u0103\n\13\f\13\16\13") - buf.write("\u0106\13\13\3\13\3\13\3\f\3\f\3\f\3\f\3\f\7\f\u010f\n") - buf.write("\f\f\f\16\f\u0112\13\f\3\f\3\f\5\f\u0116\n\f\3\r\3\r\3") - buf.write("\r\3\r\3\r\3\r\3\r\3\r\5\r\u0120\n\r\3\16\3\16\7\16\u0124") - buf.write("\n\16\f\16\16\16\u0127\13\16\3\16\3\16\3\16\5\16\u012c") - buf.write("\n\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17\5\17\u0135\n") - buf.write("\17\3\17\3\17\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20") - buf.write("\7\20\u0141\n\20\f\20\16\20\u0144\13\20\5\20\u0146\n\20") - buf.write("\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3\22\3\22\3\22\5\22") - buf.write("\u0152\n\22\3\22\3\22\3\23\3\23\3\23\5\23\u0159\n\23\3") - buf.write("\23\5\23\u015c\n\23\3\24\3\24\5\24\u0160\n\24\3\24\3\24") - buf.write("\3\24\5\24\u0165\n\24\3\24\3\24\5\24\u0169\n\24\3\25\3") - buf.write("\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26\7\26\u0174\n\26") - buf.write("\f\26\16\26\u0177\13\26\3\27\3\27\3\27\3\27\5\27\u017d") - buf.write("\n\27\3\27\3\27\3\30\3\30\3\31\3\31\3\31\3\31\5\31\u0187") - buf.write("\n\31\3\31\3\31\7\31\u018b\n\31\f\31\16\31\u018e\13\31") - buf.write("\3\31\3\31\3\32\3\32\3\32\3\32\7\32\u0196\n\32\f\32\16") - buf.write("\32\u0199\13\32\5\32\u019b\n\32\3\32\3\32\3\33\3\33\5") - buf.write("\33\u01a1\n\33\3\33\5\33\u01a4\n\33\3\34\3\34\3\34\3\34") - buf.write("\7\34\u01aa\n\34\f\34\16\34\u01ad\13\34\5\34\u01af\n\34") - buf.write("\3\34\3\34\3\35\3\35\5\35\u01b5\n\35\3\35\5\35\u01b8\n") - buf.write("\35\3\36\3\36\3\36\3\36\7\36\u01be\n\36\f\36\16\36\u01c1") - buf.write("\13\36\5\36\u01c3\n\36\3\36\3\36\3\37\3\37\5\37\u01c9") - buf.write("\n\37\3 \3 \5 \u01cd\n \3 \3 \3!\3!\3!\3!\3!\3!\3!\5!") - buf.write("\u01d8\n!\3!\3!\3!\5!\u01dd\n!\3!\7!\u01e0\n!\f!\16!\u01e3") - buf.write("\13!\3\"\3\"\3\"\7\"\u01e8\n\"\f\"\16\"\u01eb\13\"\3#") - buf.write("\3#\3#\3#\3#\3#\3#\3$\3$\3$\3$\3$\7$\u01f9\n$\f$\16$\u01fc") - buf.write("\13$\3$\3$\5$\u0200\n$\3%\3%\3&\3&\3\'\3\'\7\'\u0208\n") - buf.write("\'\f\'\16\'\u020b\13\'\3\'\3\'\3(\3(\3(\3(\3(\3(\3(\3") - buf.write("(\3(\3(\3(\3(\5(\u021b\n(\3)\3)\3)\3*\3*\3*\3*\3*\3*\3") - buf.write("*\5*\u0227\n*\3+\3+\3+\3+\3+\3+\3,\3,\5,\u0231\n,\3-\3") - buf.write("-\3-\3-\5-\u0237\n-\3-\3-\5-\u023b\n-\3-\5-\u023e\n-\3") - buf.write("-\3-\3-\3.\3.\5.\u0245\n.\3.\3.\3/\3/\3/\3/\3/\3/\3/\3") - buf.write("/\3\60\3\60\3\60\3\61\3\61\3\61\3\62\3\62\5\62\u0259\n") - buf.write("\62\3\62\3\62\3\63\3\63\3\63\3\64\3\64\3\64\3\64\3\65") - buf.write("\3\65\3\65\3\65\3\65\3\65\3\65\5\65\u026b\n\65\3\65\3") - buf.write("\65\5\65\u026f\n\65\3\65\3\65\3\66\5\66\u0274\n\66\3\66") - buf.write("\3\66\5\66\u0278\n\66\7\66\u027a\n\66\f\66\16\66\u027d") - buf.write("\13\66\3\67\3\67\5\67\u0281\n\67\3\67\7\67\u0284\n\67") - buf.write("\f\67\16\67\u0287\13\67\3\67\5\67\u028a\n\67\3\67\3\67") - buf.write("\38\38\39\39\39\39\39\39\39\39\39\39\39\39\39\39\39\3") - buf.write("9\39\39\59\u02a2\n9\39\39\39\39\39\39\39\39\39\39\39\3") - buf.write("9\39\39\39\39\39\39\39\39\39\39\39\39\39\39\39\39\39\3") - buf.write("9\39\39\39\39\39\39\39\39\39\39\39\39\39\39\39\39\39\3") - buf.write("9\39\39\39\39\39\39\39\39\39\79\u02dd\n9\f9\169\u02e0") - buf.write("\139\3:\3:\3:\3:\3:\3:\3:\5:\u02e9\n:\3:\3:\3:\3:\5:\u02ef") - buf.write("\n:\5:\u02f1\n:\3;\3;\3;\7;\u02f6\n;\f;\16;\u02f9\13;") - buf.write("\3<\3<\3<\7<\u02fe\n<\f<\16<\u0301\13<\3<\5<\u0304\n<") - buf.write("\3=\3=\3=\3=\3>\3>\5>\u030c\n>\3>\3>\5>\u0310\n>\5>\u0312") - buf.write("\n>\3?\3?\3?\3?\3?\3@\3@\7@\u031b\n@\f@\16@\u031e\13@") - buf.write("\3@\3@\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3") - buf.write("A\3A\5A\u0333\nA\3B\3B\5B\u0337\nB\3C\3C\3C\3C\5C\u033d") - buf.write("\nC\3C\3C\5C\u0341\nC\3C\3C\7C\u0345\nC\fC\16C\u0348\13") - buf.write("C\3C\5C\u034b\nC\3D\3D\3D\3D\5D\u0351\nD\3E\3E\3E\3E\3") - buf.write("F\3F\3F\3F\3F\5F\u035c\nF\3G\3G\3G\7G\u0361\nG\fG\16G") - buf.write("\u0364\13G\3H\3H\3H\3I\3I\3I\3J\3J\3J\7J\u036f\nJ\fJ\16") - buf.write("J\u0372\13J\3K\3K\3K\3K\3K\3K\5K\u037a\nK\3L\3L\3L\3L") - buf.write("\5L\u0380\nL\3L\3L\5L\u0384\nL\3L\3L\3M\3M\3M\3N\3N\3") - buf.write("N\5N\u038e\nN\3N\3N\3N\5N\u0393\nN\3N\3N\3O\3O\3O\3O\3") - buf.write("P\3P\3Q\3Q\3Q\3Q\3R\3R\5R\u03a3\nR\3R\3R\5R\u03a7\nR\7") - buf.write("R\u03a9\nR\fR\16R\u03ac\13R\3R\3R\3R\3R\3R\7R\u03b3\n") - buf.write("R\fR\16R\u03b6\13R\5R\u03b8\nR\3R\5R\u03bb\nR\3S\3S\3") - buf.write("T\3T\5T\u03c1\nT\3U\3U\3U\2\4@pV\2\4\6\b\n\f\16\20\22") - buf.write("\24\26\30\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJLNPR") - buf.write("TVXZ\\^`bdfhjlnprtvxz|~\u0080\u0082\u0084\u0086\u0088") - buf.write("\u008a\u008c\u008e\u0090\u0092\u0094\u0096\u0098\u009a") - buf.write("\u009c\u009e\u00a0\u00a2\u00a4\u00a6\u00a8\2\23\3\2\5") - buf.write("\13\3\2\23\25\5\2kkooqr\3\2(*\5\2kkppst\5\2$$\63\66]a") - buf.write("\3\2\678\3\2:;\3\2<=\4\2\16\16@A\3\2BC\3\2\7\n\3\2FG\4") - buf.write("\2\13\13LU\5\2deggvv\3\2de\5\2\17\17**uu\2\u041e\2\u00af") - buf.write("\3\2\2\2\4\u00b4\3\2\2\2\6\u00b9\3\2\2\2\b\u00bd\3\2\2") - buf.write("\2\n\u00bf\3\2\2\2\f\u00c3\3\2\2\2\16\u00c6\3\2\2\2\20") - buf.write("\u00ca\3\2\2\2\22\u00f1\3\2\2\2\24\u00f3\3\2\2\2\26\u0109") - buf.write("\3\2\2\2\30\u011f\3\2\2\2\32\u0121\3\2\2\2\34\u012f\3") - buf.write("\2\2\2\36\u0138\3\2\2\2 \u0149\3\2\2\2\"\u014e\3\2\2\2") - buf.write("$\u0155\3\2\2\2&\u015d\3\2\2\2(\u016a\3\2\2\2*\u0175\3") - buf.write("\2\2\2,\u0178\3\2\2\2.\u0180\3\2\2\2\60\u0182\3\2\2\2") - buf.write("\62\u0191\3\2\2\2\64\u019e\3\2\2\2\66\u01a5\3\2\2\28\u01b2") - buf.write("\3\2\2\2:\u01b9\3\2\2\2<\u01c6\3\2\2\2>\u01ca\3\2\2\2") - buf.write("@\u01d7\3\2\2\2B\u01e4\3\2\2\2D\u01ec\3\2\2\2F\u01f3\3") - buf.write("\2\2\2H\u0201\3\2\2\2J\u0203\3\2\2\2L\u0205\3\2\2\2N\u021a") - buf.write("\3\2\2\2P\u021c\3\2\2\2R\u021f\3\2\2\2T\u0228\3\2\2\2") - buf.write("V\u0230\3\2\2\2X\u0232\3\2\2\2Z\u0242\3\2\2\2\\\u0248") - buf.write("\3\2\2\2^\u0250\3\2\2\2`\u0253\3\2\2\2b\u0256\3\2\2\2") - buf.write("d\u025c\3\2\2\2f\u025f\3\2\2\2h\u026a\3\2\2\2j\u0273\3") - buf.write("\2\2\2l\u027e\3\2\2\2n\u028d\3\2\2\2p\u02a1\3\2\2\2r\u02f0") - buf.write("\3\2\2\2t\u02f2\3\2\2\2v\u02fa\3\2\2\2x\u0305\3\2\2\2") - buf.write("z\u0311\3\2\2\2|\u0313\3\2\2\2~\u0318\3\2\2\2\u0080\u0332") - buf.write("\3\2\2\2\u0082\u0336\3\2\2\2\u0084\u033c\3\2\2\2\u0086") - buf.write("\u034c\3\2\2\2\u0088\u0352\3\2\2\2\u008a\u035b\3\2\2\2") - buf.write("\u008c\u035d\3\2\2\2\u008e\u0365\3\2\2\2\u0090\u0368\3") - buf.write("\2\2\2\u0092\u036b\3\2\2\2\u0094\u0379\3\2\2\2\u0096\u037b") - buf.write("\3\2\2\2\u0098\u0387\3\2\2\2\u009a\u038a\3\2\2\2\u009c") - buf.write("\u0396\3\2\2\2\u009e\u039a\3\2\2\2\u00a0\u039c\3\2\2\2") - buf.write("\u00a2\u03ba\3\2\2\2\u00a4\u03bc\3\2\2\2\u00a6\u03be\3") - buf.write("\2\2\2\u00a8\u03c2\3\2\2\2\u00aa\u00ae\5\4\3\2\u00ab\u00ae") - buf.write("\5\22\n\2\u00ac\u00ae\5\24\13\2\u00ad\u00aa\3\2\2\2\u00ad") - buf.write("\u00ab\3\2\2\2\u00ad\u00ac\3\2\2\2\u00ae\u00b1\3\2\2\2") - buf.write("\u00af\u00ad\3\2\2\2\u00af\u00b0\3\2\2\2\u00b0\u00b2\3") - buf.write("\2\2\2\u00b1\u00af\3\2\2\2\u00b2\u00b3\7\2\2\3\u00b3\3") - buf.write("\3\2\2\2\u00b4\u00b5\7\3\2\2\u00b5\u00b6\5\6\4\2\u00b6") - buf.write("\u00b7\5\b\5\2\u00b7\u00b8\7\4\2\2\u00b8\5\3\2\2\2\u00b9") - buf.write("\u00ba\5\u00a8U\2\u00ba\7\3\2\2\2\u00bb\u00be\5\n\6\2") - buf.write("\u00bc\u00be\5p9\2\u00bd\u00bb\3\2\2\2\u00bd\u00bc\3\2") - buf.write("\2\2\u00be\t\3\2\2\2\u00bf\u00c1\5\16\b\2\u00c0\u00c2") - buf.write("\5\16\b\2\u00c1\u00c0\3\2\2\2\u00c1\u00c2\3\2\2\2\u00c2") - buf.write("\13\3\2\2\2\u00c3\u00c4\t\2\2\2\u00c4\r\3\2\2\2\u00c5") - buf.write("\u00c7\5\f\7\2\u00c6\u00c5\3\2\2\2\u00c6\u00c7\3\2\2\2") - buf.write("\u00c7\u00c8\3\2\2\2\u00c8\u00c9\7b\2\2\u00c9\17\3\2\2") - buf.write("\2\u00ca\u00cd\5\u00a8U\2\u00cb\u00cc\7\f\2\2\u00cc\u00ce") - buf.write("\5\u00a8U\2\u00cd\u00cb\3\2\2\2\u00cd\u00ce\3\2\2\2\u00ce") - buf.write("\21\3\2\2\2\u00cf\u00d0\7\r\2\2\u00d0\u00d3\7v\2\2\u00d1") - buf.write("\u00d2\7\f\2\2\u00d2\u00d4\5\u00a8U\2\u00d3\u00d1\3\2") - buf.write("\2\2\u00d3\u00d4\3\2\2\2\u00d4\u00d5\3\2\2\2\u00d5\u00f2") - buf.write("\7\4\2\2\u00d6\u00d9\7\r\2\2\u00d7\u00da\7\16\2\2\u00d8") - buf.write("\u00da\5\u00a8U\2\u00d9\u00d7\3\2\2\2\u00d9\u00d8\3\2") - buf.write("\2\2\u00da\u00dd\3\2\2\2\u00db\u00dc\7\f\2\2\u00dc\u00de") - buf.write("\5\u00a8U\2\u00dd\u00db\3\2\2\2\u00dd\u00de\3\2\2\2\u00de") - buf.write("\u00df\3\2\2\2\u00df\u00e0\7\17\2\2\u00e0\u00e1\7v\2\2") - buf.write("\u00e1\u00f2\7\4\2\2\u00e2\u00e3\7\r\2\2\u00e3\u00e4\7") - buf.write("\20\2\2\u00e4\u00e9\5\20\t\2\u00e5\u00e6\7\21\2\2\u00e6") - buf.write("\u00e8\5\20\t\2\u00e7\u00e5\3\2\2\2\u00e8\u00eb\3\2\2") - buf.write("\2\u00e9\u00e7\3\2\2\2\u00e9\u00ea\3\2\2\2\u00ea\u00ec") - buf.write("\3\2\2\2\u00eb\u00e9\3\2\2\2\u00ec\u00ed\7\22\2\2\u00ed") - buf.write("\u00ee\7\17\2\2\u00ee\u00ef\7v\2\2\u00ef\u00f0\7\4\2\2") - buf.write("\u00f0\u00f2\3\2\2\2\u00f1\u00cf\3\2\2\2\u00f1\u00d6\3") - buf.write("\2\2\2\u00f1\u00e2\3\2\2\2\u00f2\23\3\2\2\2\u00f3\u00f4") - buf.write("\t\3\2\2\u00f4\u00fe\5\u00a8U\2\u00f5\u00f6\7\26\2\2\u00f6") - buf.write("\u00fb\5\26\f\2\u00f7\u00f8\7\21\2\2\u00f8\u00fa\5\26") - buf.write("\f\2\u00f9\u00f7\3\2\2\2\u00fa\u00fd\3\2\2\2\u00fb\u00f9") - buf.write("\3\2\2\2\u00fb\u00fc\3\2\2\2\u00fc\u00ff\3\2\2\2\u00fd") - buf.write("\u00fb\3\2\2\2\u00fe\u00f5\3\2\2\2\u00fe\u00ff\3\2\2\2") - buf.write("\u00ff\u0100\3\2\2\2\u0100\u0104\7\20\2\2\u0101\u0103") - buf.write("\5\30\r\2\u0102\u0101\3\2\2\2\u0103\u0106\3\2\2\2\u0104") - buf.write("\u0102\3\2\2\2\u0104\u0105\3\2\2\2\u0105\u0107\3\2\2\2") - buf.write("\u0106\u0104\3\2\2\2\u0107\u0108\7\22\2\2\u0108\25\3\2") - buf.write("\2\2\u0109\u0115\5B\"\2\u010a\u010b\7\27\2\2\u010b\u0110") - buf.write("\5p9\2\u010c\u010d\7\21\2\2\u010d\u010f\5p9\2\u010e\u010c") - buf.write("\3\2\2\2\u010f\u0112\3\2\2\2\u0110\u010e\3\2\2\2\u0110") - buf.write("\u0111\3\2\2\2\u0111\u0113\3\2\2\2\u0112\u0110\3\2\2\2") - buf.write("\u0113\u0114\7\30\2\2\u0114\u0116\3\2\2\2\u0115\u010a") - buf.write("\3\2\2\2\u0115\u0116\3\2\2\2\u0116\27\3\2\2\2\u0117\u0120") - buf.write("\5\32\16\2\u0118\u0120\5\34\17\2\u0119\u0120\5\36\20\2") - buf.write("\u011a\u0120\5 \21\2\u011b\u0120\5\"\22\2\u011c\u0120") - buf.write("\5&\24\2\u011d\u0120\5,\27\2\u011e\u0120\5\60\31\2\u011f") - buf.write("\u0117\3\2\2\2\u011f\u0118\3\2\2\2\u011f\u0119\3\2\2\2") - buf.write("\u011f\u011a\3\2\2\2\u011f\u011b\3\2\2\2\u011f\u011c\3") - buf.write("\2\2\2\u011f\u011d\3\2\2\2\u011f\u011e\3\2\2\2\u0120\31") - buf.write("\3\2\2\2\u0121\u0125\5@!\2\u0122\u0124\t\4\2\2\u0123\u0122") - buf.write("\3\2\2\2\u0124\u0127\3\2\2\2\u0125\u0123\3\2\2\2\u0125") - buf.write("\u0126\3\2\2\2\u0126\u0128\3\2\2\2\u0127\u0125\3\2\2\2") - buf.write("\u0128\u012b\5\u00a8U\2\u0129\u012a\7\13\2\2\u012a\u012c") - buf.write("\5p9\2\u012b\u0129\3\2\2\2\u012b\u012c\3\2\2\2\u012c\u012d") - buf.write("\3\2\2\2\u012d\u012e\7\4\2\2\u012e\33\3\2\2\2\u012f\u0130") - buf.write("\7\31\2\2\u0130\u0131\5\u00a8U\2\u0131\u0134\7\32\2\2") - buf.write("\u0132\u0135\7\16\2\2\u0133\u0135\5@!\2\u0134\u0132\3") - buf.write("\2\2\2\u0134\u0133\3\2\2\2\u0135\u0136\3\2\2\2\u0136\u0137") - buf.write("\7\4\2\2\u0137\35\3\2\2\2\u0138\u0139\7\33\2\2\u0139\u013a") - buf.write("\5\u00a8U\2\u013a\u0145\7\20\2\2\u013b\u013c\5> \2\u013c") - buf.write("\u0142\7\4\2\2\u013d\u013e\5> \2\u013e\u013f\7\4\2\2\u013f") - buf.write("\u0141\3\2\2\2\u0140\u013d\3\2\2\2\u0141\u0144\3\2\2\2") - buf.write("\u0142\u0140\3\2\2\2\u0142\u0143\3\2\2\2\u0143\u0146\3") - buf.write("\2\2\2\u0144\u0142\3\2\2\2\u0145\u013b\3\2\2\2\u0145\u0146") - buf.write("\3\2\2\2\u0146\u0147\3\2\2\2\u0147\u0148\7\22\2\2\u0148") - buf.write("\37\3\2\2\2\u0149\u014a\7\34\2\2\u014a\u014b\5\62\32\2") - buf.write("\u014b\u014c\5*\26\2\u014c\u014d\5L\'\2\u014d!\3\2\2\2") - buf.write("\u014e\u014f\7\35\2\2\u014f\u0151\5\u00a8U\2\u0150\u0152") - buf.write("\5\62\32\2\u0151\u0150\3\2\2\2\u0151\u0152\3\2\2\2\u0152") - buf.write("\u0153\3\2\2\2\u0153\u0154\5L\'\2\u0154#\3\2\2\2\u0155") - buf.write("\u015b\5\u00a8U\2\u0156\u0158\7\27\2\2\u0157\u0159\5t") - buf.write(";\2\u0158\u0157\3\2\2\2\u0158\u0159\3\2\2\2\u0159\u015a") - buf.write("\3\2\2\2\u015a\u015c\7\30\2\2\u015b\u0156\3\2\2\2\u015b") - buf.write("\u015c\3\2\2\2\u015c%\3\2\2\2\u015d\u015f\7\36\2\2\u015e") - buf.write("\u0160\5\u00a8U\2\u015f\u015e\3\2\2\2\u015f\u0160\3\2") - buf.write("\2\2\u0160\u0161\3\2\2\2\u0161\u0162\5\62\32\2\u0162\u0164") - buf.write("\5*\26\2\u0163\u0165\5(\25\2\u0164\u0163\3\2\2\2\u0164") - buf.write("\u0165\3\2\2\2\u0165\u0168\3\2\2\2\u0166\u0169\7\4\2\2") - buf.write("\u0167\u0169\5L\'\2\u0168\u0166\3\2\2\2\u0168\u0167\3") - buf.write("\2\2\2\u0169\'\3\2\2\2\u016a\u016b\7\37\2\2\u016b\u016c") - buf.write("\5\62\32\2\u016c)\3\2\2\2\u016d\u0174\5$\23\2\u016e\u0174") - buf.write("\5J&\2\u016f\u0174\7m\2\2\u0170\u0174\7r\2\2\u0171\u0174") - buf.write("\7o\2\2\u0172\u0174\7q\2\2\u0173\u016d\3\2\2\2\u0173\u016e") - buf.write("\3\2\2\2\u0173\u016f\3\2\2\2\u0173\u0170\3\2\2\2\u0173") - buf.write("\u0171\3\2\2\2\u0173\u0172\3\2\2\2\u0174\u0177\3\2\2\2") - buf.write("\u0175\u0173\3\2\2\2\u0175\u0176\3\2\2\2\u0176+\3\2\2") - buf.write("\2\u0177\u0175\3\2\2\2\u0178\u0179\7 \2\2\u0179\u017a") - buf.write("\5\u00a8U\2\u017a\u017c\5\66\34\2\u017b\u017d\7i\2\2\u017c") - buf.write("\u017b\3\2\2\2\u017c\u017d\3\2\2\2\u017d\u017e\3\2\2\2") - buf.write("\u017e\u017f\7\4\2\2\u017f-\3\2\2\2\u0180\u0181\5\u00a8") - buf.write("U\2\u0181/\3\2\2\2\u0182\u0183\7!\2\2\u0183\u0184\5\u00a8") - buf.write("U\2\u0184\u0186\7\20\2\2\u0185\u0187\5.\30\2\u0186\u0185") - buf.write("\3\2\2\2\u0186\u0187\3\2\2\2\u0187\u018c\3\2\2\2\u0188") - buf.write("\u0189\7\21\2\2\u0189\u018b\5.\30\2\u018a\u0188\3\2\2") - buf.write("\2\u018b\u018e\3\2\2\2\u018c\u018a\3\2\2\2\u018c\u018d") - buf.write("\3\2\2\2\u018d\u018f\3\2\2\2\u018e\u018c\3\2\2\2\u018f") - buf.write("\u0190\7\22\2\2\u0190\61\3\2\2\2\u0191\u019a\7\27\2\2") - buf.write("\u0192\u0197\5\64\33\2\u0193\u0194\7\21\2\2\u0194\u0196") - buf.write("\5\64\33\2\u0195\u0193\3\2\2\2\u0196\u0199\3\2\2\2\u0197") - buf.write("\u0195\3\2\2\2\u0197\u0198\3\2\2\2\u0198\u019b\3\2\2\2") - buf.write("\u0199\u0197\3\2\2\2\u019a\u0192\3\2\2\2\u019a\u019b\3") - buf.write("\2\2\2\u019b\u019c\3\2\2\2\u019c\u019d\7\30\2\2\u019d") - buf.write("\63\3\2\2\2\u019e\u01a0\5@!\2\u019f\u01a1\5H%\2\u01a0") - buf.write("\u019f\3\2\2\2\u01a0\u01a1\3\2\2\2\u01a1\u01a3\3\2\2\2") - buf.write("\u01a2\u01a4\5\u00a8U\2\u01a3\u01a2\3\2\2\2\u01a3\u01a4") - buf.write("\3\2\2\2\u01a4\65\3\2\2\2\u01a5\u01ae\7\27\2\2\u01a6\u01ab") - buf.write("\58\35\2\u01a7\u01a8\7\21\2\2\u01a8\u01aa\58\35\2\u01a9") - buf.write("\u01a7\3\2\2\2\u01aa\u01ad\3\2\2\2\u01ab\u01a9\3\2\2\2") - buf.write("\u01ab\u01ac\3\2\2\2\u01ac\u01af\3\2\2\2\u01ad\u01ab\3") - buf.write("\2\2\2\u01ae\u01a6\3\2\2\2\u01ae\u01af\3\2\2\2\u01af\u01b0") - buf.write("\3\2\2\2\u01b0\u01b1\7\30\2\2\u01b1\67\3\2\2\2\u01b2\u01b4") - buf.write("\5@!\2\u01b3\u01b5\7n\2\2\u01b4\u01b3\3\2\2\2\u01b4\u01b5") - buf.write("\3\2\2\2\u01b5\u01b7\3\2\2\2\u01b6\u01b8\5\u00a8U\2\u01b7") - buf.write("\u01b6\3\2\2\2\u01b7\u01b8\3\2\2\2\u01b89\3\2\2\2\u01b9") - buf.write("\u01c2\7\27\2\2\u01ba\u01bf\5<\37\2\u01bb\u01bc\7\21\2") - buf.write("\2\u01bc\u01be\5<\37\2\u01bd\u01bb\3\2\2\2\u01be\u01c1") - buf.write("\3\2\2\2\u01bf\u01bd\3\2\2\2\u01bf\u01c0\3\2\2\2\u01c0") - buf.write("\u01c3\3\2\2\2\u01c1\u01bf\3\2\2\2\u01c2\u01ba\3\2\2\2") - buf.write("\u01c2\u01c3\3\2\2\2\u01c3\u01c4\3\2\2\2\u01c4\u01c5\7") - buf.write("\30\2\2\u01c5;\3\2\2\2\u01c6\u01c8\5@!\2\u01c7\u01c9\5") - buf.write("H%\2\u01c8\u01c7\3\2\2\2\u01c8\u01c9\3\2\2\2\u01c9=\3") - buf.write("\2\2\2\u01ca\u01cc\5@!\2\u01cb\u01cd\5H%\2\u01cc\u01cb") - buf.write("\3\2\2\2\u01cc\u01cd\3\2\2\2\u01cd\u01ce\3\2\2\2\u01ce") - buf.write("\u01cf\5\u00a8U\2\u01cf?\3\2\2\2\u01d0\u01d1\b!\1\2\u01d1") - buf.write("\u01d8\5n8\2\u01d2\u01d8\5B\"\2\u01d3\u01d8\5D#\2\u01d4") - buf.write("\u01d8\5F$\2\u01d5\u01d6\7$\2\2\u01d6\u01d8\7p\2\2\u01d7") - buf.write("\u01d0\3\2\2\2\u01d7\u01d2\3\2\2\2\u01d7\u01d3\3\2\2\2") - buf.write("\u01d7\u01d4\3\2\2\2\u01d7\u01d5\3\2\2\2\u01d8\u01e1\3") - buf.write("\2\2\2\u01d9\u01da\f\5\2\2\u01da\u01dc\7\"\2\2\u01db\u01dd") - buf.write("\5p9\2\u01dc\u01db\3\2\2\2\u01dc\u01dd\3\2\2\2\u01dd\u01de") - buf.write("\3\2\2\2\u01de\u01e0\7#\2\2\u01df\u01d9\3\2\2\2\u01e0") - buf.write("\u01e3\3\2\2\2\u01e1\u01df\3\2\2\2\u01e1\u01e2\3\2\2\2") - buf.write("\u01e2A\3\2\2\2\u01e3\u01e1\3\2\2\2\u01e4\u01e9\5\u00a8") - buf.write("U\2\u01e5\u01e6\7%\2\2\u01e6\u01e8\5\u00a8U\2\u01e7\u01e5") - buf.write("\3\2\2\2\u01e8\u01eb\3\2\2\2\u01e9\u01e7\3\2\2\2\u01e9") - buf.write("\u01ea\3\2\2\2\u01eaC\3\2\2\2\u01eb\u01e9\3\2\2\2\u01ec") - buf.write("\u01ed\7&\2\2\u01ed\u01ee\7\27\2\2\u01ee\u01ef\5n8\2\u01ef") - buf.write("\u01f0\7\'\2\2\u01f0\u01f1\5@!\2\u01f1\u01f2\7\30\2\2") - buf.write("\u01f2E\3\2\2\2\u01f3\u01f4\7\36\2\2\u01f4\u01fa\5:\36") - buf.write("\2\u01f5\u01f9\7o\2\2\u01f6\u01f9\7m\2\2\u01f7\u01f9\5") - buf.write("J&\2\u01f8\u01f5\3\2\2\2\u01f8\u01f6\3\2\2\2\u01f8\u01f7") - buf.write("\3\2\2\2\u01f9\u01fc\3\2\2\2\u01fa\u01f8\3\2\2\2\u01fa") - buf.write("\u01fb\3\2\2\2\u01fb\u01ff\3\2\2\2\u01fc\u01fa\3\2\2\2") - buf.write("\u01fd\u01fe\7\37\2\2\u01fe\u0200\5:\36\2\u01ff\u01fd") - buf.write("\3\2\2\2\u01ff\u0200\3\2\2\2\u0200G\3\2\2\2\u0201\u0202") - buf.write("\t\5\2\2\u0202I\3\2\2\2\u0203\u0204\t\6\2\2\u0204K\3\2") - buf.write("\2\2\u0205\u0209\7\20\2\2\u0206\u0208\5N(\2\u0207\u0206") - buf.write("\3\2\2\2\u0208\u020b\3\2\2\2\u0209\u0207\3\2\2\2\u0209") - buf.write("\u020a\3\2\2\2\u020a\u020c\3\2\2\2\u020b\u0209\3\2\2\2") - buf.write("\u020c\u020d\7\22\2\2\u020dM\3\2\2\2\u020e\u021b\5R*\2") - buf.write("\u020f\u021b\5T+\2\u0210\u021b\5X-\2\u0211\u021b\5L\'") - buf.write("\2\u0212\u021b\5Z.\2\u0213\u021b\5\\/\2\u0214\u021b\5") - buf.write("^\60\2\u0215\u021b\5`\61\2\u0216\u021b\5b\62\2\u0217\u021b") - buf.write("\5d\63\2\u0218\u021b\5f\64\2\u0219\u021b\5V,\2\u021a\u020e") - buf.write("\3\2\2\2\u021a\u020f\3\2\2\2\u021a\u0210\3\2\2\2\u021a") - buf.write("\u0211\3\2\2\2\u021a\u0212\3\2\2\2\u021a\u0213\3\2\2\2") - buf.write("\u021a\u0214\3\2\2\2\u021a\u0215\3\2\2\2\u021a\u0216\3") - buf.write("\2\2\2\u021a\u0217\3\2\2\2\u021a\u0218\3\2\2\2\u021a\u0219") - buf.write("\3\2\2\2\u021bO\3\2\2\2\u021c\u021d\5p9\2\u021d\u021e") - buf.write("\7\4\2\2\u021eQ\3\2\2\2\u021f\u0220\7+\2\2\u0220\u0221") - buf.write("\7\27\2\2\u0221\u0222\5p9\2\u0222\u0223\7\30\2\2\u0223") - buf.write("\u0226\5N(\2\u0224\u0225\7,\2\2\u0225\u0227\5N(\2\u0226") - buf.write("\u0224\3\2\2\2\u0226\u0227\3\2\2\2\u0227S\3\2\2\2\u0228") - buf.write("\u0229\7-\2\2\u0229\u022a\7\27\2\2\u022a\u022b\5p9\2\u022b") - buf.write("\u022c\7\30\2\2\u022c\u022d\5N(\2\u022dU\3\2\2\2\u022e") - buf.write("\u0231\5h\65\2\u022f\u0231\5P)\2\u0230\u022e\3\2\2\2\u0230") - buf.write("\u022f\3\2\2\2\u0231W\3\2\2\2\u0232\u0233\7\32\2\2\u0233") - buf.write("\u0236\7\27\2\2\u0234\u0237\5V,\2\u0235\u0237\7\4\2\2") - buf.write("\u0236\u0234\3\2\2\2\u0236\u0235\3\2\2\2\u0237\u023a\3") - buf.write("\2\2\2\u0238\u023b\5P)\2\u0239\u023b\7\4\2\2\u023a\u0238") - buf.write("\3\2\2\2\u023a\u0239\3\2\2\2\u023b\u023d\3\2\2\2\u023c") - buf.write("\u023e\5p9\2\u023d\u023c\3\2\2\2\u023d\u023e\3\2\2\2\u023e") - buf.write("\u023f\3\2\2\2\u023f\u0240\7\30\2\2\u0240\u0241\5N(\2") - buf.write("\u0241Y\3\2\2\2\u0242\u0244\7.\2\2\u0243\u0245\7v\2\2") - buf.write("\u0244\u0243\3\2\2\2\u0244\u0245\3\2\2\2\u0245\u0246\3") - buf.write("\2\2\2\u0246\u0247\5~@\2\u0247[\3\2\2\2\u0248\u0249\7") - buf.write("/\2\2\u0249\u024a\5N(\2\u024a\u024b\7-\2\2\u024b\u024c") - buf.write("\7\27\2\2\u024c\u024d\5p9\2\u024d\u024e\7\30\2\2\u024e") - buf.write("\u024f\7\4\2\2\u024f]\3\2\2\2\u0250\u0251\7l\2\2\u0251") - buf.write("\u0252\7\4\2\2\u0252_\3\2\2\2\u0253\u0254\7j\2\2\u0254") - buf.write("\u0255\7\4\2\2\u0255a\3\2\2\2\u0256\u0258\7\60\2\2\u0257") - buf.write("\u0259\5p9\2\u0258\u0257\3\2\2\2\u0258\u0259\3\2\2\2\u0259") - buf.write("\u025a\3\2\2\2\u025a\u025b\7\4\2\2\u025bc\3\2\2\2\u025c") - buf.write("\u025d\7\61\2\2\u025d\u025e\7\4\2\2\u025ee\3\2\2\2\u025f") - buf.write("\u0260\7\62\2\2\u0260\u0261\5|?\2\u0261\u0262\7\4\2\2") - buf.write("\u0262g\3\2\2\2\u0263\u0264\7\63\2\2\u0264\u026b\5l\67") - buf.write("\2\u0265\u026b\5> \2\u0266\u0267\7\27\2\2\u0267\u0268") - buf.write("\5j\66\2\u0268\u0269\7\30\2\2\u0269\u026b\3\2\2\2\u026a") - buf.write("\u0263\3\2\2\2\u026a\u0265\3\2\2\2\u026a\u0266\3\2\2\2") - buf.write("\u026b\u026e\3\2\2\2\u026c\u026d\7\13\2\2\u026d\u026f") - buf.write("\5p9\2\u026e\u026c\3\2\2\2\u026e\u026f\3\2\2\2\u026f\u0270") - buf.write("\3\2\2\2\u0270\u0271\7\4\2\2\u0271i\3\2\2\2\u0272\u0274") - buf.write("\5> \2\u0273\u0272\3\2\2\2\u0273\u0274\3\2\2\2\u0274\u027b") - buf.write("\3\2\2\2\u0275\u0277\7\21\2\2\u0276\u0278\5> \2\u0277") - buf.write("\u0276\3\2\2\2\u0277\u0278\3\2\2\2\u0278\u027a\3\2\2\2") - buf.write("\u0279\u0275\3\2\2\2\u027a\u027d\3\2\2\2\u027b\u0279\3") - buf.write("\2\2\2\u027b\u027c\3\2\2\2\u027ck\3\2\2\2\u027d\u027b") - buf.write("\3\2\2\2\u027e\u0285\7\27\2\2\u027f\u0281\5\u00a8U\2\u0280") - buf.write("\u027f\3\2\2\2\u0280\u0281\3\2\2\2\u0281\u0282\3\2\2\2") - buf.write("\u0282\u0284\7\21\2\2\u0283\u0280\3\2\2\2\u0284\u0287") - buf.write("\3\2\2\2\u0285\u0283\3\2\2\2\u0285\u0286\3\2\2\2\u0286") - buf.write("\u0289\3\2\2\2\u0287\u0285\3\2\2\2\u0288\u028a\5\u00a8") - buf.write("U\2\u0289\u0288\3\2\2\2\u0289\u028a\3\2\2\2\u028a\u028b") - buf.write("\3\2\2\2\u028b\u028c\7\30\2\2\u028cm\3\2\2\2\u028d\u028e") - buf.write("\t\7\2\2\u028eo\3\2\2\2\u028f\u0290\b9\1\2\u0290\u0291") - buf.write("\79\2\2\u0291\u02a2\5@!\2\u0292\u0293\7\27\2\2\u0293\u0294") - buf.write("\5p9\2\u0294\u0295\7\30\2\2\u0295\u02a2\3\2\2\2\u0296") - buf.write("\u0297\t\b\2\2\u0297\u02a2\5p9\25\u0298\u0299\t\t\2\2") - buf.write("\u0299\u02a2\5p9\24\u029a\u029b\t\n\2\2\u029b\u02a2\5") - buf.write("p9\23\u029c\u029d\7>\2\2\u029d\u02a2\5p9\22\u029e\u029f") - buf.write("\7\6\2\2\u029f\u02a2\5p9\21\u02a0\u02a2\5r:\2\u02a1\u028f") - buf.write("\3\2\2\2\u02a1\u0292\3\2\2\2\u02a1\u0296\3\2\2\2\u02a1") - buf.write("\u0298\3\2\2\2\u02a1\u029a\3\2\2\2\u02a1\u029c\3\2\2\2") - buf.write("\u02a1\u029e\3\2\2\2\u02a1\u02a0\3\2\2\2\u02a2\u02de\3") - buf.write("\2\2\2\u02a3\u02a4\f\20\2\2\u02a4\u02a5\7?\2\2\u02a5\u02dd") - buf.write("\5p9\21\u02a6\u02a7\f\17\2\2\u02a7\u02a8\t\13\2\2\u02a8") - buf.write("\u02dd\5p9\20\u02a9\u02aa\f\16\2\2\u02aa\u02ab\t\t\2\2") - buf.write("\u02ab\u02dd\5p9\17\u02ac\u02ad\f\r\2\2\u02ad\u02ae\t") - buf.write("\f\2\2\u02ae\u02dd\5p9\16\u02af\u02b0\f\f\2\2\u02b0\u02b1") - buf.write("\7D\2\2\u02b1\u02dd\5p9\r\u02b2\u02b3\f\13\2\2\u02b3\u02b4") - buf.write("\7\5\2\2\u02b4\u02dd\5p9\f\u02b5\u02b6\f\n\2\2\u02b6\u02b7") - buf.write("\7E\2\2\u02b7\u02dd\5p9\13\u02b8\u02b9\f\t\2\2\u02b9\u02ba") - buf.write("\t\r\2\2\u02ba\u02dd\5p9\n\u02bb\u02bc\f\b\2\2\u02bc\u02bd") - buf.write("\t\16\2\2\u02bd\u02dd\5p9\t\u02be\u02bf\f\7\2\2\u02bf") - buf.write("\u02c0\7H\2\2\u02c0\u02dd\5p9\b\u02c1\u02c2\f\6\2\2\u02c2") - buf.write("\u02c3\7I\2\2\u02c3\u02dd\5p9\7\u02c4\u02c5\f\5\2\2\u02c5") - buf.write("\u02c6\7J\2\2\u02c6\u02c7\5p9\2\u02c7\u02c8\7K\2\2\u02c8") - buf.write("\u02c9\5p9\6\u02c9\u02dd\3\2\2\2\u02ca\u02cb\f\4\2\2\u02cb") - buf.write("\u02cc\t\17\2\2\u02cc\u02dd\5p9\5\u02cd\u02ce\f\33\2\2") - buf.write("\u02ce\u02dd\t\b\2\2\u02cf\u02d0\f\31\2\2\u02d0\u02d1") - buf.write("\7\"\2\2\u02d1\u02d2\5p9\2\u02d2\u02d3\7#\2\2\u02d3\u02dd") - buf.write("\3\2\2\2\u02d4\u02d5\f\30\2\2\u02d5\u02d6\7\27\2\2\u02d6") - buf.write("\u02d7\5z>\2\u02d7\u02d8\7\30\2\2\u02d8\u02dd\3\2\2\2") - buf.write("\u02d9\u02da\f\27\2\2\u02da\u02db\7%\2\2\u02db\u02dd\5") - buf.write("\u00a8U\2\u02dc\u02a3\3\2\2\2\u02dc\u02a6\3\2\2\2\u02dc") - buf.write("\u02a9\3\2\2\2\u02dc\u02ac\3\2\2\2\u02dc\u02af\3\2\2\2") - buf.write("\u02dc\u02b2\3\2\2\2\u02dc\u02b5\3\2\2\2\u02dc\u02b8\3") - buf.write("\2\2\2\u02dc\u02bb\3\2\2\2\u02dc\u02be\3\2\2\2\u02dc\u02c1") - buf.write("\3\2\2\2\u02dc\u02c4\3\2\2\2\u02dc\u02ca\3\2\2\2\u02dc") - buf.write("\u02cd\3\2\2\2\u02dc\u02cf\3\2\2\2\u02dc\u02d4\3\2\2\2") - buf.write("\u02dc\u02d9\3\2\2\2\u02dd\u02e0\3\2\2\2\u02de\u02dc\3") - buf.write("\2\2\2\u02de\u02df\3\2\2\2\u02dfq\3\2\2\2\u02e0\u02de") - buf.write("\3\2\2\2\u02e1\u02f1\7c\2\2\u02e2\u02f1\5\u00a6T\2\u02e3") - buf.write("\u02f1\7g\2\2\u02e4\u02f1\7v\2\2\u02e5\u02e8\5\u00a8U") - buf.write("\2\u02e6\u02e7\7\"\2\2\u02e7\u02e9\7#\2\2\u02e8\u02e6") - buf.write("\3\2\2\2\u02e8\u02e9\3\2\2\2\u02e9\u02f1\3\2\2\2\u02ea") - buf.write("\u02f1\5\u00a2R\2\u02eb\u02ee\5\u00a4S\2\u02ec\u02ed\7") - buf.write("\"\2\2\u02ed\u02ef\7#\2\2\u02ee\u02ec\3\2\2\2\u02ee\u02ef") - buf.write("\3\2\2\2\u02ef\u02f1\3\2\2\2\u02f0\u02e1\3\2\2\2\u02f0") - buf.write("\u02e2\3\2\2\2\u02f0\u02e3\3\2\2\2\u02f0\u02e4\3\2\2\2") - buf.write("\u02f0\u02e5\3\2\2\2\u02f0\u02ea\3\2\2\2\u02f0\u02eb\3") - buf.write("\2\2\2\u02f1s\3\2\2\2\u02f2\u02f7\5p9\2\u02f3\u02f4\7") - buf.write("\21\2\2\u02f4\u02f6\5p9\2\u02f5\u02f3\3\2\2\2\u02f6\u02f9") - buf.write("\3\2\2\2\u02f7\u02f5\3\2\2\2\u02f7\u02f8\3\2\2\2\u02f8") - buf.write("u\3\2\2\2\u02f9\u02f7\3\2\2\2\u02fa\u02ff\5x=\2\u02fb") - buf.write("\u02fc\7\21\2\2\u02fc\u02fe\5x=\2\u02fd\u02fb\3\2\2\2") - buf.write("\u02fe\u0301\3\2\2\2\u02ff\u02fd\3\2\2\2\u02ff\u0300\3") - buf.write("\2\2\2\u0300\u0303\3\2\2\2\u0301\u02ff\3\2\2\2\u0302\u0304") - buf.write("\7\21\2\2\u0303\u0302\3\2\2\2\u0303\u0304\3\2\2\2\u0304") - buf.write("w\3\2\2\2\u0305\u0306\5\u00a8U\2\u0306\u0307\7K\2\2\u0307") - buf.write("\u0308\5p9\2\u0308y\3\2\2\2\u0309\u030b\7\20\2\2\u030a") - buf.write("\u030c\5v<\2\u030b\u030a\3\2\2\2\u030b\u030c\3\2\2\2\u030c") - buf.write("\u030d\3\2\2\2\u030d\u0312\7\22\2\2\u030e\u0310\5t;\2") - buf.write("\u030f\u030e\3\2\2\2\u030f\u0310\3\2\2\2\u0310\u0312\3") - buf.write("\2\2\2\u0311\u0309\3\2\2\2\u0311\u030f\3\2\2\2\u0312{") - buf.write("\3\2\2\2\u0313\u0314\5p9\2\u0314\u0315\7\27\2\2\u0315") - buf.write("\u0316\5z>\2\u0316\u0317\7\30\2\2\u0317}\3\2\2\2\u0318") - buf.write("\u031c\7\20\2\2\u0319\u031b\5\u0080A\2\u031a\u0319\3\2") - buf.write("\2\2\u031b\u031e\3\2\2\2\u031c\u031a\3\2\2\2\u031c\u031d") - buf.write("\3\2\2\2\u031d\u031f\3\2\2\2\u031e\u031c\3\2\2\2\u031f") - buf.write("\u0320\7\22\2\2\u0320\177\3\2\2\2\u0321\u0333\5\u00a8") - buf.write("U\2\u0322\u0333\5~@\2\u0323\u0333\5\u0082B\2\u0324\u0333") - buf.write("\5\u0086D\2\u0325\u0333\5\u0088E\2\u0326\u0333\5\u008e") - buf.write("H\2\u0327\u0333\5\u0090I\2\u0328\u0333\5\u0092J\2\u0329") - buf.write("\u0333\5\u0096L\2\u032a\u0333\5\u009aN\2\u032b\u0333\5") - buf.write("\u009cO\2\u032c\u0333\7j\2\2\u032d\u0333\7l\2\2\u032e") - buf.write("\u0333\5\u00a0Q\2\u032f\u0333\5\u00a6T\2\u0330\u0333\7") - buf.write("v\2\2\u0331\u0333\7g\2\2\u0332\u0321\3\2\2\2\u0332\u0322") - buf.write("\3\2\2\2\u0332\u0323\3\2\2\2\u0332\u0324\3\2\2\2\u0332") - buf.write("\u0325\3\2\2\2\u0332\u0326\3\2\2\2\u0332\u0327\3\2\2\2") - buf.write("\u0332\u0328\3\2\2\2\u0332\u0329\3\2\2\2\u0332\u032a\3") - buf.write("\2\2\2\u0332\u032b\3\2\2\2\u0332\u032c\3\2\2\2\u0332\u032d") - buf.write("\3\2\2\2\u0332\u032e\3\2\2\2\u0332\u032f\3\2\2\2\u0332") - buf.write("\u0330\3\2\2\2\u0332\u0331\3\2\2\2\u0333\u0081\3\2\2\2") - buf.write("\u0334\u0337\5\u0084C\2\u0335\u0337\5\u009eP\2\u0336\u0334") - buf.write("\3\2\2\2\u0336\u0335\3\2\2\2\u0337\u0083\3\2\2\2\u0338") - buf.write("\u033d\7\60\2\2\u0339\u033d\7$\2\2\u033a\u033d\7\66\2") - buf.write("\2\u033b\u033d\5\u00a8U\2\u033c\u0338\3\2\2\2\u033c\u0339") - buf.write("\3\2\2\2\u033c\u033a\3\2\2\2\u033c\u033b\3\2\2\2\u033d") - buf.write("\u034a\3\2\2\2\u033e\u0340\7\27\2\2\u033f\u0341\5\u0082") - buf.write("B\2\u0340\u033f\3\2\2\2\u0340\u0341\3\2\2\2\u0341\u0346") - buf.write("\3\2\2\2\u0342\u0343\7\21\2\2\u0343\u0345\5\u0082B\2\u0344") - buf.write("\u0342\3\2\2\2\u0345\u0348\3\2\2\2\u0346\u0344\3\2\2\2") - buf.write("\u0346\u0347\3\2\2\2\u0347\u0349\3\2\2\2\u0348\u0346\3") - buf.write("\2\2\2\u0349\u034b\7\30\2\2\u034a\u033e\3\2\2\2\u034a") - buf.write("\u034b\3\2\2\2\u034b\u0085\3\2\2\2\u034c\u034d\7V\2\2") - buf.write("\u034d\u0350\5\u008aF\2\u034e\u034f\7W\2\2\u034f\u0351") - buf.write("\5\u0082B\2\u0350\u034e\3\2\2\2\u0350\u0351\3\2\2\2\u0351") - buf.write("\u0087\3\2\2\2\u0352\u0353\5\u008aF\2\u0353\u0354\7W\2") - buf.write("\2\u0354\u0355\5\u0082B\2\u0355\u0089\3\2\2\2\u0356\u035c") - buf.write("\5\u00a8U\2\u0357\u0358\7\27\2\2\u0358\u0359\5\u008cG") - buf.write("\2\u0359\u035a\7\30\2\2\u035a\u035c\3\2\2\2\u035b\u0356") - buf.write("\3\2\2\2\u035b\u0357\3\2\2\2\u035c\u008b\3\2\2\2\u035d") - buf.write("\u0362\5\u00a8U\2\u035e\u035f\7\21\2\2\u035f\u0361\5\u00a8") - buf.write("U\2\u0360\u035e\3\2\2\2\u0361\u0364\3\2\2\2\u0362\u0360") - buf.write("\3\2\2\2\u0362\u0363\3\2\2\2\u0363\u008d\3\2\2\2\u0364") - buf.write("\u0362\3\2\2\2\u0365\u0366\7X\2\2\u0366\u0367\5\u00a8") - buf.write("U\2\u0367\u008f\3\2\2\2\u0368\u0369\5\u00a8U\2\u0369\u036a") - buf.write("\7K\2\2\u036a\u0091\3\2\2\2\u036b\u036c\7Y\2\2\u036c\u0370") - buf.write("\5\u0082B\2\u036d\u036f\5\u0094K\2\u036e\u036d\3\2\2\2") - buf.write("\u036f\u0372\3\2\2\2\u0370\u036e\3\2\2\2\u0370\u0371\3") - buf.write("\2\2\2\u0371\u0093\3\2\2\2\u0372\u0370\3\2\2\2\u0373\u0374") - buf.write("\7Z\2\2\u0374\u0375\5\u009eP\2\u0375\u0376\5~@\2\u0376") - buf.write("\u037a\3\2\2\2\u0377\u0378\7[\2\2\u0378\u037a\5~@\2\u0379") - buf.write("\u0373\3\2\2\2\u0379\u0377\3\2\2\2\u037a\u0095\3\2\2\2") - buf.write("\u037b\u037c\7\36\2\2\u037c\u037d\5\u00a8U\2\u037d\u037f") - buf.write("\7\27\2\2\u037e\u0380\5\u008cG\2\u037f\u037e\3\2\2\2\u037f") - buf.write("\u0380\3\2\2\2\u0380\u0381\3\2\2\2\u0381\u0383\7\30\2") - buf.write("\2\u0382\u0384\5\u0098M\2\u0383\u0382\3\2\2\2\u0383\u0384") - buf.write("\3\2\2\2\u0384\u0385\3\2\2\2\u0385\u0386\5~@\2\u0386\u0097") - buf.write("\3\2\2\2\u0387\u0388\7\\\2\2\u0388\u0389\5\u008cG\2\u0389") - buf.write("\u0099\3\2\2\2\u038a\u038d\7\32\2\2\u038b\u038e\5~@\2") - buf.write("\u038c\u038e\5\u0082B\2\u038d\u038b\3\2\2\2\u038d\u038c") - buf.write("\3\2\2\2\u038e\u038f\3\2\2\2\u038f\u0392\5\u0082B\2\u0390") - buf.write("\u0393\5~@\2\u0391\u0393\5\u0082B\2\u0392\u0390\3\2\2") - buf.write("\2\u0392\u0391\3\2\2\2\u0393\u0394\3\2\2\2\u0394\u0395") - buf.write("\5~@\2\u0395\u009b\3\2\2\2\u0396\u0397\7+\2\2\u0397\u0398") - buf.write("\5\u0082B\2\u0398\u0399\5~@\2\u0399\u009d\3\2\2\2\u039a") - buf.write("\u039b\t\20\2\2\u039b\u009f\3\2\2\2\u039c\u039d\7.\2\2") - buf.write("\u039d\u039e\5\u00a8U\2\u039e\u039f\5~@\2\u039f\u00a1") - buf.write("\3\2\2\2\u03a0\u03a2\7\27\2\2\u03a1\u03a3\5p9\2\u03a2") - buf.write("\u03a1\3\2\2\2\u03a2\u03a3\3\2\2\2\u03a3\u03aa\3\2\2\2") - buf.write("\u03a4\u03a6\7\21\2\2\u03a5\u03a7\5p9\2\u03a6\u03a5\3") - buf.write("\2\2\2\u03a6\u03a7\3\2\2\2\u03a7\u03a9\3\2\2\2\u03a8\u03a4") - buf.write("\3\2\2\2\u03a9\u03ac\3\2\2\2\u03aa\u03a8\3\2\2\2\u03aa") - buf.write("\u03ab\3\2\2\2\u03ab\u03ad\3\2\2\2\u03ac\u03aa\3\2\2\2") - buf.write("\u03ad\u03bb\7\30\2\2\u03ae\u03b7\7\"\2\2\u03af\u03b4") - buf.write("\5p9\2\u03b0\u03b1\7\21\2\2\u03b1\u03b3\5p9\2\u03b2\u03b0") - buf.write("\3\2\2\2\u03b3\u03b6\3\2\2\2\u03b4\u03b2\3\2\2\2\u03b4") - buf.write("\u03b5\3\2\2\2\u03b5\u03b8\3\2\2\2\u03b6\u03b4\3\2\2\2") - buf.write("\u03b7\u03af\3\2\2\2\u03b7\u03b8\3\2\2\2\u03b8\u03b9\3") - buf.write("\2\2\2\u03b9\u03bb\7#\2\2\u03ba\u03a0\3\2\2\2\u03ba\u03ae") - buf.write("\3\2\2\2\u03bb\u00a3\3\2\2\2\u03bc\u03bd\5n8\2\u03bd\u00a5") - buf.write("\3\2\2\2\u03be\u03c0\t\21\2\2\u03bf\u03c1\7f\2\2\u03c0") - buf.write("\u03bf\3\2\2\2\u03c0\u03c1\3\2\2\2\u03c1\u00a7\3\2\2\2") - buf.write("\u03c2\u03c3\t\22\2\2\u03c3\u00a9\3\2\2\2j\u00ad\u00af") - buf.write("\u00bd\u00c1\u00c6\u00cd\u00d3\u00d9\u00dd\u00e9\u00f1") - buf.write("\u00fb\u00fe\u0104\u0110\u0115\u011f\u0125\u012b\u0134") - buf.write("\u0142\u0145\u0151\u0158\u015b\u015f\u0164\u0168\u0173") - buf.write("\u0175\u017c\u0186\u018c\u0197\u019a\u01a0\u01a3\u01ab") - buf.write("\u01ae\u01b4\u01b7\u01bf\u01c2\u01c8\u01cc\u01d7\u01dc") - buf.write("\u01e1\u01e9\u01f8\u01fa\u01ff\u0209\u021a\u0226\u0230") - buf.write("\u0236\u023a\u023d\u0244\u0258\u026a\u026e\u0273\u0277") - buf.write("\u027b\u0280\u0285\u0289\u02a1\u02dc\u02de\u02e8\u02ee") - buf.write("\u02f0\u02f7\u02ff\u0303\u030b\u030f\u0311\u031c\u0332") - buf.write("\u0336\u033c\u0340\u0346\u034a\u0350\u035b\u0362\u0370") - buf.write("\u0379\u037f\u0383\u038d\u0392\u03a2\u03a6\u03aa\u03b4") - buf.write("\u03b7\u03ba\u03c0") + buf.write("M\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR\4S\tS\4T\tT\4U\tU\4V\t") + buf.write("V\4W\tW\4X\tX\4Y\tY\4Z\tZ\4[\t[\4\\\t\\\4]\t]\4^\t^\4") + buf.write("_\t_\4`\t`\4a\ta\4b\tb\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\2") + buf.write("\3\2\7\2\u00ce\n\2\f\2\16\2\u00d1\13\2\3\2\3\2\3\3\3\3") + buf.write("\3\3\3\3\3\3\3\4\3\4\3\5\3\5\5\5\u00de\n\5\3\6\3\6\5\6") + buf.write("\u00e2\n\6\3\6\7\6\u00e5\n\6\f\6\16\6\u00e8\13\6\3\7\3") + buf.write("\7\3\b\5\b\u00ed\n\b\3\b\3\b\5\b\u00f1\n\b\3\b\5\b\u00f4") + buf.write("\n\b\3\t\3\t\3\t\5\t\u00f9\n\t\3\n\3\n\3\n\3\n\5\n\u00ff") + buf.write("\n\n\3\n\3\n\3\n\3\n\3\n\5\n\u0106\n\n\3\n\3\n\5\n\u010a") + buf.write("\n\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\7\n\u0115\n\n") + buf.write("\f\n\16\n\u0118\13\n\3\n\3\n\3\n\3\n\3\n\5\n\u011f\n\n") + buf.write("\3\13\3\13\3\f\5\f\u0124\n\f\3\f\3\f\3\f\3\f\3\f\3\f\7") + buf.write("\f\u012c\n\f\f\f\16\f\u012f\13\f\5\f\u0131\n\f\3\f\3\f") + buf.write("\7\f\u0135\n\f\f\f\16\f\u0138\13\f\3\f\3\f\3\r\3\r\3\r") + buf.write("\5\r\u013f\n\r\3\r\5\r\u0142\n\r\3\16\3\16\3\16\3\16\3") + buf.write("\16\3\16\3\16\3\16\3\16\5\16\u014d\n\16\3\17\3\17\3\17") + buf.write("\3\17\3\17\3\17\3\17\7\17\u0156\n\17\f\17\16\17\u0159") + buf.write("\13\17\3\17\3\17\3\17\5\17\u015e\n\17\3\17\3\17\3\20\3") + buf.write("\20\3\20\3\20\3\20\3\20\3\20\3\21\3\21\3\21\3\21\3\21") + buf.write("\3\22\3\22\3\22\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3\23") + buf.write("\5\23\u0179\n\23\3\23\3\23\3\24\3\24\3\24\3\24\3\24\3") + buf.write("\24\3\24\3\24\7\24\u0185\n\24\f\24\16\24\u0188\13\24\5") + buf.write("\24\u018a\n\24\3\24\3\24\3\25\3\25\3\25\5\25\u0191\n\25") + buf.write("\3\25\3\25\7\25\u0195\n\25\f\25\16\25\u0198\13\25\3\25") + buf.write("\3\25\5\25\u019c\n\25\3\26\3\26\3\26\5\26\u01a1\n\26\3") + buf.write("\26\5\26\u01a4\n\26\3\27\3\27\3\27\3\27\5\27\u01aa\n\27") + buf.write("\3\27\3\27\5\27\u01ae\n\27\3\30\3\30\5\30\u01b2\n\30\3") + buf.write("\30\3\30\3\30\5\30\u01b7\n\30\3\31\3\31\3\31\3\32\3\32") + buf.write("\3\32\3\32\3\32\3\32\3\32\3\32\7\32\u01c4\n\32\f\32\16") + buf.write("\32\u01c7\13\32\3\33\3\33\3\33\3\33\5\33\u01cd\n\33\3") + buf.write("\33\3\33\3\34\3\34\3\35\3\35\3\35\3\35\5\35\u01d7\n\35") + buf.write("\3\35\3\35\7\35\u01db\n\35\f\35\16\35\u01de\13\35\3\35") + buf.write("\3\35\3\36\3\36\3\36\3\36\7\36\u01e6\n\36\f\36\16\36\u01e9") + buf.write("\13\36\5\36\u01eb\n\36\3\36\3\36\3\37\3\37\5\37\u01f1") + buf.write("\n\37\3\37\5\37\u01f4\n\37\3 \3 \3 \3 \7 \u01fa\n \f ") + buf.write("\16 \u01fd\13 \5 \u01ff\n \3 \3 \3!\3!\5!\u0205\n!\3!") + buf.write("\5!\u0208\n!\3\"\3\"\3\"\3\"\7\"\u020e\n\"\f\"\16\"\u0211") + buf.write("\13\"\5\"\u0213\n\"\3\"\3\"\3#\3#\5#\u0219\n#\3$\3$\5") + buf.write("$\u021d\n$\3$\3$\3%\3%\3%\3%\3%\3%\3%\5%\u0228\n%\3%\3") + buf.write("%\3%\5%\u022d\n%\3%\7%\u0230\n%\f%\16%\u0233\13%\3&\3") + buf.write("&\3&\7&\u0238\n&\f&\16&\u023b\13&\3\'\3\'\5\'\u023f\n") + buf.write("\'\3(\3(\3(\3(\3(\3(\3(\3)\3)\3)\3)\3)\7)\u024d\n)\f)") + buf.write("\16)\u0250\13)\3)\3)\5)\u0254\n)\3*\3*\3+\3+\3,\3,\7,") + buf.write("\u025c\n,\f,\16,\u025f\13,\3,\3,\3-\3-\3-\3-\3-\3-\3-") + buf.write("\3-\3-\3-\3-\3-\3-\3-\3-\5-\u0272\n-\3.\3.\3.\3/\3/\3") + buf.write("/\3/\3/\3/\3/\5/\u027e\n/\3\60\3\60\3\60\5\60\u0283\n") + buf.write("\60\3\60\3\60\6\60\u0287\n\60\r\60\16\60\u0288\3\61\3") + buf.write("\61\5\61\u028d\n\61\3\61\5\61\u0290\n\61\3\61\3\61\3\62") + buf.write("\3\62\3\62\3\62\3\62\3\62\3\63\3\63\5\63\u029c\n\63\3") + buf.write("\64\3\64\3\64\3\65\3\65\3\65\3\65\5\65\u02a5\n\65\3\65") + buf.write("\3\65\5\65\u02a9\n\65\3\65\5\65\u02ac\n\65\3\65\3\65\3") + buf.write("\65\3\66\3\66\5\66\u02b3\n\66\3\66\3\66\3\67\3\67\3\67") + buf.write("\3\67\3\67\3\67\3\67\3\67\38\38\38\39\39\39\3:\3:\5:\u02c7") + buf.write("\n:\3:\3:\3;\3;\3;\3<\3<\3<\3<\3=\3=\3=\3=\3>\3>\3>\3") + buf.write(">\3>\3>\3>\5>\u02dd\n>\3>\3>\5>\u02e1\n>\3>\3>\3?\5?\u02e6") + buf.write("\n?\3?\3?\5?\u02ea\n?\7?\u02ec\n?\f?\16?\u02ef\13?\3@") + buf.write("\3@\5@\u02f3\n@\3@\7@\u02f6\n@\f@\16@\u02f9\13@\3@\5@") + buf.write("\u02fc\n@\3@\3@\3A\3A\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3") + buf.write("B\3B\3B\3B\3B\3B\3B\3B\5B\u0314\nB\3B\3B\3B\3B\3B\3B\3") + buf.write("B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3") + buf.write("B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3") + buf.write("B\3B\3B\3B\3B\3B\3B\3B\3B\3B\5B\u034a\nB\3B\3B\5B\u034e") + buf.write("\nB\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\7B\u035e") + buf.write("\nB\fB\16B\u0361\13B\3C\3C\3C\3C\3C\3C\3C\5C\u036a\nC") + buf.write("\3C\3C\3C\3C\3C\3C\5C\u0372\nC\5C\u0374\nC\3D\3D\3D\7") + buf.write("D\u0379\nD\fD\16D\u037c\13D\3E\3E\3E\7E\u0381\nE\fE\16") + buf.write("E\u0384\13E\3E\5E\u0387\nE\3F\3F\3F\3F\3G\3G\5G\u038f") + buf.write("\nG\3G\3G\5G\u0393\nG\5G\u0395\nG\3H\3H\3H\3H\3H\3I\3") + buf.write("I\7I\u039e\nI\fI\16I\u03a1\13I\3I\3I\3J\3J\3J\3J\3J\3") + buf.write("J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\5J\u03b7\nJ\3K\3") + buf.write("K\3K\5K\u03bc\nK\3L\3L\3L\3L\3M\3M\3M\3M\5M\u03c6\nM\3") + buf.write("M\3M\5M\u03ca\nM\3M\3M\7M\u03ce\nM\fM\16M\u03d1\13M\3") + buf.write("M\5M\u03d4\nM\3N\3N\3N\3N\5N\u03da\nN\3O\3O\3O\3O\3P\3") + buf.write("P\3P\3P\3P\3P\5P\u03e6\nP\3Q\3Q\3Q\7Q\u03eb\nQ\fQ\16Q") + buf.write("\u03ee\13Q\3R\3R\3R\3S\3S\3S\3T\3T\3T\7T\u03f9\nT\fT\16") + buf.write("T\u03fc\13T\3U\3U\3U\3U\3U\3U\5U\u0404\nU\3V\3V\3V\3V") + buf.write("\5V\u040a\nV\3V\3V\5V\u040e\nV\3V\3V\3W\3W\3W\3X\3X\3") + buf.write("X\5X\u0418\nX\3X\3X\3X\5X\u041d\nX\3X\3X\3Y\3Y\3Y\3Y\3") + buf.write("Z\3Z\3Z\3Z\5Z\u0429\nZ\3[\3[\3[\3[\3\\\3\\\5\\\u0431\n") + buf.write("\\\3\\\3\\\5\\\u0435\n\\\7\\\u0437\n\\\f\\\16\\\u043a") + buf.write("\13\\\3\\\3\\\3\\\3\\\3\\\7\\\u0441\n\\\f\\\16\\\u0444") + buf.write("\13\\\5\\\u0446\n\\\3\\\5\\\u0449\n\\\3]\3]\5]\u044d\n") + buf.write("]\3^\3^\5^\u0451\n^\3_\3_\3`\6`\u0456\n`\r`\16`\u0457") + buf.write("\3a\3a\3a\3a\3a\7a\u045f\na\fa\16a\u0462\13a\3a\3a\5a") + buf.write("\u0466\na\3b\6b\u0469\nb\rb\16b\u046a\3b\2\4H\u0082c\2") + buf.write("\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*,.\60\62\64") + buf.write("\668:<>@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~\u0080\u0082\u0084") + buf.write("\u0086\u0088\u008a\u008c\u008e\u0090\u0092\u0094\u0096") + buf.write("\u0098\u009a\u009c\u009e\u00a0\u00a2\u00a4\u00a6\u00a8") + buf.write("\u00aa\u00ac\u00ae\u00b0\u00b2\u00b4\u00b6\u00b8\u00ba") + buf.write("\u00bc\u00be\u00c0\u00c2\2\21\3\2\6\f\3\2\25\27\3\2*,") + buf.write("\6\2qqxx||~~\5\2&&9\3\2AB\3\2CD\4\2\17\17GH\3") + buf.write("\2IJ\3\2\b\13\3\2MN\4\2\f\fQZ\3\2jk\13\2\20\20\33\33,") + buf.write(",88bbttxx\177\177\u0081\u0082\2\u04ea\2\u00cf\3\2\2\2") + buf.write("\4\u00d4\3\2\2\2\6\u00d9\3\2\2\2\b\u00dd\3\2\2\2\n\u00df") + buf.write("\3\2\2\2\f\u00e9\3\2\2\2\16\u00f3\3\2\2\2\20\u00f5\3\2") + buf.write("\2\2\22\u011e\3\2\2\2\24\u0120\3\2\2\2\26\u0123\3\2\2") + buf.write("\2\30\u013b\3\2\2\2\32\u014c\3\2\2\2\34\u014e\3\2\2\2") + buf.write("\36\u0161\3\2\2\2 \u0168\3\2\2\2\"\u016d\3\2\2\2$\u0173") + buf.write("\3\2\2\2&\u017c\3\2\2\2(\u018d\3\2\2\2*\u019d\3\2\2\2") + buf.write(",\u01a5\3\2\2\2.\u01b6\3\2\2\2\60\u01b8\3\2\2\2\62\u01c5") + buf.write("\3\2\2\2\64\u01c8\3\2\2\2\66\u01d0\3\2\2\28\u01d2\3\2") + buf.write("\2\2:\u01e1\3\2\2\2<\u01ee\3\2\2\2>\u01f5\3\2\2\2@\u0202") + buf.write("\3\2\2\2B\u0209\3\2\2\2D\u0216\3\2\2\2F\u021a\3\2\2\2") + buf.write("H\u0227\3\2\2\2J\u0234\3\2\2\2L\u023e\3\2\2\2N\u0240\3") + buf.write("\2\2\2P\u0247\3\2\2\2R\u0255\3\2\2\2T\u0257\3\2\2\2V\u0259") + buf.write("\3\2\2\2X\u0271\3\2\2\2Z\u0273\3\2\2\2\\\u0276\3\2\2\2") + buf.write("^\u027f\3\2\2\2`\u028a\3\2\2\2b\u0293\3\2\2\2d\u029b\3") + buf.write("\2\2\2f\u029d\3\2\2\2h\u02a0\3\2\2\2j\u02b0\3\2\2\2l\u02b6") + buf.write("\3\2\2\2n\u02be\3\2\2\2p\u02c1\3\2\2\2r\u02c4\3\2\2\2") + buf.write("t\u02ca\3\2\2\2v\u02cd\3\2\2\2x\u02d1\3\2\2\2z\u02dc\3") + buf.write("\2\2\2|\u02e5\3\2\2\2~\u02f0\3\2\2\2\u0080\u02ff\3\2\2") + buf.write("\2\u0082\u0313\3\2\2\2\u0084\u0373\3\2\2\2\u0086\u0375") + buf.write("\3\2\2\2\u0088\u037d\3\2\2\2\u008a\u0388\3\2\2\2\u008c") + buf.write("\u0394\3\2\2\2\u008e\u0396\3\2\2\2\u0090\u039b\3\2\2\2") + buf.write("\u0092\u03b6\3\2\2\2\u0094\u03bb\3\2\2\2\u0096\u03bd\3") + buf.write("\2\2\2\u0098\u03c5\3\2\2\2\u009a\u03d5\3\2\2\2\u009c\u03db") + buf.write("\3\2\2\2\u009e\u03e5\3\2\2\2\u00a0\u03e7\3\2\2\2\u00a2") + buf.write("\u03ef\3\2\2\2\u00a4\u03f2\3\2\2\2\u00a6\u03f5\3\2\2\2") + buf.write("\u00a8\u0403\3\2\2\2\u00aa\u0405\3\2\2\2\u00ac\u0411\3") + buf.write("\2\2\2\u00ae\u0414\3\2\2\2\u00b0\u0420\3\2\2\2\u00b2\u0428") + buf.write("\3\2\2\2\u00b4\u042a\3\2\2\2\u00b6\u0448\3\2\2\2\u00b8") + buf.write("\u044c\3\2\2\2\u00ba\u044e\3\2\2\2\u00bc\u0452\3\2\2\2") + buf.write("\u00be\u0455\3\2\2\2\u00c0\u0459\3\2\2\2\u00c2\u0468\3") + buf.write("\2\2\2\u00c4\u00ce\5\4\3\2\u00c5\u00ce\5\22\n\2\u00c6") + buf.write("\u00ce\5\26\f\2\u00c7\u00ce\58\35\2\u00c8\u00ce\5&\24") + buf.write("\2\u00c9\u00ce\5,\27\2\u00ca\u00ce\5\36\20\2\u00cb\u00ce") + buf.write("\5 \21\2\u00cc\u00ce\5\"\22\2\u00cd\u00c4\3\2\2\2\u00cd") + buf.write("\u00c5\3\2\2\2\u00cd\u00c6\3\2\2\2\u00cd\u00c7\3\2\2\2") + buf.write("\u00cd\u00c8\3\2\2\2\u00cd\u00c9\3\2\2\2\u00cd\u00ca\3") + buf.write("\2\2\2\u00cd\u00cb\3\2\2\2\u00cd\u00cc\3\2\2\2\u00ce\u00d1") + buf.write("\3\2\2\2\u00cf\u00cd\3\2\2\2\u00cf\u00d0\3\2\2\2\u00d0") + buf.write("\u00d2\3\2\2\2\u00d1\u00cf\3\2\2\2\u00d2\u00d3\7\2\2\3") + buf.write("\u00d3\3\3\2\2\2\u00d4\u00d5\7\3\2\2\u00d5\u00d6\5\6\4") + buf.write("\2\u00d6\u00d7\5\b\5\2\u00d7\u00d8\7\4\2\2\u00d8\5\3\2") + buf.write("\2\2\u00d9\u00da\5\u00bc_\2\u00da\7\3\2\2\2\u00db\u00de") + buf.write("\5\n\6\2\u00dc\u00de\5\u0082B\2\u00dd\u00db\3\2\2\2\u00dd") + buf.write("\u00dc\3\2\2\2\u00de\t\3\2\2\2\u00df\u00e6\5\16\b\2\u00e0") + buf.write("\u00e2\7\5\2\2\u00e1\u00e0\3\2\2\2\u00e1\u00e2\3\2\2\2") + buf.write("\u00e2\u00e3\3\2\2\2\u00e3\u00e5\5\16\b\2\u00e4\u00e1") + buf.write("\3\2\2\2\u00e5\u00e8\3\2\2\2\u00e6\u00e4\3\2\2\2\u00e6") + buf.write("\u00e7\3\2\2\2\u00e7\13\3\2\2\2\u00e8\u00e6\3\2\2\2\u00e9") + buf.write("\u00ea\t\2\2\2\u00ea\r\3\2\2\2\u00eb\u00ed\5\f\7\2\u00ec") + buf.write("\u00eb\3\2\2\2\u00ec\u00ed\3\2\2\2\u00ed\u00ee\3\2\2\2") + buf.write("\u00ee\u00f4\7\u0084\2\2\u00ef\u00f1\5\f\7\2\u00f0\u00ef") + buf.write("\3\2\2\2\u00f0\u00f1\3\2\2\2\u00f1\u00f2\3\2\2\2\u00f2") + buf.write("\u00f4\7j\2\2\u00f3\u00ec\3\2\2\2\u00f3\u00f0\3\2\2\2") + buf.write("\u00f4\17\3\2\2\2\u00f5\u00f8\5\u00bc_\2\u00f6\u00f7\7") + buf.write("\r\2\2\u00f7\u00f9\5\u00bc_\2\u00f8\u00f6\3\2\2\2\u00f8") + buf.write("\u00f9\3\2\2\2\u00f9\21\3\2\2\2\u00fa\u00fb\7\16\2\2\u00fb") + buf.write("\u00fe\5\24\13\2\u00fc\u00fd\7\r\2\2\u00fd\u00ff\5\u00bc") + buf.write("_\2\u00fe\u00fc\3\2\2\2\u00fe\u00ff\3\2\2\2\u00ff\u0100") + buf.write("\3\2\2\2\u0100\u0101\7\4\2\2\u0101\u011f\3\2\2\2\u0102") + buf.write("\u0105\7\16\2\2\u0103\u0106\7\17\2\2\u0104\u0106\5\u00bc") + buf.write("_\2\u0105\u0103\3\2\2\2\u0105\u0104\3\2\2\2\u0106\u0109") + buf.write("\3\2\2\2\u0107\u0108\7\r\2\2\u0108\u010a\5\u00bc_\2\u0109") + buf.write("\u0107\3\2\2\2\u0109\u010a\3\2\2\2\u010a\u010b\3\2\2\2") + buf.write("\u010b\u010c\7\20\2\2\u010c\u010d\5\24\13\2\u010d\u010e") + buf.write("\7\4\2\2\u010e\u011f\3\2\2\2\u010f\u0110\7\16\2\2\u0110") + buf.write("\u0111\7\21\2\2\u0111\u0116\5\20\t\2\u0112\u0113\7\22") + buf.write("\2\2\u0113\u0115\5\20\t\2\u0114\u0112\3\2\2\2\u0115\u0118") + buf.write("\3\2\2\2\u0116\u0114\3\2\2\2\u0116\u0117\3\2\2\2\u0117") + buf.write("\u0119\3\2\2\2\u0118\u0116\3\2\2\2\u0119\u011a\7\23\2") + buf.write("\2\u011a\u011b\7\20\2\2\u011b\u011c\5\24\13\2\u011c\u011d") + buf.write("\7\4\2\2\u011d\u011f\3\2\2\2\u011e\u00fa\3\2\2\2\u011e") + buf.write("\u0102\3\2\2\2\u011e\u010f\3\2\2\2\u011f\23\3\2\2\2\u0120") + buf.write("\u0121\7\u0083\2\2\u0121\25\3\2\2\2\u0122\u0124\7\24\2") + buf.write("\2\u0123\u0122\3\2\2\2\u0123\u0124\3\2\2\2\u0124\u0125") + buf.write("\3\2\2\2\u0125\u0126\t\3\2\2\u0126\u0130\5\u00bc_\2\u0127") + buf.write("\u0128\7\30\2\2\u0128\u012d\5\30\r\2\u0129\u012a\7\22") + buf.write("\2\2\u012a\u012c\5\30\r\2\u012b\u0129\3\2\2\2\u012c\u012f") + buf.write("\3\2\2\2\u012d\u012b\3\2\2\2\u012d\u012e\3\2\2\2\u012e") + buf.write("\u0131\3\2\2\2\u012f\u012d\3\2\2\2\u0130\u0127\3\2\2\2") + buf.write("\u0130\u0131\3\2\2\2\u0131\u0132\3\2\2\2\u0132\u0136\7") + buf.write("\21\2\2\u0133\u0135\5\32\16\2\u0134\u0133\3\2\2\2\u0135") + buf.write("\u0138\3\2\2\2\u0136\u0134\3\2\2\2\u0136\u0137\3\2\2\2") + buf.write("\u0137\u0139\3\2\2\2\u0138\u0136\3\2\2\2\u0139\u013a\7") + buf.write("\23\2\2\u013a\27\3\2\2\2\u013b\u0141\5J&\2\u013c\u013e") + buf.write("\7\31\2\2\u013d\u013f\5\u0086D\2\u013e\u013d\3\2\2\2\u013e") + buf.write("\u013f\3\2\2\2\u013f\u0140\3\2\2\2\u0140\u0142\7\32\2") + buf.write("\2\u0141\u013c\3\2\2\2\u0141\u0142\3\2\2\2\u0142\31\3") + buf.write("\2\2\2\u0143\u014d\5\34\17\2\u0144\u014d\5$\23\2\u0145") + buf.write("\u014d\5&\24\2\u0146\u014d\5(\25\2\u0147\u014d\5,\27\2") + buf.write("\u0148\u014d\5\64\33\2\u0149\u014d\58\35\2\u014a\u014d") + buf.write("\5 \21\2\u014b\u014d\5\"\22\2\u014c\u0143\3\2\2\2\u014c") + buf.write("\u0144\3\2\2\2\u014c\u0145\3\2\2\2\u014c\u0146\3\2\2\2") + buf.write("\u014c\u0147\3\2\2\2\u014c\u0148\3\2\2\2\u014c\u0149\3") + buf.write("\2\2\2\u014c\u014a\3\2\2\2\u014c\u014b\3\2\2\2\u014d\33") + buf.write("\3\2\2\2\u014e\u0157\5H%\2\u014f\u0156\7z\2\2\u0150\u0156") + buf.write("\7w\2\2\u0151\u0156\7y\2\2\u0152\u0156\7q\2\2\u0153\u0156") + buf.write("\7r\2\2\u0154\u0156\5\u00c0a\2\u0155\u014f\3\2\2\2\u0155") + buf.write("\u0150\3\2\2\2\u0155\u0151\3\2\2\2\u0155\u0152\3\2\2\2") + buf.write("\u0155\u0153\3\2\2\2\u0155\u0154\3\2\2\2\u0156\u0159\3") + buf.write("\2\2\2\u0157\u0155\3\2\2\2\u0157\u0158\3\2\2\2\u0158\u015a") + buf.write("\3\2\2\2\u0159\u0157\3\2\2\2\u015a\u015d\5\u00bc_\2\u015b") + buf.write("\u015c\7\f\2\2\u015c\u015e\5\u0082B\2\u015d\u015b\3\2") + buf.write("\2\2\u015d\u015e\3\2\2\2\u015e\u015f\3\2\2\2\u015f\u0160") + buf.write("\7\4\2\2\u0160\35\3\2\2\2\u0161\u0162\5H%\2\u0162\u0163") + buf.write("\7q\2\2\u0163\u0164\5\u00bc_\2\u0164\u0165\7\f\2\2\u0165") + buf.write("\u0166\5\u0082B\2\u0166\u0167\7\4\2\2\u0167\37\3\2\2\2") + buf.write("\u0168\u0169\7\33\2\2\u0169\u016a\5\u00bc_\2\u016a\u016b") + buf.write("\5:\36\2\u016b\u016c\7\4\2\2\u016c!\3\2\2\2\u016d\u016e") + buf.write("\7}\2\2\u016e\u016f\5\u00bc_\2\u016f\u0170\7\30\2\2\u0170") + buf.write("\u0171\5\u0080A\2\u0171\u0172\7\4\2\2\u0172#\3\2\2\2\u0173") + buf.write("\u0174\7\34\2\2\u0174\u0175\5\u00bc_\2\u0175\u0178\7\35") + buf.write("\2\2\u0176\u0179\7\17\2\2\u0177\u0179\5H%\2\u0178\u0176") + buf.write("\3\2\2\2\u0178\u0177\3\2\2\2\u0179\u017a\3\2\2\2\u017a") + buf.write("\u017b\7\4\2\2\u017b%\3\2\2\2\u017c\u017d\7\36\2\2\u017d") + buf.write("\u017e\5\u00bc_\2\u017e\u0189\7\21\2\2\u017f\u0180\5F") + buf.write("$\2\u0180\u0186\7\4\2\2\u0181\u0182\5F$\2\u0182\u0183") + buf.write("\7\4\2\2\u0183\u0185\3\2\2\2\u0184\u0181\3\2\2\2\u0185") + buf.write("\u0188\3\2\2\2\u0186\u0184\3\2\2\2\u0186\u0187\3\2\2\2") + buf.write("\u0187\u018a\3\2\2\2\u0188\u0186\3\2\2\2\u0189\u017f\3") + buf.write("\2\2\2\u0189\u018a\3\2\2\2\u018a\u018b\3\2\2\2\u018b\u018c") + buf.write("\7\23\2\2\u018c\'\3\2\2\2\u018d\u018e\7\37\2\2\u018e\u0190") + buf.write("\5\u00bc_\2\u018f\u0191\5:\36\2\u0190\u018f\3\2\2\2\u0190") + buf.write("\u0191\3\2\2\2\u0191\u0196\3\2\2\2\u0192\u0195\7{\2\2") + buf.write("\u0193\u0195\5\u00c0a\2\u0194\u0192\3\2\2\2\u0194\u0193") + buf.write("\3\2\2\2\u0195\u0198\3\2\2\2\u0196\u0194\3\2\2\2\u0196") + buf.write("\u0197\3\2\2\2\u0197\u019b\3\2\2\2\u0198\u0196\3\2\2\2") + buf.write("\u0199\u019c\7\4\2\2\u019a\u019c\5V,\2\u019b\u0199\3\2") + buf.write("\2\2\u019b\u019a\3\2\2\2\u019c)\3\2\2\2\u019d\u01a3\5") + buf.write("\u00bc_\2\u019e\u01a0\7\31\2\2\u019f\u01a1\5\u0086D\2") + buf.write("\u01a0\u019f\3\2\2\2\u01a0\u01a1\3\2\2\2\u01a1\u01a2\3") + buf.write("\2\2\2\u01a2\u01a4\7\32\2\2\u01a3\u019e\3\2\2\2\u01a3") + buf.write("\u01a4\3\2\2\2\u01a4+\3\2\2\2\u01a5\u01a6\5.\30\2\u01a6") + buf.write("\u01a7\5:\36\2\u01a7\u01a9\5\62\32\2\u01a8\u01aa\5\60") + buf.write("\31\2\u01a9\u01a8\3\2\2\2\u01a9\u01aa\3\2\2\2\u01aa\u01ad") + buf.write("\3\2\2\2\u01ab\u01ae\7\4\2\2\u01ac\u01ae\5V,\2\u01ad\u01ab") + buf.write("\3\2\2\2\u01ad\u01ac\3\2\2\2\u01ae-\3\2\2\2\u01af\u01b1") + buf.write("\7 \2\2\u01b0\u01b2\5\u00bc_\2\u01b1\u01b0\3\2\2\2\u01b1") + buf.write("\u01b2\3\2\2\2\u01b2\u01b7\3\2\2\2\u01b3\u01b7\7\177\2") + buf.write("\2\u01b4\u01b7\7\u0080\2\2\u01b5\u01b7\7\u0081\2\2\u01b6") + buf.write("\u01af\3\2\2\2\u01b6\u01b3\3\2\2\2\u01b6\u01b4\3\2\2\2") + buf.write("\u01b6\u01b5\3\2\2\2\u01b7/\3\2\2\2\u01b8\u01b9\7!\2\2") + buf.write("\u01b9\u01ba\5:\36\2\u01ba\61\3\2\2\2\u01bb\u01c4\7u\2") + buf.write("\2\u01bc\u01c4\7z\2\2\u01bd\u01c4\7w\2\2\u01be\u01c4\7") + buf.write("y\2\2\u01bf\u01c4\7{\2\2\u01c0\u01c4\5T+\2\u01c1\u01c4") + buf.write("\5*\26\2\u01c2\u01c4\5\u00c0a\2\u01c3\u01bb\3\2\2\2\u01c3") + buf.write("\u01bc\3\2\2\2\u01c3\u01bd\3\2\2\2\u01c3\u01be\3\2\2\2") + buf.write("\u01c3\u01bf\3\2\2\2\u01c3\u01c0\3\2\2\2\u01c3\u01c1\3") + buf.write("\2\2\2\u01c3\u01c2\3\2\2\2\u01c4\u01c7\3\2\2\2\u01c5\u01c3") + buf.write("\3\2\2\2\u01c5\u01c6\3\2\2\2\u01c6\63\3\2\2\2\u01c7\u01c5") + buf.write("\3\2\2\2\u01c8\u01c9\7\"\2\2\u01c9\u01ca\5\u00bc_\2\u01ca") + buf.write("\u01cc\5> \2\u01cb\u01cd\7o\2\2\u01cc\u01cb\3\2\2\2\u01cc") + buf.write("\u01cd\3\2\2\2\u01cd\u01ce\3\2\2\2\u01ce\u01cf\7\4\2\2") + buf.write("\u01cf\65\3\2\2\2\u01d0\u01d1\5\u00bc_\2\u01d1\67\3\2") + buf.write("\2\2\u01d2\u01d3\7#\2\2\u01d3\u01d4\5\u00bc_\2\u01d4\u01d6") + buf.write("\7\21\2\2\u01d5\u01d7\5\66\34\2\u01d6\u01d5\3\2\2\2\u01d6") + buf.write("\u01d7\3\2\2\2\u01d7\u01dc\3\2\2\2\u01d8\u01d9\7\22\2") + buf.write("\2\u01d9\u01db\5\66\34\2\u01da\u01d8\3\2\2\2\u01db\u01de") + buf.write("\3\2\2\2\u01dc\u01da\3\2\2\2\u01dc\u01dd\3\2\2\2\u01dd") + buf.write("\u01df\3\2\2\2\u01de\u01dc\3\2\2\2\u01df\u01e0\7\23\2") + buf.write("\2\u01e09\3\2\2\2\u01e1\u01ea\7\31\2\2\u01e2\u01e7\5<") + buf.write("\37\2\u01e3\u01e4\7\22\2\2\u01e4\u01e6\5<\37\2\u01e5\u01e3") + buf.write("\3\2\2\2\u01e6\u01e9\3\2\2\2\u01e7\u01e5\3\2\2\2\u01e7") + buf.write("\u01e8\3\2\2\2\u01e8\u01eb\3\2\2\2\u01e9\u01e7\3\2\2\2") + buf.write("\u01ea\u01e2\3\2\2\2\u01ea\u01eb\3\2\2\2\u01eb\u01ec\3") + buf.write("\2\2\2\u01ec\u01ed\7\32\2\2\u01ed;\3\2\2\2\u01ee\u01f0") + buf.write("\5H%\2\u01ef\u01f1\5R*\2\u01f0\u01ef\3\2\2\2\u01f0\u01f1") + buf.write("\3\2\2\2\u01f1\u01f3\3\2\2\2\u01f2\u01f4\5\u00bc_\2\u01f3") + buf.write("\u01f2\3\2\2\2\u01f3\u01f4\3\2\2\2\u01f4=\3\2\2\2\u01f5") + buf.write("\u01fe\7\31\2\2\u01f6\u01fb\5@!\2\u01f7\u01f8\7\22\2\2") + buf.write("\u01f8\u01fa\5@!\2\u01f9\u01f7\3\2\2\2\u01fa\u01fd\3\2") + buf.write("\2\2\u01fb\u01f9\3\2\2\2\u01fb\u01fc\3\2\2\2\u01fc\u01ff") + buf.write("\3\2\2\2\u01fd\u01fb\3\2\2\2\u01fe\u01f6\3\2\2\2\u01fe") + buf.write("\u01ff\3\2\2\2\u01ff\u0200\3\2\2\2\u0200\u0201\7\32\2") + buf.write("\2\u0201?\3\2\2\2\u0202\u0204\5H%\2\u0203\u0205\7v\2\2") + buf.write("\u0204\u0203\3\2\2\2\u0204\u0205\3\2\2\2\u0205\u0207\3") + buf.write("\2\2\2\u0206\u0208\5\u00bc_\2\u0207\u0206\3\2\2\2\u0207") + buf.write("\u0208\3\2\2\2\u0208A\3\2\2\2\u0209\u0212\7\31\2\2\u020a") + buf.write("\u020f\5D#\2\u020b\u020c\7\22\2\2\u020c\u020e\5D#\2\u020d") + buf.write("\u020b\3\2\2\2\u020e\u0211\3\2\2\2\u020f\u020d\3\2\2\2") + buf.write("\u020f\u0210\3\2\2\2\u0210\u0213\3\2\2\2\u0211\u020f\3") + buf.write("\2\2\2\u0212\u020a\3\2\2\2\u0212\u0213\3\2\2\2\u0213\u0214") + buf.write("\3\2\2\2\u0214\u0215\7\32\2\2\u0215C\3\2\2\2\u0216\u0218") + buf.write("\5H%\2\u0217\u0219\5R*\2\u0218\u0217\3\2\2\2\u0218\u0219") + buf.write("\3\2\2\2\u0219E\3\2\2\2\u021a\u021c\5H%\2\u021b\u021d") + buf.write("\5R*\2\u021c\u021b\3\2\2\2\u021c\u021d\3\2\2\2\u021d\u021e") + buf.write("\3\2\2\2\u021e\u021f\5\u00bc_\2\u021fG\3\2\2\2\u0220\u0221") + buf.write("\b%\1\2\u0221\u0228\5\u0080A\2\u0222\u0228\5J&\2\u0223") + buf.write("\u0228\5N(\2\u0224\u0228\5P)\2\u0225\u0226\7&\2\2\u0226") + buf.write("\u0228\7x\2\2\u0227\u0220\3\2\2\2\u0227\u0222\3\2\2\2") + buf.write("\u0227\u0223\3\2\2\2\u0227\u0224\3\2\2\2\u0227\u0225\3") + buf.write("\2\2\2\u0228\u0231\3\2\2\2\u0229\u022a\f\5\2\2\u022a\u022c") + buf.write("\7$\2\2\u022b\u022d\5\u0082B\2\u022c\u022b\3\2\2\2\u022c") + buf.write("\u022d\3\2\2\2\u022d\u022e\3\2\2\2\u022e\u0230\7%\2\2") + buf.write("\u022f\u0229\3\2\2\2\u0230\u0233\3\2\2\2\u0231\u022f\3") + buf.write("\2\2\2\u0231\u0232\3\2\2\2\u0232I\3\2\2\2\u0233\u0231") + buf.write("\3\2\2\2\u0234\u0239\5\u00bc_\2\u0235\u0236\7\'\2\2\u0236") + buf.write("\u0238\5\u00bc_\2\u0237\u0235\3\2\2\2\u0238\u023b\3\2") + buf.write("\2\2\u0239\u0237\3\2\2\2\u0239\u023a\3\2\2\2\u023aK\3") + buf.write("\2\2\2\u023b\u0239\3\2\2\2\u023c\u023f\5\u0080A\2\u023d") + buf.write("\u023f\5J&\2\u023e\u023c\3\2\2\2\u023e\u023d\3\2\2\2\u023f") + buf.write("M\3\2\2\2\u0240\u0241\7(\2\2\u0241\u0242\7\31\2\2\u0242") + buf.write("\u0243\5L\'\2\u0243\u0244\7)\2\2\u0244\u0245\5H%\2\u0245") + buf.write("\u0246\7\32\2\2\u0246O\3\2\2\2\u0247\u0248\7 \2\2\u0248") + buf.write("\u024e\5B\"\2\u0249\u024d\7w\2\2\u024a\u024d\7u\2\2\u024b") + buf.write("\u024d\5T+\2\u024c\u0249\3\2\2\2\u024c\u024a\3\2\2\2\u024c") + buf.write("\u024b\3\2\2\2\u024d\u0250\3\2\2\2\u024e\u024c\3\2\2\2") + buf.write("\u024e\u024f\3\2\2\2\u024f\u0253\3\2\2\2\u0250\u024e\3") + buf.write("\2\2\2\u0251\u0252\7!\2\2\u0252\u0254\5B\"\2\u0253\u0251") + buf.write("\3\2\2\2\u0253\u0254\3\2\2\2\u0254Q\3\2\2\2\u0255\u0256") + buf.write("\t\4\2\2\u0256S\3\2\2\2\u0257\u0258\t\5\2\2\u0258U\3\2") + buf.write("\2\2\u0259\u025d\7\21\2\2\u025a\u025c\5X-\2\u025b\u025a") + buf.write("\3\2\2\2\u025c\u025f\3\2\2\2\u025d\u025b\3\2\2\2\u025d") + buf.write("\u025e\3\2\2\2\u025e\u0260\3\2\2\2\u025f\u025d\3\2\2\2") + buf.write("\u0260\u0261\7\23\2\2\u0261W\3\2\2\2\u0262\u0272\5\\/") + buf.write("\2\u0263\u0272\5^\60\2\u0264\u0272\5b\62\2\u0265\u0272") + buf.write("\5h\65\2\u0266\u0272\5V,\2\u0267\u0272\5j\66\2\u0268\u0272") + buf.write("\5l\67\2\u0269\u0272\5n8\2\u026a\u0272\5p9\2\u026b\u0272") + buf.write("\5r:\2\u026c\u0272\5t;\2\u026d\u0272\5v<\2\u026e\u0272") + buf.write("\5d\63\2\u026f\u0272\5f\64\2\u0270\u0272\5x=\2\u0271\u0262") + buf.write("\3\2\2\2\u0271\u0263\3\2\2\2\u0271\u0264\3\2\2\2\u0271") + buf.write("\u0265\3\2\2\2\u0271\u0266\3\2\2\2\u0271\u0267\3\2\2\2") + buf.write("\u0271\u0268\3\2\2\2\u0271\u0269\3\2\2\2\u0271\u026a\3") + buf.write("\2\2\2\u0271\u026b\3\2\2\2\u0271\u026c\3\2\2\2\u0271\u026d") + buf.write("\3\2\2\2\u0271\u026e\3\2\2\2\u0271\u026f\3\2\2\2\u0271") + buf.write("\u0270\3\2\2\2\u0272Y\3\2\2\2\u0273\u0274\5\u0082B\2\u0274") + buf.write("\u0275\7\4\2\2\u0275[\3\2\2\2\u0276\u0277\7-\2\2\u0277") + buf.write("\u0278\7\31\2\2\u0278\u0279\5\u0082B\2\u0279\u027a\7\32") + buf.write("\2\2\u027a\u027d\5X-\2\u027b\u027c\7.\2\2\u027c\u027e") + buf.write("\5X-\2\u027d\u027b\3\2\2\2\u027d\u027e\3\2\2\2\u027e]") + buf.write("\3\2\2\2\u027f\u0280\7/\2\2\u0280\u0282\5\u0082B\2\u0281") + buf.write("\u0283\5\60\31\2\u0282\u0281\3\2\2\2\u0282\u0283\3\2\2") + buf.write("\2\u0283\u0284\3\2\2\2\u0284\u0286\5V,\2\u0285\u0287\5") + buf.write("`\61\2\u0286\u0285\3\2\2\2\u0287\u0288\3\2\2\2\u0288\u0286") + buf.write("\3\2\2\2\u0288\u0289\3\2\2\2\u0289_\3\2\2\2\u028a\u028f") + buf.write("\7\60\2\2\u028b\u028d\5\u00bc_\2\u028c\u028b\3\2\2\2\u028c") + buf.write("\u028d\3\2\2\2\u028d\u028e\3\2\2\2\u028e\u0290\5:\36\2") + buf.write("\u028f\u028c\3\2\2\2\u028f\u0290\3\2\2\2\u0290\u0291\3") + buf.write("\2\2\2\u0291\u0292\5V,\2\u0292a\3\2\2\2\u0293\u0294\7") + buf.write("\61\2\2\u0294\u0295\7\31\2\2\u0295\u0296\5\u0082B\2\u0296") + buf.write("\u0297\7\32\2\2\u0297\u0298\5X-\2\u0298c\3\2\2\2\u0299") + buf.write("\u029c\5z>\2\u029a\u029c\5Z.\2\u029b\u0299\3\2\2\2\u029b") + buf.write("\u029a\3\2\2\2\u029ce\3\2\2\2\u029d\u029e\7\62\2\2\u029e") + buf.write("\u029f\5V,\2\u029fg\3\2\2\2\u02a0\u02a1\7\35\2\2\u02a1") + buf.write("\u02a4\7\31\2\2\u02a2\u02a5\5d\63\2\u02a3\u02a5\7\4\2") + buf.write("\2\u02a4\u02a2\3\2\2\2\u02a4\u02a3\3\2\2\2\u02a5\u02a8") + buf.write("\3\2\2\2\u02a6\u02a9\5Z.\2\u02a7\u02a9\7\4\2\2\u02a8\u02a6") + buf.write("\3\2\2\2\u02a8\u02a7\3\2\2\2\u02a9\u02ab\3\2\2\2\u02aa") + buf.write("\u02ac\5\u0082B\2\u02ab\u02aa\3\2\2\2\u02ab\u02ac\3\2") + buf.write("\2\2\u02ac\u02ad\3\2\2\2\u02ad\u02ae\7\32\2\2\u02ae\u02af") + buf.write("\5X-\2\u02afi\3\2\2\2\u02b0\u02b2\7\63\2\2\u02b1\u02b3") + buf.write("\7\u0083\2\2\u02b2\u02b1\3\2\2\2\u02b2\u02b3\3\2\2\2\u02b3") + buf.write("\u02b4\3\2\2\2\u02b4\u02b5\5\u0090I\2\u02b5k\3\2\2\2\u02b6") + buf.write("\u02b7\7\64\2\2\u02b7\u02b8\5X-\2\u02b8\u02b9\7\61\2\2") + buf.write("\u02b9\u02ba\7\31\2\2\u02ba\u02bb\5\u0082B\2\u02bb\u02bc") + buf.write("\7\32\2\2\u02bc\u02bd\7\4\2\2\u02bdm\3\2\2\2\u02be\u02bf") + buf.write("\7s\2\2\u02bf\u02c0\7\4\2\2\u02c0o\3\2\2\2\u02c1\u02c2") + buf.write("\7p\2\2\u02c2\u02c3\7\4\2\2\u02c3q\3\2\2\2\u02c4\u02c6") + buf.write("\7\65\2\2\u02c5\u02c7\5\u0082B\2\u02c6\u02c5\3\2\2\2\u02c6") + buf.write("\u02c7\3\2\2\2\u02c7\u02c8\3\2\2\2\u02c8\u02c9\7\4\2\2") + buf.write("\u02c9s\3\2\2\2\u02ca\u02cb\7\66\2\2\u02cb\u02cc\7\4\2") + buf.write("\2\u02ccu\3\2\2\2\u02cd\u02ce\7\67\2\2\u02ce\u02cf\5\u008e") + buf.write("H\2\u02cf\u02d0\7\4\2\2\u02d0w\3\2\2\2\u02d1\u02d2\78") + buf.write("\2\2\u02d2\u02d3\5\u008eH\2\u02d3\u02d4\7\4\2\2\u02d4") + buf.write("y\3\2\2\2\u02d5\u02d6\79\2\2\u02d6\u02dd\5~@\2\u02d7\u02dd") + buf.write("\5F$\2\u02d8\u02d9\7\31\2\2\u02d9\u02da\5|?\2\u02da\u02db") + buf.write("\7\32\2\2\u02db\u02dd\3\2\2\2\u02dc\u02d5\3\2\2\2\u02dc") + buf.write("\u02d7\3\2\2\2\u02dc\u02d8\3\2\2\2\u02dd\u02e0\3\2\2\2") + buf.write("\u02de\u02df\7\f\2\2\u02df\u02e1\5\u0082B\2\u02e0\u02de") + buf.write("\3\2\2\2\u02e0\u02e1\3\2\2\2\u02e1\u02e2\3\2\2\2\u02e2") + buf.write("\u02e3\7\4\2\2\u02e3{\3\2\2\2\u02e4\u02e6\5F$\2\u02e5") + buf.write("\u02e4\3\2\2\2\u02e5\u02e6\3\2\2\2\u02e6\u02ed\3\2\2\2") + buf.write("\u02e7\u02e9\7\22\2\2\u02e8\u02ea\5F$\2\u02e9\u02e8\3") + buf.write("\2\2\2\u02e9\u02ea\3\2\2\2\u02ea\u02ec\3\2\2\2\u02eb\u02e7") + buf.write("\3\2\2\2\u02ec\u02ef\3\2\2\2\u02ed\u02eb\3\2\2\2\u02ed") + buf.write("\u02ee\3\2\2\2\u02ee}\3\2\2\2\u02ef\u02ed\3\2\2\2\u02f0") + buf.write("\u02f7\7\31\2\2\u02f1\u02f3\5\u00bc_\2\u02f2\u02f1\3\2") + buf.write("\2\2\u02f2\u02f3\3\2\2\2\u02f3\u02f4\3\2\2\2\u02f4\u02f6") + buf.write("\7\22\2\2\u02f5\u02f2\3\2\2\2\u02f6\u02f9\3\2\2\2\u02f7") + buf.write("\u02f5\3\2\2\2\u02f7\u02f8\3\2\2\2\u02f8\u02fb\3\2\2\2") + buf.write("\u02f9\u02f7\3\2\2\2\u02fa\u02fc\5\u00bc_\2\u02fb\u02fa") + buf.write("\3\2\2\2\u02fb\u02fc\3\2\2\2\u02fc\u02fd\3\2\2\2\u02fd") + buf.write("\u02fe\7\32\2\2\u02fe\177\3\2\2\2\u02ff\u0300\t\6\2\2") + buf.write("\u0300\u0081\3\2\2\2\u0301\u0302\bB\1\2\u0302\u0303\7") + buf.write("?\2\2\u0303\u0314\5H%\2\u0304\u0305\7\31\2\2\u0305\u0306") + buf.write("\5\u0082B\2\u0306\u0307\7\32\2\2\u0307\u0314\3\2\2\2\u0308") + buf.write("\u0309\t\7\2\2\u0309\u0314\5\u0082B\25\u030a\u030b\t\b") + buf.write("\2\2\u030b\u0314\5\u0082B\24\u030c\u030d\t\t\2\2\u030d") + buf.write("\u0314\5\u0082B\23\u030e\u030f\7E\2\2\u030f\u0314\5\u0082") + buf.write("B\22\u0310\u0311\7\7\2\2\u0311\u0314\5\u0082B\21\u0312") + buf.write("\u0314\5\u0084C\2\u0313\u0301\3\2\2\2\u0313\u0304\3\2") + buf.write("\2\2\u0313\u0308\3\2\2\2\u0313\u030a\3\2\2\2\u0313\u030c") + buf.write("\3\2\2\2\u0313\u030e\3\2\2\2\u0313\u0310\3\2\2\2\u0313") + buf.write("\u0312\3\2\2\2\u0314\u035f\3\2\2\2\u0315\u0316\f\20\2") + buf.write("\2\u0316\u0317\7F\2\2\u0317\u035e\5\u0082B\21\u0318\u0319") + buf.write("\f\17\2\2\u0319\u031a\t\n\2\2\u031a\u035e\5\u0082B\20") + buf.write("\u031b\u031c\f\16\2\2\u031c\u031d\t\b\2\2\u031d\u035e") + buf.write("\5\u0082B\17\u031e\u031f\f\r\2\2\u031f\u0320\t\13\2\2") + buf.write("\u0320\u035e\5\u0082B\16\u0321\u0322\f\f\2\2\u0322\u0323") + buf.write("\7K\2\2\u0323\u035e\5\u0082B\r\u0324\u0325\f\13\2\2\u0325") + buf.write("\u0326\7\6\2\2\u0326\u035e\5\u0082B\f\u0327\u0328\f\n") + buf.write("\2\2\u0328\u0329\7L\2\2\u0329\u035e\5\u0082B\13\u032a") + buf.write("\u032b\f\t\2\2\u032b\u032c\t\f\2\2\u032c\u035e\5\u0082") + buf.write("B\n\u032d\u032e\f\b\2\2\u032e\u032f\t\r\2\2\u032f\u035e") + buf.write("\5\u0082B\t\u0330\u0331\f\7\2\2\u0331\u0332\7O\2\2\u0332") + buf.write("\u035e\5\u0082B\b\u0333\u0334\f\6\2\2\u0334\u0335\7\5") + buf.write("\2\2\u0335\u035e\5\u0082B\7\u0336\u0337\f\5\2\2\u0337") + buf.write("\u0338\7P\2\2\u0338\u0339\5\u0082B\2\u0339\u033a\7@\2") + buf.write("\2\u033a\u033b\5\u0082B\6\u033b\u035e\3\2\2\2\u033c\u033d") + buf.write("\f\4\2\2\u033d\u033e\t\16\2\2\u033e\u035e\5\u0082B\5\u033f") + buf.write("\u0340\f\35\2\2\u0340\u035e\t\7\2\2\u0341\u0342\f\33\2") + buf.write("\2\u0342\u0343\7$\2\2\u0343\u0344\5\u0082B\2\u0344\u0345") + buf.write("\7%\2\2\u0345\u035e\3\2\2\2\u0346\u0347\f\32\2\2\u0347") + buf.write("\u0349\7$\2\2\u0348\u034a\5\u0082B\2\u0349\u0348\3\2\2") + buf.write("\2\u0349\u034a\3\2\2\2\u034a\u034b\3\2\2\2\u034b\u034d") + buf.write("\7@\2\2\u034c\u034e\5\u0082B\2\u034d\u034c\3\2\2\2\u034d") + buf.write("\u034e\3\2\2\2\u034e\u034f\3\2\2\2\u034f\u035e\7%\2\2") + buf.write("\u0350\u0351\f\31\2\2\u0351\u0352\7\'\2\2\u0352\u035e") + buf.write("\5\u00bc_\2\u0353\u0354\f\30\2\2\u0354\u0355\7\21\2\2") + buf.write("\u0355\u0356\5\u0088E\2\u0356\u0357\7\23\2\2\u0357\u035e") + buf.write("\3\2\2\2\u0358\u0359\f\27\2\2\u0359\u035a\7\31\2\2\u035a") + buf.write("\u035b\5\u008cG\2\u035b\u035c\7\32\2\2\u035c\u035e\3\2") + buf.write("\2\2\u035d\u0315\3\2\2\2\u035d\u0318\3\2\2\2\u035d\u031b") + buf.write("\3\2\2\2\u035d\u031e\3\2\2\2\u035d\u0321\3\2\2\2\u035d") + buf.write("\u0324\3\2\2\2\u035d\u0327\3\2\2\2\u035d\u032a\3\2\2\2") + buf.write("\u035d\u032d\3\2\2\2\u035d\u0330\3\2\2\2\u035d\u0333\3") + buf.write("\2\2\2\u035d\u0336\3\2\2\2\u035d\u033c\3\2\2\2\u035d\u033f") + buf.write("\3\2\2\2\u035d\u0341\3\2\2\2\u035d\u0346\3\2\2\2\u035d") + buf.write("\u0350\3\2\2\2\u035d\u0353\3\2\2\2\u035d\u0358\3\2\2\2") + buf.write("\u035e\u0361\3\2\2\2\u035f\u035d\3\2\2\2\u035f\u0360\3") + buf.write("\2\2\2\u0360\u0083\3\2\2\2\u0361\u035f\3\2\2\2\u0362\u0374") + buf.write("\7i\2\2\u0363\u0374\5\u00ba^\2\u0364\u0374\5\u00be`\2") + buf.write("\u0365\u0374\5\u00c2b\2\u0366\u0369\5\u00bc_\2\u0367\u0368") + buf.write("\7$\2\2\u0368\u036a\7%\2\2\u0369\u0367\3\2\2\2\u0369\u036a") + buf.write("\3\2\2\2\u036a\u0374\3\2\2\2\u036b\u0374\7}\2\2\u036c") + buf.write("\u0374\7x\2\2\u036d\u0374\5\u00b6\\\2\u036e\u0371\5\u00b8") + buf.write("]\2\u036f\u0370\7$\2\2\u0370\u0372\7%\2\2\u0371\u036f") + buf.write("\3\2\2\2\u0371\u0372\3\2\2\2\u0372\u0374\3\2\2\2\u0373") + buf.write("\u0362\3\2\2\2\u0373\u0363\3\2\2\2\u0373\u0364\3\2\2\2") + buf.write("\u0373\u0365\3\2\2\2\u0373\u0366\3\2\2\2\u0373\u036b\3") + buf.write("\2\2\2\u0373\u036c\3\2\2\2\u0373\u036d\3\2\2\2\u0373\u036e") + buf.write("\3\2\2\2\u0374\u0085\3\2\2\2\u0375\u037a\5\u0082B\2\u0376") + buf.write("\u0377\7\22\2\2\u0377\u0379\5\u0082B\2\u0378\u0376\3\2") + buf.write("\2\2\u0379\u037c\3\2\2\2\u037a\u0378\3\2\2\2\u037a\u037b") + buf.write("\3\2\2\2\u037b\u0087\3\2\2\2\u037c\u037a\3\2\2\2\u037d") + buf.write("\u0382\5\u008aF\2\u037e\u037f\7\22\2\2\u037f\u0381\5\u008a") + buf.write("F\2\u0380\u037e\3\2\2\2\u0381\u0384\3\2\2\2\u0382\u0380") + buf.write("\3\2\2\2\u0382\u0383\3\2\2\2\u0383\u0386\3\2\2\2\u0384") + buf.write("\u0382\3\2\2\2\u0385\u0387\7\22\2\2\u0386\u0385\3\2\2") + buf.write("\2\u0386\u0387\3\2\2\2\u0387\u0089\3\2\2\2\u0388\u0389") + buf.write("\5\u00bc_\2\u0389\u038a\7@\2\2\u038a\u038b\5\u0082B\2") + buf.write("\u038b\u008b\3\2\2\2\u038c\u038e\7\21\2\2\u038d\u038f") + buf.write("\5\u0088E\2\u038e\u038d\3\2\2\2\u038e\u038f\3\2\2\2\u038f") + buf.write("\u0390\3\2\2\2\u0390\u0395\7\23\2\2\u0391\u0393\5\u0086") + buf.write("D\2\u0392\u0391\3\2\2\2\u0392\u0393\3\2\2\2\u0393\u0395") + buf.write("\3\2\2\2\u0394\u038c\3\2\2\2\u0394\u0392\3\2\2\2\u0395") + buf.write("\u008d\3\2\2\2\u0396\u0397\5\u0082B\2\u0397\u0398\7\31") + buf.write("\2\2\u0398\u0399\5\u008cG\2\u0399\u039a\7\32\2\2\u039a") + buf.write("\u008f\3\2\2\2\u039b\u039f\7\21\2\2\u039c\u039e\5\u0092") + buf.write("J\2\u039d\u039c\3\2\2\2\u039e\u03a1\3\2\2\2\u039f\u039d") + buf.write("\3\2\2\2\u039f\u03a0\3\2\2\2\u03a0\u03a2\3\2\2\2\u03a1") + buf.write("\u039f\3\2\2\2\u03a2\u03a3\7\23\2\2\u03a3\u0091\3\2\2") + buf.write("\2\u03a4\u03b7\5\u00bc_\2\u03a5\u03b7\5\u0090I\2\u03a6") + buf.write("\u03b7\5\u0094K\2\u03a7\u03b7\5\u009aN\2\u03a8\u03b7\5") + buf.write("\u009cO\2\u03a9\u03b7\5\u00a2R\2\u03aa\u03b7\5\u00a4S") + buf.write("\2\u03ab\u03b7\5\u00a6T\2\u03ac\u03b7\5\u00aaV\2\u03ad") + buf.write("\u03b7\5\u00aeX\2\u03ae\u03b7\5\u00b0Y\2\u03af\u03b7\7") + buf.write("p\2\2\u03b0\u03b7\7s\2\2\u03b1\u03b7\7t\2\2\u03b2\u03b7") + buf.write("\5\u00b4[\2\u03b3\u03b7\5\u00ba^\2\u03b4\u03b7\5\u00c2") + buf.write("b\2\u03b5\u03b7\5\u00be`\2\u03b6\u03a4\3\2\2\2\u03b6\u03a5") + buf.write("\3\2\2\2\u03b6\u03a6\3\2\2\2\u03b6\u03a7\3\2\2\2\u03b6") + buf.write("\u03a8\3\2\2\2\u03b6\u03a9\3\2\2\2\u03b6\u03aa\3\2\2\2") + buf.write("\u03b6\u03ab\3\2\2\2\u03b6\u03ac\3\2\2\2\u03b6\u03ad\3") + buf.write("\2\2\2\u03b6\u03ae\3\2\2\2\u03b6\u03af\3\2\2\2\u03b6\u03b0") + buf.write("\3\2\2\2\u03b6\u03b1\3\2\2\2\u03b6\u03b2\3\2\2\2\u03b6") + buf.write("\u03b3\3\2\2\2\u03b6\u03b4\3\2\2\2\u03b6\u03b5\3\2\2\2") + buf.write("\u03b7\u0093\3\2\2\2\u03b8\u03bc\5\u0098M\2\u03b9\u03bc") + buf.write("\5\u00b2Z\2\u03ba\u03bc\5\u0096L\2\u03bb\u03b8\3\2\2\2") + buf.write("\u03bb\u03b9\3\2\2\2\u03bb\u03ba\3\2\2\2\u03bc\u0095\3") + buf.write("\2\2\2\u03bd\u03be\5\u00bc_\2\u03be\u03bf\7\'\2\2\u03bf") + buf.write("\u03c0\5\u00bc_\2\u03c0\u0097\3\2\2\2\u03c1\u03c6\7\65") + buf.write("\2\2\u03c2\u03c6\7&\2\2\u03c3\u03c6\7<\2\2\u03c4\u03c6") + buf.write("\5\u00bc_\2\u03c5\u03c1\3\2\2\2\u03c5\u03c2\3\2\2\2\u03c5") + buf.write("\u03c3\3\2\2\2\u03c5\u03c4\3\2\2\2\u03c6\u03d3\3\2\2\2") + buf.write("\u03c7\u03c9\7\31\2\2\u03c8\u03ca\5\u0094K\2\u03c9\u03c8") + buf.write("\3\2\2\2\u03c9\u03ca\3\2\2\2\u03ca\u03cf\3\2\2\2\u03cb") + buf.write("\u03cc\7\22\2\2\u03cc\u03ce\5\u0094K\2\u03cd\u03cb\3\2") + buf.write("\2\2\u03ce\u03d1\3\2\2\2\u03cf\u03cd\3\2\2\2\u03cf\u03d0") + buf.write("\3\2\2\2\u03d0\u03d2\3\2\2\2\u03d1\u03cf\3\2\2\2\u03d2") + buf.write("\u03d4\7\32\2\2\u03d3\u03c7\3\2\2\2\u03d3\u03d4\3\2\2") + buf.write("\2\u03d4\u0099\3\2\2\2\u03d5\u03d6\7[\2\2\u03d6\u03d9") + buf.write("\5\u009eP\2\u03d7\u03d8\7\\\2\2\u03d8\u03da\5\u0094K\2") + buf.write("\u03d9\u03d7\3\2\2\2\u03d9\u03da\3\2\2\2\u03da\u009b\3") + buf.write("\2\2\2\u03db\u03dc\5\u009eP\2\u03dc\u03dd\7\\\2\2\u03dd") + buf.write("\u03de\5\u0094K\2\u03de\u009d\3\2\2\2\u03df\u03e6\5\u00bc") + buf.write("_\2\u03e0\u03e6\5\u0096L\2\u03e1\u03e2\7\31\2\2\u03e2") + buf.write("\u03e3\5\u00a0Q\2\u03e3\u03e4\7\32\2\2\u03e4\u03e6\3\2") + buf.write("\2\2\u03e5\u03df\3\2\2\2\u03e5\u03e0\3\2\2\2\u03e5\u03e1") + buf.write("\3\2\2\2\u03e6\u009f\3\2\2\2\u03e7\u03ec\5\u00bc_\2\u03e8") + buf.write("\u03e9\7\22\2\2\u03e9\u03eb\5\u00bc_\2\u03ea\u03e8\3\2") + buf.write("\2\2\u03eb\u03ee\3\2\2\2\u03ec\u03ea\3\2\2\2\u03ec\u03ed") + buf.write("\3\2\2\2\u03ed\u00a1\3\2\2\2\u03ee\u03ec\3\2\2\2\u03ef") + buf.write("\u03f0\7]\2\2\u03f0\u03f1\5\u00bc_\2\u03f1\u00a3\3\2\2") + buf.write("\2\u03f2\u03f3\5\u00bc_\2\u03f3\u03f4\7@\2\2\u03f4\u00a5") + buf.write("\3\2\2\2\u03f5\u03f6\7^\2\2\u03f6\u03fa\5\u0094K\2\u03f7") + buf.write("\u03f9\5\u00a8U\2\u03f8\u03f7\3\2\2\2\u03f9\u03fc\3\2") + buf.write("\2\2\u03fa\u03f8\3\2\2\2\u03fa\u03fb\3\2\2\2\u03fb\u00a7") + buf.write("\3\2\2\2\u03fc\u03fa\3\2\2\2\u03fd\u03fe\7_\2\2\u03fe") + buf.write("\u03ff\5\u00b2Z\2\u03ff\u0400\5\u0090I\2\u0400\u0404\3") + buf.write("\2\2\2\u0401\u0402\7`\2\2\u0402\u0404\5\u0090I\2\u0403") + buf.write("\u03fd\3\2\2\2\u0403\u0401\3\2\2\2\u0404\u00a9\3\2\2\2") + buf.write("\u0405\u0406\7 \2\2\u0406\u0407\5\u00bc_\2\u0407\u0409") + buf.write("\7\31\2\2\u0408\u040a\5\u00a0Q\2\u0409\u0408\3\2\2\2\u0409") + buf.write("\u040a\3\2\2\2\u040a\u040b\3\2\2\2\u040b\u040d\7\32\2") + buf.write("\2\u040c\u040e\5\u00acW\2\u040d\u040c\3\2\2\2\u040d\u040e") + buf.write("\3\2\2\2\u040e\u040f\3\2\2\2\u040f\u0410\5\u0090I\2\u0410") + buf.write("\u00ab\3\2\2\2\u0411\u0412\7a\2\2\u0412\u0413\5\u00a0") + buf.write("Q\2\u0413\u00ad\3\2\2\2\u0414\u0417\7\35\2\2\u0415\u0418") + buf.write("\5\u0090I\2\u0416\u0418\5\u0094K\2\u0417\u0415\3\2\2\2") + buf.write("\u0417\u0416\3\2\2\2\u0418\u0419\3\2\2\2\u0419\u041c\5") + buf.write("\u0094K\2\u041a\u041d\5\u0090I\2\u041b\u041d\5\u0094K") + buf.write("\2\u041c\u041a\3\2\2\2\u041c\u041b\3\2\2\2\u041d\u041e") + buf.write("\3\2\2\2\u041e\u041f\5\u0090I\2\u041f\u00af\3\2\2\2\u0420") + buf.write("\u0421\7-\2\2\u0421\u0422\5\u0094K\2\u0422\u0423\5\u0090") + buf.write("I\2\u0423\u00b1\3\2\2\2\u0424\u0429\5\u00c2b\2\u0425\u0429") + buf.write("\7j\2\2\u0426\u0429\7k\2\2\u0427\u0429\5\u00be`\2\u0428") + buf.write("\u0424\3\2\2\2\u0428\u0425\3\2\2\2\u0428\u0426\3\2\2\2") + buf.write("\u0428\u0427\3\2\2\2\u0429\u00b3\3\2\2\2\u042a\u042b\7") + buf.write("\63\2\2\u042b\u042c\5\u00bc_\2\u042c\u042d\5\u0090I\2") + buf.write("\u042d\u00b5\3\2\2\2\u042e\u0430\7\31\2\2\u042f\u0431") + buf.write("\5\u0082B\2\u0430\u042f\3\2\2\2\u0430\u0431\3\2\2\2\u0431") + buf.write("\u0438\3\2\2\2\u0432\u0434\7\22\2\2\u0433\u0435\5\u0082") + buf.write("B\2\u0434\u0433\3\2\2\2\u0434\u0435\3\2\2\2\u0435\u0437") + buf.write("\3\2\2\2\u0436\u0432\3\2\2\2\u0437\u043a\3\2\2\2\u0438") + buf.write("\u0436\3\2\2\2\u0438\u0439\3\2\2\2\u0439\u043b\3\2\2\2") + buf.write("\u043a\u0438\3\2\2\2\u043b\u0449\7\32\2\2\u043c\u0445") + buf.write("\7$\2\2\u043d\u0442\5\u0082B\2\u043e\u043f\7\22\2\2\u043f") + buf.write("\u0441\5\u0082B\2\u0440\u043e\3\2\2\2\u0441\u0444\3\2") + buf.write("\2\2\u0442\u0440\3\2\2\2\u0442\u0443\3\2\2\2\u0443\u0446") + buf.write("\3\2\2\2\u0444\u0442\3\2\2\2\u0445\u043d\3\2\2\2\u0445") + buf.write("\u0446\3\2\2\2\u0446\u0447\3\2\2\2\u0447\u0449\7%\2\2") + buf.write("\u0448\u042e\3\2\2\2\u0448\u043c\3\2\2\2\u0449\u00b7\3") + buf.write("\2\2\2\u044a\u044d\5\u0080A\2\u044b\u044d\5J&\2\u044c") + buf.write("\u044a\3\2\2\2\u044c\u044b\3\2\2\2\u044d\u00b9\3\2\2\2") + buf.write("\u044e\u0450\t\17\2\2\u044f\u0451\7l\2\2\u0450\u044f\3") + buf.write("\2\2\2\u0450\u0451\3\2\2\2\u0451\u00bb\3\2\2\2\u0452\u0453") + buf.write("\t\20\2\2\u0453\u00bd\3\2\2\2\u0454\u0456\7m\2\2\u0455") + buf.write("\u0454\3\2\2\2\u0456\u0457\3\2\2\2\u0457\u0455\3\2\2\2") + buf.write("\u0457\u0458\3\2\2\2\u0458\u00bf\3\2\2\2\u0459\u0465\7") + buf.write("c\2\2\u045a\u045b\7\31\2\2\u045b\u0460\5J&\2\u045c\u045d") + buf.write("\7\22\2\2\u045d\u045f\5J&\2\u045e\u045c\3\2\2\2\u045f") + buf.write("\u0462\3\2\2\2\u0460\u045e\3\2\2\2\u0460\u0461\3\2\2\2") + buf.write("\u0461\u0463\3\2\2\2\u0462\u0460\3\2\2\2\u0463\u0464\7") + buf.write("\32\2\2\u0464\u0466\3\2\2\2\u0465\u045a\3\2\2\2\u0465") + buf.write("\u0466\3\2\2\2\u0466\u00c1\3\2\2\2\u0467\u0469\7\u0083") + buf.write("\2\2\u0468\u0467\3\2\2\2\u0469\u046a\3\2\2\2\u046a\u0468") + buf.write("\3\2\2\2\u046a\u046b\3\2\2\2\u046b\u00c3\3\2\2\2\u0080") + buf.write("\u00cd\u00cf\u00dd\u00e1\u00e6\u00ec\u00f0\u00f3\u00f8") + buf.write("\u00fe\u0105\u0109\u0116\u011e\u0123\u012d\u0130\u0136") + buf.write("\u013e\u0141\u014c\u0155\u0157\u015d\u0178\u0186\u0189") + buf.write("\u0190\u0194\u0196\u019b\u01a0\u01a3\u01a9\u01ad\u01b1") + buf.write("\u01b6\u01c3\u01c5\u01cc\u01d6\u01dc\u01e7\u01ea\u01f0") + buf.write("\u01f3\u01fb\u01fe\u0204\u0207\u020f\u0212\u0218\u021c") + buf.write("\u0227\u022c\u0231\u0239\u023e\u024c\u024e\u0253\u025d") + buf.write("\u0271\u027d\u0282\u0288\u028c\u028f\u029b\u02a4\u02a8") + buf.write("\u02ab\u02b2\u02c6\u02dc\u02e0\u02e5\u02e9\u02ed\u02f2") + buf.write("\u02f7\u02fb\u0313\u0349\u034d\u035d\u035f\u0369\u0371") + buf.write("\u0373\u037a\u0382\u0386\u038e\u0392\u0394\u039f\u03b6") + buf.write("\u03bb\u03c5\u03c9\u03cf\u03d3\u03d9\u03e5\u03ec\u03fa") + buf.write("\u0403\u0409\u040d\u0417\u041c\u0428\u0430\u0434\u0438") + buf.write("\u0442\u0445\u0448\u044c\u0450\u0457\u0460\u0465\u046a") return buf.getvalue() @@ -499,27 +600,30 @@ class SolidityParser ( Parser ): sharedContextCache = PredictionContextCache() - literalNames = [ "", "'pragma'", "';'", "'^'", "'~'", "'>='", - "'>'", "'<'", "'<='", "'='", "'as'", "'import'", "'*'", - "'from'", "'{'", "','", "'}'", "'contract'", "'interface'", - "'library'", "'is'", "'('", "')'", "'using'", "'for'", - "'struct'", "'constructor'", "'modifier'", "'function'", - "'returns'", "'event'", "'enum'", "'['", "']'", "'address'", - "'.'", "'mapping'", "'=>'", "'memory'", "'storage'", - "'calldata'", "'if'", "'else'", "'while'", "'assembly'", - "'do'", "'return'", "'throw'", "'emit'", "'var'", "'bool'", - "'string'", "'byte'", "'++'", "'--'", "'new'", "'+'", - "'-'", "'after'", "'delete'", "'!'", "'**'", "'/'", - "'%'", "'<<'", "'>>'", "'&'", "'|'", "'=='", "'!='", - "'&&'", "'||'", "'?'", "':'", "'|='", "'^='", "'&='", - "'<<='", "'>>='", "'+='", "'-='", "'*='", "'/='", "'%='", - "'let'", "':='", "'=:'", "'switch'", "'case'", "'default'", - "'->'", "", "", "", "", + literalNames = [ "", "'pragma'", "';'", "'||'", "'^'", "'~'", + "'>='", "'>'", "'<'", "'<='", "'='", "'as'", "'import'", + "'*'", "'from'", "'{'", "','", "'}'", "'abstract'", + "'contract'", "'interface'", "'library'", "'is'", "'('", + "')'", "'error'", "'using'", "'for'", "'struct'", "'modifier'", + "'function'", "'returns'", "'event'", "'enum'", "'['", + "']'", "'address'", "'.'", "'mapping'", "'=>'", "'memory'", + "'storage'", "'calldata'", "'if'", "'else'", "'try'", + "'catch'", "'while'", "'unchecked'", "'assembly'", + "'do'", "'return'", "'throw'", "'emit'", "'revert'", + "'var'", "'bool'", "'string'", "'byte'", "'++'", "'--'", + "'new'", "':'", "'+'", "'-'", "'after'", "'delete'", + "'!'", "'**'", "'/'", "'%'", "'<<'", "'>>'", "'&'", + "'|'", "'=='", "'!='", "'&&'", "'?'", "'|='", "'^='", + "'&='", "'<<='", "'>>='", "'+='", "'-='", "'*='", "'/='", + "'%='", "'let'", "':='", "'=:'", "'switch'", "'case'", + "'default'", "'->'", "'callback'", "'override'", "", "", "", "", "", "", "", "", "", - "'anonymous'", "'break'", "'constant'", "'continue'", + "", "", "'anonymous'", "'break'", + "'constant'", "'immutable'", "'continue'", "'leave'", "'external'", "'indexed'", "'internal'", "'payable'", - "'private'", "'public'", "'pure'", "'view'" ] + "'private'", "'public'", "'virtual'", "'pure'", "'type'", + "'view'", "'constructor'", "'fallback'", "'receive'" ] symbolicNames = [ "", "", "", "", "", "", "", "", @@ -543,15 +647,19 @@ class SolidityParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "", "", - "", "", "", "Int", "Uint", - "Byte", "Fixed", "Ufixed", "VersionLiteral", "BooleanLiteral", - "DecimalNumber", "HexNumber", "NumberUnit", "HexLiteral", - "ReservedKeyword", "AnonymousKeyword", "BreakKeyword", - "ConstantKeyword", "ContinueKeyword", "ExternalKeyword", - "IndexedKeyword", "InternalKeyword", "PayableKeyword", - "PrivateKeyword", "PublicKeyword", "PureKeyword", - "ViewKeyword", "Identifier", "StringLiteral", "WS", - "COMMENT", "LINE_COMMENT" ] + "", "", "", "", + "", "", "", "", + "", "", "Int", "Uint", "Byte", "Fixed", + "Ufixed", "BooleanLiteral", "DecimalNumber", "HexNumber", + "NumberUnit", "HexLiteralFragment", "ReservedKeyword", + "AnonymousKeyword", "BreakKeyword", "ConstantKeyword", + "ImmutableKeyword", "ContinueKeyword", "LeaveKeyword", + "ExternalKeyword", "IndexedKeyword", "InternalKeyword", + "PayableKeyword", "PrivateKeyword", "PublicKeyword", + "VirtualKeyword", "PureKeyword", "TypeKeyword", "ViewKeyword", + "ConstructorKeyword", "FallbackKeyword", "ReceiveKeyword", + "Identifier", "StringLiteralFragment", "VersionLiteral", + "WS", "COMMENT", "LINE_COMMENT" ] RULE_sourceUnit = 0 RULE_pragmaDirective = 1 @@ -562,109 +670,125 @@ class SolidityParser ( Parser ): RULE_versionConstraint = 6 RULE_importDeclaration = 7 RULE_importDirective = 8 - RULE_contractDefinition = 9 - RULE_inheritanceSpecifier = 10 - RULE_contractPart = 11 - RULE_stateVariableDeclaration = 12 - RULE_usingForDeclaration = 13 - RULE_structDefinition = 14 - RULE_constructorDefinition = 15 - RULE_modifierDefinition = 16 - RULE_modifierInvocation = 17 - RULE_functionDefinition = 18 - RULE_returnParameters = 19 - RULE_modifierList = 20 - RULE_eventDefinition = 21 - RULE_enumValue = 22 - RULE_enumDefinition = 23 - RULE_parameterList = 24 - RULE_parameter = 25 - RULE_eventParameterList = 26 - RULE_eventParameter = 27 - RULE_functionTypeParameterList = 28 - RULE_functionTypeParameter = 29 - RULE_variableDeclaration = 30 - RULE_typeName = 31 - RULE_userDefinedTypeName = 32 - RULE_mapping = 33 - RULE_functionTypeName = 34 - RULE_storageLocation = 35 - RULE_stateMutability = 36 - RULE_block = 37 - RULE_statement = 38 - RULE_expressionStatement = 39 - RULE_ifStatement = 40 - RULE_whileStatement = 41 - RULE_simpleStatement = 42 - RULE_forStatement = 43 - RULE_inlineAssemblyStatement = 44 - RULE_doWhileStatement = 45 - RULE_continueStatement = 46 - RULE_breakStatement = 47 - RULE_returnStatement = 48 - RULE_throwStatement = 49 - RULE_emitStatement = 50 - RULE_variableDeclarationStatement = 51 - RULE_variableDeclarationList = 52 - RULE_identifierList = 53 - RULE_elementaryTypeName = 54 - RULE_expression = 55 - RULE_primaryExpression = 56 - RULE_expressionList = 57 - RULE_nameValueList = 58 - RULE_nameValue = 59 - RULE_functionCallArguments = 60 - RULE_functionCall = 61 - RULE_assemblyBlock = 62 - RULE_assemblyItem = 63 - RULE_assemblyExpression = 64 - RULE_assemblyCall = 65 - RULE_assemblyLocalDefinition = 66 - RULE_assemblyAssignment = 67 - RULE_assemblyIdentifierOrList = 68 - RULE_assemblyIdentifierList = 69 - RULE_assemblyStackAssignment = 70 - RULE_labelDefinition = 71 - RULE_assemblySwitch = 72 - RULE_assemblyCase = 73 - RULE_assemblyFunctionDefinition = 74 - RULE_assemblyFunctionReturns = 75 - RULE_assemblyFor = 76 - RULE_assemblyIf = 77 - RULE_assemblyLiteral = 78 - RULE_subAssembly = 79 - RULE_tupleExpression = 80 - RULE_elementaryTypeNameExpression = 81 - RULE_numberLiteral = 82 - RULE_identifier = 83 + RULE_importPath = 9 + RULE_contractDefinition = 10 + RULE_inheritanceSpecifier = 11 + RULE_contractPart = 12 + RULE_stateVariableDeclaration = 13 + RULE_fileLevelConstant = 14 + RULE_customErrorDefinition = 15 + RULE_typeDefinition = 16 + RULE_usingForDeclaration = 17 + RULE_structDefinition = 18 + RULE_modifierDefinition = 19 + RULE_modifierInvocation = 20 + RULE_functionDefinition = 21 + RULE_functionDescriptor = 22 + RULE_returnParameters = 23 + RULE_modifierList = 24 + RULE_eventDefinition = 25 + RULE_enumValue = 26 + RULE_enumDefinition = 27 + RULE_parameterList = 28 + RULE_parameter = 29 + RULE_eventParameterList = 30 + RULE_eventParameter = 31 + RULE_functionTypeParameterList = 32 + RULE_functionTypeParameter = 33 + RULE_variableDeclaration = 34 + RULE_typeName = 35 + RULE_userDefinedTypeName = 36 + RULE_mappingKey = 37 + RULE_mapping = 38 + RULE_functionTypeName = 39 + RULE_storageLocation = 40 + RULE_stateMutability = 41 + RULE_block = 42 + RULE_statement = 43 + RULE_expressionStatement = 44 + RULE_ifStatement = 45 + RULE_tryStatement = 46 + RULE_catchClause = 47 + RULE_whileStatement = 48 + RULE_simpleStatement = 49 + RULE_uncheckedStatement = 50 + RULE_forStatement = 51 + RULE_inlineAssemblyStatement = 52 + RULE_doWhileStatement = 53 + RULE_continueStatement = 54 + RULE_breakStatement = 55 + RULE_returnStatement = 56 + RULE_throwStatement = 57 + RULE_emitStatement = 58 + RULE_revertStatement = 59 + RULE_variableDeclarationStatement = 60 + RULE_variableDeclarationList = 61 + RULE_identifierList = 62 + RULE_elementaryTypeName = 63 + RULE_expression = 64 + RULE_primaryExpression = 65 + RULE_expressionList = 66 + RULE_nameValueList = 67 + RULE_nameValue = 68 + RULE_functionCallArguments = 69 + RULE_functionCall = 70 + RULE_assemblyBlock = 71 + RULE_assemblyItem = 72 + RULE_assemblyExpression = 73 + RULE_assemblyMember = 74 + RULE_assemblyCall = 75 + RULE_assemblyLocalDefinition = 76 + RULE_assemblyAssignment = 77 + RULE_assemblyIdentifierOrList = 78 + RULE_assemblyIdentifierList = 79 + RULE_assemblyStackAssignment = 80 + RULE_labelDefinition = 81 + RULE_assemblySwitch = 82 + RULE_assemblyCase = 83 + RULE_assemblyFunctionDefinition = 84 + RULE_assemblyFunctionReturns = 85 + RULE_assemblyFor = 86 + RULE_assemblyIf = 87 + RULE_assemblyLiteral = 88 + RULE_subAssembly = 89 + RULE_tupleExpression = 90 + RULE_typeNameExpression = 91 + RULE_numberLiteral = 92 + RULE_identifier = 93 + RULE_hexLiteral = 94 + RULE_overrideSpecifier = 95 + RULE_stringLiteral = 96 ruleNames = [ "sourceUnit", "pragmaDirective", "pragmaName", "pragmaValue", "version", "versionOperator", "versionConstraint", "importDeclaration", - "importDirective", "contractDefinition", "inheritanceSpecifier", - "contractPart", "stateVariableDeclaration", "usingForDeclaration", - "structDefinition", "constructorDefinition", "modifierDefinition", - "modifierInvocation", "functionDefinition", "returnParameters", - "modifierList", "eventDefinition", "enumValue", "enumDefinition", - "parameterList", "parameter", "eventParameterList", "eventParameter", - "functionTypeParameterList", "functionTypeParameter", - "variableDeclaration", "typeName", "userDefinedTypeName", - "mapping", "functionTypeName", "storageLocation", "stateMutability", - "block", "statement", "expressionStatement", "ifStatement", - "whileStatement", "simpleStatement", "forStatement", - "inlineAssemblyStatement", "doWhileStatement", "continueStatement", - "breakStatement", "returnStatement", "throwStatement", - "emitStatement", "variableDeclarationStatement", "variableDeclarationList", + "importDirective", "importPath", "contractDefinition", + "inheritanceSpecifier", "contractPart", "stateVariableDeclaration", + "fileLevelConstant", "customErrorDefinition", "typeDefinition", + "usingForDeclaration", "structDefinition", "modifierDefinition", + "modifierInvocation", "functionDefinition", "functionDescriptor", + "returnParameters", "modifierList", "eventDefinition", + "enumValue", "enumDefinition", "parameterList", "parameter", + "eventParameterList", "eventParameter", "functionTypeParameterList", + "functionTypeParameter", "variableDeclaration", "typeName", + "userDefinedTypeName", "mappingKey", "mapping", "functionTypeName", + "storageLocation", "stateMutability", "block", "statement", + "expressionStatement", "ifStatement", "tryStatement", + "catchClause", "whileStatement", "simpleStatement", "uncheckedStatement", + "forStatement", "inlineAssemblyStatement", "doWhileStatement", + "continueStatement", "breakStatement", "returnStatement", + "throwStatement", "emitStatement", "revertStatement", + "variableDeclarationStatement", "variableDeclarationList", "identifierList", "elementaryTypeName", "expression", "primaryExpression", "expressionList", "nameValueList", "nameValue", "functionCallArguments", "functionCall", "assemblyBlock", "assemblyItem", "assemblyExpression", - "assemblyCall", "assemblyLocalDefinition", "assemblyAssignment", - "assemblyIdentifierOrList", "assemblyIdentifierList", + "assemblyMember", "assemblyCall", "assemblyLocalDefinition", + "assemblyAssignment", "assemblyIdentifierOrList", "assemblyIdentifierList", "assemblyStackAssignment", "labelDefinition", "assemblySwitch", "assemblyCase", "assemblyFunctionDefinition", "assemblyFunctionReturns", "assemblyFor", "assemblyIf", "assemblyLiteral", "subAssembly", - "tupleExpression", "elementaryTypeNameExpression", "numberLiteral", - "identifier" ] + "tupleExpression", "typeNameExpression", "numberLiteral", + "identifier", "hexLiteral", "overrideSpecifier", "stringLiteral" ] EOF = Token.EOF T__0=1 @@ -757,39 +881,53 @@ class SolidityParser ( Parser ): T__87=88 T__88=89 T__89=90 - Int=91 - Uint=92 - Byte=93 - Fixed=94 - Ufixed=95 - VersionLiteral=96 - BooleanLiteral=97 - DecimalNumber=98 - HexNumber=99 - NumberUnit=100 - HexLiteral=101 - ReservedKeyword=102 - AnonymousKeyword=103 - BreakKeyword=104 - ConstantKeyword=105 - ContinueKeyword=106 - ExternalKeyword=107 - IndexedKeyword=108 - InternalKeyword=109 - PayableKeyword=110 - PrivateKeyword=111 - PublicKeyword=112 - PureKeyword=113 - ViewKeyword=114 - Identifier=115 - StringLiteral=116 - WS=117 - COMMENT=118 - LINE_COMMENT=119 + T__90=91 + T__91=92 + T__92=93 + T__93=94 + T__94=95 + T__95=96 + T__96=97 + Int=98 + Uint=99 + Byte=100 + Fixed=101 + Ufixed=102 + BooleanLiteral=103 + DecimalNumber=104 + HexNumber=105 + NumberUnit=106 + HexLiteralFragment=107 + ReservedKeyword=108 + AnonymousKeyword=109 + BreakKeyword=110 + ConstantKeyword=111 + ImmutableKeyword=112 + ContinueKeyword=113 + LeaveKeyword=114 + ExternalKeyword=115 + IndexedKeyword=116 + InternalKeyword=117 + PayableKeyword=118 + PrivateKeyword=119 + PublicKeyword=120 + VirtualKeyword=121 + PureKeyword=122 + TypeKeyword=123 + ViewKeyword=124 + ConstructorKeyword=125 + FallbackKeyword=126 + ReceiveKeyword=127 + Identifier=128 + StringLiteralFragment=129 + VersionLiteral=130 + WS=131 + COMMENT=132 + LINE_COMMENT=133 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) - self.checkVersion("4.7.2") + self.checkVersion("4.9.3") self._interp = ParserATNSimulator(self, self.atn, self.decisionsToDFA, self.sharedContextCache) self._predicates = None @@ -797,6 +935,7 @@ def __init__(self, input:TokenStream, output:TextIO = sys.stdout): class SourceUnitContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -826,6 +965,48 @@ def contractDefinition(self, i:int=None): return self.getTypedRuleContext(SolidityParser.ContractDefinitionContext,i) + def enumDefinition(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(SolidityParser.EnumDefinitionContext) + else: + return self.getTypedRuleContext(SolidityParser.EnumDefinitionContext,i) + + + def structDefinition(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(SolidityParser.StructDefinitionContext) + else: + return self.getTypedRuleContext(SolidityParser.StructDefinitionContext,i) + + + def functionDefinition(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(SolidityParser.FunctionDefinitionContext) + else: + return self.getTypedRuleContext(SolidityParser.FunctionDefinitionContext,i) + + + def fileLevelConstant(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(SolidityParser.FileLevelConstantContext) + else: + return self.getTypedRuleContext(SolidityParser.FileLevelConstantContext,i) + + + def customErrorDefinition(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(SolidityParser.CustomErrorDefinitionContext) + else: + return self.getTypedRuleContext(SolidityParser.CustomErrorDefinitionContext,i) + + + def typeDefinition(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(SolidityParser.TypeDefinitionContext) + else: + return self.getTypedRuleContext(SolidityParser.TypeDefinitionContext,i) + + def getRuleIndex(self): return SolidityParser.RULE_sourceUnit @@ -853,33 +1034,64 @@ def sourceUnit(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 173 + self.state = 205 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__0) | (1 << SolidityParser.T__10) | (1 << SolidityParser.T__16) | (1 << SolidityParser.T__17) | (1 << SolidityParser.T__18))) != 0): - self.state = 171 + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__0) | (1 << SolidityParser.T__11) | (1 << SolidityParser.T__13) | (1 << SolidityParser.T__17) | (1 << SolidityParser.T__18) | (1 << SolidityParser.T__19) | (1 << SolidityParser.T__20) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__27) | (1 << SolidityParser.T__29) | (1 << SolidityParser.T__32) | (1 << SolidityParser.T__35) | (1 << SolidityParser.T__37) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53) | (1 << SolidityParser.T__54) | (1 << SolidityParser.T__55) | (1 << SolidityParser.T__56) | (1 << SolidityParser.T__57))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.TypeKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.FallbackKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): + self.state = 203 self._errHandler.sync(self) - token = self._input.LA(1) - if token in [SolidityParser.T__0]: - self.state = 168 + la_ = self._interp.adaptivePredict(self._input,0,self._ctx) + if la_ == 1: + self.state = 194 self.pragmaDirective() pass - elif token in [SolidityParser.T__10]: - self.state = 169 + + elif la_ == 2: + self.state = 195 self.importDirective() pass - elif token in [SolidityParser.T__16, SolidityParser.T__17, SolidityParser.T__18]: - self.state = 170 + + elif la_ == 3: + self.state = 196 self.contractDefinition() pass - else: - raise NoViableAltException(self) - self.state = 175 + elif la_ == 4: + self.state = 197 + self.enumDefinition() + pass + + elif la_ == 5: + self.state = 198 + self.structDefinition() + pass + + elif la_ == 6: + self.state = 199 + self.functionDefinition() + pass + + elif la_ == 7: + self.state = 200 + self.fileLevelConstant() + pass + + elif la_ == 8: + self.state = 201 + self.customErrorDefinition() + pass + + elif la_ == 9: + self.state = 202 + self.typeDefinition() + pass + + + self.state = 207 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 176 + self.state = 208 self.match(SolidityParser.EOF) except RecognitionException as re: localctx.exception = re @@ -891,6 +1103,7 @@ def sourceUnit(self): class PragmaDirectiveContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -930,13 +1143,13 @@ def pragmaDirective(self): self.enterRule(localctx, 2, self.RULE_pragmaDirective) try: self.enterOuterAlt(localctx, 1) - self.state = 178 + self.state = 210 self.match(SolidityParser.T__0) - self.state = 179 + self.state = 211 self.pragmaName() - self.state = 180 + self.state = 212 self.pragmaValue() - self.state = 181 + self.state = 213 self.match(SolidityParser.T__1) except RecognitionException as re: localctx.exception = re @@ -948,6 +1161,7 @@ def pragmaDirective(self): class PragmaNameContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -983,7 +1197,7 @@ def pragmaName(self): self.enterRule(localctx, 4, self.RULE_pragmaName) try: self.enterOuterAlt(localctx, 1) - self.state = 183 + self.state = 215 self.identifier() except RecognitionException as re: localctx.exception = re @@ -995,6 +1209,7 @@ def pragmaName(self): class PragmaValueContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -1033,18 +1248,18 @@ def pragmaValue(self): localctx = SolidityParser.PragmaValueContext(self, self._ctx, self.state) self.enterRule(localctx, 6, self.RULE_pragmaValue) try: - self.state = 187 + self.state = 219 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,2,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 185 + self.state = 217 self.version() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 186 + self.state = 218 self.expression(0) pass @@ -1059,6 +1274,7 @@ def pragmaValue(self): class VersionContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -1098,15 +1314,25 @@ def version(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 189 + self.state = 221 self.versionConstraint() - self.state = 191 + self.state = 228 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__2) | (1 << SolidityParser.T__3) | (1 << SolidityParser.T__4) | (1 << SolidityParser.T__5) | (1 << SolidityParser.T__6) | (1 << SolidityParser.T__7) | (1 << SolidityParser.T__8))) != 0) or _la==SolidityParser.VersionLiteral: - self.state = 190 - self.versionConstraint() + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__2) | (1 << SolidityParser.T__3) | (1 << SolidityParser.T__4) | (1 << SolidityParser.T__5) | (1 << SolidityParser.T__6) | (1 << SolidityParser.T__7) | (1 << SolidityParser.T__8) | (1 << SolidityParser.T__9))) != 0) or _la==SolidityParser.DecimalNumber or _la==SolidityParser.VersionLiteral: + self.state = 223 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==SolidityParser.T__2: + self.state = 222 + self.match(SolidityParser.T__2) + + self.state = 225 + self.versionConstraint() + self.state = 230 + self._errHandler.sync(self) + _la = self._input.LA(1) except RecognitionException as re: localctx.exception = re @@ -1118,6 +1344,7 @@ def version(self): class VersionOperatorContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -1151,9 +1378,9 @@ def versionOperator(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 193 + self.state = 231 _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__2) | (1 << SolidityParser.T__3) | (1 << SolidityParser.T__4) | (1 << SolidityParser.T__5) | (1 << SolidityParser.T__6) | (1 << SolidityParser.T__7) | (1 << SolidityParser.T__8))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__4) | (1 << SolidityParser.T__5) | (1 << SolidityParser.T__6) | (1 << SolidityParser.T__7) | (1 << SolidityParser.T__8) | (1 << SolidityParser.T__9))) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -1168,6 +1395,7 @@ def versionOperator(self): class VersionConstraintContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -1180,6 +1408,9 @@ def versionOperator(self): return self.getTypedRuleContext(SolidityParser.VersionOperatorContext,0) + def DecimalNumber(self): + return self.getToken(SolidityParser.DecimalNumber, 0) + def getRuleIndex(self): return SolidityParser.RULE_versionConstraint @@ -1206,17 +1437,38 @@ def versionConstraint(self): self.enterRule(localctx, 12, self.RULE_versionConstraint) self._la = 0 # Token type try: - self.enterOuterAlt(localctx, 1) - self.state = 196 + self.state = 241 self._errHandler.sync(self) - _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__2) | (1 << SolidityParser.T__3) | (1 << SolidityParser.T__4) | (1 << SolidityParser.T__5) | (1 << SolidityParser.T__6) | (1 << SolidityParser.T__7) | (1 << SolidityParser.T__8))) != 0): - self.state = 195 - self.versionOperator() + la_ = self._interp.adaptivePredict(self._input,7,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 234 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__4) | (1 << SolidityParser.T__5) | (1 << SolidityParser.T__6) | (1 << SolidityParser.T__7) | (1 << SolidityParser.T__8) | (1 << SolidityParser.T__9))) != 0): + self.state = 233 + self.versionOperator() + + + self.state = 236 + self.match(SolidityParser.VersionLiteral) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 238 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__4) | (1 << SolidityParser.T__5) | (1 << SolidityParser.T__6) | (1 << SolidityParser.T__7) | (1 << SolidityParser.T__8) | (1 << SolidityParser.T__9))) != 0): + self.state = 237 + self.versionOperator() + + + self.state = 240 + self.match(SolidityParser.DecimalNumber) + pass - self.state = 198 - self.match(SolidityParser.VersionLiteral) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -1227,6 +1479,7 @@ def versionConstraint(self): class ImportDeclarationContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -1266,15 +1519,15 @@ def importDeclaration(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 200 + self.state = 243 self.identifier() - self.state = 203 + self.state = 246 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__9: - self.state = 201 - self.match(SolidityParser.T__9) - self.state = 202 + if _la==SolidityParser.T__10: + self.state = 244 + self.match(SolidityParser.T__10) + self.state = 245 self.identifier() @@ -1288,13 +1541,15 @@ def importDeclaration(self): class ImportDirectiveContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser - def StringLiteral(self): - return self.getToken(SolidityParser.StringLiteral, 0) + def importPath(self): + return self.getTypedRuleContext(SolidityParser.ImportPathContext,0) + def identifier(self, i:int=None): if i is None: @@ -1336,92 +1591,92 @@ def importDirective(self): self.enterRule(localctx, 16, self.RULE_importDirective) self._la = 0 # Token type try: - self.state = 239 + self.state = 284 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,10,self._ctx) + la_ = self._interp.adaptivePredict(self._input,13,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 205 - self.match(SolidityParser.T__10) - self.state = 206 - self.match(SolidityParser.StringLiteral) - self.state = 209 + self.state = 248 + self.match(SolidityParser.T__11) + self.state = 249 + self.importPath() + self.state = 252 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__9: - self.state = 207 - self.match(SolidityParser.T__9) - self.state = 208 + if _la==SolidityParser.T__10: + self.state = 250 + self.match(SolidityParser.T__10) + self.state = 251 self.identifier() - self.state = 211 + self.state = 254 self.match(SolidityParser.T__1) pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 212 - self.match(SolidityParser.T__10) - self.state = 215 + self.state = 256 + self.match(SolidityParser.T__11) + self.state = 259 self._errHandler.sync(self) token = self._input.LA(1) - if token in [SolidityParser.T__11]: - self.state = 213 - self.match(SolidityParser.T__11) + if token in [SolidityParser.T__12]: + self.state = 257 + self.match(SolidityParser.T__12) pass - elif token in [SolidityParser.T__12, SolidityParser.T__39, SolidityParser.Identifier]: - self.state = 214 + elif token in [SolidityParser.T__13, SolidityParser.T__24, SolidityParser.T__41, SolidityParser.T__53, SolidityParser.T__95, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier]: + self.state = 258 self.identifier() pass else: raise NoViableAltException(self) - self.state = 219 + self.state = 263 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__9: - self.state = 217 - self.match(SolidityParser.T__9) - self.state = 218 + if _la==SolidityParser.T__10: + self.state = 261 + self.match(SolidityParser.T__10) + self.state = 262 self.identifier() - self.state = 221 - self.match(SolidityParser.T__12) - self.state = 222 - self.match(SolidityParser.StringLiteral) - self.state = 223 + self.state = 265 + self.match(SolidityParser.T__13) + self.state = 266 + self.importPath() + self.state = 267 self.match(SolidityParser.T__1) pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 224 - self.match(SolidityParser.T__10) - self.state = 225 - self.match(SolidityParser.T__13) - self.state = 226 + self.state = 269 + self.match(SolidityParser.T__11) + self.state = 270 + self.match(SolidityParser.T__14) + self.state = 271 self.importDeclaration() - self.state = 231 + self.state = 276 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__14: - self.state = 227 - self.match(SolidityParser.T__14) - self.state = 228 + while _la==SolidityParser.T__15: + self.state = 272 + self.match(SolidityParser.T__15) + self.state = 273 self.importDeclaration() - self.state = 233 + self.state = 278 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 234 - self.match(SolidityParser.T__15) - self.state = 235 - self.match(SolidityParser.T__12) - self.state = 236 - self.match(SolidityParser.StringLiteral) - self.state = 237 + self.state = 279 + self.match(SolidityParser.T__16) + self.state = 280 + self.match(SolidityParser.T__13) + self.state = 281 + self.importPath() + self.state = 282 self.match(SolidityParser.T__1) pass @@ -1435,7 +1690,55 @@ def importDirective(self): return localctx + class ImportPathContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def StringLiteralFragment(self): + return self.getToken(SolidityParser.StringLiteralFragment, 0) + + def getRuleIndex(self): + return SolidityParser.RULE_importPath + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterImportPath" ): + listener.enterImportPath(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitImportPath" ): + listener.exitImportPath(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitImportPath" ): + return visitor.visitImportPath(self) + else: + return visitor.visitChildren(self) + + + + + def importPath(self): + + localctx = SolidityParser.ImportPathContext(self, self._ctx, self.state) + self.enterRule(localctx, 18, self.RULE_importPath) + try: + self.enterOuterAlt(localctx, 1) + self.state = 286 + self.match(SolidityParser.StringLiteralFragment) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ContractDefinitionContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -1482,55 +1785,63 @@ def accept(self, visitor:ParseTreeVisitor): def contractDefinition(self): localctx = SolidityParser.ContractDefinitionContext(self, self._ctx, self.state) - self.enterRule(localctx, 18, self.RULE_contractDefinition) + self.enterRule(localctx, 20, self.RULE_contractDefinition) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 241 + self.state = 289 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==SolidityParser.T__17: + self.state = 288 + self.match(SolidityParser.T__17) + + + self.state = 291 _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__16) | (1 << SolidityParser.T__17) | (1 << SolidityParser.T__18))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__18) | (1 << SolidityParser.T__19) | (1 << SolidityParser.T__20))) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 242 + self.state = 292 self.identifier() - self.state = 252 + self.state = 302 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__19: - self.state = 243 - self.match(SolidityParser.T__19) - self.state = 244 + if _la==SolidityParser.T__21: + self.state = 293 + self.match(SolidityParser.T__21) + self.state = 294 self.inheritanceSpecifier() - self.state = 249 + self.state = 299 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__14: - self.state = 245 - self.match(SolidityParser.T__14) - self.state = 246 + while _la==SolidityParser.T__15: + self.state = 295 + self.match(SolidityParser.T__15) + self.state = 296 self.inheritanceSpecifier() - self.state = 251 + self.state = 301 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 254 - self.match(SolidityParser.T__13) - self.state = 258 + self.state = 304 + self.match(SolidityParser.T__14) + self.state = 308 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__12) | (1 << SolidityParser.T__22) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__25) | (1 << SolidityParser.T__26) | (1 << SolidityParser.T__27) | (1 << SolidityParser.T__29) | (1 << SolidityParser.T__30) | (1 << SolidityParser.T__33) | (1 << SolidityParser.T__35) | (1 << SolidityParser.T__39) | (1 << SolidityParser.T__48) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__50) | (1 << SolidityParser.T__51))) != 0) or ((((_la - 91)) & ~0x3f) == 0 and ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.Identifier - 91)))) != 0): - self.state = 255 + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__25) | (1 << SolidityParser.T__27) | (1 << SolidityParser.T__28) | (1 << SolidityParser.T__29) | (1 << SolidityParser.T__31) | (1 << SolidityParser.T__32) | (1 << SolidityParser.T__35) | (1 << SolidityParser.T__37) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53) | (1 << SolidityParser.T__54) | (1 << SolidityParser.T__55) | (1 << SolidityParser.T__56) | (1 << SolidityParser.T__57))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.TypeKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.FallbackKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): + self.state = 305 self.contractPart() - self.state = 260 + self.state = 310 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 261 - self.match(SolidityParser.T__15) + self.state = 311 + self.match(SolidityParser.T__16) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -1541,6 +1852,7 @@ def contractDefinition(self): class InheritanceSpecifierContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -1550,11 +1862,8 @@ def userDefinedTypeName(self): return self.getTypedRuleContext(SolidityParser.UserDefinedTypeNameContext,0) - def expression(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(SolidityParser.ExpressionContext) - else: - return self.getTypedRuleContext(SolidityParser.ExpressionContext,i) + def expressionList(self): + return self.getTypedRuleContext(SolidityParser.ExpressionListContext,0) def getRuleIndex(self): @@ -1580,34 +1889,28 @@ def accept(self, visitor:ParseTreeVisitor): def inheritanceSpecifier(self): localctx = SolidityParser.InheritanceSpecifierContext(self, self._ctx, self.state) - self.enterRule(localctx, 20, self.RULE_inheritanceSpecifier) + self.enterRule(localctx, 22, self.RULE_inheritanceSpecifier) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 263 + self.state = 313 self.userDefinedTypeName() - self.state = 275 + self.state = 319 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__20: - self.state = 264 - self.match(SolidityParser.T__20) - self.state = 265 - self.expression(0) - self.state = 270 + if _la==SolidityParser.T__22: + self.state = 314 + self.match(SolidityParser.T__22) + self.state = 316 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__14: - self.state = 266 - self.match(SolidityParser.T__14) - self.state = 267 - self.expression(0) - self.state = 272 - self._errHandler.sync(self) - _la = self._input.LA(1) + if ((((_la - 5)) & ~0x3f) == 0 and ((1 << (_la - 5)) & ((1 << (SolidityParser.T__4 - 5)) | (1 << (SolidityParser.T__13 - 5)) | (1 << (SolidityParser.T__22 - 5)) | (1 << (SolidityParser.T__24 - 5)) | (1 << (SolidityParser.T__33 - 5)) | (1 << (SolidityParser.T__35 - 5)) | (1 << (SolidityParser.T__41 - 5)) | (1 << (SolidityParser.T__53 - 5)) | (1 << (SolidityParser.T__54 - 5)) | (1 << (SolidityParser.T__55 - 5)) | (1 << (SolidityParser.T__56 - 5)) | (1 << (SolidityParser.T__57 - 5)) | (1 << (SolidityParser.T__58 - 5)) | (1 << (SolidityParser.T__59 - 5)) | (1 << (SolidityParser.T__60 - 5)) | (1 << (SolidityParser.T__62 - 5)) | (1 << (SolidityParser.T__63 - 5)) | (1 << (SolidityParser.T__64 - 5)) | (1 << (SolidityParser.T__65 - 5)) | (1 << (SolidityParser.T__66 - 5)))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.BooleanLiteral - 96)) | (1 << (SolidityParser.DecimalNumber - 96)) | (1 << (SolidityParser.HexNumber - 96)) | (1 << (SolidityParser.HexLiteralFragment - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.TypeKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)) | (1 << (SolidityParser.StringLiteralFragment - 96)))) != 0): + self.state = 315 + self.expressionList() - self.state = 273 - self.match(SolidityParser.T__21) + + self.state = 318 + self.match(SolidityParser.T__23) except RecognitionException as re: @@ -1620,6 +1923,7 @@ def inheritanceSpecifier(self): class ContractPartContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -1637,10 +1941,6 @@ def structDefinition(self): return self.getTypedRuleContext(SolidityParser.StructDefinitionContext,0) - def constructorDefinition(self): - return self.getTypedRuleContext(SolidityParser.ConstructorDefinitionContext,0) - - def modifierDefinition(self): return self.getTypedRuleContext(SolidityParser.ModifierDefinitionContext,0) @@ -1657,6 +1957,14 @@ def enumDefinition(self): return self.getTypedRuleContext(SolidityParser.EnumDefinitionContext,0) + def customErrorDefinition(self): + return self.getTypedRuleContext(SolidityParser.CustomErrorDefinitionContext,0) + + + def typeDefinition(self): + return self.getTypedRuleContext(SolidityParser.TypeDefinitionContext,0) + + def getRuleIndex(self): return SolidityParser.RULE_contractPart @@ -1680,57 +1988,63 @@ def accept(self, visitor:ParseTreeVisitor): def contractPart(self): localctx = SolidityParser.ContractPartContext(self, self._ctx, self.state) - self.enterRule(localctx, 22, self.RULE_contractPart) + self.enterRule(localctx, 24, self.RULE_contractPart) try: - self.state = 285 + self.state = 330 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,16,self._ctx) + la_ = self._interp.adaptivePredict(self._input,20,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 277 + self.state = 321 self.stateVariableDeclaration() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 278 + self.state = 322 self.usingForDeclaration() pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 279 + self.state = 323 self.structDefinition() pass elif la_ == 4: self.enterOuterAlt(localctx, 4) - self.state = 280 - self.constructorDefinition() + self.state = 324 + self.modifierDefinition() pass elif la_ == 5: self.enterOuterAlt(localctx, 5) - self.state = 281 - self.modifierDefinition() + self.state = 325 + self.functionDefinition() pass elif la_ == 6: self.enterOuterAlt(localctx, 6) - self.state = 282 - self.functionDefinition() + self.state = 326 + self.eventDefinition() pass elif la_ == 7: self.enterOuterAlt(localctx, 7) - self.state = 283 - self.eventDefinition() + self.state = 327 + self.enumDefinition() pass elif la_ == 8: self.enterOuterAlt(localctx, 8) - self.state = 284 - self.enumDefinition() + self.state = 328 + self.customErrorDefinition() + pass + + elif la_ == 9: + self.enterOuterAlt(localctx, 9) + self.state = 329 + self.typeDefinition() pass @@ -1744,6 +2058,7 @@ def contractPart(self): class StateVariableDeclarationContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -1757,10 +2072,6 @@ def identifier(self): return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) - def expression(self): - return self.getTypedRuleContext(SolidityParser.ExpressionContext,0) - - def PublicKeyword(self, i:int=None): if i is None: return self.getTokens(SolidityParser.PublicKeyword) @@ -1785,6 +2096,23 @@ def ConstantKeyword(self, i:int=None): else: return self.getToken(SolidityParser.ConstantKeyword, i) + def ImmutableKeyword(self, i:int=None): + if i is None: + return self.getTokens(SolidityParser.ImmutableKeyword) + else: + return self.getToken(SolidityParser.ImmutableKeyword, i) + + def overrideSpecifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(SolidityParser.OverrideSpecifierContext) + else: + return self.getTypedRuleContext(SolidityParser.OverrideSpecifierContext,i) + + + def expression(self): + return self.getTypedRuleContext(SolidityParser.ExpressionContext,0) + + def getRuleIndex(self): return SolidityParser.RULE_stateVariableDeclaration @@ -1808,40 +2136,63 @@ def accept(self, visitor:ParseTreeVisitor): def stateVariableDeclaration(self): localctx = SolidityParser.StateVariableDeclarationContext(self, self._ctx, self.state) - self.enterRule(localctx, 24, self.RULE_stateVariableDeclaration) + self.enterRule(localctx, 26, self.RULE_stateVariableDeclaration) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 287 + self.state = 332 self.typeName(0) - self.state = 291 + self.state = 341 self._errHandler.sync(self) _la = self._input.LA(1) - while ((((_la - 105)) & ~0x3f) == 0 and ((1 << (_la - 105)) & ((1 << (SolidityParser.ConstantKeyword - 105)) | (1 << (SolidityParser.InternalKeyword - 105)) | (1 << (SolidityParser.PrivateKeyword - 105)) | (1 << (SolidityParser.PublicKeyword - 105)))) != 0): - self.state = 288 - _la = self._input.LA(1) - if not(((((_la - 105)) & ~0x3f) == 0 and ((1 << (_la - 105)) & ((1 << (SolidityParser.ConstantKeyword - 105)) | (1 << (SolidityParser.InternalKeyword - 105)) | (1 << (SolidityParser.PrivateKeyword - 105)) | (1 << (SolidityParser.PublicKeyword - 105)))) != 0)): - self._errHandler.recoverInline(self) + while ((((_la - 97)) & ~0x3f) == 0 and ((1 << (_la - 97)) & ((1 << (SolidityParser.T__96 - 97)) | (1 << (SolidityParser.ConstantKeyword - 97)) | (1 << (SolidityParser.ImmutableKeyword - 97)) | (1 << (SolidityParser.InternalKeyword - 97)) | (1 << (SolidityParser.PrivateKeyword - 97)) | (1 << (SolidityParser.PublicKeyword - 97)))) != 0): + self.state = 339 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [SolidityParser.PublicKeyword]: + self.state = 333 + self.match(SolidityParser.PublicKeyword) + pass + elif token in [SolidityParser.InternalKeyword]: + self.state = 334 + self.match(SolidityParser.InternalKeyword) + pass + elif token in [SolidityParser.PrivateKeyword]: + self.state = 335 + self.match(SolidityParser.PrivateKeyword) + pass + elif token in [SolidityParser.ConstantKeyword]: + self.state = 336 + self.match(SolidityParser.ConstantKeyword) + pass + elif token in [SolidityParser.ImmutableKeyword]: + self.state = 337 + self.match(SolidityParser.ImmutableKeyword) + pass + elif token in [SolidityParser.T__96]: + self.state = 338 + self.overrideSpecifier() + pass else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 293 + raise NoViableAltException(self) + + self.state = 343 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 294 + self.state = 344 self.identifier() - self.state = 297 + self.state = 347 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__8: - self.state = 295 - self.match(SolidityParser.T__8) - self.state = 296 + if _la==SolidityParser.T__9: + self.state = 345 + self.match(SolidityParser.T__9) + self.state = 346 self.expression(0) - self.state = 299 + self.state = 349 self.match(SolidityParser.T__1) except RecognitionException as re: localctx.exception = re @@ -1852,26 +2203,217 @@ def stateVariableDeclaration(self): return localctx - class UsingForDeclarationContext(ParserRuleContext): + class FileLevelConstantContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser + def typeName(self): + return self.getTypedRuleContext(SolidityParser.TypeNameContext,0) + + + def ConstantKeyword(self): + return self.getToken(SolidityParser.ConstantKeyword, 0) + def identifier(self): return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) - def typeName(self): - return self.getTypedRuleContext(SolidityParser.TypeNameContext,0) + def expression(self): + return self.getTypedRuleContext(SolidityParser.ExpressionContext,0) def getRuleIndex(self): - return SolidityParser.RULE_usingForDeclaration + return SolidityParser.RULE_fileLevelConstant def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterUsingForDeclaration" ): - listener.enterUsingForDeclaration(self) + if hasattr( listener, "enterFileLevelConstant" ): + listener.enterFileLevelConstant(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitFileLevelConstant" ): + listener.exitFileLevelConstant(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitFileLevelConstant" ): + return visitor.visitFileLevelConstant(self) + else: + return visitor.visitChildren(self) + + + + + def fileLevelConstant(self): + + localctx = SolidityParser.FileLevelConstantContext(self, self._ctx, self.state) + self.enterRule(localctx, 28, self.RULE_fileLevelConstant) + try: + self.enterOuterAlt(localctx, 1) + self.state = 351 + self.typeName(0) + self.state = 352 + self.match(SolidityParser.ConstantKeyword) + self.state = 353 + self.identifier() + self.state = 354 + self.match(SolidityParser.T__9) + self.state = 355 + self.expression(0) + self.state = 356 + self.match(SolidityParser.T__1) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class CustomErrorDefinitionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def identifier(self): + return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) + + + def parameterList(self): + return self.getTypedRuleContext(SolidityParser.ParameterListContext,0) + + + def getRuleIndex(self): + return SolidityParser.RULE_customErrorDefinition + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterCustomErrorDefinition" ): + listener.enterCustomErrorDefinition(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitCustomErrorDefinition" ): + listener.exitCustomErrorDefinition(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitCustomErrorDefinition" ): + return visitor.visitCustomErrorDefinition(self) + else: + return visitor.visitChildren(self) + + + + + def customErrorDefinition(self): + + localctx = SolidityParser.CustomErrorDefinitionContext(self, self._ctx, self.state) + self.enterRule(localctx, 30, self.RULE_customErrorDefinition) + try: + self.enterOuterAlt(localctx, 1) + self.state = 358 + self.match(SolidityParser.T__24) + self.state = 359 + self.identifier() + self.state = 360 + self.parameterList() + self.state = 361 + self.match(SolidityParser.T__1) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TypeDefinitionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def TypeKeyword(self): + return self.getToken(SolidityParser.TypeKeyword, 0) + + def identifier(self): + return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) + + + def elementaryTypeName(self): + return self.getTypedRuleContext(SolidityParser.ElementaryTypeNameContext,0) + + + def getRuleIndex(self): + return SolidityParser.RULE_typeDefinition + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterTypeDefinition" ): + listener.enterTypeDefinition(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitTypeDefinition" ): + listener.exitTypeDefinition(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeDefinition" ): + return visitor.visitTypeDefinition(self) + else: + return visitor.visitChildren(self) + + + + + def typeDefinition(self): + + localctx = SolidityParser.TypeDefinitionContext(self, self._ctx, self.state) + self.enterRule(localctx, 32, self.RULE_typeDefinition) + try: + self.enterOuterAlt(localctx, 1) + self.state = 363 + self.match(SolidityParser.TypeKeyword) + self.state = 364 + self.identifier() + self.state = 365 + self.match(SolidityParser.T__21) + self.state = 366 + self.elementaryTypeName() + self.state = 367 + self.match(SolidityParser.T__1) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UsingForDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def identifier(self): + return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) + + + def typeName(self): + return self.getTypedRuleContext(SolidityParser.TypeNameContext,0) + + + def getRuleIndex(self): + return SolidityParser.RULE_usingForDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterUsingForDeclaration" ): + listener.enterUsingForDeclaration(self) def exitRule(self, listener:ParseTreeListener): if hasattr( listener, "exitUsingForDeclaration" ): @@ -1889,30 +2431,30 @@ def accept(self, visitor:ParseTreeVisitor): def usingForDeclaration(self): localctx = SolidityParser.UsingForDeclarationContext(self, self._ctx, self.state) - self.enterRule(localctx, 26, self.RULE_usingForDeclaration) + self.enterRule(localctx, 34, self.RULE_usingForDeclaration) try: self.enterOuterAlt(localctx, 1) - self.state = 301 - self.match(SolidityParser.T__22) - self.state = 302 + self.state = 369 + self.match(SolidityParser.T__25) + self.state = 370 self.identifier() - self.state = 303 - self.match(SolidityParser.T__23) - self.state = 306 + self.state = 371 + self.match(SolidityParser.T__26) + self.state = 374 self._errHandler.sync(self) token = self._input.LA(1) - if token in [SolidityParser.T__11]: - self.state = 304 - self.match(SolidityParser.T__11) + if token in [SolidityParser.T__12]: + self.state = 372 + self.match(SolidityParser.T__12) pass - elif token in [SolidityParser.T__12, SolidityParser.T__27, SolidityParser.T__33, SolidityParser.T__35, SolidityParser.T__39, SolidityParser.T__48, SolidityParser.T__49, SolidityParser.T__50, SolidityParser.T__51, SolidityParser.Int, SolidityParser.Uint, SolidityParser.Byte, SolidityParser.Fixed, SolidityParser.Ufixed, SolidityParser.Identifier]: - self.state = 305 + elif token in [SolidityParser.T__13, SolidityParser.T__24, SolidityParser.T__29, SolidityParser.T__35, SolidityParser.T__37, SolidityParser.T__41, SolidityParser.T__53, SolidityParser.T__54, SolidityParser.T__55, SolidityParser.T__56, SolidityParser.T__57, SolidityParser.T__95, SolidityParser.Int, SolidityParser.Uint, SolidityParser.Byte, SolidityParser.Fixed, SolidityParser.Ufixed, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier]: + self.state = 373 self.typeName(0) pass else: raise NoViableAltException(self) - self.state = 308 + self.state = 376 self.match(SolidityParser.T__1) except RecognitionException as re: localctx.exception = re @@ -1924,6 +2466,7 @@ def usingForDeclaration(self): class StructDefinitionContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -1963,101 +2506,40 @@ def accept(self, visitor:ParseTreeVisitor): def structDefinition(self): localctx = SolidityParser.StructDefinitionContext(self, self._ctx, self.state) - self.enterRule(localctx, 28, self.RULE_structDefinition) + self.enterRule(localctx, 36, self.RULE_structDefinition) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 310 - self.match(SolidityParser.T__24) - self.state = 311 + self.state = 378 + self.match(SolidityParser.T__27) + self.state = 379 self.identifier() - self.state = 312 - self.match(SolidityParser.T__13) - self.state = 323 + self.state = 380 + self.match(SolidityParser.T__14) + self.state = 391 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__12) | (1 << SolidityParser.T__27) | (1 << SolidityParser.T__33) | (1 << SolidityParser.T__35) | (1 << SolidityParser.T__39) | (1 << SolidityParser.T__48) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__50) | (1 << SolidityParser.T__51))) != 0) or ((((_la - 91)) & ~0x3f) == 0 and ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.Identifier - 91)))) != 0): - self.state = 313 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__29) | (1 << SolidityParser.T__35) | (1 << SolidityParser.T__37) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53) | (1 << SolidityParser.T__54) | (1 << SolidityParser.T__55) | (1 << SolidityParser.T__56) | (1 << SolidityParser.T__57))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): + self.state = 381 self.variableDeclaration() - self.state = 314 + self.state = 382 self.match(SolidityParser.T__1) - self.state = 320 + self.state = 388 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__12) | (1 << SolidityParser.T__27) | (1 << SolidityParser.T__33) | (1 << SolidityParser.T__35) | (1 << SolidityParser.T__39) | (1 << SolidityParser.T__48) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__50) | (1 << SolidityParser.T__51))) != 0) or ((((_la - 91)) & ~0x3f) == 0 and ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.Identifier - 91)))) != 0): - self.state = 315 + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__29) | (1 << SolidityParser.T__35) | (1 << SolidityParser.T__37) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53) | (1 << SolidityParser.T__54) | (1 << SolidityParser.T__55) | (1 << SolidityParser.T__56) | (1 << SolidityParser.T__57))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): + self.state = 383 self.variableDeclaration() - self.state = 316 + self.state = 384 self.match(SolidityParser.T__1) - self.state = 322 + self.state = 390 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 325 - self.match(SolidityParser.T__15) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class ConstructorDefinitionContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - def parameterList(self): - return self.getTypedRuleContext(SolidityParser.ParameterListContext,0) - - - def modifierList(self): - return self.getTypedRuleContext(SolidityParser.ModifierListContext,0) - - - def block(self): - return self.getTypedRuleContext(SolidityParser.BlockContext,0) - - - def getRuleIndex(self): - return SolidityParser.RULE_constructorDefinition - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterConstructorDefinition" ): - listener.enterConstructorDefinition(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitConstructorDefinition" ): - listener.exitConstructorDefinition(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitConstructorDefinition" ): - return visitor.visitConstructorDefinition(self) - else: - return visitor.visitChildren(self) - - - - - def constructorDefinition(self): - - localctx = SolidityParser.ConstructorDefinitionContext(self, self._ctx, self.state) - self.enterRule(localctx, 30, self.RULE_constructorDefinition) - try: - self.enterOuterAlt(localctx, 1) - self.state = 327 - self.match(SolidityParser.T__25) - self.state = 328 - self.parameterList() - self.state = 329 - self.modifierList() - self.state = 330 - self.block() + self.state = 393 + self.match(SolidityParser.T__16) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -2068,6 +2550,7 @@ def constructorDefinition(self): class ModifierDefinitionContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -2085,6 +2568,19 @@ def parameterList(self): return self.getTypedRuleContext(SolidityParser.ParameterListContext,0) + def VirtualKeyword(self, i:int=None): + if i is None: + return self.getTokens(SolidityParser.VirtualKeyword) + else: + return self.getToken(SolidityParser.VirtualKeyword, i) + + def overrideSpecifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(SolidityParser.OverrideSpecifierContext) + else: + return self.getTypedRuleContext(SolidityParser.OverrideSpecifierContext,i) + + def getRuleIndex(self): return SolidityParser.RULE_modifierDefinition @@ -2108,24 +2604,58 @@ def accept(self, visitor:ParseTreeVisitor): def modifierDefinition(self): localctx = SolidityParser.ModifierDefinitionContext(self, self._ctx, self.state) - self.enterRule(localctx, 32, self.RULE_modifierDefinition) + self.enterRule(localctx, 38, self.RULE_modifierDefinition) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 332 - self.match(SolidityParser.T__26) - self.state = 333 + self.state = 395 + self.match(SolidityParser.T__28) + self.state = 396 self.identifier() - self.state = 335 + self.state = 398 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__20: - self.state = 334 + if _la==SolidityParser.T__22: + self.state = 397 self.parameterList() - self.state = 337 - self.block() + self.state = 404 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==SolidityParser.T__96 or _la==SolidityParser.VirtualKeyword: + self.state = 402 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [SolidityParser.VirtualKeyword]: + self.state = 400 + self.match(SolidityParser.VirtualKeyword) + pass + elif token in [SolidityParser.T__96]: + self.state = 401 + self.overrideSpecifier() + pass + else: + raise NoViableAltException(self) + + self.state = 406 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 409 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [SolidityParser.T__1]: + self.state = 407 + self.match(SolidityParser.T__1) + pass + elif token in [SolidityParser.T__14]: + self.state = 408 + self.block() + pass + else: + raise NoViableAltException(self) + except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -2136,6 +2666,7 @@ def modifierDefinition(self): class ModifierInvocationContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -2172,28 +2703,28 @@ def accept(self, visitor:ParseTreeVisitor): def modifierInvocation(self): localctx = SolidityParser.ModifierInvocationContext(self, self._ctx, self.state) - self.enterRule(localctx, 34, self.RULE_modifierInvocation) + self.enterRule(localctx, 40, self.RULE_modifierInvocation) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 339 + self.state = 411 self.identifier() - self.state = 345 + self.state = 417 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__20: - self.state = 340 - self.match(SolidityParser.T__20) - self.state = 342 + if _la==SolidityParser.T__22: + self.state = 412 + self.match(SolidityParser.T__22) + self.state = 414 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20) | (1 << SolidityParser.T__31) | (1 << SolidityParser.T__33) | (1 << SolidityParser.T__39) | (1 << SolidityParser.T__48) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__50) | (1 << SolidityParser.T__51) | (1 << SolidityParser.T__52) | (1 << SolidityParser.T__53) | (1 << SolidityParser.T__54) | (1 << SolidityParser.T__55) | (1 << SolidityParser.T__56) | (1 << SolidityParser.T__57) | (1 << SolidityParser.T__58) | (1 << SolidityParser.T__59))) != 0) or ((((_la - 91)) & ~0x3f) == 0 and ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) != 0): - self.state = 341 + if ((((_la - 5)) & ~0x3f) == 0 and ((1 << (_la - 5)) & ((1 << (SolidityParser.T__4 - 5)) | (1 << (SolidityParser.T__13 - 5)) | (1 << (SolidityParser.T__22 - 5)) | (1 << (SolidityParser.T__24 - 5)) | (1 << (SolidityParser.T__33 - 5)) | (1 << (SolidityParser.T__35 - 5)) | (1 << (SolidityParser.T__41 - 5)) | (1 << (SolidityParser.T__53 - 5)) | (1 << (SolidityParser.T__54 - 5)) | (1 << (SolidityParser.T__55 - 5)) | (1 << (SolidityParser.T__56 - 5)) | (1 << (SolidityParser.T__57 - 5)) | (1 << (SolidityParser.T__58 - 5)) | (1 << (SolidityParser.T__59 - 5)) | (1 << (SolidityParser.T__60 - 5)) | (1 << (SolidityParser.T__62 - 5)) | (1 << (SolidityParser.T__63 - 5)) | (1 << (SolidityParser.T__64 - 5)) | (1 << (SolidityParser.T__65 - 5)) | (1 << (SolidityParser.T__66 - 5)))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.BooleanLiteral - 96)) | (1 << (SolidityParser.DecimalNumber - 96)) | (1 << (SolidityParser.HexNumber - 96)) | (1 << (SolidityParser.HexLiteralFragment - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.TypeKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)) | (1 << (SolidityParser.StringLiteralFragment - 96)))) != 0): + self.state = 413 self.expressionList() - self.state = 344 - self.match(SolidityParser.T__21) + self.state = 416 + self.match(SolidityParser.T__23) except RecognitionException as re: @@ -2206,11 +2737,16 @@ def modifierInvocation(self): class FunctionDefinitionContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser + def functionDescriptor(self): + return self.getTypedRuleContext(SolidityParser.FunctionDescriptorContext,0) + + def parameterList(self): return self.getTypedRuleContext(SolidityParser.ParameterListContext,0) @@ -2223,10 +2759,6 @@ def block(self): return self.getTypedRuleContext(SolidityParser.BlockContext,0) - def identifier(self): - return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) - - def returnParameters(self): return self.getTypedRuleContext(SolidityParser.ReturnParametersContext,0) @@ -2254,42 +2786,123 @@ def accept(self, visitor:ParseTreeVisitor): def functionDefinition(self): localctx = SolidityParser.FunctionDefinitionContext(self, self._ctx, self.state) - self.enterRule(localctx, 36, self.RULE_functionDefinition) + self.enterRule(localctx, 42, self.RULE_functionDefinition) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 347 - self.match(SolidityParser.T__27) - self.state = 349 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==SolidityParser.T__12 or _la==SolidityParser.T__39 or _la==SolidityParser.Identifier: - self.state = 348 - self.identifier() - - - self.state = 351 + self.state = 419 + self.functionDescriptor() + self.state = 420 self.parameterList() - self.state = 352 + self.state = 421 self.modifierList() - self.state = 354 + self.state = 423 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__28: - self.state = 353 + if _la==SolidityParser.T__30: + self.state = 422 self.returnParameters() - self.state = 358 + self.state = 427 self._errHandler.sync(self) token = self._input.LA(1) if token in [SolidityParser.T__1]: - self.state = 356 + self.state = 425 self.match(SolidityParser.T__1) pass - elif token in [SolidityParser.T__13]: - self.state = 357 - self.block() + elif token in [SolidityParser.T__14]: + self.state = 426 + self.block() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class FunctionDescriptorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def identifier(self): + return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) + + + def ConstructorKeyword(self): + return self.getToken(SolidityParser.ConstructorKeyword, 0) + + def FallbackKeyword(self): + return self.getToken(SolidityParser.FallbackKeyword, 0) + + def ReceiveKeyword(self): + return self.getToken(SolidityParser.ReceiveKeyword, 0) + + def getRuleIndex(self): + return SolidityParser.RULE_functionDescriptor + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterFunctionDescriptor" ): + listener.enterFunctionDescriptor(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitFunctionDescriptor" ): + listener.exitFunctionDescriptor(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitFunctionDescriptor" ): + return visitor.visitFunctionDescriptor(self) + else: + return visitor.visitChildren(self) + + + + + def functionDescriptor(self): + + localctx = SolidityParser.FunctionDescriptorContext(self, self._ctx, self.state) + self.enterRule(localctx, 44, self.RULE_functionDescriptor) + self._la = 0 # Token type + try: + self.state = 436 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [SolidityParser.T__29]: + self.enterOuterAlt(localctx, 1) + self.state = 429 + self.match(SolidityParser.T__29) + self.state = 431 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): + self.state = 430 + self.identifier() + + + pass + elif token in [SolidityParser.ConstructorKeyword]: + self.enterOuterAlt(localctx, 2) + self.state = 433 + self.match(SolidityParser.ConstructorKeyword) + pass + elif token in [SolidityParser.FallbackKeyword]: + self.enterOuterAlt(localctx, 3) + self.state = 434 + self.match(SolidityParser.FallbackKeyword) + pass + elif token in [SolidityParser.ReceiveKeyword]: + self.enterOuterAlt(localctx, 4) + self.state = 435 + self.match(SolidityParser.ReceiveKeyword) pass else: raise NoViableAltException(self) @@ -2304,6 +2917,7 @@ def functionDefinition(self): class ReturnParametersContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -2336,12 +2950,12 @@ def accept(self, visitor:ParseTreeVisitor): def returnParameters(self): localctx = SolidityParser.ReturnParametersContext(self, self._ctx, self.state) - self.enterRule(localctx, 38, self.RULE_returnParameters) + self.enterRule(localctx, 46, self.RULE_returnParameters) try: self.enterOuterAlt(localctx, 1) - self.state = 360 - self.match(SolidityParser.T__28) - self.state = 361 + self.state = 438 + self.match(SolidityParser.T__30) + self.state = 439 self.parameterList() except RecognitionException as re: localctx.exception = re @@ -2353,25 +2967,12 @@ def returnParameters(self): class ModifierListContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser - def modifierInvocation(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(SolidityParser.ModifierInvocationContext) - else: - return self.getTypedRuleContext(SolidityParser.ModifierInvocationContext,i) - - - def stateMutability(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(SolidityParser.StateMutabilityContext) - else: - return self.getTypedRuleContext(SolidityParser.StateMutabilityContext,i) - - def ExternalKeyword(self, i:int=None): if i is None: return self.getTokens(SolidityParser.ExternalKeyword) @@ -2396,6 +2997,33 @@ def PrivateKeyword(self, i:int=None): else: return self.getToken(SolidityParser.PrivateKeyword, i) + def VirtualKeyword(self, i:int=None): + if i is None: + return self.getTokens(SolidityParser.VirtualKeyword) + else: + return self.getToken(SolidityParser.VirtualKeyword, i) + + def stateMutability(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(SolidityParser.StateMutabilityContext) + else: + return self.getTypedRuleContext(SolidityParser.StateMutabilityContext,i) + + + def modifierInvocation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(SolidityParser.ModifierInvocationContext) + else: + return self.getTypedRuleContext(SolidityParser.ModifierInvocationContext,i) + + + def overrideSpecifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(SolidityParser.OverrideSpecifierContext) + else: + return self.getTypedRuleContext(SolidityParser.OverrideSpecifierContext,i) + + def getRuleIndex(self): return SolidityParser.RULE_modifierList @@ -2419,45 +3047,59 @@ def accept(self, visitor:ParseTreeVisitor): def modifierList(self): localctx = SolidityParser.ModifierListContext(self, self._ctx, self.state) - self.enterRule(localctx, 40, self.RULE_modifierList) + self.enterRule(localctx, 48, self.RULE_modifierList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 371 + self.state = 451 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__12 or _la==SolidityParser.T__39 or ((((_la - 105)) & ~0x3f) == 0 and ((1 << (_la - 105)) & ((1 << (SolidityParser.ConstantKeyword - 105)) | (1 << (SolidityParser.ExternalKeyword - 105)) | (1 << (SolidityParser.InternalKeyword - 105)) | (1 << (SolidityParser.PayableKeyword - 105)) | (1 << (SolidityParser.PrivateKeyword - 105)) | (1 << (SolidityParser.PublicKeyword - 105)) | (1 << (SolidityParser.PureKeyword - 105)) | (1 << (SolidityParser.ViewKeyword - 105)) | (1 << (SolidityParser.Identifier - 105)))) != 0): - self.state = 369 + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.T__96 - 96)) | (1 << (SolidityParser.ConstantKeyword - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.ExternalKeyword - 96)) | (1 << (SolidityParser.InternalKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.PrivateKeyword - 96)) | (1 << (SolidityParser.PublicKeyword - 96)) | (1 << (SolidityParser.VirtualKeyword - 96)) | (1 << (SolidityParser.PureKeyword - 96)) | (1 << (SolidityParser.ViewKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): + self.state = 449 self._errHandler.sync(self) - token = self._input.LA(1) - if token in [SolidityParser.T__12, SolidityParser.T__39, SolidityParser.Identifier]: - self.state = 363 - self.modifierInvocation() - pass - elif token in [SolidityParser.ConstantKeyword, SolidityParser.PayableKeyword, SolidityParser.PureKeyword, SolidityParser.ViewKeyword]: - self.state = 364 - self.stateMutability() - pass - elif token in [SolidityParser.ExternalKeyword]: - self.state = 365 + la_ = self._interp.adaptivePredict(self._input,37,self._ctx) + if la_ == 1: + self.state = 441 self.match(SolidityParser.ExternalKeyword) pass - elif token in [SolidityParser.PublicKeyword]: - self.state = 366 + + elif la_ == 2: + self.state = 442 self.match(SolidityParser.PublicKeyword) pass - elif token in [SolidityParser.InternalKeyword]: - self.state = 367 + + elif la_ == 3: + self.state = 443 self.match(SolidityParser.InternalKeyword) pass - elif token in [SolidityParser.PrivateKeyword]: - self.state = 368 + + elif la_ == 4: + self.state = 444 self.match(SolidityParser.PrivateKeyword) pass - else: - raise NoViableAltException(self) - self.state = 373 + elif la_ == 5: + self.state = 445 + self.match(SolidityParser.VirtualKeyword) + pass + + elif la_ == 6: + self.state = 446 + self.stateMutability() + pass + + elif la_ == 7: + self.state = 447 + self.modifierInvocation() + pass + + elif la_ == 8: + self.state = 448 + self.overrideSpecifier() + pass + + + self.state = 453 self._errHandler.sync(self) _la = self._input.LA(1) @@ -2471,6 +3113,7 @@ def modifierList(self): class EventDefinitionContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -2510,25 +3153,25 @@ def accept(self, visitor:ParseTreeVisitor): def eventDefinition(self): localctx = SolidityParser.EventDefinitionContext(self, self._ctx, self.state) - self.enterRule(localctx, 42, self.RULE_eventDefinition) + self.enterRule(localctx, 50, self.RULE_eventDefinition) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 374 - self.match(SolidityParser.T__29) - self.state = 375 + self.state = 454 + self.match(SolidityParser.T__31) + self.state = 455 self.identifier() - self.state = 376 + self.state = 456 self.eventParameterList() - self.state = 378 + self.state = 458 self._errHandler.sync(self) _la = self._input.LA(1) if _la==SolidityParser.AnonymousKeyword: - self.state = 377 + self.state = 457 self.match(SolidityParser.AnonymousKeyword) - self.state = 380 + self.state = 460 self.match(SolidityParser.T__1) except RecognitionException as re: localctx.exception = re @@ -2540,6 +3183,7 @@ def eventDefinition(self): class EnumValueContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -2572,10 +3216,10 @@ def accept(self, visitor:ParseTreeVisitor): def enumValue(self): localctx = SolidityParser.EnumValueContext(self, self._ctx, self.state) - self.enterRule(localctx, 44, self.RULE_enumValue) + self.enterRule(localctx, 52, self.RULE_enumValue) try: self.enterOuterAlt(localctx, 1) - self.state = 382 + self.state = 462 self.identifier() except RecognitionException as re: localctx.exception = re @@ -2587,6 +3231,7 @@ def enumValue(self): class EnumDefinitionContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -2626,38 +3271,38 @@ def accept(self, visitor:ParseTreeVisitor): def enumDefinition(self): localctx = SolidityParser.EnumDefinitionContext(self, self._ctx, self.state) - self.enterRule(localctx, 46, self.RULE_enumDefinition) + self.enterRule(localctx, 54, self.RULE_enumDefinition) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 384 - self.match(SolidityParser.T__30) - self.state = 385 + self.state = 464 + self.match(SolidityParser.T__32) + self.state = 465 self.identifier() - self.state = 386 - self.match(SolidityParser.T__13) - self.state = 388 + self.state = 466 + self.match(SolidityParser.T__14) + self.state = 468 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__12 or _la==SolidityParser.T__39 or _la==SolidityParser.Identifier: - self.state = 387 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): + self.state = 467 self.enumValue() - self.state = 394 + self.state = 474 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__14: - self.state = 390 - self.match(SolidityParser.T__14) - self.state = 391 + while _la==SolidityParser.T__15: + self.state = 470 + self.match(SolidityParser.T__15) + self.state = 471 self.enumValue() - self.state = 396 + self.state = 476 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 397 - self.match(SolidityParser.T__15) + self.state = 477 + self.match(SolidityParser.T__16) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -2668,6 +3313,7 @@ def enumDefinition(self): class ParameterListContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -2703,34 +3349,34 @@ def accept(self, visitor:ParseTreeVisitor): def parameterList(self): localctx = SolidityParser.ParameterListContext(self, self._ctx, self.state) - self.enterRule(localctx, 48, self.RULE_parameterList) + self.enterRule(localctx, 56, self.RULE_parameterList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 399 - self.match(SolidityParser.T__20) - self.state = 408 + self.state = 479 + self.match(SolidityParser.T__22) + self.state = 488 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__12) | (1 << SolidityParser.T__27) | (1 << SolidityParser.T__33) | (1 << SolidityParser.T__35) | (1 << SolidityParser.T__39) | (1 << SolidityParser.T__48) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__50) | (1 << SolidityParser.T__51))) != 0) or ((((_la - 91)) & ~0x3f) == 0 and ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.Identifier - 91)))) != 0): - self.state = 400 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__29) | (1 << SolidityParser.T__35) | (1 << SolidityParser.T__37) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53) | (1 << SolidityParser.T__54) | (1 << SolidityParser.T__55) | (1 << SolidityParser.T__56) | (1 << SolidityParser.T__57))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): + self.state = 480 self.parameter() - self.state = 405 + self.state = 485 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__14: - self.state = 401 - self.match(SolidityParser.T__14) - self.state = 402 + while _la==SolidityParser.T__15: + self.state = 481 + self.match(SolidityParser.T__15) + self.state = 482 self.parameter() - self.state = 407 + self.state = 487 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 410 - self.match(SolidityParser.T__21) + self.state = 490 + self.match(SolidityParser.T__23) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -2741,6 +3387,7 @@ def parameterList(self): class ParameterContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -2781,25 +3428,25 @@ def accept(self, visitor:ParseTreeVisitor): def parameter(self): localctx = SolidityParser.ParameterContext(self, self._ctx, self.state) - self.enterRule(localctx, 50, self.RULE_parameter) + self.enterRule(localctx, 58, self.RULE_parameter) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 412 + self.state = 492 self.typeName(0) - self.state = 414 + self.state = 494 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,35,self._ctx) + la_ = self._interp.adaptivePredict(self._input,44,self._ctx) if la_ == 1: - self.state = 413 + self.state = 493 self.storageLocation() - self.state = 417 + self.state = 497 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__12 or _la==SolidityParser.T__39 or _la==SolidityParser.Identifier: - self.state = 416 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): + self.state = 496 self.identifier() @@ -2813,6 +3460,7 @@ def parameter(self): class EventParameterListContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -2848,34 +3496,34 @@ def accept(self, visitor:ParseTreeVisitor): def eventParameterList(self): localctx = SolidityParser.EventParameterListContext(self, self._ctx, self.state) - self.enterRule(localctx, 52, self.RULE_eventParameterList) + self.enterRule(localctx, 60, self.RULE_eventParameterList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 419 - self.match(SolidityParser.T__20) - self.state = 428 + self.state = 499 + self.match(SolidityParser.T__22) + self.state = 508 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__12) | (1 << SolidityParser.T__27) | (1 << SolidityParser.T__33) | (1 << SolidityParser.T__35) | (1 << SolidityParser.T__39) | (1 << SolidityParser.T__48) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__50) | (1 << SolidityParser.T__51))) != 0) or ((((_la - 91)) & ~0x3f) == 0 and ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.Identifier - 91)))) != 0): - self.state = 420 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__29) | (1 << SolidityParser.T__35) | (1 << SolidityParser.T__37) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53) | (1 << SolidityParser.T__54) | (1 << SolidityParser.T__55) | (1 << SolidityParser.T__56) | (1 << SolidityParser.T__57))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): + self.state = 500 self.eventParameter() - self.state = 425 + self.state = 505 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__14: - self.state = 421 - self.match(SolidityParser.T__14) - self.state = 422 + while _la==SolidityParser.T__15: + self.state = 501 + self.match(SolidityParser.T__15) + self.state = 502 self.eventParameter() - self.state = 427 + self.state = 507 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 430 - self.match(SolidityParser.T__21) + self.state = 510 + self.match(SolidityParser.T__23) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -2886,6 +3534,7 @@ def eventParameterList(self): class EventParameterContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -2925,25 +3574,25 @@ def accept(self, visitor:ParseTreeVisitor): def eventParameter(self): localctx = SolidityParser.EventParameterContext(self, self._ctx, self.state) - self.enterRule(localctx, 54, self.RULE_eventParameter) + self.enterRule(localctx, 62, self.RULE_eventParameter) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 432 + self.state = 512 self.typeName(0) - self.state = 434 + self.state = 514 self._errHandler.sync(self) _la = self._input.LA(1) if _la==SolidityParser.IndexedKeyword: - self.state = 433 + self.state = 513 self.match(SolidityParser.IndexedKeyword) - self.state = 437 + self.state = 517 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__12 or _la==SolidityParser.T__39 or _la==SolidityParser.Identifier: - self.state = 436 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): + self.state = 516 self.identifier() @@ -2957,6 +3606,7 @@ def eventParameter(self): class FunctionTypeParameterListContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -2992,34 +3642,34 @@ def accept(self, visitor:ParseTreeVisitor): def functionTypeParameterList(self): localctx = SolidityParser.FunctionTypeParameterListContext(self, self._ctx, self.state) - self.enterRule(localctx, 56, self.RULE_functionTypeParameterList) + self.enterRule(localctx, 64, self.RULE_functionTypeParameterList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 439 - self.match(SolidityParser.T__20) - self.state = 448 + self.state = 519 + self.match(SolidityParser.T__22) + self.state = 528 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__12) | (1 << SolidityParser.T__27) | (1 << SolidityParser.T__33) | (1 << SolidityParser.T__35) | (1 << SolidityParser.T__39) | (1 << SolidityParser.T__48) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__50) | (1 << SolidityParser.T__51))) != 0) or ((((_la - 91)) & ~0x3f) == 0 and ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.Identifier - 91)))) != 0): - self.state = 440 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__29) | (1 << SolidityParser.T__35) | (1 << SolidityParser.T__37) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53) | (1 << SolidityParser.T__54) | (1 << SolidityParser.T__55) | (1 << SolidityParser.T__56) | (1 << SolidityParser.T__57))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): + self.state = 520 self.functionTypeParameter() - self.state = 445 + self.state = 525 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__14: - self.state = 441 - self.match(SolidityParser.T__14) - self.state = 442 + while _la==SolidityParser.T__15: + self.state = 521 + self.match(SolidityParser.T__15) + self.state = 522 self.functionTypeParameter() - self.state = 447 + self.state = 527 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 450 - self.match(SolidityParser.T__21) + self.state = 530 + self.match(SolidityParser.T__23) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -3030,6 +3680,7 @@ def functionTypeParameterList(self): class FunctionTypeParameterContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -3066,17 +3717,17 @@ def accept(self, visitor:ParseTreeVisitor): def functionTypeParameter(self): localctx = SolidityParser.FunctionTypeParameterContext(self, self._ctx, self.state) - self.enterRule(localctx, 58, self.RULE_functionTypeParameter) + self.enterRule(localctx, 66, self.RULE_functionTypeParameter) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 452 + self.state = 532 self.typeName(0) - self.state = 454 + self.state = 534 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__37) | (1 << SolidityParser.T__38) | (1 << SolidityParser.T__39))) != 0): - self.state = 453 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__39) | (1 << SolidityParser.T__40) | (1 << SolidityParser.T__41))) != 0): + self.state = 533 self.storageLocation() @@ -3090,6 +3741,7 @@ def functionTypeParameter(self): class VariableDeclarationContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -3130,20 +3782,20 @@ def accept(self, visitor:ParseTreeVisitor): def variableDeclaration(self): localctx = SolidityParser.VariableDeclarationContext(self, self._ctx, self.state) - self.enterRule(localctx, 60, self.RULE_variableDeclaration) + self.enterRule(localctx, 68, self.RULE_variableDeclaration) try: self.enterOuterAlt(localctx, 1) - self.state = 456 + self.state = 536 self.typeName(0) - self.state = 458 + self.state = 538 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,44,self._ctx) + la_ = self._interp.adaptivePredict(self._input,53,self._ctx) if la_ == 1: - self.state = 457 + self.state = 537 self.storageLocation() - self.state = 460 + self.state = 540 self.identifier() except RecognitionException as re: localctx.exception = re @@ -3155,6 +3807,7 @@ def variableDeclaration(self): class TypeNameContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -3211,46 +3864,46 @@ def typeName(self, _p:int=0): _parentState = self.state localctx = SolidityParser.TypeNameContext(self, self._ctx, _parentState) _prevctx = localctx - _startState = 62 - self.enterRecursionRule(localctx, 62, self.RULE_typeName, _p) + _startState = 70 + self.enterRecursionRule(localctx, 70, self.RULE_typeName, _p) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 469 + self.state = 549 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,45,self._ctx) + la_ = self._interp.adaptivePredict(self._input,54,self._ctx) if la_ == 1: - self.state = 463 + self.state = 543 self.elementaryTypeName() pass elif la_ == 2: - self.state = 464 + self.state = 544 self.userDefinedTypeName() pass elif la_ == 3: - self.state = 465 + self.state = 545 self.mapping() pass elif la_ == 4: - self.state = 466 + self.state = 546 self.functionTypeName() pass elif la_ == 5: - self.state = 467 - self.match(SolidityParser.T__33) - self.state = 468 + self.state = 547 + self.match(SolidityParser.T__35) + self.state = 548 self.match(SolidityParser.PayableKeyword) pass self._ctx.stop = self._input.LT(-1) - self.state = 479 + self.state = 559 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,47,self._ctx) + _alt = self._interp.adaptivePredict(self._input,56,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: @@ -3258,25 +3911,25 @@ def typeName(self, _p:int=0): _prevctx = localctx localctx = SolidityParser.TypeNameContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_typeName) - self.state = 471 + self.state = 551 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 472 - self.match(SolidityParser.T__31) - self.state = 474 + self.state = 552 + self.match(SolidityParser.T__33) + self.state = 554 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20) | (1 << SolidityParser.T__31) | (1 << SolidityParser.T__33) | (1 << SolidityParser.T__39) | (1 << SolidityParser.T__48) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__50) | (1 << SolidityParser.T__51) | (1 << SolidityParser.T__52) | (1 << SolidityParser.T__53) | (1 << SolidityParser.T__54) | (1 << SolidityParser.T__55) | (1 << SolidityParser.T__56) | (1 << SolidityParser.T__57) | (1 << SolidityParser.T__58) | (1 << SolidityParser.T__59))) != 0) or ((((_la - 91)) & ~0x3f) == 0 and ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) != 0): - self.state = 473 + if ((((_la - 5)) & ~0x3f) == 0 and ((1 << (_la - 5)) & ((1 << (SolidityParser.T__4 - 5)) | (1 << (SolidityParser.T__13 - 5)) | (1 << (SolidityParser.T__22 - 5)) | (1 << (SolidityParser.T__24 - 5)) | (1 << (SolidityParser.T__33 - 5)) | (1 << (SolidityParser.T__35 - 5)) | (1 << (SolidityParser.T__41 - 5)) | (1 << (SolidityParser.T__53 - 5)) | (1 << (SolidityParser.T__54 - 5)) | (1 << (SolidityParser.T__55 - 5)) | (1 << (SolidityParser.T__56 - 5)) | (1 << (SolidityParser.T__57 - 5)) | (1 << (SolidityParser.T__58 - 5)) | (1 << (SolidityParser.T__59 - 5)) | (1 << (SolidityParser.T__60 - 5)) | (1 << (SolidityParser.T__62 - 5)) | (1 << (SolidityParser.T__63 - 5)) | (1 << (SolidityParser.T__64 - 5)) | (1 << (SolidityParser.T__65 - 5)) | (1 << (SolidityParser.T__66 - 5)))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.BooleanLiteral - 96)) | (1 << (SolidityParser.DecimalNumber - 96)) | (1 << (SolidityParser.HexNumber - 96)) | (1 << (SolidityParser.HexLiteralFragment - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.TypeKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)) | (1 << (SolidityParser.StringLiteralFragment - 96)))) != 0): + self.state = 553 self.expression(0) - self.state = 476 - self.match(SolidityParser.T__32) - self.state = 481 + self.state = 556 + self.match(SolidityParser.T__34) + self.state = 561 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,47,self._ctx) + _alt = self._interp.adaptivePredict(self._input,56,self._ctx) except RecognitionException as re: localctx.exception = re @@ -3288,6 +3941,7 @@ def typeName(self, _p:int=0): class UserDefinedTypeNameContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -3323,23 +3977,23 @@ def accept(self, visitor:ParseTreeVisitor): def userDefinedTypeName(self): localctx = SolidityParser.UserDefinedTypeNameContext(self, self._ctx, self.state) - self.enterRule(localctx, 64, self.RULE_userDefinedTypeName) + self.enterRule(localctx, 72, self.RULE_userDefinedTypeName) try: self.enterOuterAlt(localctx, 1) - self.state = 482 + self.state = 562 self.identifier() - self.state = 487 + self.state = 567 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,48,self._ctx) + _alt = self._interp.adaptivePredict(self._input,57,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 483 - self.match(SolidityParser.T__34) - self.state = 484 + self.state = 563 + self.match(SolidityParser.T__36) + self.state = 564 self.identifier() - self.state = 489 + self.state = 569 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,48,self._ctx) + _alt = self._interp.adaptivePredict(self._input,57,self._ctx) except RecognitionException as re: localctx.exception = re @@ -3350,7 +4004,8 @@ def userDefinedTypeName(self): return localctx - class MappingContext(ParserRuleContext): + class MappingKeyContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -3360,6 +4015,71 @@ def elementaryTypeName(self): return self.getTypedRuleContext(SolidityParser.ElementaryTypeNameContext,0) + def userDefinedTypeName(self): + return self.getTypedRuleContext(SolidityParser.UserDefinedTypeNameContext,0) + + + def getRuleIndex(self): + return SolidityParser.RULE_mappingKey + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterMappingKey" ): + listener.enterMappingKey(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitMappingKey" ): + listener.exitMappingKey(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMappingKey" ): + return visitor.visitMappingKey(self) + else: + return visitor.visitChildren(self) + + + + + def mappingKey(self): + + localctx = SolidityParser.MappingKeyContext(self, self._ctx, self.state) + self.enterRule(localctx, 74, self.RULE_mappingKey) + try: + self.state = 572 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [SolidityParser.T__35, SolidityParser.T__54, SolidityParser.T__55, SolidityParser.T__56, SolidityParser.T__57, SolidityParser.Int, SolidityParser.Uint, SolidityParser.Byte, SolidityParser.Fixed, SolidityParser.Ufixed]: + self.enterOuterAlt(localctx, 1) + self.state = 570 + self.elementaryTypeName() + pass + elif token in [SolidityParser.T__13, SolidityParser.T__24, SolidityParser.T__41, SolidityParser.T__53, SolidityParser.T__95, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier]: + self.enterOuterAlt(localctx, 2) + self.state = 571 + self.userDefinedTypeName() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class MappingContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def mappingKey(self): + return self.getTypedRuleContext(SolidityParser.MappingKeyContext,0) + + def typeName(self): return self.getTypedRuleContext(SolidityParser.TypeNameContext,0) @@ -3387,21 +4107,21 @@ def accept(self, visitor:ParseTreeVisitor): def mapping(self): localctx = SolidityParser.MappingContext(self, self._ctx, self.state) - self.enterRule(localctx, 66, self.RULE_mapping) + self.enterRule(localctx, 76, self.RULE_mapping) try: self.enterOuterAlt(localctx, 1) - self.state = 490 - self.match(SolidityParser.T__35) - self.state = 491 - self.match(SolidityParser.T__20) - self.state = 492 - self.elementaryTypeName() - self.state = 493 - self.match(SolidityParser.T__36) - self.state = 494 + self.state = 574 + self.match(SolidityParser.T__37) + self.state = 575 + self.match(SolidityParser.T__22) + self.state = 576 + self.mappingKey() + self.state = 577 + self.match(SolidityParser.T__38) + self.state = 578 self.typeName(0) - self.state = 495 - self.match(SolidityParser.T__21) + self.state = 579 + self.match(SolidityParser.T__23) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -3412,6 +4132,7 @@ def mapping(self): class FunctionTypeNameContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -3466,47 +4187,47 @@ def accept(self, visitor:ParseTreeVisitor): def functionTypeName(self): localctx = SolidityParser.FunctionTypeNameContext(self, self._ctx, self.state) - self.enterRule(localctx, 68, self.RULE_functionTypeName) + self.enterRule(localctx, 78, self.RULE_functionTypeName) try: self.enterOuterAlt(localctx, 1) - self.state = 497 - self.match(SolidityParser.T__27) - self.state = 498 + self.state = 581 + self.match(SolidityParser.T__29) + self.state = 582 self.functionTypeParameterList() - self.state = 504 + self.state = 588 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,50,self._ctx) + _alt = self._interp.adaptivePredict(self._input,60,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 502 + self.state = 586 self._errHandler.sync(self) token = self._input.LA(1) if token in [SolidityParser.InternalKeyword]: - self.state = 499 + self.state = 583 self.match(SolidityParser.InternalKeyword) pass elif token in [SolidityParser.ExternalKeyword]: - self.state = 500 + self.state = 584 self.match(SolidityParser.ExternalKeyword) pass elif token in [SolidityParser.ConstantKeyword, SolidityParser.PayableKeyword, SolidityParser.PureKeyword, SolidityParser.ViewKeyword]: - self.state = 501 + self.state = 585 self.stateMutability() pass else: raise NoViableAltException(self) - self.state = 506 + self.state = 590 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,50,self._ctx) + _alt = self._interp.adaptivePredict(self._input,60,self._ctx) - self.state = 509 + self.state = 593 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,51,self._ctx) + la_ = self._interp.adaptivePredict(self._input,61,self._ctx) if la_ == 1: - self.state = 507 - self.match(SolidityParser.T__28) - self.state = 508 + self.state = 591 + self.match(SolidityParser.T__30) + self.state = 592 self.functionTypeParameterList() @@ -3520,6 +4241,7 @@ def functionTypeName(self): class StorageLocationContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -3549,13 +4271,13 @@ def accept(self, visitor:ParseTreeVisitor): def storageLocation(self): localctx = SolidityParser.StorageLocationContext(self, self._ctx, self.state) - self.enterRule(localctx, 70, self.RULE_storageLocation) + self.enterRule(localctx, 80, self.RULE_storageLocation) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 511 + self.state = 595 _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__37) | (1 << SolidityParser.T__38) | (1 << SolidityParser.T__39))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__39) | (1 << SolidityParser.T__40) | (1 << SolidityParser.T__41))) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -3570,6 +4292,7 @@ def storageLocation(self): class StateMutabilityContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -3610,13 +4333,13 @@ def accept(self, visitor:ParseTreeVisitor): def stateMutability(self): localctx = SolidityParser.StateMutabilityContext(self, self._ctx, self.state) - self.enterRule(localctx, 72, self.RULE_stateMutability) + self.enterRule(localctx, 82, self.RULE_stateMutability) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 513 + self.state = 597 _la = self._input.LA(1) - if not(((((_la - 105)) & ~0x3f) == 0 and ((1 << (_la - 105)) & ((1 << (SolidityParser.ConstantKeyword - 105)) | (1 << (SolidityParser.PayableKeyword - 105)) | (1 << (SolidityParser.PureKeyword - 105)) | (1 << (SolidityParser.ViewKeyword - 105)))) != 0)): + if not(((((_la - 111)) & ~0x3f) == 0 and ((1 << (_la - 111)) & ((1 << (SolidityParser.ConstantKeyword - 111)) | (1 << (SolidityParser.PayableKeyword - 111)) | (1 << (SolidityParser.PureKeyword - 111)) | (1 << (SolidityParser.ViewKeyword - 111)))) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -3631,6 +4354,7 @@ def stateMutability(self): class BlockContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -3666,24 +4390,24 @@ def accept(self, visitor:ParseTreeVisitor): def block(self): localctx = SolidityParser.BlockContext(self, self._ctx, self.state) - self.enterRule(localctx, 74, self.RULE_block) + self.enterRule(localctx, 84, self.RULE_block) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 515 - self.match(SolidityParser.T__13) - self.state = 519 + self.state = 599 + self.match(SolidityParser.T__14) + self.state = 603 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__13) | (1 << SolidityParser.T__20) | (1 << SolidityParser.T__23) | (1 << SolidityParser.T__27) | (1 << SolidityParser.T__31) | (1 << SolidityParser.T__33) | (1 << SolidityParser.T__35) | (1 << SolidityParser.T__39) | (1 << SolidityParser.T__40) | (1 << SolidityParser.T__42) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__44) | (1 << SolidityParser.T__45) | (1 << SolidityParser.T__46) | (1 << SolidityParser.T__47) | (1 << SolidityParser.T__48) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__50) | (1 << SolidityParser.T__51) | (1 << SolidityParser.T__52) | (1 << SolidityParser.T__53) | (1 << SolidityParser.T__54) | (1 << SolidityParser.T__55) | (1 << SolidityParser.T__56) | (1 << SolidityParser.T__57) | (1 << SolidityParser.T__58) | (1 << SolidityParser.T__59))) != 0) or ((((_la - 91)) & ~0x3f) == 0 and ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.BreakKeyword - 91)) | (1 << (SolidityParser.ContinueKeyword - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) != 0): - self.state = 516 + while ((((_la - 5)) & ~0x3f) == 0 and ((1 << (_la - 5)) & ((1 << (SolidityParser.T__4 - 5)) | (1 << (SolidityParser.T__13 - 5)) | (1 << (SolidityParser.T__14 - 5)) | (1 << (SolidityParser.T__22 - 5)) | (1 << (SolidityParser.T__24 - 5)) | (1 << (SolidityParser.T__26 - 5)) | (1 << (SolidityParser.T__29 - 5)) | (1 << (SolidityParser.T__33 - 5)) | (1 << (SolidityParser.T__35 - 5)) | (1 << (SolidityParser.T__37 - 5)) | (1 << (SolidityParser.T__41 - 5)) | (1 << (SolidityParser.T__42 - 5)) | (1 << (SolidityParser.T__44 - 5)) | (1 << (SolidityParser.T__46 - 5)) | (1 << (SolidityParser.T__47 - 5)) | (1 << (SolidityParser.T__48 - 5)) | (1 << (SolidityParser.T__49 - 5)) | (1 << (SolidityParser.T__50 - 5)) | (1 << (SolidityParser.T__51 - 5)) | (1 << (SolidityParser.T__52 - 5)) | (1 << (SolidityParser.T__53 - 5)) | (1 << (SolidityParser.T__54 - 5)) | (1 << (SolidityParser.T__55 - 5)) | (1 << (SolidityParser.T__56 - 5)) | (1 << (SolidityParser.T__57 - 5)) | (1 << (SolidityParser.T__58 - 5)) | (1 << (SolidityParser.T__59 - 5)) | (1 << (SolidityParser.T__60 - 5)) | (1 << (SolidityParser.T__62 - 5)) | (1 << (SolidityParser.T__63 - 5)) | (1 << (SolidityParser.T__64 - 5)) | (1 << (SolidityParser.T__65 - 5)) | (1 << (SolidityParser.T__66 - 5)))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.BooleanLiteral - 96)) | (1 << (SolidityParser.DecimalNumber - 96)) | (1 << (SolidityParser.HexNumber - 96)) | (1 << (SolidityParser.HexLiteralFragment - 96)) | (1 << (SolidityParser.BreakKeyword - 96)) | (1 << (SolidityParser.ContinueKeyword - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.TypeKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)) | (1 << (SolidityParser.StringLiteralFragment - 96)))) != 0): + self.state = 600 self.statement() - self.state = 521 + self.state = 605 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 522 - self.match(SolidityParser.T__15) + self.state = 606 + self.match(SolidityParser.T__16) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -3694,6 +4418,7 @@ def block(self): class StatementContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -3703,6 +4428,10 @@ def ifStatement(self): return self.getTypedRuleContext(SolidityParser.IfStatementContext,0) + def tryStatement(self): + return self.getTypedRuleContext(SolidityParser.TryStatementContext,0) + + def whileStatement(self): return self.getTypedRuleContext(SolidityParser.WhileStatementContext,0) @@ -3747,6 +4476,14 @@ def simpleStatement(self): return self.getTypedRuleContext(SolidityParser.SimpleStatementContext,0) + def uncheckedStatement(self): + return self.getTypedRuleContext(SolidityParser.UncheckedStatementContext,0) + + + def revertStatement(self): + return self.getTypedRuleContext(SolidityParser.RevertStatementContext,0) + + def getRuleIndex(self): return SolidityParser.RULE_statement @@ -3770,73 +4507,101 @@ def accept(self, visitor:ParseTreeVisitor): def statement(self): localctx = SolidityParser.StatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 76, self.RULE_statement) + self.enterRule(localctx, 86, self.RULE_statement) try: - self.state = 536 + self.state = 623 self._errHandler.sync(self) - token = self._input.LA(1) - if token in [SolidityParser.T__40]: + la_ = self._interp.adaptivePredict(self._input,63,self._ctx) + if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 524 + self.state = 608 self.ifStatement() pass - elif token in [SolidityParser.T__42]: + + elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 525 - self.whileStatement() + self.state = 609 + self.tryStatement() pass - elif token in [SolidityParser.T__23]: + + elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 526 - self.forStatement() + self.state = 610 + self.whileStatement() pass - elif token in [SolidityParser.T__13]: + + elif la_ == 4: self.enterOuterAlt(localctx, 4) - self.state = 527 - self.block() + self.state = 611 + self.forStatement() pass - elif token in [SolidityParser.T__43]: + + elif la_ == 5: self.enterOuterAlt(localctx, 5) - self.state = 528 - self.inlineAssemblyStatement() + self.state = 612 + self.block() pass - elif token in [SolidityParser.T__44]: + + elif la_ == 6: self.enterOuterAlt(localctx, 6) - self.state = 529 - self.doWhileStatement() + self.state = 613 + self.inlineAssemblyStatement() pass - elif token in [SolidityParser.ContinueKeyword]: + + elif la_ == 7: self.enterOuterAlt(localctx, 7) - self.state = 530 - self.continueStatement() + self.state = 614 + self.doWhileStatement() pass - elif token in [SolidityParser.BreakKeyword]: + + elif la_ == 8: self.enterOuterAlt(localctx, 8) - self.state = 531 - self.breakStatement() + self.state = 615 + self.continueStatement() pass - elif token in [SolidityParser.T__45]: + + elif la_ == 9: self.enterOuterAlt(localctx, 9) - self.state = 532 - self.returnStatement() + self.state = 616 + self.breakStatement() pass - elif token in [SolidityParser.T__46]: + + elif la_ == 10: self.enterOuterAlt(localctx, 10) - self.state = 533 - self.throwStatement() + self.state = 617 + self.returnStatement() pass - elif token in [SolidityParser.T__47]: + + elif la_ == 11: self.enterOuterAlt(localctx, 11) - self.state = 534 - self.emitStatement() + self.state = 618 + self.throwStatement() pass - elif token in [SolidityParser.T__3, SolidityParser.T__12, SolidityParser.T__20, SolidityParser.T__27, SolidityParser.T__31, SolidityParser.T__33, SolidityParser.T__35, SolidityParser.T__39, SolidityParser.T__48, SolidityParser.T__49, SolidityParser.T__50, SolidityParser.T__51, SolidityParser.T__52, SolidityParser.T__53, SolidityParser.T__54, SolidityParser.T__55, SolidityParser.T__56, SolidityParser.T__57, SolidityParser.T__58, SolidityParser.T__59, SolidityParser.Int, SolidityParser.Uint, SolidityParser.Byte, SolidityParser.Fixed, SolidityParser.Ufixed, SolidityParser.BooleanLiteral, SolidityParser.DecimalNumber, SolidityParser.HexNumber, SolidityParser.HexLiteral, SolidityParser.Identifier, SolidityParser.StringLiteral]: + + elif la_ == 12: self.enterOuterAlt(localctx, 12) - self.state = 535 + self.state = 619 + self.emitStatement() + pass + + elif la_ == 13: + self.enterOuterAlt(localctx, 13) + self.state = 620 self.simpleStatement() pass - else: - raise NoViableAltException(self) + + elif la_ == 14: + self.enterOuterAlt(localctx, 14) + self.state = 621 + self.uncheckedStatement() + pass + + elif la_ == 15: + self.enterOuterAlt(localctx, 15) + self.state = 622 + self.revertStatement() + pass + except RecognitionException as re: localctx.exception = re @@ -3848,6 +4613,7 @@ def statement(self): class ExpressionStatementContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -3880,12 +4646,12 @@ def accept(self, visitor:ParseTreeVisitor): def expressionStatement(self): localctx = SolidityParser.ExpressionStatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 78, self.RULE_expressionStatement) + self.enterRule(localctx, 88, self.RULE_expressionStatement) try: self.enterOuterAlt(localctx, 1) - self.state = 538 + self.state = 625 self.expression(0) - self.state = 539 + self.state = 626 self.match(SolidityParser.T__1) except RecognitionException as re: localctx.exception = re @@ -3897,6 +4663,7 @@ def expressionStatement(self): class IfStatementContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -3936,26 +4703,26 @@ def accept(self, visitor:ParseTreeVisitor): def ifStatement(self): localctx = SolidityParser.IfStatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 80, self.RULE_ifStatement) + self.enterRule(localctx, 90, self.RULE_ifStatement) try: self.enterOuterAlt(localctx, 1) - self.state = 541 - self.match(SolidityParser.T__40) - self.state = 542 - self.match(SolidityParser.T__20) - self.state = 543 + self.state = 628 + self.match(SolidityParser.T__42) + self.state = 629 + self.match(SolidityParser.T__22) + self.state = 630 self.expression(0) - self.state = 544 - self.match(SolidityParser.T__21) - self.state = 545 + self.state = 631 + self.match(SolidityParser.T__23) + self.state = 632 self.statement() - self.state = 548 + self.state = 635 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,54,self._ctx) + la_ = self._interp.adaptivePredict(self._input,64,self._ctx) if la_ == 1: - self.state = 546 - self.match(SolidityParser.T__41) - self.state = 547 + self.state = 633 + self.match(SolidityParser.T__43) + self.state = 634 self.statement() @@ -3968,7 +4735,171 @@ def ifStatement(self): return localctx + class TryStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def expression(self): + return self.getTypedRuleContext(SolidityParser.ExpressionContext,0) + + + def block(self): + return self.getTypedRuleContext(SolidityParser.BlockContext,0) + + + def returnParameters(self): + return self.getTypedRuleContext(SolidityParser.ReturnParametersContext,0) + + + def catchClause(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(SolidityParser.CatchClauseContext) + else: + return self.getTypedRuleContext(SolidityParser.CatchClauseContext,i) + + + def getRuleIndex(self): + return SolidityParser.RULE_tryStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterTryStatement" ): + listener.enterTryStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitTryStatement" ): + listener.exitTryStatement(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTryStatement" ): + return visitor.visitTryStatement(self) + else: + return visitor.visitChildren(self) + + + + + def tryStatement(self): + + localctx = SolidityParser.TryStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 92, self.RULE_tryStatement) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 637 + self.match(SolidityParser.T__44) + self.state = 638 + self.expression(0) + self.state = 640 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==SolidityParser.T__30: + self.state = 639 + self.returnParameters() + + + self.state = 642 + self.block() + self.state = 644 + self._errHandler.sync(self) + _la = self._input.LA(1) + while True: + self.state = 643 + self.catchClause() + self.state = 646 + self._errHandler.sync(self) + _la = self._input.LA(1) + if not (_la==SolidityParser.T__45): + break + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class CatchClauseContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def block(self): + return self.getTypedRuleContext(SolidityParser.BlockContext,0) + + + def parameterList(self): + return self.getTypedRuleContext(SolidityParser.ParameterListContext,0) + + + def identifier(self): + return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) + + + def getRuleIndex(self): + return SolidityParser.RULE_catchClause + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterCatchClause" ): + listener.enterCatchClause(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitCatchClause" ): + listener.exitCatchClause(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitCatchClause" ): + return visitor.visitCatchClause(self) + else: + return visitor.visitChildren(self) + + + + + def catchClause(self): + + localctx = SolidityParser.CatchClauseContext(self, self._ctx, self.state) + self.enterRule(localctx, 94, self.RULE_catchClause) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 648 + self.match(SolidityParser.T__45) + self.state = 653 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__22) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): + self.state = 650 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): + self.state = 649 + self.identifier() + + + self.state = 652 + self.parameterList() + + + self.state = 655 + self.block() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class WhileStatementContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -4005,18 +4936,18 @@ def accept(self, visitor:ParseTreeVisitor): def whileStatement(self): localctx = SolidityParser.WhileStatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 82, self.RULE_whileStatement) + self.enterRule(localctx, 96, self.RULE_whileStatement) try: self.enterOuterAlt(localctx, 1) - self.state = 550 - self.match(SolidityParser.T__42) - self.state = 551 - self.match(SolidityParser.T__20) - self.state = 552 + self.state = 657 + self.match(SolidityParser.T__46) + self.state = 658 + self.match(SolidityParser.T__22) + self.state = 659 self.expression(0) - self.state = 553 - self.match(SolidityParser.T__21) - self.state = 554 + self.state = 660 + self.match(SolidityParser.T__23) + self.state = 661 self.statement() except RecognitionException as re: localctx.exception = re @@ -4028,6 +4959,7 @@ def whileStatement(self): class SimpleStatementContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -4064,19 +4996,19 @@ def accept(self, visitor:ParseTreeVisitor): def simpleStatement(self): localctx = SolidityParser.SimpleStatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 84, self.RULE_simpleStatement) + self.enterRule(localctx, 98, self.RULE_simpleStatement) try: self.enterOuterAlt(localctx, 1) - self.state = 558 + self.state = 665 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,55,self._ctx) + la_ = self._interp.adaptivePredict(self._input,69,self._ctx) if la_ == 1: - self.state = 556 + self.state = 663 self.variableDeclarationStatement() pass elif la_ == 2: - self.state = 557 + self.state = 664 self.expressionStatement() pass @@ -4090,7 +5022,58 @@ def simpleStatement(self): return localctx + class UncheckedStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def block(self): + return self.getTypedRuleContext(SolidityParser.BlockContext,0) + + + def getRuleIndex(self): + return SolidityParser.RULE_uncheckedStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterUncheckedStatement" ): + listener.enterUncheckedStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitUncheckedStatement" ): + listener.exitUncheckedStatement(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUncheckedStatement" ): + return visitor.visitUncheckedStatement(self) + else: + return visitor.visitChildren(self) + + + + + def uncheckedStatement(self): + + localctx = SolidityParser.UncheckedStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 100, self.RULE_uncheckedStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 667 + self.match(SolidityParser.T__47) + self.state = 668 + self.block() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ForStatementContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -4135,53 +5118,53 @@ def accept(self, visitor:ParseTreeVisitor): def forStatement(self): localctx = SolidityParser.ForStatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 86, self.RULE_forStatement) + self.enterRule(localctx, 102, self.RULE_forStatement) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 560 - self.match(SolidityParser.T__23) - self.state = 561 - self.match(SolidityParser.T__20) - self.state = 564 + self.state = 670 + self.match(SolidityParser.T__26) + self.state = 671 + self.match(SolidityParser.T__22) + self.state = 674 self._errHandler.sync(self) token = self._input.LA(1) - if token in [SolidityParser.T__3, SolidityParser.T__12, SolidityParser.T__20, SolidityParser.T__27, SolidityParser.T__31, SolidityParser.T__33, SolidityParser.T__35, SolidityParser.T__39, SolidityParser.T__48, SolidityParser.T__49, SolidityParser.T__50, SolidityParser.T__51, SolidityParser.T__52, SolidityParser.T__53, SolidityParser.T__54, SolidityParser.T__55, SolidityParser.T__56, SolidityParser.T__57, SolidityParser.T__58, SolidityParser.T__59, SolidityParser.Int, SolidityParser.Uint, SolidityParser.Byte, SolidityParser.Fixed, SolidityParser.Ufixed, SolidityParser.BooleanLiteral, SolidityParser.DecimalNumber, SolidityParser.HexNumber, SolidityParser.HexLiteral, SolidityParser.Identifier, SolidityParser.StringLiteral]: - self.state = 562 + if token in [SolidityParser.T__4, SolidityParser.T__13, SolidityParser.T__22, SolidityParser.T__24, SolidityParser.T__29, SolidityParser.T__33, SolidityParser.T__35, SolidityParser.T__37, SolidityParser.T__41, SolidityParser.T__53, SolidityParser.T__54, SolidityParser.T__55, SolidityParser.T__56, SolidityParser.T__57, SolidityParser.T__58, SolidityParser.T__59, SolidityParser.T__60, SolidityParser.T__62, SolidityParser.T__63, SolidityParser.T__64, SolidityParser.T__65, SolidityParser.T__66, SolidityParser.T__95, SolidityParser.Int, SolidityParser.Uint, SolidityParser.Byte, SolidityParser.Fixed, SolidityParser.Ufixed, SolidityParser.BooleanLiteral, SolidityParser.DecimalNumber, SolidityParser.HexNumber, SolidityParser.HexLiteralFragment, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.TypeKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier, SolidityParser.StringLiteralFragment]: + self.state = 672 self.simpleStatement() pass elif token in [SolidityParser.T__1]: - self.state = 563 + self.state = 673 self.match(SolidityParser.T__1) pass else: raise NoViableAltException(self) - self.state = 568 + self.state = 678 self._errHandler.sync(self) token = self._input.LA(1) - if token in [SolidityParser.T__3, SolidityParser.T__12, SolidityParser.T__20, SolidityParser.T__31, SolidityParser.T__33, SolidityParser.T__39, SolidityParser.T__48, SolidityParser.T__49, SolidityParser.T__50, SolidityParser.T__51, SolidityParser.T__52, SolidityParser.T__53, SolidityParser.T__54, SolidityParser.T__55, SolidityParser.T__56, SolidityParser.T__57, SolidityParser.T__58, SolidityParser.T__59, SolidityParser.Int, SolidityParser.Uint, SolidityParser.Byte, SolidityParser.Fixed, SolidityParser.Ufixed, SolidityParser.BooleanLiteral, SolidityParser.DecimalNumber, SolidityParser.HexNumber, SolidityParser.HexLiteral, SolidityParser.Identifier, SolidityParser.StringLiteral]: - self.state = 566 + if token in [SolidityParser.T__4, SolidityParser.T__13, SolidityParser.T__22, SolidityParser.T__24, SolidityParser.T__33, SolidityParser.T__35, SolidityParser.T__41, SolidityParser.T__53, SolidityParser.T__54, SolidityParser.T__55, SolidityParser.T__56, SolidityParser.T__57, SolidityParser.T__58, SolidityParser.T__59, SolidityParser.T__60, SolidityParser.T__62, SolidityParser.T__63, SolidityParser.T__64, SolidityParser.T__65, SolidityParser.T__66, SolidityParser.T__95, SolidityParser.Int, SolidityParser.Uint, SolidityParser.Byte, SolidityParser.Fixed, SolidityParser.Ufixed, SolidityParser.BooleanLiteral, SolidityParser.DecimalNumber, SolidityParser.HexNumber, SolidityParser.HexLiteralFragment, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.TypeKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier, SolidityParser.StringLiteralFragment]: + self.state = 676 self.expressionStatement() pass elif token in [SolidityParser.T__1]: - self.state = 567 + self.state = 677 self.match(SolidityParser.T__1) pass else: raise NoViableAltException(self) - self.state = 571 + self.state = 681 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20) | (1 << SolidityParser.T__31) | (1 << SolidityParser.T__33) | (1 << SolidityParser.T__39) | (1 << SolidityParser.T__48) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__50) | (1 << SolidityParser.T__51) | (1 << SolidityParser.T__52) | (1 << SolidityParser.T__53) | (1 << SolidityParser.T__54) | (1 << SolidityParser.T__55) | (1 << SolidityParser.T__56) | (1 << SolidityParser.T__57) | (1 << SolidityParser.T__58) | (1 << SolidityParser.T__59))) != 0) or ((((_la - 91)) & ~0x3f) == 0 and ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) != 0): - self.state = 570 + if ((((_la - 5)) & ~0x3f) == 0 and ((1 << (_la - 5)) & ((1 << (SolidityParser.T__4 - 5)) | (1 << (SolidityParser.T__13 - 5)) | (1 << (SolidityParser.T__22 - 5)) | (1 << (SolidityParser.T__24 - 5)) | (1 << (SolidityParser.T__33 - 5)) | (1 << (SolidityParser.T__35 - 5)) | (1 << (SolidityParser.T__41 - 5)) | (1 << (SolidityParser.T__53 - 5)) | (1 << (SolidityParser.T__54 - 5)) | (1 << (SolidityParser.T__55 - 5)) | (1 << (SolidityParser.T__56 - 5)) | (1 << (SolidityParser.T__57 - 5)) | (1 << (SolidityParser.T__58 - 5)) | (1 << (SolidityParser.T__59 - 5)) | (1 << (SolidityParser.T__60 - 5)) | (1 << (SolidityParser.T__62 - 5)) | (1 << (SolidityParser.T__63 - 5)) | (1 << (SolidityParser.T__64 - 5)) | (1 << (SolidityParser.T__65 - 5)) | (1 << (SolidityParser.T__66 - 5)))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.BooleanLiteral - 96)) | (1 << (SolidityParser.DecimalNumber - 96)) | (1 << (SolidityParser.HexNumber - 96)) | (1 << (SolidityParser.HexLiteralFragment - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.TypeKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)) | (1 << (SolidityParser.StringLiteralFragment - 96)))) != 0): + self.state = 680 self.expression(0) - self.state = 573 - self.match(SolidityParser.T__21) - self.state = 574 + self.state = 683 + self.match(SolidityParser.T__23) + self.state = 684 self.statement() except RecognitionException as re: localctx.exception = re @@ -4193,6 +5176,7 @@ def forStatement(self): class InlineAssemblyStatementContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -4202,8 +5186,8 @@ def assemblyBlock(self): return self.getTypedRuleContext(SolidityParser.AssemblyBlockContext,0) - def StringLiteral(self): - return self.getToken(SolidityParser.StringLiteral, 0) + def StringLiteralFragment(self): + return self.getToken(SolidityParser.StringLiteralFragment, 0) def getRuleIndex(self): return SolidityParser.RULE_inlineAssemblyStatement @@ -4228,21 +5212,21 @@ def accept(self, visitor:ParseTreeVisitor): def inlineAssemblyStatement(self): localctx = SolidityParser.InlineAssemblyStatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 88, self.RULE_inlineAssemblyStatement) + self.enterRule(localctx, 104, self.RULE_inlineAssemblyStatement) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 576 - self.match(SolidityParser.T__43) - self.state = 578 + self.state = 686 + self.match(SolidityParser.T__48) + self.state = 688 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.StringLiteral: - self.state = 577 - self.match(SolidityParser.StringLiteral) + if _la==SolidityParser.StringLiteralFragment: + self.state = 687 + self.match(SolidityParser.StringLiteralFragment) - self.state = 580 + self.state = 690 self.assemblyBlock() except RecognitionException as re: localctx.exception = re @@ -4254,6 +5238,7 @@ def inlineAssemblyStatement(self): class DoWhileStatementContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -4290,22 +5275,22 @@ def accept(self, visitor:ParseTreeVisitor): def doWhileStatement(self): localctx = SolidityParser.DoWhileStatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 90, self.RULE_doWhileStatement) + self.enterRule(localctx, 106, self.RULE_doWhileStatement) try: self.enterOuterAlt(localctx, 1) - self.state = 582 - self.match(SolidityParser.T__44) - self.state = 583 + self.state = 692 + self.match(SolidityParser.T__49) + self.state = 693 self.statement() - self.state = 584 - self.match(SolidityParser.T__42) - self.state = 585 - self.match(SolidityParser.T__20) - self.state = 586 + self.state = 694 + self.match(SolidityParser.T__46) + self.state = 695 + self.match(SolidityParser.T__22) + self.state = 696 self.expression(0) - self.state = 587 - self.match(SolidityParser.T__21) - self.state = 588 + self.state = 697 + self.match(SolidityParser.T__23) + self.state = 698 self.match(SolidityParser.T__1) except RecognitionException as re: localctx.exception = re @@ -4317,6 +5302,7 @@ def doWhileStatement(self): class ContinueStatementContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -4348,12 +5334,12 @@ def accept(self, visitor:ParseTreeVisitor): def continueStatement(self): localctx = SolidityParser.ContinueStatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 92, self.RULE_continueStatement) + self.enterRule(localctx, 108, self.RULE_continueStatement) try: self.enterOuterAlt(localctx, 1) - self.state = 590 + self.state = 700 self.match(SolidityParser.ContinueKeyword) - self.state = 591 + self.state = 701 self.match(SolidityParser.T__1) except RecognitionException as re: localctx.exception = re @@ -4365,6 +5351,7 @@ def continueStatement(self): class BreakStatementContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -4396,12 +5383,12 @@ def accept(self, visitor:ParseTreeVisitor): def breakStatement(self): localctx = SolidityParser.BreakStatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 94, self.RULE_breakStatement) + self.enterRule(localctx, 110, self.RULE_breakStatement) try: self.enterOuterAlt(localctx, 1) - self.state = 593 + self.state = 703 self.match(SolidityParser.BreakKeyword) - self.state = 594 + self.state = 704 self.match(SolidityParser.T__1) except RecognitionException as re: localctx.exception = re @@ -4413,6 +5400,7 @@ def breakStatement(self): class ReturnStatementContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -4445,21 +5433,21 @@ def accept(self, visitor:ParseTreeVisitor): def returnStatement(self): localctx = SolidityParser.ReturnStatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 96, self.RULE_returnStatement) + self.enterRule(localctx, 112, self.RULE_returnStatement) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 596 - self.match(SolidityParser.T__45) - self.state = 598 + self.state = 706 + self.match(SolidityParser.T__50) + self.state = 708 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20) | (1 << SolidityParser.T__31) | (1 << SolidityParser.T__33) | (1 << SolidityParser.T__39) | (1 << SolidityParser.T__48) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__50) | (1 << SolidityParser.T__51) | (1 << SolidityParser.T__52) | (1 << SolidityParser.T__53) | (1 << SolidityParser.T__54) | (1 << SolidityParser.T__55) | (1 << SolidityParser.T__56) | (1 << SolidityParser.T__57) | (1 << SolidityParser.T__58) | (1 << SolidityParser.T__59))) != 0) or ((((_la - 91)) & ~0x3f) == 0 and ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) != 0): - self.state = 597 + if ((((_la - 5)) & ~0x3f) == 0 and ((1 << (_la - 5)) & ((1 << (SolidityParser.T__4 - 5)) | (1 << (SolidityParser.T__13 - 5)) | (1 << (SolidityParser.T__22 - 5)) | (1 << (SolidityParser.T__24 - 5)) | (1 << (SolidityParser.T__33 - 5)) | (1 << (SolidityParser.T__35 - 5)) | (1 << (SolidityParser.T__41 - 5)) | (1 << (SolidityParser.T__53 - 5)) | (1 << (SolidityParser.T__54 - 5)) | (1 << (SolidityParser.T__55 - 5)) | (1 << (SolidityParser.T__56 - 5)) | (1 << (SolidityParser.T__57 - 5)) | (1 << (SolidityParser.T__58 - 5)) | (1 << (SolidityParser.T__59 - 5)) | (1 << (SolidityParser.T__60 - 5)) | (1 << (SolidityParser.T__62 - 5)) | (1 << (SolidityParser.T__63 - 5)) | (1 << (SolidityParser.T__64 - 5)) | (1 << (SolidityParser.T__65 - 5)) | (1 << (SolidityParser.T__66 - 5)))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.BooleanLiteral - 96)) | (1 << (SolidityParser.DecimalNumber - 96)) | (1 << (SolidityParser.HexNumber - 96)) | (1 << (SolidityParser.HexLiteralFragment - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.TypeKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)) | (1 << (SolidityParser.StringLiteralFragment - 96)))) != 0): + self.state = 707 self.expression(0) - self.state = 600 + self.state = 710 self.match(SolidityParser.T__1) except RecognitionException as re: localctx.exception = re @@ -4471,6 +5459,7 @@ def returnStatement(self): class ThrowStatementContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -4489,23 +5478,75 @@ def exitRule(self, listener:ParseTreeListener): listener.exitThrowStatement(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitThrowStatement" ): - return visitor.visitThrowStatement(self) + if hasattr( visitor, "visitThrowStatement" ): + return visitor.visitThrowStatement(self) + else: + return visitor.visitChildren(self) + + + + + def throwStatement(self): + + localctx = SolidityParser.ThrowStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 114, self.RULE_throwStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 712 + self.match(SolidityParser.T__51) + self.state = 713 + self.match(SolidityParser.T__1) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class EmitStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def functionCall(self): + return self.getTypedRuleContext(SolidityParser.FunctionCallContext,0) + + + def getRuleIndex(self): + return SolidityParser.RULE_emitStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterEmitStatement" ): + listener.enterEmitStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitEmitStatement" ): + listener.exitEmitStatement(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEmitStatement" ): + return visitor.visitEmitStatement(self) else: return visitor.visitChildren(self) - def throwStatement(self): + def emitStatement(self): - localctx = SolidityParser.ThrowStatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 98, self.RULE_throwStatement) + localctx = SolidityParser.EmitStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 116, self.RULE_emitStatement) try: self.enterOuterAlt(localctx, 1) - self.state = 602 - self.match(SolidityParser.T__46) - self.state = 603 + self.state = 715 + self.match(SolidityParser.T__52) + self.state = 716 + self.functionCall() + self.state = 717 self.match(SolidityParser.T__1) except RecognitionException as re: localctx.exception = re @@ -4516,7 +5557,8 @@ def throwStatement(self): return localctx - class EmitStatementContext(ParserRuleContext): + class RevertStatementContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -4527,36 +5569,36 @@ def functionCall(self): def getRuleIndex(self): - return SolidityParser.RULE_emitStatement + return SolidityParser.RULE_revertStatement def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterEmitStatement" ): - listener.enterEmitStatement(self) + if hasattr( listener, "enterRevertStatement" ): + listener.enterRevertStatement(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitEmitStatement" ): - listener.exitEmitStatement(self) + if hasattr( listener, "exitRevertStatement" ): + listener.exitRevertStatement(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitEmitStatement" ): - return visitor.visitEmitStatement(self) + if hasattr( visitor, "visitRevertStatement" ): + return visitor.visitRevertStatement(self) else: return visitor.visitChildren(self) - def emitStatement(self): + def revertStatement(self): - localctx = SolidityParser.EmitStatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 100, self.RULE_emitStatement) + localctx = SolidityParser.RevertStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 118, self.RULE_revertStatement) try: self.enterOuterAlt(localctx, 1) - self.state = 605 - self.match(SolidityParser.T__47) - self.state = 606 + self.state = 719 + self.match(SolidityParser.T__53) + self.state = 720 self.functionCall() - self.state = 607 + self.state = 721 self.match(SolidityParser.T__1) except RecognitionException as re: localctx.exception = re @@ -4568,6 +5610,7 @@ def emitStatement(self): class VariableDeclarationStatementContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -4612,46 +5655,46 @@ def accept(self, visitor:ParseTreeVisitor): def variableDeclarationStatement(self): localctx = SolidityParser.VariableDeclarationStatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 102, self.RULE_variableDeclarationStatement) + self.enterRule(localctx, 120, self.RULE_variableDeclarationStatement) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 616 + self.state = 730 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,61,self._ctx) + la_ = self._interp.adaptivePredict(self._input,75,self._ctx) if la_ == 1: - self.state = 609 - self.match(SolidityParser.T__48) - self.state = 610 + self.state = 723 + self.match(SolidityParser.T__54) + self.state = 724 self.identifierList() pass elif la_ == 2: - self.state = 611 + self.state = 725 self.variableDeclaration() pass elif la_ == 3: - self.state = 612 - self.match(SolidityParser.T__20) - self.state = 613 + self.state = 726 + self.match(SolidityParser.T__22) + self.state = 727 self.variableDeclarationList() - self.state = 614 - self.match(SolidityParser.T__21) + self.state = 728 + self.match(SolidityParser.T__23) pass - self.state = 620 + self.state = 734 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__8: - self.state = 618 - self.match(SolidityParser.T__8) - self.state = 619 + if _la==SolidityParser.T__9: + self.state = 732 + self.match(SolidityParser.T__9) + self.state = 733 self.expression(0) - self.state = 622 + self.state = 736 self.match(SolidityParser.T__1) except RecognitionException as re: localctx.exception = re @@ -4663,6 +5706,7 @@ def variableDeclarationStatement(self): class VariableDeclarationListContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -4698,33 +5742,33 @@ def accept(self, visitor:ParseTreeVisitor): def variableDeclarationList(self): localctx = SolidityParser.VariableDeclarationListContext(self, self._ctx, self.state) - self.enterRule(localctx, 104, self.RULE_variableDeclarationList) + self.enterRule(localctx, 122, self.RULE_variableDeclarationList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 625 + self.state = 739 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__12) | (1 << SolidityParser.T__27) | (1 << SolidityParser.T__33) | (1 << SolidityParser.T__35) | (1 << SolidityParser.T__39) | (1 << SolidityParser.T__48) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__50) | (1 << SolidityParser.T__51))) != 0) or ((((_la - 91)) & ~0x3f) == 0 and ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.Identifier - 91)))) != 0): - self.state = 624 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__29) | (1 << SolidityParser.T__35) | (1 << SolidityParser.T__37) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53) | (1 << SolidityParser.T__54) | (1 << SolidityParser.T__55) | (1 << SolidityParser.T__56) | (1 << SolidityParser.T__57))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): + self.state = 738 self.variableDeclaration() - self.state = 633 + self.state = 747 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__14: - self.state = 627 - self.match(SolidityParser.T__14) - self.state = 629 + while _la==SolidityParser.T__15: + self.state = 741 + self.match(SolidityParser.T__15) + self.state = 743 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__12) | (1 << SolidityParser.T__27) | (1 << SolidityParser.T__33) | (1 << SolidityParser.T__35) | (1 << SolidityParser.T__39) | (1 << SolidityParser.T__48) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__50) | (1 << SolidityParser.T__51))) != 0) or ((((_la - 91)) & ~0x3f) == 0 and ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.Identifier - 91)))) != 0): - self.state = 628 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__29) | (1 << SolidityParser.T__35) | (1 << SolidityParser.T__37) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53) | (1 << SolidityParser.T__54) | (1 << SolidityParser.T__55) | (1 << SolidityParser.T__56) | (1 << SolidityParser.T__57))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): + self.state = 742 self.variableDeclaration() - self.state = 635 + self.state = 749 self._errHandler.sync(self) _la = self._input.LA(1) @@ -4738,6 +5782,7 @@ def variableDeclarationList(self): class IdentifierListContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -4773,41 +5818,41 @@ def accept(self, visitor:ParseTreeVisitor): def identifierList(self): localctx = SolidityParser.IdentifierListContext(self, self._ctx, self.state) - self.enterRule(localctx, 106, self.RULE_identifierList) + self.enterRule(localctx, 124, self.RULE_identifierList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 636 - self.match(SolidityParser.T__20) - self.state = 643 + self.state = 750 + self.match(SolidityParser.T__22) + self.state = 757 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,67,self._ctx) + _alt = self._interp.adaptivePredict(self._input,81,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 638 + self.state = 752 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__12 or _la==SolidityParser.T__39 or _la==SolidityParser.Identifier: - self.state = 637 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): + self.state = 751 self.identifier() - self.state = 640 - self.match(SolidityParser.T__14) - self.state = 645 + self.state = 754 + self.match(SolidityParser.T__15) + self.state = 759 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,67,self._ctx) + _alt = self._interp.adaptivePredict(self._input,81,self._ctx) - self.state = 647 + self.state = 761 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__12 or _la==SolidityParser.T__39 or _la==SolidityParser.Identifier: - self.state = 646 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): + self.state = 760 self.identifier() - self.state = 649 - self.match(SolidityParser.T__21) + self.state = 763 + self.match(SolidityParser.T__23) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -4818,6 +5863,7 @@ def identifierList(self): class ElementaryTypeNameContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -4861,13 +5907,13 @@ def accept(self, visitor:ParseTreeVisitor): def elementaryTypeName(self): localctx = SolidityParser.ElementaryTypeNameContext(self, self._ctx, self.state) - self.enterRule(localctx, 108, self.RULE_elementaryTypeName) + self.enterRule(localctx, 126, self.RULE_elementaryTypeName) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 651 + self.state = 765 _la = self._input.LA(1) - if not(((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)) | (1 << (SolidityParser.Int - 34)) | (1 << (SolidityParser.Uint - 34)) | (1 << (SolidityParser.Byte - 34)) | (1 << (SolidityParser.Fixed - 34)) | (1 << (SolidityParser.Ufixed - 34)))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__35) | (1 << SolidityParser.T__54) | (1 << SolidityParser.T__55) | (1 << SolidityParser.T__56) | (1 << SolidityParser.T__57))) != 0) or ((((_la - 98)) & ~0x3f) == 0 and ((1 << (_la - 98)) & ((1 << (SolidityParser.Int - 98)) | (1 << (SolidityParser.Uint - 98)) | (1 << (SolidityParser.Byte - 98)) | (1 << (SolidityParser.Fixed - 98)) | (1 << (SolidityParser.Ufixed - 98)))) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -4882,6 +5928,7 @@ def elementaryTypeName(self): class ExpressionContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -4902,14 +5949,18 @@ def primaryExpression(self): return self.getTypedRuleContext(SolidityParser.PrimaryExpressionContext,0) - def functionCallArguments(self): - return self.getTypedRuleContext(SolidityParser.FunctionCallArgumentsContext,0) - - def identifier(self): return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) + def nameValueList(self): + return self.getTypedRuleContext(SolidityParser.NameValueListContext,0) + + + def functionCallArguments(self): + return self.getTypedRuleContext(SolidityParser.FunctionCallArgumentsContext,0) + + def getRuleIndex(self): return SolidityParser.RULE_expression @@ -4934,311 +5985,311 @@ def expression(self, _p:int=0): _parentState = self.state localctx = SolidityParser.ExpressionContext(self, self._ctx, _parentState) _prevctx = localctx - _startState = 110 - self.enterRecursionRule(localctx, 110, self.RULE_expression, _p) + _startState = 128 + self.enterRecursionRule(localctx, 128, self.RULE_expression, _p) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 671 + self.state = 785 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,69,self._ctx) + la_ = self._interp.adaptivePredict(self._input,83,self._ctx) if la_ == 1: - self.state = 654 - self.match(SolidityParser.T__54) - self.state = 655 + self.state = 768 + self.match(SolidityParser.T__60) + self.state = 769 self.typeName(0) pass elif la_ == 2: - self.state = 656 - self.match(SolidityParser.T__20) - self.state = 657 + self.state = 770 + self.match(SolidityParser.T__22) + self.state = 771 self.expression(0) - self.state = 658 - self.match(SolidityParser.T__21) + self.state = 772 + self.match(SolidityParser.T__23) pass elif la_ == 3: - self.state = 660 + self.state = 774 _la = self._input.LA(1) - if not(_la==SolidityParser.T__52 or _la==SolidityParser.T__53): + if not(_la==SolidityParser.T__58 or _la==SolidityParser.T__59): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 661 + self.state = 775 self.expression(19) pass elif la_ == 4: - self.state = 662 + self.state = 776 _la = self._input.LA(1) - if not(_la==SolidityParser.T__55 or _la==SolidityParser.T__56): + if not(_la==SolidityParser.T__62 or _la==SolidityParser.T__63): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 663 + self.state = 777 self.expression(18) pass elif la_ == 5: - self.state = 664 + self.state = 778 _la = self._input.LA(1) - if not(_la==SolidityParser.T__57 or _la==SolidityParser.T__58): + if not(_la==SolidityParser.T__64 or _la==SolidityParser.T__65): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 665 + self.state = 779 self.expression(17) pass elif la_ == 6: - self.state = 666 - self.match(SolidityParser.T__59) - self.state = 667 + self.state = 780 + self.match(SolidityParser.T__66) + self.state = 781 self.expression(16) pass elif la_ == 7: - self.state = 668 - self.match(SolidityParser.T__3) - self.state = 669 + self.state = 782 + self.match(SolidityParser.T__4) + self.state = 783 self.expression(15) pass elif la_ == 8: - self.state = 670 + self.state = 784 self.primaryExpression() pass self._ctx.stop = self._input.LT(-1) - self.state = 732 + self.state = 861 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,71,self._ctx) + _alt = self._interp.adaptivePredict(self._input,87,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 730 + self.state = 859 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,70,self._ctx) + la_ = self._interp.adaptivePredict(self._input,86,self._ctx) if la_ == 1: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 673 + self.state = 787 if not self.precpred(self._ctx, 14): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") - self.state = 674 - self.match(SolidityParser.T__60) - self.state = 675 + self.state = 788 + self.match(SolidityParser.T__67) + self.state = 789 self.expression(15) pass elif la_ == 2: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 676 + self.state = 790 if not self.precpred(self._ctx, 13): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") - self.state = 677 + self.state = 791 _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__11) | (1 << SolidityParser.T__61) | (1 << SolidityParser.T__62))) != 0)): + if not(((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (SolidityParser.T__12 - 13)) | (1 << (SolidityParser.T__68 - 13)) | (1 << (SolidityParser.T__69 - 13)))) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 678 + self.state = 792 self.expression(14) pass elif la_ == 3: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 679 + self.state = 793 if not self.precpred(self._ctx, 12): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") - self.state = 680 + self.state = 794 _la = self._input.LA(1) - if not(_la==SolidityParser.T__55 or _la==SolidityParser.T__56): + if not(_la==SolidityParser.T__62 or _la==SolidityParser.T__63): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 681 + self.state = 795 self.expression(13) pass elif la_ == 4: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 682 + self.state = 796 if not self.precpred(self._ctx, 11): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") - self.state = 683 + self.state = 797 _la = self._input.LA(1) - if not(_la==SolidityParser.T__63 or _la==SolidityParser.T__64): + if not(_la==SolidityParser.T__70 or _la==SolidityParser.T__71): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 684 + self.state = 798 self.expression(12) pass elif la_ == 5: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 685 + self.state = 799 if not self.precpred(self._ctx, 10): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") - self.state = 686 - self.match(SolidityParser.T__65) - self.state = 687 + self.state = 800 + self.match(SolidityParser.T__72) + self.state = 801 self.expression(11) pass elif la_ == 6: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 688 + self.state = 802 if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") - self.state = 689 - self.match(SolidityParser.T__2) - self.state = 690 + self.state = 803 + self.match(SolidityParser.T__3) + self.state = 804 self.expression(10) pass elif la_ == 7: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 691 + self.state = 805 if not self.precpred(self._ctx, 8): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") - self.state = 692 - self.match(SolidityParser.T__66) - self.state = 693 + self.state = 806 + self.match(SolidityParser.T__73) + self.state = 807 self.expression(9) pass elif la_ == 8: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 694 + self.state = 808 if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") - self.state = 695 + self.state = 809 _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__4) | (1 << SolidityParser.T__5) | (1 << SolidityParser.T__6) | (1 << SolidityParser.T__7))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__5) | (1 << SolidityParser.T__6) | (1 << SolidityParser.T__7) | (1 << SolidityParser.T__8))) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 696 + self.state = 810 self.expression(8) pass elif la_ == 9: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 697 + self.state = 811 if not self.precpred(self._ctx, 6): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") - self.state = 698 + self.state = 812 _la = self._input.LA(1) - if not(_la==SolidityParser.T__67 or _la==SolidityParser.T__68): + if not(_la==SolidityParser.T__74 or _la==SolidityParser.T__75): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 699 + self.state = 813 self.expression(7) pass elif la_ == 10: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 700 + self.state = 814 if not self.precpred(self._ctx, 5): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") - self.state = 701 - self.match(SolidityParser.T__69) - self.state = 702 + self.state = 815 + self.match(SolidityParser.T__76) + self.state = 816 self.expression(6) pass elif la_ == 11: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 703 + self.state = 817 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 704 - self.match(SolidityParser.T__70) - self.state = 705 + self.state = 818 + self.match(SolidityParser.T__2) + self.state = 819 self.expression(5) pass elif la_ == 12: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 706 + self.state = 820 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 707 - self.match(SolidityParser.T__71) - self.state = 708 + self.state = 821 + self.match(SolidityParser.T__77) + self.state = 822 self.expression(0) - self.state = 709 - self.match(SolidityParser.T__72) - self.state = 710 + self.state = 823 + self.match(SolidityParser.T__61) + self.state = 824 self.expression(4) pass elif la_ == 13: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 712 + self.state = 826 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 713 + self.state = 827 _la = self._input.LA(1) - if not(_la==SolidityParser.T__8 or ((((_la - 74)) & ~0x3f) == 0 and ((1 << (_la - 74)) & ((1 << (SolidityParser.T__73 - 74)) | (1 << (SolidityParser.T__74 - 74)) | (1 << (SolidityParser.T__75 - 74)) | (1 << (SolidityParser.T__76 - 74)) | (1 << (SolidityParser.T__77 - 74)) | (1 << (SolidityParser.T__78 - 74)) | (1 << (SolidityParser.T__79 - 74)) | (1 << (SolidityParser.T__80 - 74)) | (1 << (SolidityParser.T__81 - 74)) | (1 << (SolidityParser.T__82 - 74)))) != 0)): + if not(_la==SolidityParser.T__9 or ((((_la - 79)) & ~0x3f) == 0 and ((1 << (_la - 79)) & ((1 << (SolidityParser.T__78 - 79)) | (1 << (SolidityParser.T__79 - 79)) | (1 << (SolidityParser.T__80 - 79)) | (1 << (SolidityParser.T__81 - 79)) | (1 << (SolidityParser.T__82 - 79)) | (1 << (SolidityParser.T__83 - 79)) | (1 << (SolidityParser.T__84 - 79)) | (1 << (SolidityParser.T__85 - 79)) | (1 << (SolidityParser.T__86 - 79)) | (1 << (SolidityParser.T__87 - 79)))) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 714 + self.state = 828 self.expression(3) pass elif la_ == 14: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 715 - if not self.precpred(self._ctx, 25): + self.state = 829 + if not self.precpred(self._ctx, 27): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 25)") - self.state = 716 + raise FailedPredicateException(self, "self.precpred(self._ctx, 27)") + self.state = 830 _la = self._input.LA(1) - if not(_la==SolidityParser.T__52 or _la==SolidityParser.T__53): + if not(_la==SolidityParser.T__58 or _la==SolidityParser.T__59): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -5248,50 +6299,96 @@ def expression(self, _p:int=0): elif la_ == 15: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 717 - if not self.precpred(self._ctx, 23): + self.state = 831 + if not self.precpred(self._ctx, 25): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 23)") - self.state = 718 - self.match(SolidityParser.T__31) - self.state = 719 + raise FailedPredicateException(self, "self.precpred(self._ctx, 25)") + self.state = 832 + self.match(SolidityParser.T__33) + self.state = 833 self.expression(0) - self.state = 720 - self.match(SolidityParser.T__32) + self.state = 834 + self.match(SolidityParser.T__34) pass elif la_ == 16: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 722 + self.state = 836 + if not self.precpred(self._ctx, 24): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 24)") + self.state = 837 + self.match(SolidityParser.T__33) + self.state = 839 + self._errHandler.sync(self) + _la = self._input.LA(1) + if ((((_la - 5)) & ~0x3f) == 0 and ((1 << (_la - 5)) & ((1 << (SolidityParser.T__4 - 5)) | (1 << (SolidityParser.T__13 - 5)) | (1 << (SolidityParser.T__22 - 5)) | (1 << (SolidityParser.T__24 - 5)) | (1 << (SolidityParser.T__33 - 5)) | (1 << (SolidityParser.T__35 - 5)) | (1 << (SolidityParser.T__41 - 5)) | (1 << (SolidityParser.T__53 - 5)) | (1 << (SolidityParser.T__54 - 5)) | (1 << (SolidityParser.T__55 - 5)) | (1 << (SolidityParser.T__56 - 5)) | (1 << (SolidityParser.T__57 - 5)) | (1 << (SolidityParser.T__58 - 5)) | (1 << (SolidityParser.T__59 - 5)) | (1 << (SolidityParser.T__60 - 5)) | (1 << (SolidityParser.T__62 - 5)) | (1 << (SolidityParser.T__63 - 5)) | (1 << (SolidityParser.T__64 - 5)) | (1 << (SolidityParser.T__65 - 5)) | (1 << (SolidityParser.T__66 - 5)))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.BooleanLiteral - 96)) | (1 << (SolidityParser.DecimalNumber - 96)) | (1 << (SolidityParser.HexNumber - 96)) | (1 << (SolidityParser.HexLiteralFragment - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.TypeKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)) | (1 << (SolidityParser.StringLiteralFragment - 96)))) != 0): + self.state = 838 + self.expression(0) + + + self.state = 841 + self.match(SolidityParser.T__61) + self.state = 843 + self._errHandler.sync(self) + _la = self._input.LA(1) + if ((((_la - 5)) & ~0x3f) == 0 and ((1 << (_la - 5)) & ((1 << (SolidityParser.T__4 - 5)) | (1 << (SolidityParser.T__13 - 5)) | (1 << (SolidityParser.T__22 - 5)) | (1 << (SolidityParser.T__24 - 5)) | (1 << (SolidityParser.T__33 - 5)) | (1 << (SolidityParser.T__35 - 5)) | (1 << (SolidityParser.T__41 - 5)) | (1 << (SolidityParser.T__53 - 5)) | (1 << (SolidityParser.T__54 - 5)) | (1 << (SolidityParser.T__55 - 5)) | (1 << (SolidityParser.T__56 - 5)) | (1 << (SolidityParser.T__57 - 5)) | (1 << (SolidityParser.T__58 - 5)) | (1 << (SolidityParser.T__59 - 5)) | (1 << (SolidityParser.T__60 - 5)) | (1 << (SolidityParser.T__62 - 5)) | (1 << (SolidityParser.T__63 - 5)) | (1 << (SolidityParser.T__64 - 5)) | (1 << (SolidityParser.T__65 - 5)) | (1 << (SolidityParser.T__66 - 5)))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.BooleanLiteral - 96)) | (1 << (SolidityParser.DecimalNumber - 96)) | (1 << (SolidityParser.HexNumber - 96)) | (1 << (SolidityParser.HexLiteralFragment - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.TypeKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)) | (1 << (SolidityParser.StringLiteralFragment - 96)))) != 0): + self.state = 842 + self.expression(0) + + + self.state = 845 + self.match(SolidityParser.T__34) + pass + + elif la_ == 17: + localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) + self.state = 846 + if not self.precpred(self._ctx, 23): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 23)") + self.state = 847 + self.match(SolidityParser.T__36) + self.state = 848 + self.identifier() + pass + + elif la_ == 18: + localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) + self.state = 849 if not self.precpred(self._ctx, 22): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 22)") - self.state = 723 - self.match(SolidityParser.T__20) - self.state = 724 - self.functionCallArguments() - self.state = 725 - self.match(SolidityParser.T__21) + self.state = 850 + self.match(SolidityParser.T__14) + self.state = 851 + self.nameValueList() + self.state = 852 + self.match(SolidityParser.T__16) pass - elif la_ == 17: + elif la_ == 19: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 727 + self.state = 854 if not self.precpred(self._ctx, 21): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 21)") - self.state = 728 - self.match(SolidityParser.T__34) - self.state = 729 - self.identifier() + self.state = 855 + self.match(SolidityParser.T__22) + self.state = 856 + self.functionCallArguments() + self.state = 857 + self.match(SolidityParser.T__23) pass - self.state = 734 + self.state = 863 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,71,self._ctx) + _alt = self._interp.adaptivePredict(self._input,87,self._ctx) except RecognitionException as re: localctx.exception = re @@ -5303,6 +6400,7 @@ def expression(self, _p:int=0): class PrimaryExpressionContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -5315,22 +6413,30 @@ def numberLiteral(self): return self.getTypedRuleContext(SolidityParser.NumberLiteralContext,0) - def HexLiteral(self): - return self.getToken(SolidityParser.HexLiteral, 0) + def hexLiteral(self): + return self.getTypedRuleContext(SolidityParser.HexLiteralContext,0) + + + def stringLiteral(self): + return self.getTypedRuleContext(SolidityParser.StringLiteralContext,0) - def StringLiteral(self): - return self.getToken(SolidityParser.StringLiteral, 0) def identifier(self): return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) + def TypeKeyword(self): + return self.getToken(SolidityParser.TypeKeyword, 0) + + def PayableKeyword(self): + return self.getToken(SolidityParser.PayableKeyword, 0) + def tupleExpression(self): return self.getTypedRuleContext(SolidityParser.TupleExpressionContext,0) - def elementaryTypeNameExpression(self): - return self.getTypedRuleContext(SolidityParser.ElementaryTypeNameExpressionContext,0) + def typeNameExpression(self): + return self.getTypedRuleContext(SolidityParser.TypeNameExpressionContext,0) def getRuleIndex(self): @@ -5356,68 +6462,85 @@ def accept(self, visitor:ParseTreeVisitor): def primaryExpression(self): localctx = SolidityParser.PrimaryExpressionContext(self, self._ctx, self.state) - self.enterRule(localctx, 112, self.RULE_primaryExpression) + self.enterRule(localctx, 130, self.RULE_primaryExpression) try: - self.state = 750 + self.state = 881 self._errHandler.sync(self) - token = self._input.LA(1) - if token in [SolidityParser.BooleanLiteral]: + la_ = self._interp.adaptivePredict(self._input,90,self._ctx) + if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 735 + self.state = 864 self.match(SolidityParser.BooleanLiteral) pass - elif token in [SolidityParser.DecimalNumber, SolidityParser.HexNumber]: + + elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 736 + self.state = 865 self.numberLiteral() pass - elif token in [SolidityParser.HexLiteral]: + + elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 737 - self.match(SolidityParser.HexLiteral) + self.state = 866 + self.hexLiteral() pass - elif token in [SolidityParser.StringLiteral]: + + elif la_ == 4: self.enterOuterAlt(localctx, 4) - self.state = 738 - self.match(SolidityParser.StringLiteral) + self.state = 867 + self.stringLiteral() pass - elif token in [SolidityParser.T__12, SolidityParser.T__39, SolidityParser.Identifier]: + + elif la_ == 5: self.enterOuterAlt(localctx, 5) - self.state = 739 + self.state = 868 self.identifier() - self.state = 742 + self.state = 871 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,72,self._ctx) + la_ = self._interp.adaptivePredict(self._input,88,self._ctx) if la_ == 1: - self.state = 740 - self.match(SolidityParser.T__31) - self.state = 741 - self.match(SolidityParser.T__32) + self.state = 869 + self.match(SolidityParser.T__33) + self.state = 870 + self.match(SolidityParser.T__34) pass - elif token in [SolidityParser.T__20, SolidityParser.T__31]: + + elif la_ == 6: self.enterOuterAlt(localctx, 6) - self.state = 744 - self.tupleExpression() + self.state = 873 + self.match(SolidityParser.TypeKeyword) pass - elif token in [SolidityParser.T__33, SolidityParser.T__48, SolidityParser.T__49, SolidityParser.T__50, SolidityParser.T__51, SolidityParser.Int, SolidityParser.Uint, SolidityParser.Byte, SolidityParser.Fixed, SolidityParser.Ufixed]: + + elif la_ == 7: self.enterOuterAlt(localctx, 7) - self.state = 745 - self.elementaryTypeNameExpression() - self.state = 748 + self.state = 874 + self.match(SolidityParser.PayableKeyword) + pass + + elif la_ == 8: + self.enterOuterAlt(localctx, 8) + self.state = 875 + self.tupleExpression() + pass + + elif la_ == 9: + self.enterOuterAlt(localctx, 9) + self.state = 876 + self.typeNameExpression() + self.state = 879 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,73,self._ctx) + la_ = self._interp.adaptivePredict(self._input,89,self._ctx) if la_ == 1: - self.state = 746 - self.match(SolidityParser.T__31) - self.state = 747 - self.match(SolidityParser.T__32) + self.state = 877 + self.match(SolidityParser.T__33) + self.state = 878 + self.match(SolidityParser.T__34) pass - else: - raise NoViableAltException(self) + except RecognitionException as re: localctx.exception = re @@ -5429,6 +6552,7 @@ def primaryExpression(self): class ExpressionListContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -5464,21 +6588,21 @@ def accept(self, visitor:ParseTreeVisitor): def expressionList(self): localctx = SolidityParser.ExpressionListContext(self, self._ctx, self.state) - self.enterRule(localctx, 114, self.RULE_expressionList) + self.enterRule(localctx, 132, self.RULE_expressionList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 752 + self.state = 883 self.expression(0) - self.state = 757 + self.state = 888 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__14: - self.state = 753 - self.match(SolidityParser.T__14) - self.state = 754 + while _la==SolidityParser.T__15: + self.state = 884 + self.match(SolidityParser.T__15) + self.state = 885 self.expression(0) - self.state = 759 + self.state = 890 self._errHandler.sync(self) _la = self._input.LA(1) @@ -5492,6 +6616,7 @@ def expressionList(self): class NameValueListContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -5527,31 +6652,31 @@ def accept(self, visitor:ParseTreeVisitor): def nameValueList(self): localctx = SolidityParser.NameValueListContext(self, self._ctx, self.state) - self.enterRule(localctx, 116, self.RULE_nameValueList) + self.enterRule(localctx, 134, self.RULE_nameValueList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 760 + self.state = 891 self.nameValue() - self.state = 765 + self.state = 896 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,76,self._ctx) + _alt = self._interp.adaptivePredict(self._input,92,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 761 - self.match(SolidityParser.T__14) - self.state = 762 + self.state = 892 + self.match(SolidityParser.T__15) + self.state = 893 self.nameValue() - self.state = 767 + self.state = 898 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,76,self._ctx) + _alt = self._interp.adaptivePredict(self._input,92,self._ctx) - self.state = 769 + self.state = 900 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__14: - self.state = 768 - self.match(SolidityParser.T__14) + if _la==SolidityParser.T__15: + self.state = 899 + self.match(SolidityParser.T__15) except RecognitionException as re: @@ -5564,6 +6689,7 @@ def nameValueList(self): class NameValueContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -5600,14 +6726,14 @@ def accept(self, visitor:ParseTreeVisitor): def nameValue(self): localctx = SolidityParser.NameValueContext(self, self._ctx, self.state) - self.enterRule(localctx, 118, self.RULE_nameValue) + self.enterRule(localctx, 136, self.RULE_nameValue) try: self.enterOuterAlt(localctx, 1) - self.state = 771 + self.state = 902 self.identifier() - self.state = 772 - self.match(SolidityParser.T__72) - self.state = 773 + self.state = 903 + self.match(SolidityParser.T__61) + self.state = 904 self.expression(0) except RecognitionException as re: localctx.exception = re @@ -5619,6 +6745,7 @@ def nameValue(self): class FunctionCallArgumentsContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -5655,34 +6782,34 @@ def accept(self, visitor:ParseTreeVisitor): def functionCallArguments(self): localctx = SolidityParser.FunctionCallArgumentsContext(self, self._ctx, self.state) - self.enterRule(localctx, 120, self.RULE_functionCallArguments) + self.enterRule(localctx, 138, self.RULE_functionCallArguments) self._la = 0 # Token type try: - self.state = 783 + self.state = 914 self._errHandler.sync(self) token = self._input.LA(1) - if token in [SolidityParser.T__13]: + if token in [SolidityParser.T__14]: self.enterOuterAlt(localctx, 1) - self.state = 775 - self.match(SolidityParser.T__13) - self.state = 777 + self.state = 906 + self.match(SolidityParser.T__14) + self.state = 908 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__12 or _la==SolidityParser.T__39 or _la==SolidityParser.Identifier: - self.state = 776 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): + self.state = 907 self.nameValueList() - self.state = 779 - self.match(SolidityParser.T__15) + self.state = 910 + self.match(SolidityParser.T__16) pass - elif token in [SolidityParser.T__3, SolidityParser.T__12, SolidityParser.T__20, SolidityParser.T__21, SolidityParser.T__31, SolidityParser.T__33, SolidityParser.T__39, SolidityParser.T__48, SolidityParser.T__49, SolidityParser.T__50, SolidityParser.T__51, SolidityParser.T__52, SolidityParser.T__53, SolidityParser.T__54, SolidityParser.T__55, SolidityParser.T__56, SolidityParser.T__57, SolidityParser.T__58, SolidityParser.T__59, SolidityParser.Int, SolidityParser.Uint, SolidityParser.Byte, SolidityParser.Fixed, SolidityParser.Ufixed, SolidityParser.BooleanLiteral, SolidityParser.DecimalNumber, SolidityParser.HexNumber, SolidityParser.HexLiteral, SolidityParser.Identifier, SolidityParser.StringLiteral]: + elif token in [SolidityParser.T__4, SolidityParser.T__13, SolidityParser.T__22, SolidityParser.T__23, SolidityParser.T__24, SolidityParser.T__33, SolidityParser.T__35, SolidityParser.T__41, SolidityParser.T__53, SolidityParser.T__54, SolidityParser.T__55, SolidityParser.T__56, SolidityParser.T__57, SolidityParser.T__58, SolidityParser.T__59, SolidityParser.T__60, SolidityParser.T__62, SolidityParser.T__63, SolidityParser.T__64, SolidityParser.T__65, SolidityParser.T__66, SolidityParser.T__95, SolidityParser.Int, SolidityParser.Uint, SolidityParser.Byte, SolidityParser.Fixed, SolidityParser.Ufixed, SolidityParser.BooleanLiteral, SolidityParser.DecimalNumber, SolidityParser.HexNumber, SolidityParser.HexLiteralFragment, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.TypeKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier, SolidityParser.StringLiteralFragment]: self.enterOuterAlt(localctx, 2) - self.state = 781 + self.state = 912 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20) | (1 << SolidityParser.T__31) | (1 << SolidityParser.T__33) | (1 << SolidityParser.T__39) | (1 << SolidityParser.T__48) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__50) | (1 << SolidityParser.T__51) | (1 << SolidityParser.T__52) | (1 << SolidityParser.T__53) | (1 << SolidityParser.T__54) | (1 << SolidityParser.T__55) | (1 << SolidityParser.T__56) | (1 << SolidityParser.T__57) | (1 << SolidityParser.T__58) | (1 << SolidityParser.T__59))) != 0) or ((((_la - 91)) & ~0x3f) == 0 and ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) != 0): - self.state = 780 + if ((((_la - 5)) & ~0x3f) == 0 and ((1 << (_la - 5)) & ((1 << (SolidityParser.T__4 - 5)) | (1 << (SolidityParser.T__13 - 5)) | (1 << (SolidityParser.T__22 - 5)) | (1 << (SolidityParser.T__24 - 5)) | (1 << (SolidityParser.T__33 - 5)) | (1 << (SolidityParser.T__35 - 5)) | (1 << (SolidityParser.T__41 - 5)) | (1 << (SolidityParser.T__53 - 5)) | (1 << (SolidityParser.T__54 - 5)) | (1 << (SolidityParser.T__55 - 5)) | (1 << (SolidityParser.T__56 - 5)) | (1 << (SolidityParser.T__57 - 5)) | (1 << (SolidityParser.T__58 - 5)) | (1 << (SolidityParser.T__59 - 5)) | (1 << (SolidityParser.T__60 - 5)) | (1 << (SolidityParser.T__62 - 5)) | (1 << (SolidityParser.T__63 - 5)) | (1 << (SolidityParser.T__64 - 5)) | (1 << (SolidityParser.T__65 - 5)) | (1 << (SolidityParser.T__66 - 5)))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.BooleanLiteral - 96)) | (1 << (SolidityParser.DecimalNumber - 96)) | (1 << (SolidityParser.HexNumber - 96)) | (1 << (SolidityParser.HexLiteralFragment - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.TypeKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)) | (1 << (SolidityParser.StringLiteralFragment - 96)))) != 0): + self.state = 911 self.expressionList() @@ -5700,6 +6827,7 @@ def functionCallArguments(self): class FunctionCallContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -5736,17 +6864,17 @@ def accept(self, visitor:ParseTreeVisitor): def functionCall(self): localctx = SolidityParser.FunctionCallContext(self, self._ctx, self.state) - self.enterRule(localctx, 122, self.RULE_functionCall) + self.enterRule(localctx, 140, self.RULE_functionCall) try: self.enterOuterAlt(localctx, 1) - self.state = 785 + self.state = 916 self.expression(0) - self.state = 786 - self.match(SolidityParser.T__20) - self.state = 787 + self.state = 917 + self.match(SolidityParser.T__22) + self.state = 918 self.functionCallArguments() - self.state = 788 - self.match(SolidityParser.T__21) + self.state = 919 + self.match(SolidityParser.T__23) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -5757,6 +6885,7 @@ def functionCall(self): class AssemblyBlockContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -5792,24 +6921,24 @@ def accept(self, visitor:ParseTreeVisitor): def assemblyBlock(self): localctx = SolidityParser.AssemblyBlockContext(self, self._ctx, self.state) - self.enterRule(localctx, 124, self.RULE_assemblyBlock) + self.enterRule(localctx, 142, self.RULE_assemblyBlock) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 790 - self.match(SolidityParser.T__13) - self.state = 794 + self.state = 921 + self.match(SolidityParser.T__14) + self.state = 925 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__12) | (1 << SolidityParser.T__13) | (1 << SolidityParser.T__20) | (1 << SolidityParser.T__23) | (1 << SolidityParser.T__27) | (1 << SolidityParser.T__33) | (1 << SolidityParser.T__39) | (1 << SolidityParser.T__40) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__45) | (1 << SolidityParser.T__51))) != 0) or ((((_la - 84)) & ~0x3f) == 0 and ((1 << (_la - 84)) & ((1 << (SolidityParser.T__83 - 84)) | (1 << (SolidityParser.T__85 - 84)) | (1 << (SolidityParser.T__86 - 84)) | (1 << (SolidityParser.DecimalNumber - 84)) | (1 << (SolidityParser.HexNumber - 84)) | (1 << (SolidityParser.HexLiteral - 84)) | (1 << (SolidityParser.BreakKeyword - 84)) | (1 << (SolidityParser.ContinueKeyword - 84)) | (1 << (SolidityParser.Identifier - 84)) | (1 << (SolidityParser.StringLiteral - 84)))) != 0): - self.state = 791 + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__14) | (1 << SolidityParser.T__22) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__26) | (1 << SolidityParser.T__29) | (1 << SolidityParser.T__35) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__42) | (1 << SolidityParser.T__48) | (1 << SolidityParser.T__50) | (1 << SolidityParser.T__53) | (1 << SolidityParser.T__57))) != 0) or ((((_la - 89)) & ~0x3f) == 0 and ((1 << (_la - 89)) & ((1 << (SolidityParser.T__88 - 89)) | (1 << (SolidityParser.T__90 - 89)) | (1 << (SolidityParser.T__91 - 89)) | (1 << (SolidityParser.T__95 - 89)) | (1 << (SolidityParser.DecimalNumber - 89)) | (1 << (SolidityParser.HexNumber - 89)) | (1 << (SolidityParser.HexLiteralFragment - 89)) | (1 << (SolidityParser.BreakKeyword - 89)) | (1 << (SolidityParser.ContinueKeyword - 89)) | (1 << (SolidityParser.LeaveKeyword - 89)) | (1 << (SolidityParser.PayableKeyword - 89)) | (1 << (SolidityParser.ConstructorKeyword - 89)) | (1 << (SolidityParser.ReceiveKeyword - 89)) | (1 << (SolidityParser.Identifier - 89)) | (1 << (SolidityParser.StringLiteralFragment - 89)))) != 0): + self.state = 922 self.assemblyItem() - self.state = 796 + self.state = 927 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 797 - self.match(SolidityParser.T__15) + self.state = 928 + self.match(SolidityParser.T__16) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -5820,6 +6949,7 @@ def assemblyBlock(self): class AssemblyItemContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -5875,6 +7005,9 @@ def BreakKeyword(self): def ContinueKeyword(self): return self.getToken(SolidityParser.ContinueKeyword, 0) + def LeaveKeyword(self): + return self.getToken(SolidityParser.LeaveKeyword, 0) + def subAssembly(self): return self.getTypedRuleContext(SolidityParser.SubAssemblyContext,0) @@ -5883,11 +7016,13 @@ def numberLiteral(self): return self.getTypedRuleContext(SolidityParser.NumberLiteralContext,0) - def StringLiteral(self): - return self.getToken(SolidityParser.StringLiteral, 0) + def stringLiteral(self): + return self.getTypedRuleContext(SolidityParser.StringLiteralContext,0) + + + def hexLiteral(self): + return self.getTypedRuleContext(SolidityParser.HexLiteralContext,0) - def HexLiteral(self): - return self.getToken(SolidityParser.HexLiteral, 0) def getRuleIndex(self): return SolidityParser.RULE_assemblyItem @@ -5912,111 +7047,117 @@ def accept(self, visitor:ParseTreeVisitor): def assemblyItem(self): localctx = SolidityParser.AssemblyItemContext(self, self._ctx, self.state) - self.enterRule(localctx, 126, self.RULE_assemblyItem) + self.enterRule(localctx, 144, self.RULE_assemblyItem) try: - self.state = 816 + self.state = 948 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,82,self._ctx) + la_ = self._interp.adaptivePredict(self._input,98,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 799 + self.state = 930 self.identifier() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 800 + self.state = 931 self.assemblyBlock() pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 801 + self.state = 932 self.assemblyExpression() pass elif la_ == 4: self.enterOuterAlt(localctx, 4) - self.state = 802 + self.state = 933 self.assemblyLocalDefinition() pass elif la_ == 5: self.enterOuterAlt(localctx, 5) - self.state = 803 + self.state = 934 self.assemblyAssignment() pass elif la_ == 6: self.enterOuterAlt(localctx, 6) - self.state = 804 + self.state = 935 self.assemblyStackAssignment() pass elif la_ == 7: self.enterOuterAlt(localctx, 7) - self.state = 805 + self.state = 936 self.labelDefinition() pass elif la_ == 8: self.enterOuterAlt(localctx, 8) - self.state = 806 + self.state = 937 self.assemblySwitch() pass elif la_ == 9: self.enterOuterAlt(localctx, 9) - self.state = 807 + self.state = 938 self.assemblyFunctionDefinition() pass elif la_ == 10: self.enterOuterAlt(localctx, 10) - self.state = 808 + self.state = 939 self.assemblyFor() pass elif la_ == 11: self.enterOuterAlt(localctx, 11) - self.state = 809 + self.state = 940 self.assemblyIf() pass elif la_ == 12: self.enterOuterAlt(localctx, 12) - self.state = 810 + self.state = 941 self.match(SolidityParser.BreakKeyword) pass elif la_ == 13: self.enterOuterAlt(localctx, 13) - self.state = 811 + self.state = 942 self.match(SolidityParser.ContinueKeyword) pass elif la_ == 14: self.enterOuterAlt(localctx, 14) - self.state = 812 - self.subAssembly() + self.state = 943 + self.match(SolidityParser.LeaveKeyword) pass elif la_ == 15: self.enterOuterAlt(localctx, 15) - self.state = 813 - self.numberLiteral() + self.state = 944 + self.subAssembly() pass elif la_ == 16: self.enterOuterAlt(localctx, 16) - self.state = 814 - self.match(SolidityParser.StringLiteral) + self.state = 945 + self.numberLiteral() pass elif la_ == 17: self.enterOuterAlt(localctx, 17) - self.state = 815 - self.match(SolidityParser.HexLiteral) + self.state = 946 + self.stringLiteral() + pass + + elif la_ == 18: + self.enterOuterAlt(localctx, 18) + self.state = 947 + self.hexLiteral() pass @@ -6030,6 +7171,7 @@ def assemblyItem(self): class AssemblyExpressionContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -6043,47 +7185,112 @@ def assemblyLiteral(self): return self.getTypedRuleContext(SolidityParser.AssemblyLiteralContext,0) + def assemblyMember(self): + return self.getTypedRuleContext(SolidityParser.AssemblyMemberContext,0) + + def getRuleIndex(self): return SolidityParser.RULE_assemblyExpression def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAssemblyExpression" ): - listener.enterAssemblyExpression(self) + if hasattr( listener, "enterAssemblyExpression" ): + listener.enterAssemblyExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitAssemblyExpression" ): + listener.exitAssemblyExpression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAssemblyExpression" ): + return visitor.visitAssemblyExpression(self) + else: + return visitor.visitChildren(self) + + + + + def assemblyExpression(self): + + localctx = SolidityParser.AssemblyExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 146, self.RULE_assemblyExpression) + try: + self.state = 953 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,99,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 950 + self.assemblyCall() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 951 + self.assemblyLiteral() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 952 + self.assemblyMember() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AssemblyMemberContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def identifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(SolidityParser.IdentifierContext) + else: + return self.getTypedRuleContext(SolidityParser.IdentifierContext,i) + + + def getRuleIndex(self): + return SolidityParser.RULE_assemblyMember + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterAssemblyMember" ): + listener.enterAssemblyMember(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAssemblyExpression" ): - listener.exitAssemblyExpression(self) + if hasattr( listener, "exitAssemblyMember" ): + listener.exitAssemblyMember(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAssemblyExpression" ): - return visitor.visitAssemblyExpression(self) + if hasattr( visitor, "visitAssemblyMember" ): + return visitor.visitAssemblyMember(self) else: return visitor.visitChildren(self) - def assemblyExpression(self): + def assemblyMember(self): - localctx = SolidityParser.AssemblyExpressionContext(self, self._ctx, self.state) - self.enterRule(localctx, 128, self.RULE_assemblyExpression) + localctx = SolidityParser.AssemblyMemberContext(self, self._ctx, self.state) + self.enterRule(localctx, 148, self.RULE_assemblyMember) try: - self.state = 820 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [SolidityParser.T__12, SolidityParser.T__33, SolidityParser.T__39, SolidityParser.T__45, SolidityParser.T__51, SolidityParser.Identifier]: - self.enterOuterAlt(localctx, 1) - self.state = 818 - self.assemblyCall() - pass - elif token in [SolidityParser.DecimalNumber, SolidityParser.HexNumber, SolidityParser.HexLiteral, SolidityParser.StringLiteral]: - self.enterOuterAlt(localctx, 2) - self.state = 819 - self.assemblyLiteral() - pass - else: - raise NoViableAltException(self) - + self.enterOuterAlt(localctx, 1) + self.state = 955 + self.identifier() + self.state = 956 + self.match(SolidityParser.T__36) + self.state = 957 + self.identifier() except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -6094,6 +7301,7 @@ def assemblyExpression(self): class AssemblyCallContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -6133,60 +7341,60 @@ def accept(self, visitor:ParseTreeVisitor): def assemblyCall(self): localctx = SolidityParser.AssemblyCallContext(self, self._ctx, self.state) - self.enterRule(localctx, 130, self.RULE_assemblyCall) + self.enterRule(localctx, 150, self.RULE_assemblyCall) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 826 + self.state = 963 self._errHandler.sync(self) token = self._input.LA(1) - if token in [SolidityParser.T__45]: - self.state = 822 - self.match(SolidityParser.T__45) + if token in [SolidityParser.T__50]: + self.state = 959 + self.match(SolidityParser.T__50) pass - elif token in [SolidityParser.T__33]: - self.state = 823 - self.match(SolidityParser.T__33) + elif token in [SolidityParser.T__35]: + self.state = 960 + self.match(SolidityParser.T__35) pass - elif token in [SolidityParser.T__51]: - self.state = 824 - self.match(SolidityParser.T__51) + elif token in [SolidityParser.T__57]: + self.state = 961 + self.match(SolidityParser.T__57) pass - elif token in [SolidityParser.T__12, SolidityParser.T__39, SolidityParser.Identifier]: - self.state = 825 + elif token in [SolidityParser.T__13, SolidityParser.T__24, SolidityParser.T__41, SolidityParser.T__53, SolidityParser.T__95, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier]: + self.state = 962 self.identifier() pass else: raise NoViableAltException(self) - self.state = 840 + self.state = 977 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,87,self._ctx) + la_ = self._interp.adaptivePredict(self._input,103,self._ctx) if la_ == 1: - self.state = 828 - self.match(SolidityParser.T__20) - self.state = 830 + self.state = 965 + self.match(SolidityParser.T__22) + self.state = 967 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__12) | (1 << SolidityParser.T__33) | (1 << SolidityParser.T__39) | (1 << SolidityParser.T__45) | (1 << SolidityParser.T__51))) != 0) or ((((_la - 98)) & ~0x3f) == 0 and ((1 << (_la - 98)) & ((1 << (SolidityParser.DecimalNumber - 98)) | (1 << (SolidityParser.HexNumber - 98)) | (1 << (SolidityParser.HexLiteral - 98)) | (1 << (SolidityParser.Identifier - 98)) | (1 << (SolidityParser.StringLiteral - 98)))) != 0): - self.state = 829 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__35) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__50) | (1 << SolidityParser.T__53) | (1 << SolidityParser.T__57))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.DecimalNumber - 96)) | (1 << (SolidityParser.HexNumber - 96)) | (1 << (SolidityParser.HexLiteralFragment - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)) | (1 << (SolidityParser.StringLiteralFragment - 96)))) != 0): + self.state = 966 self.assemblyExpression() - self.state = 836 + self.state = 973 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__14: - self.state = 832 - self.match(SolidityParser.T__14) - self.state = 833 + while _la==SolidityParser.T__15: + self.state = 969 + self.match(SolidityParser.T__15) + self.state = 970 self.assemblyExpression() - self.state = 838 + self.state = 975 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 839 - self.match(SolidityParser.T__21) + self.state = 976 + self.match(SolidityParser.T__23) except RecognitionException as re: @@ -6199,6 +7407,7 @@ def assemblyCall(self): class AssemblyLocalDefinitionContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -6235,21 +7444,21 @@ def accept(self, visitor:ParseTreeVisitor): def assemblyLocalDefinition(self): localctx = SolidityParser.AssemblyLocalDefinitionContext(self, self._ctx, self.state) - self.enterRule(localctx, 132, self.RULE_assemblyLocalDefinition) + self.enterRule(localctx, 152, self.RULE_assemblyLocalDefinition) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 842 - self.match(SolidityParser.T__83) - self.state = 843 + self.state = 979 + self.match(SolidityParser.T__88) + self.state = 980 self.assemblyIdentifierOrList() - self.state = 846 + self.state = 983 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__84: - self.state = 844 - self.match(SolidityParser.T__84) - self.state = 845 + if _la==SolidityParser.T__89: + self.state = 981 + self.match(SolidityParser.T__89) + self.state = 982 self.assemblyExpression() @@ -6263,6 +7472,7 @@ def assemblyLocalDefinition(self): class AssemblyAssignmentContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -6299,14 +7509,14 @@ def accept(self, visitor:ParseTreeVisitor): def assemblyAssignment(self): localctx = SolidityParser.AssemblyAssignmentContext(self, self._ctx, self.state) - self.enterRule(localctx, 134, self.RULE_assemblyAssignment) + self.enterRule(localctx, 154, self.RULE_assemblyAssignment) try: self.enterOuterAlt(localctx, 1) - self.state = 848 + self.state = 985 self.assemblyIdentifierOrList() - self.state = 849 - self.match(SolidityParser.T__84) - self.state = 850 + self.state = 986 + self.match(SolidityParser.T__89) + self.state = 987 self.assemblyExpression() except RecognitionException as re: localctx.exception = re @@ -6318,6 +7528,7 @@ def assemblyAssignment(self): class AssemblyIdentifierOrListContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -6327,6 +7538,10 @@ def identifier(self): return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) + def assemblyMember(self): + return self.getTypedRuleContext(SolidityParser.AssemblyMemberContext,0) + + def assemblyIdentifierList(self): return self.getTypedRuleContext(SolidityParser.AssemblyIdentifierListContext,0) @@ -6354,27 +7569,33 @@ def accept(self, visitor:ParseTreeVisitor): def assemblyIdentifierOrList(self): localctx = SolidityParser.AssemblyIdentifierOrListContext(self, self._ctx, self.state) - self.enterRule(localctx, 136, self.RULE_assemblyIdentifierOrList) + self.enterRule(localctx, 156, self.RULE_assemblyIdentifierOrList) try: - self.state = 857 + self.state = 995 self._errHandler.sync(self) - token = self._input.LA(1) - if token in [SolidityParser.T__12, SolidityParser.T__39, SolidityParser.Identifier]: + la_ = self._interp.adaptivePredict(self._input,105,self._ctx) + if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 852 + self.state = 989 self.identifier() pass - elif token in [SolidityParser.T__20]: + + elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 853 - self.match(SolidityParser.T__20) - self.state = 854 + self.state = 990 + self.assemblyMember() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 991 + self.match(SolidityParser.T__22) + self.state = 992 self.assemblyIdentifierList() - self.state = 855 - self.match(SolidityParser.T__21) + self.state = 993 + self.match(SolidityParser.T__23) pass - else: - raise NoViableAltException(self) + except RecognitionException as re: localctx.exception = re @@ -6386,6 +7607,7 @@ def assemblyIdentifierOrList(self): class AssemblyIdentifierListContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -6421,21 +7643,21 @@ def accept(self, visitor:ParseTreeVisitor): def assemblyIdentifierList(self): localctx = SolidityParser.AssemblyIdentifierListContext(self, self._ctx, self.state) - self.enterRule(localctx, 138, self.RULE_assemblyIdentifierList) + self.enterRule(localctx, 158, self.RULE_assemblyIdentifierList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 859 + self.state = 997 self.identifier() - self.state = 864 + self.state = 1002 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__14: - self.state = 860 - self.match(SolidityParser.T__14) - self.state = 861 + while _la==SolidityParser.T__15: + self.state = 998 + self.match(SolidityParser.T__15) + self.state = 999 self.identifier() - self.state = 866 + self.state = 1004 self._errHandler.sync(self) _la = self._input.LA(1) @@ -6449,6 +7671,7 @@ def assemblyIdentifierList(self): class AssemblyStackAssignmentContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -6481,12 +7704,12 @@ def accept(self, visitor:ParseTreeVisitor): def assemblyStackAssignment(self): localctx = SolidityParser.AssemblyStackAssignmentContext(self, self._ctx, self.state) - self.enterRule(localctx, 140, self.RULE_assemblyStackAssignment) + self.enterRule(localctx, 160, self.RULE_assemblyStackAssignment) try: self.enterOuterAlt(localctx, 1) - self.state = 867 - self.match(SolidityParser.T__85) - self.state = 868 + self.state = 1005 + self.match(SolidityParser.T__90) + self.state = 1006 self.identifier() except RecognitionException as re: localctx.exception = re @@ -6498,6 +7721,7 @@ def assemblyStackAssignment(self): class LabelDefinitionContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -6530,13 +7754,13 @@ def accept(self, visitor:ParseTreeVisitor): def labelDefinition(self): localctx = SolidityParser.LabelDefinitionContext(self, self._ctx, self.state) - self.enterRule(localctx, 142, self.RULE_labelDefinition) + self.enterRule(localctx, 162, self.RULE_labelDefinition) try: self.enterOuterAlt(localctx, 1) - self.state = 870 + self.state = 1008 self.identifier() - self.state = 871 - self.match(SolidityParser.T__72) + self.state = 1009 + self.match(SolidityParser.T__61) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -6547,6 +7771,7 @@ def labelDefinition(self): class AssemblySwitchContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -6586,21 +7811,21 @@ def accept(self, visitor:ParseTreeVisitor): def assemblySwitch(self): localctx = SolidityParser.AssemblySwitchContext(self, self._ctx, self.state) - self.enterRule(localctx, 144, self.RULE_assemblySwitch) + self.enterRule(localctx, 164, self.RULE_assemblySwitch) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 873 - self.match(SolidityParser.T__86) - self.state = 874 + self.state = 1011 + self.match(SolidityParser.T__91) + self.state = 1012 self.assemblyExpression() - self.state = 878 + self.state = 1016 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__87 or _la==SolidityParser.T__88: - self.state = 875 + while _la==SolidityParser.T__92 or _la==SolidityParser.T__93: + self.state = 1013 self.assemblyCase() - self.state = 880 + self.state = 1018 self._errHandler.sync(self) _la = self._input.LA(1) @@ -6614,6 +7839,7 @@ def assemblySwitch(self): class AssemblyCaseContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -6650,25 +7876,25 @@ def accept(self, visitor:ParseTreeVisitor): def assemblyCase(self): localctx = SolidityParser.AssemblyCaseContext(self, self._ctx, self.state) - self.enterRule(localctx, 146, self.RULE_assemblyCase) + self.enterRule(localctx, 166, self.RULE_assemblyCase) try: - self.state = 887 + self.state = 1025 self._errHandler.sync(self) token = self._input.LA(1) - if token in [SolidityParser.T__87]: + if token in [SolidityParser.T__92]: self.enterOuterAlt(localctx, 1) - self.state = 881 - self.match(SolidityParser.T__87) - self.state = 882 + self.state = 1019 + self.match(SolidityParser.T__92) + self.state = 1020 self.assemblyLiteral() - self.state = 883 + self.state = 1021 self.assemblyBlock() pass - elif token in [SolidityParser.T__88]: + elif token in [SolidityParser.T__93]: self.enterOuterAlt(localctx, 2) - self.state = 885 - self.match(SolidityParser.T__88) - self.state = 886 + self.state = 1023 + self.match(SolidityParser.T__93) + self.state = 1024 self.assemblyBlock() pass else: @@ -6684,6 +7910,7 @@ def assemblyCase(self): class AssemblyFunctionDefinitionContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -6728,35 +7955,35 @@ def accept(self, visitor:ParseTreeVisitor): def assemblyFunctionDefinition(self): localctx = SolidityParser.AssemblyFunctionDefinitionContext(self, self._ctx, self.state) - self.enterRule(localctx, 148, self.RULE_assemblyFunctionDefinition) + self.enterRule(localctx, 168, self.RULE_assemblyFunctionDefinition) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 889 - self.match(SolidityParser.T__27) - self.state = 890 + self.state = 1027 + self.match(SolidityParser.T__29) + self.state = 1028 self.identifier() - self.state = 891 - self.match(SolidityParser.T__20) - self.state = 893 + self.state = 1029 + self.match(SolidityParser.T__22) + self.state = 1031 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__12 or _la==SolidityParser.T__39 or _la==SolidityParser.Identifier: - self.state = 892 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): + self.state = 1030 self.assemblyIdentifierList() - self.state = 895 - self.match(SolidityParser.T__21) - self.state = 897 + self.state = 1033 + self.match(SolidityParser.T__23) + self.state = 1035 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__89: - self.state = 896 + if _la==SolidityParser.T__94: + self.state = 1034 self.assemblyFunctionReturns() - self.state = 899 + self.state = 1037 self.assemblyBlock() except RecognitionException as re: localctx.exception = re @@ -6768,6 +7995,7 @@ def assemblyFunctionDefinition(self): class AssemblyFunctionReturnsContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -6800,12 +8028,12 @@ def accept(self, visitor:ParseTreeVisitor): def assemblyFunctionReturns(self): localctx = SolidityParser.AssemblyFunctionReturnsContext(self, self._ctx, self.state) - self.enterRule(localctx, 150, self.RULE_assemblyFunctionReturns) + self.enterRule(localctx, 170, self.RULE_assemblyFunctionReturns) try: self.enterOuterAlt(localctx, 1) - self.state = 901 - self.match(SolidityParser.T__89) - self.state = 902 + self.state = 1039 + self.match(SolidityParser.T__94) + self.state = 1040 self.assemblyIdentifierList() except RecognitionException as re: localctx.exception = re @@ -6817,6 +8045,7 @@ def assemblyFunctionReturns(self): class AssemblyForContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -6859,42 +8088,42 @@ def accept(self, visitor:ParseTreeVisitor): def assemblyFor(self): localctx = SolidityParser.AssemblyForContext(self, self._ctx, self.state) - self.enterRule(localctx, 152, self.RULE_assemblyFor) + self.enterRule(localctx, 172, self.RULE_assemblyFor) try: self.enterOuterAlt(localctx, 1) - self.state = 904 - self.match(SolidityParser.T__23) - self.state = 907 + self.state = 1042 + self.match(SolidityParser.T__26) + self.state = 1045 self._errHandler.sync(self) token = self._input.LA(1) - if token in [SolidityParser.T__13]: - self.state = 905 + if token in [SolidityParser.T__14]: + self.state = 1043 self.assemblyBlock() pass - elif token in [SolidityParser.T__12, SolidityParser.T__33, SolidityParser.T__39, SolidityParser.T__45, SolidityParser.T__51, SolidityParser.DecimalNumber, SolidityParser.HexNumber, SolidityParser.HexLiteral, SolidityParser.Identifier, SolidityParser.StringLiteral]: - self.state = 906 + elif token in [SolidityParser.T__13, SolidityParser.T__24, SolidityParser.T__35, SolidityParser.T__41, SolidityParser.T__50, SolidityParser.T__53, SolidityParser.T__57, SolidityParser.T__95, SolidityParser.DecimalNumber, SolidityParser.HexNumber, SolidityParser.HexLiteralFragment, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier, SolidityParser.StringLiteralFragment]: + self.state = 1044 self.assemblyExpression() pass else: raise NoViableAltException(self) - self.state = 909 + self.state = 1047 self.assemblyExpression() - self.state = 912 + self.state = 1050 self._errHandler.sync(self) token = self._input.LA(1) - if token in [SolidityParser.T__13]: - self.state = 910 + if token in [SolidityParser.T__14]: + self.state = 1048 self.assemblyBlock() pass - elif token in [SolidityParser.T__12, SolidityParser.T__33, SolidityParser.T__39, SolidityParser.T__45, SolidityParser.T__51, SolidityParser.DecimalNumber, SolidityParser.HexNumber, SolidityParser.HexLiteral, SolidityParser.Identifier, SolidityParser.StringLiteral]: - self.state = 911 + elif token in [SolidityParser.T__13, SolidityParser.T__24, SolidityParser.T__35, SolidityParser.T__41, SolidityParser.T__50, SolidityParser.T__53, SolidityParser.T__57, SolidityParser.T__95, SolidityParser.DecimalNumber, SolidityParser.HexNumber, SolidityParser.HexLiteralFragment, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier, SolidityParser.StringLiteralFragment]: + self.state = 1049 self.assemblyExpression() pass else: raise NoViableAltException(self) - self.state = 914 + self.state = 1052 self.assemblyBlock() except RecognitionException as re: localctx.exception = re @@ -6906,6 +8135,7 @@ def assemblyFor(self): class AssemblyIfContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -6942,14 +8172,14 @@ def accept(self, visitor:ParseTreeVisitor): def assemblyIf(self): localctx = SolidityParser.AssemblyIfContext(self, self._ctx, self.state) - self.enterRule(localctx, 154, self.RULE_assemblyIf) + self.enterRule(localctx, 174, self.RULE_assemblyIf) try: self.enterOuterAlt(localctx, 1) - self.state = 916 - self.match(SolidityParser.T__40) - self.state = 917 + self.state = 1054 + self.match(SolidityParser.T__42) + self.state = 1055 self.assemblyExpression() - self.state = 918 + self.state = 1056 self.assemblyBlock() except RecognitionException as re: localctx.exception = re @@ -6961,13 +8191,15 @@ def assemblyIf(self): class AssemblyLiteralContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser - def StringLiteral(self): - return self.getToken(SolidityParser.StringLiteral, 0) + def stringLiteral(self): + return self.getTypedRuleContext(SolidityParser.StringLiteralContext,0) + def DecimalNumber(self): return self.getToken(SolidityParser.DecimalNumber, 0) @@ -6975,8 +8207,9 @@ def DecimalNumber(self): def HexNumber(self): return self.getToken(SolidityParser.HexNumber, 0) - def HexLiteral(self): - return self.getToken(SolidityParser.HexLiteral, 0) + def hexLiteral(self): + return self.getTypedRuleContext(SolidityParser.HexLiteralContext,0) + def getRuleIndex(self): return SolidityParser.RULE_assemblyLiteral @@ -7001,17 +8234,34 @@ def accept(self, visitor:ParseTreeVisitor): def assemblyLiteral(self): localctx = SolidityParser.AssemblyLiteralContext(self, self._ctx, self.state) - self.enterRule(localctx, 156, self.RULE_assemblyLiteral) - self._la = 0 # Token type + self.enterRule(localctx, 176, self.RULE_assemblyLiteral) try: - self.enterOuterAlt(localctx, 1) - self.state = 920 - _la = self._input.LA(1) - if not(((((_la - 98)) & ~0x3f) == 0 and ((1 << (_la - 98)) & ((1 << (SolidityParser.DecimalNumber - 98)) | (1 << (SolidityParser.HexNumber - 98)) | (1 << (SolidityParser.HexLiteral - 98)) | (1 << (SolidityParser.StringLiteral - 98)))) != 0)): - self._errHandler.recoverInline(self) + self.state = 1062 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [SolidityParser.StringLiteralFragment]: + self.enterOuterAlt(localctx, 1) + self.state = 1058 + self.stringLiteral() + pass + elif token in [SolidityParser.DecimalNumber]: + self.enterOuterAlt(localctx, 2) + self.state = 1059 + self.match(SolidityParser.DecimalNumber) + pass + elif token in [SolidityParser.HexNumber]: + self.enterOuterAlt(localctx, 3) + self.state = 1060 + self.match(SolidityParser.HexNumber) + pass + elif token in [SolidityParser.HexLiteralFragment]: + self.enterOuterAlt(localctx, 4) + self.state = 1061 + self.hexLiteral() + pass else: - self._errHandler.reportMatch(self) - self.consume() + raise NoViableAltException(self) + except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -7022,6 +8272,7 @@ def assemblyLiteral(self): class SubAssemblyContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -7058,14 +8309,14 @@ def accept(self, visitor:ParseTreeVisitor): def subAssembly(self): localctx = SolidityParser.SubAssemblyContext(self, self._ctx, self.state) - self.enterRule(localctx, 158, self.RULE_subAssembly) + self.enterRule(localctx, 178, self.RULE_subAssembly) try: self.enterOuterAlt(localctx, 1) - self.state = 922 - self.match(SolidityParser.T__43) - self.state = 923 + self.state = 1064 + self.match(SolidityParser.T__48) + self.state = 1065 self.identifier() - self.state = 924 + self.state = 1066 self.assemblyBlock() except RecognitionException as re: localctx.exception = re @@ -7077,6 +8328,7 @@ def subAssembly(self): class TupleExpressionContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -7112,72 +8364,72 @@ def accept(self, visitor:ParseTreeVisitor): def tupleExpression(self): localctx = SolidityParser.TupleExpressionContext(self, self._ctx, self.state) - self.enterRule(localctx, 160, self.RULE_tupleExpression) + self.enterRule(localctx, 180, self.RULE_tupleExpression) self._la = 0 # Token type try: - self.state = 952 + self.state = 1094 self._errHandler.sync(self) token = self._input.LA(1) - if token in [SolidityParser.T__20]: + if token in [SolidityParser.T__22]: self.enterOuterAlt(localctx, 1) - self.state = 926 - self.match(SolidityParser.T__20) + self.state = 1068 + self.match(SolidityParser.T__22) - self.state = 928 + self.state = 1070 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20) | (1 << SolidityParser.T__31) | (1 << SolidityParser.T__33) | (1 << SolidityParser.T__39) | (1 << SolidityParser.T__48) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__50) | (1 << SolidityParser.T__51) | (1 << SolidityParser.T__52) | (1 << SolidityParser.T__53) | (1 << SolidityParser.T__54) | (1 << SolidityParser.T__55) | (1 << SolidityParser.T__56) | (1 << SolidityParser.T__57) | (1 << SolidityParser.T__58) | (1 << SolidityParser.T__59))) != 0) or ((((_la - 91)) & ~0x3f) == 0 and ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) != 0): - self.state = 927 + if ((((_la - 5)) & ~0x3f) == 0 and ((1 << (_la - 5)) & ((1 << (SolidityParser.T__4 - 5)) | (1 << (SolidityParser.T__13 - 5)) | (1 << (SolidityParser.T__22 - 5)) | (1 << (SolidityParser.T__24 - 5)) | (1 << (SolidityParser.T__33 - 5)) | (1 << (SolidityParser.T__35 - 5)) | (1 << (SolidityParser.T__41 - 5)) | (1 << (SolidityParser.T__53 - 5)) | (1 << (SolidityParser.T__54 - 5)) | (1 << (SolidityParser.T__55 - 5)) | (1 << (SolidityParser.T__56 - 5)) | (1 << (SolidityParser.T__57 - 5)) | (1 << (SolidityParser.T__58 - 5)) | (1 << (SolidityParser.T__59 - 5)) | (1 << (SolidityParser.T__60 - 5)) | (1 << (SolidityParser.T__62 - 5)) | (1 << (SolidityParser.T__63 - 5)) | (1 << (SolidityParser.T__64 - 5)) | (1 << (SolidityParser.T__65 - 5)) | (1 << (SolidityParser.T__66 - 5)))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.BooleanLiteral - 96)) | (1 << (SolidityParser.DecimalNumber - 96)) | (1 << (SolidityParser.HexNumber - 96)) | (1 << (SolidityParser.HexLiteralFragment - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.TypeKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)) | (1 << (SolidityParser.StringLiteralFragment - 96)))) != 0): + self.state = 1069 self.expression(0) - self.state = 936 + self.state = 1078 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__14: - self.state = 930 - self.match(SolidityParser.T__14) - self.state = 932 + while _la==SolidityParser.T__15: + self.state = 1072 + self.match(SolidityParser.T__15) + self.state = 1074 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20) | (1 << SolidityParser.T__31) | (1 << SolidityParser.T__33) | (1 << SolidityParser.T__39) | (1 << SolidityParser.T__48) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__50) | (1 << SolidityParser.T__51) | (1 << SolidityParser.T__52) | (1 << SolidityParser.T__53) | (1 << SolidityParser.T__54) | (1 << SolidityParser.T__55) | (1 << SolidityParser.T__56) | (1 << SolidityParser.T__57) | (1 << SolidityParser.T__58) | (1 << SolidityParser.T__59))) != 0) or ((((_la - 91)) & ~0x3f) == 0 and ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) != 0): - self.state = 931 + if ((((_la - 5)) & ~0x3f) == 0 and ((1 << (_la - 5)) & ((1 << (SolidityParser.T__4 - 5)) | (1 << (SolidityParser.T__13 - 5)) | (1 << (SolidityParser.T__22 - 5)) | (1 << (SolidityParser.T__24 - 5)) | (1 << (SolidityParser.T__33 - 5)) | (1 << (SolidityParser.T__35 - 5)) | (1 << (SolidityParser.T__41 - 5)) | (1 << (SolidityParser.T__53 - 5)) | (1 << (SolidityParser.T__54 - 5)) | (1 << (SolidityParser.T__55 - 5)) | (1 << (SolidityParser.T__56 - 5)) | (1 << (SolidityParser.T__57 - 5)) | (1 << (SolidityParser.T__58 - 5)) | (1 << (SolidityParser.T__59 - 5)) | (1 << (SolidityParser.T__60 - 5)) | (1 << (SolidityParser.T__62 - 5)) | (1 << (SolidityParser.T__63 - 5)) | (1 << (SolidityParser.T__64 - 5)) | (1 << (SolidityParser.T__65 - 5)) | (1 << (SolidityParser.T__66 - 5)))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.BooleanLiteral - 96)) | (1 << (SolidityParser.DecimalNumber - 96)) | (1 << (SolidityParser.HexNumber - 96)) | (1 << (SolidityParser.HexLiteralFragment - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.TypeKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)) | (1 << (SolidityParser.StringLiteralFragment - 96)))) != 0): + self.state = 1073 self.expression(0) - self.state = 938 + self.state = 1080 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 939 - self.match(SolidityParser.T__21) + self.state = 1081 + self.match(SolidityParser.T__23) pass - elif token in [SolidityParser.T__31]: + elif token in [SolidityParser.T__33]: self.enterOuterAlt(localctx, 2) - self.state = 940 - self.match(SolidityParser.T__31) - self.state = 949 + self.state = 1082 + self.match(SolidityParser.T__33) + self.state = 1091 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20) | (1 << SolidityParser.T__31) | (1 << SolidityParser.T__33) | (1 << SolidityParser.T__39) | (1 << SolidityParser.T__48) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__50) | (1 << SolidityParser.T__51) | (1 << SolidityParser.T__52) | (1 << SolidityParser.T__53) | (1 << SolidityParser.T__54) | (1 << SolidityParser.T__55) | (1 << SolidityParser.T__56) | (1 << SolidityParser.T__57) | (1 << SolidityParser.T__58) | (1 << SolidityParser.T__59))) != 0) or ((((_la - 91)) & ~0x3f) == 0 and ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) != 0): - self.state = 941 + if ((((_la - 5)) & ~0x3f) == 0 and ((1 << (_la - 5)) & ((1 << (SolidityParser.T__4 - 5)) | (1 << (SolidityParser.T__13 - 5)) | (1 << (SolidityParser.T__22 - 5)) | (1 << (SolidityParser.T__24 - 5)) | (1 << (SolidityParser.T__33 - 5)) | (1 << (SolidityParser.T__35 - 5)) | (1 << (SolidityParser.T__41 - 5)) | (1 << (SolidityParser.T__53 - 5)) | (1 << (SolidityParser.T__54 - 5)) | (1 << (SolidityParser.T__55 - 5)) | (1 << (SolidityParser.T__56 - 5)) | (1 << (SolidityParser.T__57 - 5)) | (1 << (SolidityParser.T__58 - 5)) | (1 << (SolidityParser.T__59 - 5)) | (1 << (SolidityParser.T__60 - 5)) | (1 << (SolidityParser.T__62 - 5)) | (1 << (SolidityParser.T__63 - 5)) | (1 << (SolidityParser.T__64 - 5)) | (1 << (SolidityParser.T__65 - 5)) | (1 << (SolidityParser.T__66 - 5)))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.BooleanLiteral - 96)) | (1 << (SolidityParser.DecimalNumber - 96)) | (1 << (SolidityParser.HexNumber - 96)) | (1 << (SolidityParser.HexLiteralFragment - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.TypeKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)) | (1 << (SolidityParser.StringLiteralFragment - 96)))) != 0): + self.state = 1083 self.expression(0) - self.state = 946 + self.state = 1088 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__14: - self.state = 942 - self.match(SolidityParser.T__14) - self.state = 943 + while _la==SolidityParser.T__15: + self.state = 1084 + self.match(SolidityParser.T__15) + self.state = 1085 self.expression(0) - self.state = 948 + self.state = 1090 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 951 - self.match(SolidityParser.T__32) + self.state = 1093 + self.match(SolidityParser.T__34) pass else: raise NoViableAltException(self) @@ -7191,7 +8443,8 @@ def tupleExpression(self): return localctx - class ElementaryTypeNameExpressionContext(ParserRuleContext): + class TypeNameExpressionContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -7201,34 +8454,51 @@ def elementaryTypeName(self): return self.getTypedRuleContext(SolidityParser.ElementaryTypeNameContext,0) + def userDefinedTypeName(self): + return self.getTypedRuleContext(SolidityParser.UserDefinedTypeNameContext,0) + + def getRuleIndex(self): - return SolidityParser.RULE_elementaryTypeNameExpression + return SolidityParser.RULE_typeNameExpression def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterElementaryTypeNameExpression" ): - listener.enterElementaryTypeNameExpression(self) + if hasattr( listener, "enterTypeNameExpression" ): + listener.enterTypeNameExpression(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitElementaryTypeNameExpression" ): - listener.exitElementaryTypeNameExpression(self) + if hasattr( listener, "exitTypeNameExpression" ): + listener.exitTypeNameExpression(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitElementaryTypeNameExpression" ): - return visitor.visitElementaryTypeNameExpression(self) + if hasattr( visitor, "visitTypeNameExpression" ): + return visitor.visitTypeNameExpression(self) else: return visitor.visitChildren(self) - def elementaryTypeNameExpression(self): + def typeNameExpression(self): - localctx = SolidityParser.ElementaryTypeNameExpressionContext(self, self._ctx, self.state) - self.enterRule(localctx, 162, self.RULE_elementaryTypeNameExpression) + localctx = SolidityParser.TypeNameExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 182, self.RULE_typeNameExpression) try: - self.enterOuterAlt(localctx, 1) - self.state = 954 - self.elementaryTypeName() + self.state = 1098 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [SolidityParser.T__35, SolidityParser.T__54, SolidityParser.T__55, SolidityParser.T__56, SolidityParser.T__57, SolidityParser.Int, SolidityParser.Uint, SolidityParser.Byte, SolidityParser.Fixed, SolidityParser.Ufixed]: + self.enterOuterAlt(localctx, 1) + self.state = 1096 + self.elementaryTypeName() + pass + elif token in [SolidityParser.T__13, SolidityParser.T__24, SolidityParser.T__41, SolidityParser.T__53, SolidityParser.T__95, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier]: + self.enterOuterAlt(localctx, 2) + self.state = 1097 + self.userDefinedTypeName() + pass + else: + raise NoViableAltException(self) + except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -7239,6 +8509,7 @@ def elementaryTypeNameExpression(self): class NumberLiteralContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -7276,22 +8547,22 @@ def accept(self, visitor:ParseTreeVisitor): def numberLiteral(self): localctx = SolidityParser.NumberLiteralContext(self, self._ctx, self.state) - self.enterRule(localctx, 164, self.RULE_numberLiteral) + self.enterRule(localctx, 184, self.RULE_numberLiteral) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 956 + self.state = 1100 _la = self._input.LA(1) if not(_la==SolidityParser.DecimalNumber or _la==SolidityParser.HexNumber): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 958 + self.state = 1102 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,103,self._ctx) + la_ = self._interp.adaptivePredict(self._input,121,self._ctx) if la_ == 1: - self.state = 957 + self.state = 1101 self.match(SolidityParser.NumberUnit) @@ -7305,11 +8576,24 @@ def numberLiteral(self): class IdentifierContext(ParserRuleContext): + __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser + def ReceiveKeyword(self): + return self.getToken(SolidityParser.ReceiveKeyword, 0) + + def ConstructorKeyword(self): + return self.getToken(SolidityParser.ConstructorKeyword, 0) + + def PayableKeyword(self): + return self.getToken(SolidityParser.PayableKeyword, 0) + + def LeaveKeyword(self): + return self.getToken(SolidityParser.LeaveKeyword, 0) + def Identifier(self): return self.getToken(SolidityParser.Identifier, 0) @@ -7336,13 +8620,13 @@ def accept(self, visitor:ParseTreeVisitor): def identifier(self): localctx = SolidityParser.IdentifierContext(self, self._ctx, self.state) - self.enterRule(localctx, 166, self.RULE_identifier) + self.enterRule(localctx, 186, self.RULE_identifier) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 960 + self.state = 1104 _la = self._input.LA(1) - if not(_la==SolidityParser.T__12 or _la==SolidityParser.T__39 or _la==SolidityParser.Identifier): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -7356,12 +8640,212 @@ def identifier(self): return localctx + class HexLiteralContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def HexLiteralFragment(self, i:int=None): + if i is None: + return self.getTokens(SolidityParser.HexLiteralFragment) + else: + return self.getToken(SolidityParser.HexLiteralFragment, i) + + def getRuleIndex(self): + return SolidityParser.RULE_hexLiteral + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterHexLiteral" ): + listener.enterHexLiteral(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitHexLiteral" ): + listener.exitHexLiteral(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitHexLiteral" ): + return visitor.visitHexLiteral(self) + else: + return visitor.visitChildren(self) + + + + + def hexLiteral(self): + + localctx = SolidityParser.HexLiteralContext(self, self._ctx, self.state) + self.enterRule(localctx, 188, self.RULE_hexLiteral) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1107 + self._errHandler.sync(self) + _alt = 1 + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1106 + self.match(SolidityParser.HexLiteralFragment) + + else: + raise NoViableAltException(self) + self.state = 1109 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,122,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OverrideSpecifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def userDefinedTypeName(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(SolidityParser.UserDefinedTypeNameContext) + else: + return self.getTypedRuleContext(SolidityParser.UserDefinedTypeNameContext,i) + + + def getRuleIndex(self): + return SolidityParser.RULE_overrideSpecifier + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOverrideSpecifier" ): + listener.enterOverrideSpecifier(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOverrideSpecifier" ): + listener.exitOverrideSpecifier(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitOverrideSpecifier" ): + return visitor.visitOverrideSpecifier(self) + else: + return visitor.visitChildren(self) + + + + + def overrideSpecifier(self): + + localctx = SolidityParser.OverrideSpecifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 190, self.RULE_overrideSpecifier) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1111 + self.match(SolidityParser.T__96) + self.state = 1123 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==SolidityParser.T__22: + self.state = 1112 + self.match(SolidityParser.T__22) + self.state = 1113 + self.userDefinedTypeName() + self.state = 1118 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==SolidityParser.T__15: + self.state = 1114 + self.match(SolidityParser.T__15) + self.state = 1115 + self.userDefinedTypeName() + self.state = 1120 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1121 + self.match(SolidityParser.T__23) + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class StringLiteralContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def StringLiteralFragment(self, i:int=None): + if i is None: + return self.getTokens(SolidityParser.StringLiteralFragment) + else: + return self.getToken(SolidityParser.StringLiteralFragment, i) + + def getRuleIndex(self): + return SolidityParser.RULE_stringLiteral + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterStringLiteral" ): + listener.enterStringLiteral(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitStringLiteral" ): + listener.exitStringLiteral(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStringLiteral" ): + return visitor.visitStringLiteral(self) + else: + return visitor.visitChildren(self) + + + + + def stringLiteral(self): + + localctx = SolidityParser.StringLiteralContext(self, self._ctx, self.state) + self.enterRule(localctx, 192, self.RULE_stringLiteral) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1126 + self._errHandler.sync(self) + _alt = 1 + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1125 + self.match(SolidityParser.StringLiteralFragment) + + else: + raise NoViableAltException(self) + self.state = 1128 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,125,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): if self._predicates == None: self._predicates = dict() - self._predicates[31] = self.typeName_sempred - self._predicates[55] = self.expression_sempred + self._predicates[35] = self.typeName_sempred + self._predicates[64] = self.expression_sempred pred = self._predicates.get(ruleIndex, None) if pred is None: raise Exception("No predicate with index:" + str(ruleIndex)) @@ -7427,18 +8911,26 @@ def expression_sempred(self, localctx:ExpressionContext, predIndex:int): if predIndex == 14: - return self.precpred(self._ctx, 25) + return self.precpred(self._ctx, 27) if predIndex == 15: - return self.precpred(self._ctx, 23) + return self.precpred(self._ctx, 25) if predIndex == 16: - return self.precpred(self._ctx, 22) + return self.precpred(self._ctx, 24) if predIndex == 17: + return self.precpred(self._ctx, 23) + + + if predIndex == 18: + return self.precpred(self._ctx, 22) + + + if predIndex == 19: return self.precpred(self._ctx, 21) diff --git a/solidity_parser/solidity_antlr4/SolidityVisitor.py b/solidity_parser/solidity_antlr4/SolidityVisitor.py index 2811c2c..a2b2b76 100644 --- a/solidity_parser/solidity_antlr4/SolidityVisitor.py +++ b/solidity_parser/solidity_antlr4/SolidityVisitor.py @@ -1,4 +1,4 @@ -# Generated from solidity-antlr4/Solidity.g4 by ANTLR 4.7.2 +# Generated from solidity-antlr4/Solidity.g4 by ANTLR 4.9.3 from antlr4 import * if __name__ is not None and "." in __name__: from .SolidityParser import SolidityParser @@ -54,6 +54,11 @@ def visitImportDirective(self, ctx:SolidityParser.ImportDirectiveContext): return self.visitChildren(ctx) + # Visit a parse tree produced by SolidityParser#importPath. + def visitImportPath(self, ctx:SolidityParser.ImportPathContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by SolidityParser#contractDefinition. def visitContractDefinition(self, ctx:SolidityParser.ContractDefinitionContext): return self.visitChildren(ctx) @@ -74,6 +79,21 @@ def visitStateVariableDeclaration(self, ctx:SolidityParser.StateVariableDeclarat return self.visitChildren(ctx) + # Visit a parse tree produced by SolidityParser#fileLevelConstant. + def visitFileLevelConstant(self, ctx:SolidityParser.FileLevelConstantContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by SolidityParser#customErrorDefinition. + def visitCustomErrorDefinition(self, ctx:SolidityParser.CustomErrorDefinitionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by SolidityParser#typeDefinition. + def visitTypeDefinition(self, ctx:SolidityParser.TypeDefinitionContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by SolidityParser#usingForDeclaration. def visitUsingForDeclaration(self, ctx:SolidityParser.UsingForDeclarationContext): return self.visitChildren(ctx) @@ -84,11 +104,6 @@ def visitStructDefinition(self, ctx:SolidityParser.StructDefinitionContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#constructorDefinition. - def visitConstructorDefinition(self, ctx:SolidityParser.ConstructorDefinitionContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by SolidityParser#modifierDefinition. def visitModifierDefinition(self, ctx:SolidityParser.ModifierDefinitionContext): return self.visitChildren(ctx) @@ -104,6 +119,11 @@ def visitFunctionDefinition(self, ctx:SolidityParser.FunctionDefinitionContext): return self.visitChildren(ctx) + # Visit a parse tree produced by SolidityParser#functionDescriptor. + def visitFunctionDescriptor(self, ctx:SolidityParser.FunctionDescriptorContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by SolidityParser#returnParameters. def visitReturnParameters(self, ctx:SolidityParser.ReturnParametersContext): return self.visitChildren(ctx) @@ -174,6 +194,11 @@ def visitUserDefinedTypeName(self, ctx:SolidityParser.UserDefinedTypeNameContext return self.visitChildren(ctx) + # Visit a parse tree produced by SolidityParser#mappingKey. + def visitMappingKey(self, ctx:SolidityParser.MappingKeyContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by SolidityParser#mapping. def visitMapping(self, ctx:SolidityParser.MappingContext): return self.visitChildren(ctx) @@ -214,6 +239,16 @@ def visitIfStatement(self, ctx:SolidityParser.IfStatementContext): return self.visitChildren(ctx) + # Visit a parse tree produced by SolidityParser#tryStatement. + def visitTryStatement(self, ctx:SolidityParser.TryStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by SolidityParser#catchClause. + def visitCatchClause(self, ctx:SolidityParser.CatchClauseContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by SolidityParser#whileStatement. def visitWhileStatement(self, ctx:SolidityParser.WhileStatementContext): return self.visitChildren(ctx) @@ -224,6 +259,11 @@ def visitSimpleStatement(self, ctx:SolidityParser.SimpleStatementContext): return self.visitChildren(ctx) + # Visit a parse tree produced by SolidityParser#uncheckedStatement. + def visitUncheckedStatement(self, ctx:SolidityParser.UncheckedStatementContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by SolidityParser#forStatement. def visitForStatement(self, ctx:SolidityParser.ForStatementContext): return self.visitChildren(ctx) @@ -264,6 +304,11 @@ def visitEmitStatement(self, ctx:SolidityParser.EmitStatementContext): return self.visitChildren(ctx) + # Visit a parse tree produced by SolidityParser#revertStatement. + def visitRevertStatement(self, ctx:SolidityParser.RevertStatementContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by SolidityParser#variableDeclarationStatement. def visitVariableDeclarationStatement(self, ctx:SolidityParser.VariableDeclarationStatementContext): return self.visitChildren(ctx) @@ -334,6 +379,11 @@ def visitAssemblyExpression(self, ctx:SolidityParser.AssemblyExpressionContext): return self.visitChildren(ctx) + # Visit a parse tree produced by SolidityParser#assemblyMember. + def visitAssemblyMember(self, ctx:SolidityParser.AssemblyMemberContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by SolidityParser#assemblyCall. def visitAssemblyCall(self, ctx:SolidityParser.AssemblyCallContext): return self.visitChildren(ctx) @@ -414,8 +464,8 @@ def visitTupleExpression(self, ctx:SolidityParser.TupleExpressionContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#elementaryTypeNameExpression. - def visitElementaryTypeNameExpression(self, ctx:SolidityParser.ElementaryTypeNameExpressionContext): + # Visit a parse tree produced by SolidityParser#typeNameExpression. + def visitTypeNameExpression(self, ctx:SolidityParser.TypeNameExpressionContext): return self.visitChildren(ctx) @@ -429,5 +479,20 @@ def visitIdentifier(self, ctx:SolidityParser.IdentifierContext): return self.visitChildren(ctx) + # Visit a parse tree produced by SolidityParser#hexLiteral. + def visitHexLiteral(self, ctx:SolidityParser.HexLiteralContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by SolidityParser#overrideSpecifier. + def visitOverrideSpecifier(self, ctx:SolidityParser.OverrideSpecifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by SolidityParser#stringLiteral. + def visitStringLiteral(self, ctx:SolidityParser.StringLiteralContext): + return self.visitChildren(ctx) + + del SolidityParser \ No newline at end of file diff --git a/solidity_parser/solidity_antlr4/__AUTOGENERATED__ b/solidity_parser/solidity_antlr4/__AUTOGENERATED__ new file mode 100644 index 0000000..e69de29