diff --git a/.eslintrc b/.eslintrc index 3d3bbd6..30c9575 100644 --- a/.eslintrc +++ b/.eslintrc @@ -15,6 +15,7 @@ }, "env": { "es6": true, + "mocha": true, "node": true } } diff --git a/CHANGES.md b/CHANGES.md index 6913629..fe04000 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -4,6 +4,10 @@ of type `VariableDeclaration` and lists of parameters are represented as lists of nodes of type `VariableDeclaration`. This is a breaking change. +### 0.4.9 + + * Fix parsing of inheritance specifier with no arguments. + ### 0.4.8 * Fix parsing of string literals with escaped characters. diff --git a/README.md b/README.md index 645d29d..9e95fe0 100644 --- a/README.md +++ b/README.md @@ -29,11 +29,11 @@ try { The `parse` method also accepts a second argument which lets you specify the following options, in a style similar to the _esprima_ API: -| Key | Type | Default | Description | -|----------|---------|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| tolerant | Boolean | false | When set to `true` it will collect syntax errors and place them in a list under the key `errors` inside the root node of the returned AST. Otherwise, it will raise a `parser.ParserError`. | -| loc | Boolean | false | When set to `true`, it will add location information to each node, with start and stop keys that contain the corresponding line and column numbers. | -| range | Boolean | false | When set to `true`, it will add range information to each node, which consists of a two-element array with start and stop character indexes in the input. | +| Key | Type | Default | Description | +|----------|---------|---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| tolerant | Boolean | false | When set to `true` it will collect syntax errors and place them in a list under the key `errors` inside the root node of the returned AST. Otherwise, it will raise a `parser.ParserError`. | +| loc | Boolean | false | When set to `true`, it will add location information to each node, with start and stop keys that contain the corresponding line and column numbers. Column numbers start from 0, lines start from 1. | +| range | Boolean | false | When set to `true`, it will add range information to each node, which consists of a two-element array with start and stop character indexes in the input. | #### Example with location information diff --git a/index.d.ts b/index.d.ts index afb1b18..6e3dfda 100644 --- a/index.d.ts +++ b/index.d.ts @@ -77,6 +77,7 @@ export type ASTNodeTypeString = | 'NumberLiteral' | 'Identifier' | 'BinaryOperation' + | 'UnaryOperation' | 'Conditional' | 'StringLiteral' | 'HexLiteral' @@ -388,16 +389,30 @@ export type BinOp = | '*=' | '/=' | '%='; + +export type UnOp = + | '-' + | '!' + | '--' + | '++'; + export interface BinaryOperation extends BaseASTNode { type: 'BinaryOperation'; left: Expression; right: Expression; operator: BinOp; } +export interface UnaryOperation extends BaseASTNode { + type: 'UnaryOperation'; + subExpression: Expression; + operator: UnOp; + isPrefix: boolean; +} export interface Conditional extends BaseASTNode { type: 'Conditional'; - trueExpression: ASTNode; - falseExpression: ASTNode; + condition: Expression; + trueExpression: Expression; + falseExpression: Expression; } export interface IndexAccess extends BaseASTNode { type: 'IndexAccess'; @@ -499,6 +514,7 @@ export type Expression = | IndexAccess | TupleExpression | BinaryOperation + | UnaryOperation | Conditional | MemberAccess | FunctionCall @@ -586,9 +602,11 @@ export interface Visitor { BooleanLiteral?: (node: BooleanLiteral) => any; Identifier?: (node: Identifier) => any; BinaryOperation?: (node: BinaryOperation) => any; + UnaryOperation?: (node: UnaryOperation) => any; Conditional?: (node: Conditional) => any; IndexAccess?: (node: IndexAccess) => any; MemberAccess?: (node: MemberAccess) => any; + FunctionCall?: (node: FunctionCall) => any; Break?: (node: Break) => any; HexNumber?: (node: HexNumber) => any; DecimalNumber?: (node: DecimalNumber) => any; @@ -665,4 +683,6 @@ export interface ParserOpts { loc?: boolean; } export function parse(sourceCode: string, parserOpts: ParserOpts): ASTNode; +export function parseType(sourceCode: string, parserOpts: ParserOpts): ASTNode; +export function parseExpression(sourceCode: string, parserOpts: ParserOpts): Expression; export function visit(ast: ASTNode, visitor: Visitor): void; diff --git a/package-lock.json b/package-lock.json index d0aff21..6e225f4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "solidity-parser-antlr", - "version": "0.4.5", + "version": "0.4.8", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -168,16 +168,25 @@ "defer-to-connect": "^1.0.1" } }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.0.0.tgz", + "integrity": "sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ==", "dev": true }, "acorn-jsx": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", - "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.2.tgz", + "integrity": "sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw==", "dev": true }, "agent-base": { @@ -188,10 +197,18 @@ "es6-promisify": "^5.0.0" } }, + "agentkeepalive": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz", + "integrity": "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==", + "requires": { + "humanize-ms": "^1.2.1" + } + }, "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", @@ -275,6 +292,11 @@ "default-require-extensions": "^2.0.0" } }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, "archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", @@ -1060,8 +1082,7 @@ "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "binary-extensions": { "version": "1.11.0", @@ -1095,11 +1116,6 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -1124,7 +1140,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1158,12 +1173,77 @@ "electron-to-chromium": "^1.3.47" } }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=" + }, + "cacache": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", + "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + }, + "dependencies": { + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", + "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==" + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + } + } + }, "cacheable-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", @@ -1186,6 +1266,11 @@ "pump": "^3.0.0" } }, + "http-cache-semantics": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz", + "integrity": "sha512-TcIMG3qeVLgDr1TEd2XvHaTnMPwYQUQMIBLy+5pLSDKYFc7UIqj39w8EGzZkaxoLv/l2K8HaI0t5AVA+YYgUew==" + }, "lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", @@ -1238,8 +1323,7 @@ "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "caniuse-lite": { "version": "1.0.30000861", @@ -1319,6 +1403,11 @@ "readdirp": "^2.0.0" } }, + "chownr": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz", + "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==" + }, "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", @@ -1403,7 +1492,8 @@ "commander": { "version": "2.20.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==" + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "dev": true }, "commondir": { "version": "1.0.1", @@ -1414,16 +1504,17 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "config-chain": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", - "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "configstore": { @@ -1451,6 +1542,19 @@ "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", "dev": true }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, "core-js": { "version": "2.5.7", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", @@ -1460,9 +1564,7 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true, - "optional": true + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "cp-file": { "version": "6.2.0", @@ -1519,11 +1621,15 @@ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" }, + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=" + }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, "requires": { "ms": "^2.1.1" }, @@ -1531,8 +1637,7 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, @@ -1630,6 +1735,17 @@ "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, "electron-to-chromium": { "version": "1.3.50", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.50.tgz", @@ -1641,6 +1757,14 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "requires": { + "iconv-lite": "~0.4.13" + } + }, "end-of-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", @@ -1649,6 +1773,11 @@ "once": "^1.4.0" } }, + "err-code": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", + "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=" + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -1708,69 +1837,105 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "eslint": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", - "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.2.2.tgz", + "integrity": "sha512-mf0elOkxHbdyGX1IJEUsNBzCDdyoUgljF3rRlgfyYh0pwGnreLc0jjD6ZuleOibjmnUWZLY2eXwSooeOgGJ2jw==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "ajv": "^6.9.1", + "ajv": "^6.10.0", "chalk": "^2.1.0", "cross-spawn": "^6.0.5", "debug": "^4.0.1", "doctrine": "^3.0.0", - "eslint-scope": "^4.0.3", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^5.0.1", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.2", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.1", "esquery": "^1.0.1", "esutils": "^2.0.2", "file-entry-cache": "^5.0.1", "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", + "glob-parent": "^5.0.0", "globals": "^11.7.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^6.2.2", - "js-yaml": "^3.13.0", + "inquirer": "^6.4.1", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", - "lodash": "^4.17.11", + "lodash": "^4.17.14", "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", "progress": "^2.0.0", "regexpp": "^2.0.1", - "semver": "^5.5.1", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", "table": "^5.2.3", - "text-table": "^0.2.0" + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" }, "dependencies": { - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "glob-parent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", + "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "is-glob": "^4.0.1" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" } }, "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true }, "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "strip-json-comments": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", "dev": true } } @@ -1797,9 +1962,9 @@ } }, "eslint-module-utils": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.0.tgz", - "integrity": "sha512-14tltLm38Eu3zS+mt0KvILC3q8jyIAH518MlG+HO0p+yK885Lb1UHTY/UgR91eOyGdmxAPb+OLoW4znqIT6Ndw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz", + "integrity": "sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw==", "dev": true, "requires": { "debug": "^2.6.8", @@ -1818,19 +1983,19 @@ } }, "eslint-plugin-es": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz", - "integrity": "sha512-XfFmgFdIUDgvaRAlaXUkxrRg5JSADoRC8IkKLc/cISeR3yHVMefFHQZpcyXXEUUPHfy5DwviBcrfqlyqEwlQVw==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-1.4.1.tgz", + "integrity": "sha512-5fa/gR2yR3NxQf+UXkeLeP8FBBl6tSgdrAz1+cF84v1FMM4twGwQoqTnn+QxFLcPOrF4pdKEJKDB/q9GoyJrCA==", "dev": true, "requires": { - "eslint-utils": "^1.3.0", + "eslint-utils": "^1.4.2", "regexpp": "^2.0.1" } }, "eslint-plugin-import": { - "version": "2.17.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.17.3.tgz", - "integrity": "sha512-qeVf/UwXFJbeyLbxuY8RgqDyEKCkqV7YC+E5S5uOjAp4tOc8zj01JP3ucoBM8JcEqd1qRasJSg6LLlisirfy0Q==", + "version": "2.18.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz", + "integrity": "sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ==", "dev": true, "requires": { "array-includes": "^3.0.3", @@ -1840,8 +2005,8 @@ "eslint-import-resolver-node": "^0.3.2", "eslint-module-utils": "^2.4.0", "has": "^1.0.3", - "lodash": "^4.17.11", "minimatch": "^3.0.4", + "object.values": "^1.1.0", "read-pkg-up": "^2.0.0", "resolve": "^1.11.0" }, @@ -1865,16 +2030,10 @@ "isarray": "^1.0.0" } }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - }, "resolve": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", - "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", "dev": true, "requires": { "path-parse": "^1.0.6" @@ -1883,13 +2042,13 @@ } }, "eslint-plugin-node": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-9.1.0.tgz", - "integrity": "sha512-ZwQYGm6EoV2cfLpE1wxJWsfnKUIXfM/KM09/TlorkukgCAwmkgajEJnPCmyzoFPQQkmvo5DrW/nyKutNIw36Mw==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-9.2.0.tgz", + "integrity": "sha512-2abNmzAH/JpxI4gEOwd6K8wZIodK3BmHbTxz4s79OIYwwIt2gkpEXlAouJXu4H1c9ySTnRso0tsuthSOZbUMlA==", "dev": true, "requires": { - "eslint-plugin-es": "^1.4.0", - "eslint-utils": "^1.3.1", + "eslint-plugin-es": "^1.4.1", + "eslint-utils": "^1.4.2", "ignore": "^5.1.1", "minimatch": "^3.0.4", "resolve": "^1.10.1", @@ -1897,44 +2056,44 @@ }, "dependencies": { "ignore": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.2.tgz", - "integrity": "sha512-vdqWBp7MyzdmHkkRWV5nY+PfGRbYbahfuvsBCh277tq+w9zyNi7h5CYJCK0kmzti9kU+O/cB7sE8HvKv6aXAKQ==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", + "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", "dev": true }, "resolve": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", - "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", "dev": true, "requires": { "path-parse": "^1.0.6" } }, "semver": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz", - "integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "eslint-plugin-promise": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.1.1.tgz", - "integrity": "sha512-faAHw7uzlNPy7b45J1guyjazw28M+7gJokKUjC5JSFoYfUEyy6Gw/i7YQvmv2Yk00sUjWcmzXQLpU1Ki/C2IZQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz", + "integrity": "sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==", "dev": true }, "eslint-plugin-standard": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.0.0.tgz", - "integrity": "sha512-OwxJkR6TQiYMmt1EsNRMe5qG3GsbjlcOhbGUBY4LtavF9DsLaTcoR+j2Tdjqi23oUwKNUqX7qcn5fPStafMdlA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.0.1.tgz", + "integrity": "sha512-v/KBnfyaOMPmZc/dmc6ozOdWqekGp7bBGq4jLAecEfPGmfKiWS4sA8sC0LqiV9w5qmXAtXVn4M3p1jSyhY85SQ==", "dev": true }, "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", + "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", "dev": true, "requires": { "esrecurse": "^4.1.0", @@ -1942,26 +2101,29 @@ } }, "eslint-utils": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", - "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", - "dev": true + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz", + "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.0.0" + } }, "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", "dev": true }, "espree": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", - "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.1.tgz", + "integrity": "sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ==", "dev": true, "requires": { - "acorn": "^6.0.7", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" + "acorn": "^7.0.0", + "acorn-jsx": "^5.0.2", + "eslint-visitor-keys": "^1.1.0" } }, "esprima": { @@ -1988,9 +2150,9 @@ } }, "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, "esutils": { @@ -2035,9 +2197,9 @@ } }, "external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "requires": { "chardet": "^0.7.0", @@ -2078,6 +2240,11 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==" + }, "figures": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", @@ -2242,11 +2409,44 @@ } }, "flatted": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz", - "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", "dev": true }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -2286,17 +2486,44 @@ } } }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-minipass": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz", + "integrity": "sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==", + "requires": { + "minipass": "^2.2.1" + } + }, "fs-readdir-recursive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", "dev": true }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { "version": "1.2.4", @@ -2858,6 +3085,11 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "genfun": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz", + "integrity": "sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==" + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -2870,14 +3102,6 @@ "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", "dev": true }, - "get-proxy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", - "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", - "requires": { - "npm-conf": "^1.1.0" - } - }, "get-stdin": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", @@ -3050,20 +3274,38 @@ "hosted-git-info": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", - "dev": true + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" }, "http-cache-semantics": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz", - "integrity": "sha512-TcIMG3qeVLgDr1TEd2XvHaTnMPwYQUQMIBLy+5pLSDKYFc7UIqj39w8EGzZkaxoLv/l2K8HaI0t5AVA+YYgUew==" + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==" + }, + "http-proxy-agent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", + "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "requires": { + "agent-base": "4", + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } }, "https-proxy-agent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", - "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.2.tgz", + "integrity": "sha512-c8Ndjc9Bkpfx/vCJueCPy0jlP4ccCCSNDp8xwCZzPjKJUm+B+u9WX2x98Qx4n1PiMNTWo3D7KK5ifNV/yJyRzg==", "requires": { - "agent-base": "^4.1.0", + "agent-base": "^4.3.0", "debug": "^3.1.0" }, "dependencies": { @@ -3082,25 +3324,45 @@ } } }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "requires": { + "ms": "^2.0.0" + } + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" + }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, + "ignore-walk": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "requires": { + "minimatch": "^3.0.4" + } + }, "import-fresh": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", - "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", + "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==", "dev": true, "requires": { "parent-module": "^1.0.0", @@ -3117,11 +3379,15 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -3130,8 +3396,7 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "ini": { "version": "1.3.5", @@ -3139,9 +3404,9 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "inquirer": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.4.0.tgz", - "integrity": "sha512-O3qJQ+fU/AI1K2y5/RjqefMEQTdJQf6sPTvyRA1bx6D634ADxcu97u6YOUciIeU2OWIuvpUsQs6Wx3Fdi3eFaQ==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", "dev": true, "requires": { "ansi-escapes": "^3.2.0", @@ -3150,7 +3415,7 @@ "cli-width": "^2.0.0", "external-editor": "^3.0.3", "figures": "^2.0.0", - "lodash": "^4.17.11", + "lodash": "^4.17.12", "mute-stream": "0.0.7", "run-async": "^2.2.0", "rxjs": "^6.4.0", @@ -3166,9 +3431,9 @@ "dev": true }, "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true }, "strip-ansi": { @@ -3197,6 +3462,11 @@ "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", "dev": true }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -3383,8 +3653,7 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isexe": { "version": "2.0.0", @@ -3547,9 +3816,9 @@ "dev": true }, "js-yaml": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz", - "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -3569,8 +3838,7 @@ "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" }, "json-parse-helpfulerror": { "version": "1.0.3", @@ -3598,6 +3866,11 @@ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", "dev": true }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" + }, "keyv": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", @@ -3648,20 +3921,70 @@ "type-check": "~0.3.2" } }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, + "libnpmconfig": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/libnpmconfig/-/libnpmconfig-1.2.1.tgz", + "integrity": "sha512-9esX8rTQAHqarx6qeZqmGQKBNZR5OIbl/Ayr0qQDy3oXja2iFVQQI81R6GZ2a02bSNZ9p3YOGX1O6HHCb1X7kA==", "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "2.0.0", + "figgy-pudding": "^3.5.1", + "find-up": "^3.0.0", + "ini": "^1.3.5" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + } + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, @@ -3728,6 +4051,39 @@ } } }, + "make-fetch-happen": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-5.0.0.tgz", + "integrity": "sha512-nFr/vpL1Jc60etMVKeaLOqfGjMMb3tAHFVJWxHOFCFS04Zmd7kGlMxo0l1tzfhoQje0/UPnd0X8OeGUiXXnfPA==", + "requires": { + "agentkeepalive": "^3.4.1", + "cacache": "^12.0.0", + "http-cache-semantics": "^3.8.1", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.1", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "node-fetch-npm": "^2.0.2", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^4.0.0", + "ssri": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + } + } + }, "map-age-cleaner": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", @@ -3817,7 +4173,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -3825,22 +4180,66 @@ "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "minipass": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.5.0.tgz", + "integrity": "sha512-9FwMVYhn6ERvMR8XFdOavRz4QK/VJV8elU1x50vYexf9lslDcWe/f4HBRxCPd185ekRSjU6CfYyJCECa/CQy7Q==", + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + } + } + }, + "minizlib": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", + "requires": { + "minipass": "^2.2.1" + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, "requires": { "minimist": "0.0.8" } }, "mocha": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.1.4.tgz", - "integrity": "sha512-PN8CIy4RXsIoxoFJzS4QNnCH4psUCPWc4/rPrst/ecSJJbLBkubMiyGCP2Kj/9YnWbotFqAoeXyXMucj7gwCFg==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.0.tgz", + "integrity": "sha512-qwfFgY+7EKAAUAdv7VYMZQknI7YJSGesxHyhn6qD52DV8UcSZs5XwCifcZGMVIE4a5fbmhvbotxC0DLQ0oKohQ==", "dev": true, "requires": { "ansi-colors": "3.2.3", @@ -3900,16 +4299,6 @@ "path-is-absolute": "^1.0.0" } }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", @@ -3927,9 +4316,9 @@ "dev": true }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -3961,11 +4350,23 @@ } } }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "mute-stream": { "version": "0.0.7", @@ -4045,18 +4446,27 @@ }, "dependencies": { "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, + "node-fetch-npm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz", + "integrity": "sha512-nJIxm1QmAj4v3nfCvEeCrYSoVwXyxLnaPBK5W1W5DGEJwjlKuC2VEUycGw5oxk+4zZahRrB84PUJJgEmhFTDFw==", + "requires": { + "encoding": "^0.1.11", + "json-parse-better-errors": "^1.0.0", + "safe-buffer": "^5.1.1" + } + }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, "requires": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -4079,43 +4489,50 @@ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.3.0.tgz", "integrity": "sha512-0NLtR71o4k6GLP+mr6Ty34c5GA6CMoEsncKJxvQd8NzPxaHRJNnb5gZE8R1XF4CPIS7QPHLJ74IFszwtNVAHVQ==" }, + "npm-bundled": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", + "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==" + }, "npm-check-updates": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-3.1.11.tgz", - "integrity": "sha512-y7ZpmcW/zF5ku3wtTSOEz/Ocwg2t4rMU0tRgrDUSBoLdtRcJ/HZTfnG5ygX+Cjw8nz+uBYpNvYs/k/9NwpKrOA==", + "version": "3.1.21", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-3.1.21.tgz", + "integrity": "sha512-t7KygdHZ1cF2jS6kcOPiUg6s53Sq5jcOqHnddOe92qW7Xd4mh9AUT52OYYQ0YfAiP7VIdZ5379/G/atG6J0WDA==", "requires": { - "bluebird": "^3.5.5", "chalk": "^2.4.2", "cint": "^8.2.1", "cli-table": "^0.3.1", - "commander": "^2.20.0", + "commander": "^3.0.0", "fast-diff": "^1.2.0", - "find-up": "4.0.0", - "get-proxy": "^2.1.0", + "find-up": "4.1.0", "get-stdin": "^7.0.0", - "https-proxy-agent": "^2.2.1", "json-parse-helpfulerror": "^1.0.3", - "lodash": "^4.17.11", + "libnpmconfig": "^1.2.1", + "lodash": "^4.17.15", "node-alias": "^1.0.4", - "npm-conf": "^1.1.3", - "package-json": "^6.3.0", + "pacote": "^9.5.4", "progress": "^2.0.3", - "prompts": "^2.1.0", - "rc-config-loader": "^2.0.3", - "registry-url": "^5.1.0", + "prompts": "^2.2.1", + "rc-config-loader": "^2.0.4", "requireg": "^0.2.2", - "semver": "^6.1.1", + "semver": "^6.3.0", "semver-utils": "^1.1.4", "spawn-please": "^0.3.0", - "update-notifier": "^3.0.0" + "update-notifier": "^3.0.1" }, "dependencies": { + "commander": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.0.tgz", + "integrity": "sha512-pl3QrGOBa9RZaslQiqnnKX2J068wcQw7j9AIaBQ9/JEp5RY6je4jKTImg0Bd+rpoONSe7GUFSgkxLeo17m3Pow==" + }, "find-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.0.0.tgz", - "integrity": "sha512-zoH7ZWPkRdgwYCDVoQTzqjG8JSPANhtvLhh4KVUHyKnaUJJrNeFmWIkTcNuJmR3GLMEmGYEf2S2bjgx26JTF+Q==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "requires": { - "locate-path": "^5.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, "locate-path": { @@ -4127,14 +4544,14 @@ } }, "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", "requires": { "p-try": "^2.0.0" } @@ -4152,26 +4569,80 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, "semver": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz", - "integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, - "npm-conf": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", - "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "npm-package-arg": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz", + "integrity": "sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==", "requires": { - "config-chain": "^1.1.11", - "pify": "^3.0.0" + "hosted-git-info": "^2.7.1", + "osenv": "^0.1.5", + "semver": "^5.6.0", + "validate-npm-package-name": "^3.0.0" }, "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "npm-packlist": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.4.tgz", + "integrity": "sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw==", + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-3.0.1.tgz", + "integrity": "sha512-QsJY1LuN6vuGg2BDnteeWGYODOYWZZwbW/YyCKHK4tt9uE+k2d70eg+Kr1CSLbX157Nu8UtY/Afdv884RnJSrQ==", + "requires": { + "figgy-pudding": "^3.5.1", + "npm-package-arg": "^6.0.0", + "semver": "^5.4.1" + } + }, + "npm-registry-fetch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-4.0.0.tgz", + "integrity": "sha512-Jllq35Jag8dtv0M17ue74XtdQTyqKzuAYGiX9mAjOhkmNjib3bBUgK6mUY61+AHnXeSRobQkpY3/xIOS/omptw==", + "requires": { + "JSONStream": "^1.3.4", + "bluebird": "^3.5.1", + "figgy-pudding": "^3.4.1", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "npm-package-arg": "^6.1.0" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" } } }, @@ -4328,9 +4799,9 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "object-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", - "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object.assign": { "version": "4.1.0", @@ -4365,6 +4836,18 @@ "is-extendable": "^0.1.1" } }, + "object.values": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", + "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -4417,8 +4900,7 @@ "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, "os-locale": { "version": "3.1.0", @@ -4434,8 +4916,16 @@ "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } }, "output-file-sync": { "version": "1.1.2", @@ -4515,23 +5005,107 @@ } }, "package-json": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.4.0.tgz", - "integrity": "sha512-bd1T8OBG7hcvMd9c/udgv6u5v9wISP3Oyl9Cm7Weop8EFwrtcQDnS2sb6zhwqus2WslSr5wSTIPiTTpxxmPm7Q==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", "requires": { "got": "^9.6.0", - "registry-auth-token": "^3.4.0", + "registry-auth-token": "^4.0.0", "registry-url": "^5.0.0", - "semver": "^6.1.1" + "semver": "^6.2.0" }, "dependencies": { "semver": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz", - "integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "pacote": { + "version": "9.5.8", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.5.8.tgz", + "integrity": "sha512-0Tl8Oi/K0Lo4MZmH0/6IsT3gpGf9eEAznLXEQPKgPq7FscnbUOyopnVpwXlnQdIbCUaojWy1Wd7VMyqfVsRrIw==", + "requires": { + "bluebird": "^3.5.3", + "cacache": "^12.0.2", + "chownr": "^1.1.2", + "figgy-pudding": "^3.5.1", + "get-stream": "^4.1.0", + "glob": "^7.1.3", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "minimatch": "^3.0.4", + "minipass": "^2.3.5", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "normalize-package-data": "^2.4.0", + "npm-package-arg": "^6.1.0", + "npm-packlist": "^1.1.12", + "npm-pick-manifest": "^3.0.0", + "npm-registry-fetch": "^4.0.0", + "osenv": "^0.1.5", + "promise-inflight": "^1.0.1", + "promise-retry": "^1.1.1", + "protoduck": "^5.0.1", + "rimraf": "^2.6.2", + "safe-buffer": "^5.1.2", + "semver": "^5.6.0", + "ssri": "^6.0.1", + "tar": "^4.4.10", + "unique-filename": "^1.1.1", + "which": "^1.3.1" + }, + "dependencies": { + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" } } }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "requires": { + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -4571,8 +5145,7 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-is-inside": { "version": "1.0.2", @@ -4652,28 +5225,43 @@ "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true, - "optional": true + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" + }, + "promise-retry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", + "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", + "requires": { + "err-code": "^1.0.0", + "retry": "^0.10.0" + } + }, "prompts": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.1.0.tgz", - "integrity": "sha512-+x5TozgqYdOwWsQFZizE/Tra3fKvAoy037kOyU6cgz84n8f6zxngLOV4O32kTwt9FcLCxAqw0P/c8rOr9y+Gfg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.2.1.tgz", + "integrity": "sha512-VObPvJiWPhpZI6C5m60XOzTfnYg/xc/an+r9VYymj9WJW3B/DIH+REzjpAACPf8brwPeP+7vz3bIim3S+AaMjw==", "requires": { - "kleur": "^3.0.2", - "sisteransi": "^1.0.0" + "kleur": "^3.0.3", + "sisteransi": "^1.0.3" } }, - "proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" + "protoduck": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz", + "integrity": "sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg==", + "requires": { + "genfun": "^5.0.0" + } }, "pseudomap": { "version": "1.0.2", @@ -4689,6 +5277,27 @@ "once": "^1.3.1" } }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -4742,31 +5351,23 @@ } }, "rc-config-loader": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-2.0.3.tgz", - "integrity": "sha512-CN9BmvV9Kcl6c4WEZ8w13JFazLYtKnqxxKGKuiCS8yZpUtJFa/nd7PdjVnRBJJ89U3OZfR6DmqOqMvmZ5ZFNMw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-2.0.4.tgz", + "integrity": "sha512-k06UzRbYDWgF4Mc/YrsZsmzSpDLuHoThJxep+vq5H09hiX8rbA5Ue/Ra0dwWm5MQvWYW4YBXgA186inNxuxidQ==", "requires": { - "debug": "^3.1.0", + "debug": "^4.1.1", "js-yaml": "^3.12.0", - "json5": "^1.0.1", + "json5": "^2.1.0", "object-assign": "^4.1.0", "object-keys": "^1.0.12", "path-exists": "^3.0.0", "require-from-string": "^2.0.2" }, "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", + "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", "requires": { "minimist": "^1.2.0" } @@ -4775,11 +5376,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, @@ -4808,8 +5404,6 @@ "version": "2.3.5", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", - "dev": true, - "optional": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -4884,11 +5478,11 @@ } }, "registry-auth-token": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", - "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.0.0.tgz", + "integrity": "sha512-lpQkHxd9UL6tb3k/aHAVfnVtn+Bcs9ob5InuFLLEDqSqeq+AljB8GZW9xY0x7F+xYwEcjKe07nyoxzEYz6yvkw==", "requires": { - "rc": "^1.1.6", + "rc": "^1.2.8", "safe-buffer": "^5.0.1" } }, @@ -5003,7 +5597,6 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", - "dev": true, "requires": { "path-parse": "^1.0.6" } @@ -5032,11 +5625,15 @@ "signal-exit": "^3.0.2" } }, + "retry": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", + "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=" + }, "rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, "requires": { "glob": "^7.1.3" }, @@ -5045,7 +5642,6 @@ "version": "7.1.4", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -5066,6 +5662,14 @@ "is-promise": "^2.1.0" } }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "requires": { + "aproba": "^1.1.1" + } + }, "rxjs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", @@ -5083,8 +5687,7 @@ "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "semver": { "version": "5.5.0", @@ -5136,9 +5739,9 @@ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "sisteransi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.0.tgz", - "integrity": "sha512-N+z4pHB4AmUv0SjveWRd6q1Nj5w62m5jodv+GD8lvmbY/83T/rpbJGZOnK5T149OldDj4Db07BSv9xY4K6NTPQ==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.3.tgz", + "integrity": "sha512-SbEG75TzH8G7eVXFSN5f9EExILKfly7SUvVY5DhhYLvfhKqhDFY0OzevWa/zwak0RLRfWS5AvfMWpd9gJvr5Yg==" }, "slash": { "version": "1.0.0", @@ -5168,6 +5771,39 @@ } } }, + "smart-buffer": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.0.2.tgz", + "integrity": "sha512-JDhEpTKzXusOqXZ0BUIdH+CjFdO/CR3tLlf5CN34IypI+xMmXW1uB16OOY8z3cICbJlDAVJzNbwBhNO0wt9OAw==" + }, + "socks": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.2.tgz", + "integrity": "sha512-pCpjxQgOByDHLlNqlnh/mNSAxIUkyBBuwwhTcV+enZGbDaClPvHdvm6uvOwZfFJkam7cGhBNbb4JxiP8UZkRvQ==", + "requires": { + "ip": "^1.1.5", + "smart-buffer": "4.0.2" + } + }, + "socks-proxy-agent": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz", + "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", + "requires": { + "agent-base": "~4.2.1", + "socks": "~2.3.2" + }, + "dependencies": { + "agent-base": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "requires": { + "es6-promisify": "^5.0.0" + } + } + } + }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -5206,7 +5842,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -5215,14 +5850,12 @@ "spdx-exceptions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" }, "spdx-expression-parse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -5231,14 +5864,35 @@ "spdx-license-ids": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", - "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", - "dev": true + "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==" }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -5252,8 +5906,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "optional": true, "requires": { "safe-buffer": "~5.1.0" } @@ -5295,13 +5947,13 @@ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" }, "table": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.1.tgz", - "integrity": "sha512-E6CK1/pZe2N75rGZQotFOdmzWQ1AILtgYbMAbAjvms0S1l5IDB47zG3nCnFGB/w+7nB3vKofbLXCH7HPBo864w==", + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", "dev": true, "requires": { - "ajv": "^6.9.1", - "lodash": "^4.17.11", + "ajv": "^6.10.2", + "lodash": "^4.17.14", "slice-ansi": "^2.1.0", "string-width": "^3.0.0" }, @@ -5313,9 +5965,9 @@ "dev": true }, "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true }, "string-width": { @@ -5340,6 +5992,32 @@ } } }, + "tar": { + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.10.tgz", + "integrity": "sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==", + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.5", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + } + } + }, "term-size": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", @@ -5517,8 +6195,40 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } }, "tmp": { "version": "0.0.33", @@ -5547,15 +6257,15 @@ "dev": true }, "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", "dev": true }, "tslint": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.17.0.tgz", - "integrity": "sha512-pflx87WfVoYepTet3xLfDOLDm9Jqi61UXIKePOuca0qoAZyrGWonDG9VTbji58Fy+8gciUn8Bt7y69+KEVjc/w==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.19.0.tgz", + "integrity": "sha512-1LwwtBxfRJZnUvoS9c0uj8XQtAnyhWr9KlNvDIdB+oXyT+VpsOAaEhEgKi1HrZ8rq0ki/AAnbGSv4KM6/AfVZw==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -5571,18 +6281,6 @@ "semver": "^5.3.0", "tslib": "^1.8.0", "tsutils": "^2.29.0" - }, - "dependencies": { - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } } }, "tslint-config-prettier": { @@ -5620,10 +6318,15 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==" }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, "typescript": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.2.tgz", - "integrity": "sha512-7KxJovlYhTX5RaRbUdkAXN1KUZ8PwWlTzQdHV6xNqvuFOs7+WBo10TQUqT19Q/Jz2hk5v9TQDIhyLhhJY4p5AA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.2.tgz", + "integrity": "sha512-lmQ4L+J6mnu3xweP8+rOrUwzmN+MRAj7TgtJtDaXE5PMyX2kCrklhg3rvOsOIfNeAWMQWO2F1GPc1kMD2vLAfw==", "dev": true }, "uglify-js": { @@ -5646,6 +6349,22 @@ } } }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "requires": { + "imurmurhash": "^0.1.4" + } + }, "unique-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", @@ -5655,9 +6374,9 @@ } }, "update-notifier": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-3.0.0.tgz", - "integrity": "sha512-6Xe3oF2bvuoj4YECUc52yxVs94yWrxwqHbzyveDktTS1WhnlTRpNcQMxUshcB7nRVGi1jEXiqL5cW1S5WSyzKg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-3.0.1.tgz", + "integrity": "sha512-grrmrB6Zb8DUiyDIaeRTBCkgISYUgETNe7NglEbVsrLWXeESnlCSP50WfRSj/GmzMPl6Uchj24S/p80nP/ZQrQ==", "requires": { "boxen": "^3.0.0", "chalk": "^2.0.1", @@ -5699,9 +6418,7 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true, - "optional": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "uuid": { "version": "3.3.2", @@ -5709,6 +6426,12 @@ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", "dev": true }, + "v8-compile-cache": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", + "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", + "dev": true + }, "v8flags": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", @@ -5722,12 +6445,19 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "requires": { + "builtins": "^1.0.3" + } + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -5835,11 +6565,15 @@ "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, "y18n": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" }, "yallist": { "version": "2.1.2", @@ -5983,15 +6717,15 @@ } }, "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -6051,9 +6785,9 @@ } }, "yarn": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/yarn/-/yarn-1.16.0.tgz", - "integrity": "sha512-cfemyGlnWKA1zopUUgebTPf8C4WkPIZ+TJmklwcEAJ4u6oWPtJeAzrsamaGGh/+b1XWe8W51yzAImC4AWbWR1g==", + "version": "1.17.3", + "resolved": "https://registry.npmjs.org/yarn/-/yarn-1.17.3.tgz", + "integrity": "sha512-CgA8o7nRZaQvmeF/WBx2FC7f9W/0X59T2IaLYqgMo6637wfp5mMEsM3YXoJtKUspnpmDJKl/gGFhnqS+sON7hA==", "dev": true } } diff --git a/package.json b/package.json index 04eb5d8..011a020 100644 --- a/package.json +++ b/package.json @@ -25,25 +25,22 @@ "babel-cli": "^6.26.0", "babel-preset-env": "^1.7.0", "chai": "^4.2.0", - "eslint": "^5.16.0", - "eslint-plugin-import": "^2.17.3", - "eslint-plugin-node": "^9.1.0", - "eslint-plugin-promise": "^4.1.1", - "eslint-plugin-standard": "^4.0.0", - "mocha": "^6.1.4", + "eslint": "^6.2.2", + "eslint-plugin-import": "^2.18.2", + "eslint-plugin-node": "^9.2.0", + "eslint-plugin-promise": "^4.2.1", + "eslint-plugin-standard": "^4.0.1", + "mocha": "^6.2.0", "nyc": "^14.1.1", "prettier": "^1.18.2", - "tslint": "5.17.0", + "tslint": "5.19.0", "tslint-config-prettier": "^1.18.0", - "typescript": "3.5.2", - "yarn": "^1.16.0" + "typescript": "3.6.2", + "yarn": "^1.17.3" }, "nyc": { "include": [ "src/*.js" ] - }, - "dependencies": { - "npm-check-updates": "^3.1.11" } } diff --git a/solidity-antlr4 b/solidity-antlr4 index 1cf62f3..e1fc7b8 160000 --- a/solidity-antlr4 +++ b/solidity-antlr4 @@ -1 +1 @@ -Subproject commit 1cf62f3c7cc1151195bd0374ae344494f0245daa +Subproject commit e1fc7b8488cc0de10958c7384547f78227f59943 diff --git a/src/ASTBuilder.js b/src/ASTBuilder.js index 0b9e6b4..bf2eff8 100644 --- a/src/ASTBuilder.js +++ b/src/ASTBuilder.js @@ -1,4 +1,5 @@ const antlr4 = require('./antlr4/index') +const parseComments = require('./natspec') function toText(ctx) { if (ctx !== null) { @@ -116,20 +117,33 @@ const transformAST = { ContractDefinition(ctx) { const name = toText(ctx.identifier()) + let natspec = null + let kind + if (ctx.natSpec()) { + natspec = parseComments(toText(ctx.getChild(0))) + kind = toText(ctx.getChild(1)) + } else { + kind = toText(ctx.getChild(0)) + } this._currentContract = name return { + natspec, name, baseContracts: this.visit(ctx.inheritanceSpecifier()), subNodes: this.visit(ctx.contractPart()), - kind: toText(ctx.getChild(0)) + kind } }, InheritanceSpecifier(ctx) { + const exprList = ctx.expressionList() + const args = (exprList != null) + ? this.visit(exprList.expression()) : [] + return { baseName: this.visit(ctx.userDefinedTypeName()), - arguments: this.visit(ctx.expression()) + arguments: args } }, @@ -211,7 +225,13 @@ const transformAST = { stateMutability = toText(ctx.modifierList().stateMutability(0)) } + let natspec = null + if (ctx.natSpec()) { + natspec = parseComments(toText(ctx.getChild(0))) + } + return { + natspec, name, parameters, returnParameters, @@ -886,7 +906,12 @@ const transformAST = { }, EventDefinition(ctx) { + let natspec = null + if (ctx.natSpec()) { + natspec = parseComments(toText(ctx.getChild(0))) + } return { + natspec, name: toText(ctx.identifier()), parameters: this.visit(ctx.eventParameterList()), isAnonymous: !!ctx.AnonymousKeyword() diff --git a/src/index.js b/src/index.js index ae8ce7b..94ef9b1 100644 --- a/src/index.js +++ b/src/index.js @@ -77,8 +77,102 @@ function parse(input, options) { return ast } +function parseType(input, options) { + options = options || {} + + const chars = antlr4.CharStreams.fromString(input) + + const listener = new ErrorListener() + + const lexer = new SolidityLexer(chars) + lexer.removeErrorListeners() + lexer.addErrorListener(listener) + + const tokens = new antlr4.CommonTokenStream(lexer) + + const parser = new SolidityParser(tokens) + + parser.removeErrorListeners() + parser.addErrorListener(listener) + parser.buildParseTrees = true + + const tree = parser.typeName() + + let tokenList + if (options.tokens) { + const tokenSource = tokens.tokenSource + tokenSource.reset() + + tokenList = buildTokenList(tokenSource.getAllTokens(), options) + } + + if (!options.tolerant && listener.hasErrors()) { + throw new ParserError({ errors: listener.getErrors() }) + } + + const visitor = new ASTBuilder(options) + const ast = visitor.visit(tree) + + if (options.tolerant && listener.hasErrors()) { + ast.errors = listener.getErrors() + } + if (options.tokens) { + ast.tokens = tokenList + } + + return ast +} + +function parseExpression(input, options) { + options = options || {} + + const chars = antlr4.CharStreams.fromString(input) + + const listener = new ErrorListener() + + const lexer = new SolidityLexer(chars) + lexer.removeErrorListeners() + lexer.addErrorListener(listener) + + const tokens = new antlr4.CommonTokenStream(lexer) + + const parser = new SolidityParser(tokens) + + parser.removeErrorListeners() + parser.addErrorListener(listener) + parser.buildParseTrees = true + + const tree = parser.expression() + + let tokenList + if (options.tokens) { + const tokenSource = tokens.tokenSource + tokenSource.reset() + + tokenList = buildTokenList(tokenSource.getAllTokens(), options) + } + + if (!options.tolerant && listener.hasErrors()) { + throw new ParserError({ errors: listener.getErrors() }) + } + + const visitor = new ASTBuilder(options) + const ast = visitor.visit(tree) + + if (options.tolerant && listener.hasErrors()) { + ast.errors = listener.getErrors() + } + if (options.tokens) { + ast.tokens = tokenList + } + + return ast +} + + function _isASTNode(node) { - return !!node && typeof node === 'object' && node.hasOwnProperty('type') + return (!!node && typeof node === 'object' && + Object.prototype.hasOwnProperty.call(node, 'type')) } function visit(node, visitor) { @@ -97,7 +191,7 @@ function visit(node, visitor) { if (cont === false) return for (const prop in node) { - if (node.hasOwnProperty(prop)) { + if (Object.prototype.hasOwnProperty.call(node, prop)) { visit(node[prop], visitor) } } @@ -110,5 +204,7 @@ function visit(node, visitor) { exports.tokenize = tokenize exports.parse = parse +exports.parseType = parseType +exports.parseExpression = parseExpression exports.visit = visit exports.ParserError = ParserError diff --git a/src/lib/Solidity.interp b/src/lib/Solidity.interp index 64eb751..5e92357 100644 --- a/src/lib/Solidity.interp +++ b/src/lib/Solidity.interp @@ -102,6 +102,8 @@ null null null null +null +null 'anonymous' 'break' 'constant' @@ -213,6 +215,8 @@ null null null null +NatSpecSingleLine +NatSpecMultiLine Int Uint Byte @@ -254,6 +258,7 @@ versionOperator versionConstraint importDeclaration importDirective +natSpec contractDefinition inheritanceSpecifier contractPart @@ -332,4 +337,4 @@ identifier atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 122, 966, 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, 3, 58, 5, 58, 752, 10, 58, 5, 58, 754, 10, 58, 3, 59, 3, 59, 3, 59, 7, 59, 759, 10, 59, 12, 59, 14, 59, 762, 11, 59, 3, 60, 3, 60, 3, 60, 7, 60, 767, 10, 60, 12, 60, 14, 60, 770, 11, 60, 3, 60, 5, 60, 773, 10, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 5, 62, 781, 10, 62, 3, 62, 3, 62, 5, 62, 785, 10, 62, 5, 62, 787, 10, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 7, 64, 796, 10, 64, 12, 64, 14, 64, 799, 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, 820, 10, 65, 3, 66, 3, 66, 5, 66, 824, 10, 66, 3, 67, 3, 67, 3, 67, 3, 67, 5, 67, 830, 10, 67, 3, 67, 3, 67, 5, 67, 834, 10, 67, 3, 67, 3, 67, 7, 67, 838, 10, 67, 12, 67, 14, 67, 841, 11, 67, 3, 67, 5, 67, 844, 10, 67, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 850, 10, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 5, 70, 861, 10, 70, 3, 71, 3, 71, 3, 71, 7, 71, 866, 10, 71, 12, 71, 14, 71, 869, 11, 71, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 7, 74, 880, 10, 74, 12, 74, 14, 74, 883, 11, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 5, 75, 891, 10, 75, 3, 76, 3, 76, 3, 76, 3, 76, 5, 76, 897, 10, 76, 3, 76, 3, 76, 5, 76, 901, 10, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 5, 78, 911, 10, 78, 3, 78, 3, 78, 3, 78, 5, 78, 916, 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, 932, 10, 82, 3, 82, 3, 82, 5, 82, 936, 10, 82, 7, 82, 938, 10, 82, 12, 82, 14, 82, 941, 11, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 7, 82, 948, 10, 82, 12, 82, 14, 82, 951, 11, 82, 5, 82, 953, 10, 82, 3, 82, 5, 82, 956, 10, 82, 3, 83, 3, 83, 3, 84, 3, 84, 5, 84, 962, 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, 6, 2, 107, 107, 112, 112, 115, 115, 117, 117, 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, 119, 119, 3, 2, 100, 101, 5, 2, 15, 15, 42, 42, 118, 118, 2, 1056, 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, 753, 3, 2, 2, 2, 116, 755, 3, 2, 2, 2, 118, 763, 3, 2, 2, 2, 120, 774, 3, 2, 2, 2, 122, 786, 3, 2, 2, 2, 124, 788, 3, 2, 2, 2, 126, 793, 3, 2, 2, 2, 128, 819, 3, 2, 2, 2, 130, 823, 3, 2, 2, 2, 132, 829, 3, 2, 2, 2, 134, 845, 3, 2, 2, 2, 136, 851, 3, 2, 2, 2, 138, 860, 3, 2, 2, 2, 140, 862, 3, 2, 2, 2, 142, 870, 3, 2, 2, 2, 144, 873, 3, 2, 2, 2, 146, 876, 3, 2, 2, 2, 148, 890, 3, 2, 2, 2, 150, 892, 3, 2, 2, 2, 152, 904, 3, 2, 2, 2, 154, 907, 3, 2, 2, 2, 156, 919, 3, 2, 2, 2, 158, 923, 3, 2, 2, 2, 160, 925, 3, 2, 2, 2, 162, 955, 3, 2, 2, 2, 164, 957, 3, 2, 2, 2, 166, 959, 3, 2, 2, 2, 168, 963, 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, 119, 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, 119, 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, 119, 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, 119, 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, 754, 7, 99, 2, 2, 738, 754, 5, 166, 84, 2, 739, 754, 7, 103, 2, 2, 740, 754, 7, 119, 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, 754, 3, 2, 2, 2, 746, 754, 7, 116, 2, 2, 747, 754, 5, 162, 82, 2, 748, 751, 5, 164, 83, 2, 749, 750, 7, 34, 2, 2, 750, 752, 7, 35, 2, 2, 751, 749, 3, 2, 2, 2, 751, 752, 3, 2, 2, 2, 752, 754, 3, 2, 2, 2, 753, 737, 3, 2, 2, 2, 753, 738, 3, 2, 2, 2, 753, 739, 3, 2, 2, 2, 753, 740, 3, 2, 2, 2, 753, 741, 3, 2, 2, 2, 753, 746, 3, 2, 2, 2, 753, 747, 3, 2, 2, 2, 753, 748, 3, 2, 2, 2, 754, 115, 3, 2, 2, 2, 755, 760, 5, 112, 57, 2, 756, 757, 7, 17, 2, 2, 757, 759, 5, 112, 57, 2, 758, 756, 3, 2, 2, 2, 759, 762, 3, 2, 2, 2, 760, 758, 3, 2, 2, 2, 760, 761, 3, 2, 2, 2, 761, 117, 3, 2, 2, 2, 762, 760, 3, 2, 2, 2, 763, 768, 5, 120, 61, 2, 764, 765, 7, 17, 2, 2, 765, 767, 5, 120, 61, 2, 766, 764, 3, 2, 2, 2, 767, 770, 3, 2, 2, 2, 768, 766, 3, 2, 2, 2, 768, 769, 3, 2, 2, 2, 769, 772, 3, 2, 2, 2, 770, 768, 3, 2, 2, 2, 771, 773, 7, 17, 2, 2, 772, 771, 3, 2, 2, 2, 772, 773, 3, 2, 2, 2, 773, 119, 3, 2, 2, 2, 774, 775, 5, 168, 85, 2, 775, 776, 7, 75, 2, 2, 776, 777, 5, 112, 57, 2, 777, 121, 3, 2, 2, 2, 778, 780, 7, 16, 2, 2, 779, 781, 5, 118, 60, 2, 780, 779, 3, 2, 2, 2, 780, 781, 3, 2, 2, 2, 781, 782, 3, 2, 2, 2, 782, 787, 7, 18, 2, 2, 783, 785, 5, 116, 59, 2, 784, 783, 3, 2, 2, 2, 784, 785, 3, 2, 2, 2, 785, 787, 3, 2, 2, 2, 786, 778, 3, 2, 2, 2, 786, 784, 3, 2, 2, 2, 787, 123, 3, 2, 2, 2, 788, 789, 5, 112, 57, 2, 789, 790, 7, 23, 2, 2, 790, 791, 5, 122, 62, 2, 791, 792, 7, 24, 2, 2, 792, 125, 3, 2, 2, 2, 793, 797, 7, 16, 2, 2, 794, 796, 5, 128, 65, 2, 795, 794, 3, 2, 2, 2, 796, 799, 3, 2, 2, 2, 797, 795, 3, 2, 2, 2, 797, 798, 3, 2, 2, 2, 798, 800, 3, 2, 2, 2, 799, 797, 3, 2, 2, 2, 800, 801, 7, 18, 2, 2, 801, 127, 3, 2, 2, 2, 802, 820, 5, 168, 85, 2, 803, 820, 5, 126, 64, 2, 804, 820, 5, 130, 66, 2, 805, 820, 5, 134, 68, 2, 806, 820, 5, 136, 69, 2, 807, 820, 5, 142, 72, 2, 808, 820, 5, 144, 73, 2, 809, 820, 5, 146, 74, 2, 810, 820, 5, 150, 76, 2, 811, 820, 5, 154, 78, 2, 812, 820, 5, 156, 79, 2, 813, 820, 7, 106, 2, 2, 814, 820, 7, 108, 2, 2, 815, 820, 5, 160, 81, 2, 816, 820, 5, 166, 84, 2, 817, 820, 7, 119, 2, 2, 818, 820, 7, 103, 2, 2, 819, 802, 3, 2, 2, 2, 819, 803, 3, 2, 2, 2, 819, 804, 3, 2, 2, 2, 819, 805, 3, 2, 2, 2, 819, 806, 3, 2, 2, 2, 819, 807, 3, 2, 2, 2, 819, 808, 3, 2, 2, 2, 819, 809, 3, 2, 2, 2, 819, 810, 3, 2, 2, 2, 819, 811, 3, 2, 2, 2, 819, 812, 3, 2, 2, 2, 819, 813, 3, 2, 2, 2, 819, 814, 3, 2, 2, 2, 819, 815, 3, 2, 2, 2, 819, 816, 3, 2, 2, 2, 819, 817, 3, 2, 2, 2, 819, 818, 3, 2, 2, 2, 820, 129, 3, 2, 2, 2, 821, 824, 5, 132, 67, 2, 822, 824, 5, 158, 80, 2, 823, 821, 3, 2, 2, 2, 823, 822, 3, 2, 2, 2, 824, 131, 3, 2, 2, 2, 825, 830, 7, 48, 2, 2, 826, 830, 7, 36, 2, 2, 827, 830, 7, 54, 2, 2, 828, 830, 5, 168, 85, 2, 829, 825, 3, 2, 2, 2, 829, 826, 3, 2, 2, 2, 829, 827, 3, 2, 2, 2, 829, 828, 3, 2, 2, 2, 830, 843, 3, 2, 2, 2, 831, 833, 7, 23, 2, 2, 832, 834, 5, 130, 66, 2, 833, 832, 3, 2, 2, 2, 833, 834, 3, 2, 2, 2, 834, 839, 3, 2, 2, 2, 835, 836, 7, 17, 2, 2, 836, 838, 5, 130, 66, 2, 837, 835, 3, 2, 2, 2, 838, 841, 3, 2, 2, 2, 839, 837, 3, 2, 2, 2, 839, 840, 3, 2, 2, 2, 840, 842, 3, 2, 2, 2, 841, 839, 3, 2, 2, 2, 842, 844, 7, 24, 2, 2, 843, 831, 3, 2, 2, 2, 843, 844, 3, 2, 2, 2, 844, 133, 3, 2, 2, 2, 845, 846, 7, 86, 2, 2, 846, 849, 5, 138, 70, 2, 847, 848, 7, 87, 2, 2, 848, 850, 5, 130, 66, 2, 849, 847, 3, 2, 2, 2, 849, 850, 3, 2, 2, 2, 850, 135, 3, 2, 2, 2, 851, 852, 5, 138, 70, 2, 852, 853, 7, 87, 2, 2, 853, 854, 5, 130, 66, 2, 854, 137, 3, 2, 2, 2, 855, 861, 5, 168, 85, 2, 856, 857, 7, 23, 2, 2, 857, 858, 5, 140, 71, 2, 858, 859, 7, 24, 2, 2, 859, 861, 3, 2, 2, 2, 860, 855, 3, 2, 2, 2, 860, 856, 3, 2, 2, 2, 861, 139, 3, 2, 2, 2, 862, 867, 5, 168, 85, 2, 863, 864, 7, 17, 2, 2, 864, 866, 5, 168, 85, 2, 865, 863, 3, 2, 2, 2, 866, 869, 3, 2, 2, 2, 867, 865, 3, 2, 2, 2, 867, 868, 3, 2, 2, 2, 868, 141, 3, 2, 2, 2, 869, 867, 3, 2, 2, 2, 870, 871, 7, 88, 2, 2, 871, 872, 5, 168, 85, 2, 872, 143, 3, 2, 2, 2, 873, 874, 5, 168, 85, 2, 874, 875, 7, 75, 2, 2, 875, 145, 3, 2, 2, 2, 876, 877, 7, 89, 2, 2, 877, 881, 5, 130, 66, 2, 878, 880, 5, 148, 75, 2, 879, 878, 3, 2, 2, 2, 880, 883, 3, 2, 2, 2, 881, 879, 3, 2, 2, 2, 881, 882, 3, 2, 2, 2, 882, 147, 3, 2, 2, 2, 883, 881, 3, 2, 2, 2, 884, 885, 7, 90, 2, 2, 885, 886, 5, 158, 80, 2, 886, 887, 5, 126, 64, 2, 887, 891, 3, 2, 2, 2, 888, 889, 7, 91, 2, 2, 889, 891, 5, 126, 64, 2, 890, 884, 3, 2, 2, 2, 890, 888, 3, 2, 2, 2, 891, 149, 3, 2, 2, 2, 892, 893, 7, 30, 2, 2, 893, 894, 5, 168, 85, 2, 894, 896, 7, 23, 2, 2, 895, 897, 5, 140, 71, 2, 896, 895, 3, 2, 2, 2, 896, 897, 3, 2, 2, 2, 897, 898, 3, 2, 2, 2, 898, 900, 7, 24, 2, 2, 899, 901, 5, 152, 77, 2, 900, 899, 3, 2, 2, 2, 900, 901, 3, 2, 2, 2, 901, 902, 3, 2, 2, 2, 902, 903, 5, 126, 64, 2, 903, 151, 3, 2, 2, 2, 904, 905, 7, 92, 2, 2, 905, 906, 5, 140, 71, 2, 906, 153, 3, 2, 2, 2, 907, 910, 7, 26, 2, 2, 908, 911, 5, 126, 64, 2, 909, 911, 5, 130, 66, 2, 910, 908, 3, 2, 2, 2, 910, 909, 3, 2, 2, 2, 911, 912, 3, 2, 2, 2, 912, 915, 5, 130, 66, 2, 913, 916, 5, 126, 64, 2, 914, 916, 5, 130, 66, 2, 915, 913, 3, 2, 2, 2, 915, 914, 3, 2, 2, 2, 916, 917, 3, 2, 2, 2, 917, 918, 5, 126, 64, 2, 918, 155, 3, 2, 2, 2, 919, 920, 7, 43, 2, 2, 920, 921, 5, 130, 66, 2, 921, 922, 5, 126, 64, 2, 922, 157, 3, 2, 2, 2, 923, 924, 9, 16, 2, 2, 924, 159, 3, 2, 2, 2, 925, 926, 7, 46, 2, 2, 926, 927, 5, 168, 85, 2, 927, 928, 5, 126, 64, 2, 928, 161, 3, 2, 2, 2, 929, 931, 7, 23, 2, 2, 930, 932, 5, 112, 57, 2, 931, 930, 3, 2, 2, 2, 931, 932, 3, 2, 2, 2, 932, 939, 3, 2, 2, 2, 933, 935, 7, 17, 2, 2, 934, 936, 5, 112, 57, 2, 935, 934, 3, 2, 2, 2, 935, 936, 3, 2, 2, 2, 936, 938, 3, 2, 2, 2, 937, 933, 3, 2, 2, 2, 938, 941, 3, 2, 2, 2, 939, 937, 3, 2, 2, 2, 939, 940, 3, 2, 2, 2, 940, 942, 3, 2, 2, 2, 941, 939, 3, 2, 2, 2, 942, 956, 7, 24, 2, 2, 943, 952, 7, 34, 2, 2, 944, 949, 5, 112, 57, 2, 945, 946, 7, 17, 2, 2, 946, 948, 5, 112, 57, 2, 947, 945, 3, 2, 2, 2, 948, 951, 3, 2, 2, 2, 949, 947, 3, 2, 2, 2, 949, 950, 3, 2, 2, 2, 950, 953, 3, 2, 2, 2, 951, 949, 3, 2, 2, 2, 952, 944, 3, 2, 2, 2, 952, 953, 3, 2, 2, 2, 953, 954, 3, 2, 2, 2, 954, 956, 7, 35, 2, 2, 955, 929, 3, 2, 2, 2, 955, 943, 3, 2, 2, 2, 956, 163, 3, 2, 2, 2, 957, 958, 5, 110, 56, 2, 958, 165, 3, 2, 2, 2, 959, 961, 9, 17, 2, 2, 960, 962, 7, 102, 2, 2, 961, 960, 3, 2, 2, 2, 961, 962, 3, 2, 2, 2, 962, 167, 3, 2, 2, 2, 963, 964, 9, 18, 2, 2, 964, 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, 751, 753, 760, 768, 772, 780, 784, 786, 797, 819, 823, 829, 833, 839, 843, 849, 860, 867, 881, 890, 896, 900, 910, 915, 931, 935, 939, 949, 952, 955, 961] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 124, 973, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 3, 2, 3, 2, 3, 2, 7, 2, 176, 10, 2, 12, 2, 14, 2, 179, 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, 192, 10, 5, 3, 6, 3, 6, 5, 6, 196, 10, 6, 3, 7, 3, 7, 3, 8, 5, 8, 201, 10, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 5, 9, 208, 10, 9, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 214, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 220, 10, 10, 3, 10, 3, 10, 5, 10, 224, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 234, 10, 10, 12, 10, 14, 10, 237, 11, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 244, 10, 10, 3, 11, 3, 11, 3, 12, 5, 12, 249, 10, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 7, 12, 257, 10, 12, 12, 12, 14, 12, 260, 11, 12, 5, 12, 262, 10, 12, 3, 12, 3, 12, 7, 12, 266, 10, 12, 12, 12, 14, 12, 269, 11, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 5, 13, 276, 10, 13, 3, 13, 5, 13, 279, 10, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 289, 10, 14, 3, 15, 3, 15, 7, 15, 293, 10, 15, 12, 15, 14, 15, 296, 11, 15, 3, 15, 3, 15, 3, 15, 5, 15, 301, 10, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 310, 10, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 7, 17, 322, 10, 17, 12, 17, 14, 17, 325, 11, 17, 5, 17, 327, 10, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 5, 19, 339, 10, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 5, 20, 346, 10, 20, 3, 20, 5, 20, 349, 10, 20, 3, 21, 5, 21, 352, 10, 21, 3, 21, 3, 21, 5, 21, 356, 10, 21, 3, 21, 3, 21, 3, 21, 5, 21, 361, 10, 21, 3, 21, 3, 21, 5, 21, 365, 10, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 7, 23, 376, 10, 23, 12, 23, 14, 23, 379, 11, 23, 3, 24, 5, 24, 382, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 5, 24, 388, 10, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 398, 10, 26, 3, 26, 3, 26, 7, 26, 402, 10, 26, 12, 26, 14, 26, 405, 11, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 7, 27, 413, 10, 27, 12, 27, 14, 27, 416, 11, 27, 5, 27, 418, 10, 27, 3, 27, 3, 27, 3, 28, 3, 28, 5, 28, 424, 10, 28, 3, 28, 5, 28, 427, 10, 28, 3, 29, 3, 29, 3, 29, 3, 29, 7, 29, 433, 10, 29, 12, 29, 14, 29, 436, 11, 29, 5, 29, 438, 10, 29, 3, 29, 3, 29, 3, 30, 3, 30, 5, 30, 444, 10, 30, 3, 30, 5, 30, 447, 10, 30, 3, 31, 3, 31, 3, 31, 3, 31, 7, 31, 453, 10, 31, 12, 31, 14, 31, 456, 11, 31, 5, 31, 458, 10, 31, 3, 31, 3, 31, 3, 32, 3, 32, 5, 32, 464, 10, 32, 3, 33, 3, 33, 5, 33, 468, 10, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 479, 10, 34, 3, 34, 3, 34, 3, 34, 5, 34, 484, 10, 34, 3, 34, 7, 34, 487, 10, 34, 12, 34, 14, 34, 490, 11, 34, 3, 35, 3, 35, 3, 35, 7, 35, 495, 10, 35, 12, 35, 14, 35, 498, 11, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 7, 37, 512, 10, 37, 12, 37, 14, 37, 515, 11, 37, 3, 37, 3, 37, 5, 37, 519, 10, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 7, 40, 527, 10, 40, 12, 40, 14, 40, 530, 11, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 5, 41, 546, 10, 41, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 5, 43, 558, 10, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 5, 45, 568, 10, 45, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 574, 10, 46, 3, 46, 3, 46, 5, 46, 578, 10, 46, 3, 46, 5, 46, 581, 10, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 5, 47, 588, 10, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 5, 51, 608, 10, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 5, 54, 626, 10, 54, 3, 54, 3, 54, 5, 54, 630, 10, 54, 3, 54, 3, 54, 3, 55, 5, 55, 635, 10, 55, 3, 55, 3, 55, 5, 55, 639, 10, 55, 7, 55, 641, 10, 55, 12, 55, 14, 55, 644, 11, 55, 3, 56, 3, 56, 5, 56, 648, 10, 56, 3, 56, 7, 56, 651, 10, 56, 12, 56, 14, 56, 654, 11, 56, 3, 56, 5, 56, 657, 10, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 5, 58, 681, 10, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 7, 58, 740, 10, 58, 12, 58, 14, 58, 743, 11, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 752, 10, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 759, 10, 59, 5, 59, 761, 10, 59, 3, 60, 3, 60, 3, 60, 7, 60, 766, 10, 60, 12, 60, 14, 60, 769, 11, 60, 3, 61, 3, 61, 3, 61, 7, 61, 774, 10, 61, 12, 61, 14, 61, 777, 11, 61, 3, 61, 5, 61, 780, 10, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 5, 63, 788, 10, 63, 3, 63, 3, 63, 5, 63, 792, 10, 63, 5, 63, 794, 10, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 7, 65, 803, 10, 65, 12, 65, 14, 65, 806, 11, 65, 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, 5, 66, 827, 10, 66, 3, 67, 3, 67, 5, 67, 831, 10, 67, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 837, 10, 68, 3, 68, 3, 68, 5, 68, 841, 10, 68, 3, 68, 3, 68, 7, 68, 845, 10, 68, 12, 68, 14, 68, 848, 11, 68, 3, 68, 5, 68, 851, 10, 68, 3, 69, 3, 69, 3, 69, 3, 69, 5, 69, 857, 10, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 5, 71, 868, 10, 71, 3, 72, 3, 72, 3, 72, 7, 72, 873, 10, 72, 12, 72, 14, 72, 876, 11, 72, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 7, 75, 887, 10, 75, 12, 75, 14, 75, 890, 11, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 5, 76, 898, 10, 76, 3, 77, 3, 77, 3, 77, 3, 77, 5, 77, 904, 10, 77, 3, 77, 3, 77, 5, 77, 908, 10, 77, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 3, 79, 3, 79, 3, 79, 5, 79, 918, 10, 79, 3, 79, 3, 79, 3, 79, 5, 79, 923, 10, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 81, 3, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 83, 3, 83, 5, 83, 939, 10, 83, 3, 83, 3, 83, 5, 83, 943, 10, 83, 7, 83, 945, 10, 83, 12, 83, 14, 83, 948, 11, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 7, 83, 955, 10, 83, 12, 83, 14, 83, 958, 11, 83, 5, 83, 960, 10, 83, 3, 83, 5, 83, 963, 10, 83, 3, 84, 3, 84, 3, 85, 3, 85, 5, 85, 969, 10, 85, 3, 86, 3, 86, 3, 86, 2, 4, 66, 114, 87, 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, 2, 20, 3, 2, 5, 11, 3, 2, 93, 94, 3, 2, 19, 21, 5, 2, 109, 109, 113, 113, 115, 116, 3, 2, 40, 42, 6, 2, 109, 109, 114, 114, 117, 117, 119, 119, 5, 2, 36, 36, 51, 54, 95, 99, 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, 102, 103, 105, 105, 121, 121, 3, 2, 102, 103, 5, 2, 15, 15, 42, 42, 120, 120, 2, 1065, 2, 177, 3, 2, 2, 2, 4, 182, 3, 2, 2, 2, 6, 187, 3, 2, 2, 2, 8, 191, 3, 2, 2, 2, 10, 193, 3, 2, 2, 2, 12, 197, 3, 2, 2, 2, 14, 200, 3, 2, 2, 2, 16, 204, 3, 2, 2, 2, 18, 243, 3, 2, 2, 2, 20, 245, 3, 2, 2, 2, 22, 248, 3, 2, 2, 2, 24, 272, 3, 2, 2, 2, 26, 288, 3, 2, 2, 2, 28, 290, 3, 2, 2, 2, 30, 304, 3, 2, 2, 2, 32, 313, 3, 2, 2, 2, 34, 330, 3, 2, 2, 2, 36, 335, 3, 2, 2, 2, 38, 342, 3, 2, 2, 2, 40, 351, 3, 2, 2, 2, 42, 366, 3, 2, 2, 2, 44, 377, 3, 2, 2, 2, 46, 381, 3, 2, 2, 2, 48, 391, 3, 2, 2, 2, 50, 393, 3, 2, 2, 2, 52, 408, 3, 2, 2, 2, 54, 421, 3, 2, 2, 2, 56, 428, 3, 2, 2, 2, 58, 441, 3, 2, 2, 2, 60, 448, 3, 2, 2, 2, 62, 461, 3, 2, 2, 2, 64, 465, 3, 2, 2, 2, 66, 478, 3, 2, 2, 2, 68, 491, 3, 2, 2, 2, 70, 499, 3, 2, 2, 2, 72, 506, 3, 2, 2, 2, 74, 520, 3, 2, 2, 2, 76, 522, 3, 2, 2, 2, 78, 524, 3, 2, 2, 2, 80, 545, 3, 2, 2, 2, 82, 547, 3, 2, 2, 2, 84, 550, 3, 2, 2, 2, 86, 559, 3, 2, 2, 2, 88, 567, 3, 2, 2, 2, 90, 569, 3, 2, 2, 2, 92, 585, 3, 2, 2, 2, 94, 591, 3, 2, 2, 2, 96, 599, 3, 2, 2, 2, 98, 602, 3, 2, 2, 2, 100, 605, 3, 2, 2, 2, 102, 611, 3, 2, 2, 2, 104, 614, 3, 2, 2, 2, 106, 625, 3, 2, 2, 2, 108, 634, 3, 2, 2, 2, 110, 645, 3, 2, 2, 2, 112, 660, 3, 2, 2, 2, 114, 680, 3, 2, 2, 2, 116, 760, 3, 2, 2, 2, 118, 762, 3, 2, 2, 2, 120, 770, 3, 2, 2, 2, 122, 781, 3, 2, 2, 2, 124, 793, 3, 2, 2, 2, 126, 795, 3, 2, 2, 2, 128, 800, 3, 2, 2, 2, 130, 826, 3, 2, 2, 2, 132, 830, 3, 2, 2, 2, 134, 836, 3, 2, 2, 2, 136, 852, 3, 2, 2, 2, 138, 858, 3, 2, 2, 2, 140, 867, 3, 2, 2, 2, 142, 869, 3, 2, 2, 2, 144, 877, 3, 2, 2, 2, 146, 880, 3, 2, 2, 2, 148, 883, 3, 2, 2, 2, 150, 897, 3, 2, 2, 2, 152, 899, 3, 2, 2, 2, 154, 911, 3, 2, 2, 2, 156, 914, 3, 2, 2, 2, 158, 926, 3, 2, 2, 2, 160, 930, 3, 2, 2, 2, 162, 932, 3, 2, 2, 2, 164, 962, 3, 2, 2, 2, 166, 964, 3, 2, 2, 2, 168, 966, 3, 2, 2, 2, 170, 970, 3, 2, 2, 2, 172, 176, 5, 4, 3, 2, 173, 176, 5, 18, 10, 2, 174, 176, 5, 22, 12, 2, 175, 172, 3, 2, 2, 2, 175, 173, 3, 2, 2, 2, 175, 174, 3, 2, 2, 2, 176, 179, 3, 2, 2, 2, 177, 175, 3, 2, 2, 2, 177, 178, 3, 2, 2, 2, 178, 180, 3, 2, 2, 2, 179, 177, 3, 2, 2, 2, 180, 181, 7, 2, 2, 3, 181, 3, 3, 2, 2, 2, 182, 183, 7, 3, 2, 2, 183, 184, 5, 6, 4, 2, 184, 185, 5, 8, 5, 2, 185, 186, 7, 4, 2, 2, 186, 5, 3, 2, 2, 2, 187, 188, 5, 170, 86, 2, 188, 7, 3, 2, 2, 2, 189, 192, 5, 10, 6, 2, 190, 192, 5, 114, 58, 2, 191, 189, 3, 2, 2, 2, 191, 190, 3, 2, 2, 2, 192, 9, 3, 2, 2, 2, 193, 195, 5, 14, 8, 2, 194, 196, 5, 14, 8, 2, 195, 194, 3, 2, 2, 2, 195, 196, 3, 2, 2, 2, 196, 11, 3, 2, 2, 2, 197, 198, 9, 2, 2, 2, 198, 13, 3, 2, 2, 2, 199, 201, 5, 12, 7, 2, 200, 199, 3, 2, 2, 2, 200, 201, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 203, 7, 100, 2, 2, 203, 15, 3, 2, 2, 2, 204, 207, 5, 170, 86, 2, 205, 206, 7, 12, 2, 2, 206, 208, 5, 170, 86, 2, 207, 205, 3, 2, 2, 2, 207, 208, 3, 2, 2, 2, 208, 17, 3, 2, 2, 2, 209, 210, 7, 13, 2, 2, 210, 213, 7, 121, 2, 2, 211, 212, 7, 12, 2, 2, 212, 214, 5, 170, 86, 2, 213, 211, 3, 2, 2, 2, 213, 214, 3, 2, 2, 2, 214, 215, 3, 2, 2, 2, 215, 244, 7, 4, 2, 2, 216, 219, 7, 13, 2, 2, 217, 220, 7, 14, 2, 2, 218, 220, 5, 170, 86, 2, 219, 217, 3, 2, 2, 2, 219, 218, 3, 2, 2, 2, 220, 223, 3, 2, 2, 2, 221, 222, 7, 12, 2, 2, 222, 224, 5, 170, 86, 2, 223, 221, 3, 2, 2, 2, 223, 224, 3, 2, 2, 2, 224, 225, 3, 2, 2, 2, 225, 226, 7, 15, 2, 2, 226, 227, 7, 121, 2, 2, 227, 244, 7, 4, 2, 2, 228, 229, 7, 13, 2, 2, 229, 230, 7, 16, 2, 2, 230, 235, 5, 16, 9, 2, 231, 232, 7, 17, 2, 2, 232, 234, 5, 16, 9, 2, 233, 231, 3, 2, 2, 2, 234, 237, 3, 2, 2, 2, 235, 233, 3, 2, 2, 2, 235, 236, 3, 2, 2, 2, 236, 238, 3, 2, 2, 2, 237, 235, 3, 2, 2, 2, 238, 239, 7, 18, 2, 2, 239, 240, 7, 15, 2, 2, 240, 241, 7, 121, 2, 2, 241, 242, 7, 4, 2, 2, 242, 244, 3, 2, 2, 2, 243, 209, 3, 2, 2, 2, 243, 216, 3, 2, 2, 2, 243, 228, 3, 2, 2, 2, 244, 19, 3, 2, 2, 2, 245, 246, 9, 3, 2, 2, 246, 21, 3, 2, 2, 2, 247, 249, 5, 20, 11, 2, 248, 247, 3, 2, 2, 2, 248, 249, 3, 2, 2, 2, 249, 250, 3, 2, 2, 2, 250, 251, 9, 4, 2, 2, 251, 261, 5, 170, 86, 2, 252, 253, 7, 22, 2, 2, 253, 258, 5, 24, 13, 2, 254, 255, 7, 17, 2, 2, 255, 257, 5, 24, 13, 2, 256, 254, 3, 2, 2, 2, 257, 260, 3, 2, 2, 2, 258, 256, 3, 2, 2, 2, 258, 259, 3, 2, 2, 2, 259, 262, 3, 2, 2, 2, 260, 258, 3, 2, 2, 2, 261, 252, 3, 2, 2, 2, 261, 262, 3, 2, 2, 2, 262, 263, 3, 2, 2, 2, 263, 267, 7, 16, 2, 2, 264, 266, 5, 26, 14, 2, 265, 264, 3, 2, 2, 2, 266, 269, 3, 2, 2, 2, 267, 265, 3, 2, 2, 2, 267, 268, 3, 2, 2, 2, 268, 270, 3, 2, 2, 2, 269, 267, 3, 2, 2, 2, 270, 271, 7, 18, 2, 2, 271, 23, 3, 2, 2, 2, 272, 278, 5, 68, 35, 2, 273, 275, 7, 23, 2, 2, 274, 276, 5, 118, 60, 2, 275, 274, 3, 2, 2, 2, 275, 276, 3, 2, 2, 2, 276, 277, 3, 2, 2, 2, 277, 279, 7, 24, 2, 2, 278, 273, 3, 2, 2, 2, 278, 279, 3, 2, 2, 2, 279, 25, 3, 2, 2, 2, 280, 289, 5, 28, 15, 2, 281, 289, 5, 30, 16, 2, 282, 289, 5, 32, 17, 2, 283, 289, 5, 34, 18, 2, 284, 289, 5, 36, 19, 2, 285, 289, 5, 40, 21, 2, 286, 289, 5, 46, 24, 2, 287, 289, 5, 50, 26, 2, 288, 280, 3, 2, 2, 2, 288, 281, 3, 2, 2, 2, 288, 282, 3, 2, 2, 2, 288, 283, 3, 2, 2, 2, 288, 284, 3, 2, 2, 2, 288, 285, 3, 2, 2, 2, 288, 286, 3, 2, 2, 2, 288, 287, 3, 2, 2, 2, 289, 27, 3, 2, 2, 2, 290, 294, 5, 66, 34, 2, 291, 293, 9, 5, 2, 2, 292, 291, 3, 2, 2, 2, 293, 296, 3, 2, 2, 2, 294, 292, 3, 2, 2, 2, 294, 295, 3, 2, 2, 2, 295, 297, 3, 2, 2, 2, 296, 294, 3, 2, 2, 2, 297, 300, 5, 170, 86, 2, 298, 299, 7, 11, 2, 2, 299, 301, 5, 114, 58, 2, 300, 298, 3, 2, 2, 2, 300, 301, 3, 2, 2, 2, 301, 302, 3, 2, 2, 2, 302, 303, 7, 4, 2, 2, 303, 29, 3, 2, 2, 2, 304, 305, 7, 25, 2, 2, 305, 306, 5, 170, 86, 2, 306, 309, 7, 26, 2, 2, 307, 310, 7, 14, 2, 2, 308, 310, 5, 66, 34, 2, 309, 307, 3, 2, 2, 2, 309, 308, 3, 2, 2, 2, 310, 311, 3, 2, 2, 2, 311, 312, 7, 4, 2, 2, 312, 31, 3, 2, 2, 2, 313, 314, 7, 27, 2, 2, 314, 315, 5, 170, 86, 2, 315, 326, 7, 16, 2, 2, 316, 317, 5, 64, 33, 2, 317, 323, 7, 4, 2, 2, 318, 319, 5, 64, 33, 2, 319, 320, 7, 4, 2, 2, 320, 322, 3, 2, 2, 2, 321, 318, 3, 2, 2, 2, 322, 325, 3, 2, 2, 2, 323, 321, 3, 2, 2, 2, 323, 324, 3, 2, 2, 2, 324, 327, 3, 2, 2, 2, 325, 323, 3, 2, 2, 2, 326, 316, 3, 2, 2, 2, 326, 327, 3, 2, 2, 2, 327, 328, 3, 2, 2, 2, 328, 329, 7, 18, 2, 2, 329, 33, 3, 2, 2, 2, 330, 331, 7, 28, 2, 2, 331, 332, 5, 52, 27, 2, 332, 333, 5, 44, 23, 2, 333, 334, 5, 78, 40, 2, 334, 35, 3, 2, 2, 2, 335, 336, 7, 29, 2, 2, 336, 338, 5, 170, 86, 2, 337, 339, 5, 52, 27, 2, 338, 337, 3, 2, 2, 2, 338, 339, 3, 2, 2, 2, 339, 340, 3, 2, 2, 2, 340, 341, 5, 78, 40, 2, 341, 37, 3, 2, 2, 2, 342, 348, 5, 170, 86, 2, 343, 345, 7, 23, 2, 2, 344, 346, 5, 118, 60, 2, 345, 344, 3, 2, 2, 2, 345, 346, 3, 2, 2, 2, 346, 347, 3, 2, 2, 2, 347, 349, 7, 24, 2, 2, 348, 343, 3, 2, 2, 2, 348, 349, 3, 2, 2, 2, 349, 39, 3, 2, 2, 2, 350, 352, 5, 20, 11, 2, 351, 350, 3, 2, 2, 2, 351, 352, 3, 2, 2, 2, 352, 353, 3, 2, 2, 2, 353, 355, 7, 30, 2, 2, 354, 356, 5, 170, 86, 2, 355, 354, 3, 2, 2, 2, 355, 356, 3, 2, 2, 2, 356, 357, 3, 2, 2, 2, 357, 358, 5, 52, 27, 2, 358, 360, 5, 44, 23, 2, 359, 361, 5, 42, 22, 2, 360, 359, 3, 2, 2, 2, 360, 361, 3, 2, 2, 2, 361, 364, 3, 2, 2, 2, 362, 365, 7, 4, 2, 2, 363, 365, 5, 78, 40, 2, 364, 362, 3, 2, 2, 2, 364, 363, 3, 2, 2, 2, 365, 41, 3, 2, 2, 2, 366, 367, 7, 31, 2, 2, 367, 368, 5, 52, 27, 2, 368, 43, 3, 2, 2, 2, 369, 376, 5, 38, 20, 2, 370, 376, 5, 76, 39, 2, 371, 376, 7, 111, 2, 2, 372, 376, 7, 116, 2, 2, 373, 376, 7, 113, 2, 2, 374, 376, 7, 115, 2, 2, 375, 369, 3, 2, 2, 2, 375, 370, 3, 2, 2, 2, 375, 371, 3, 2, 2, 2, 375, 372, 3, 2, 2, 2, 375, 373, 3, 2, 2, 2, 375, 374, 3, 2, 2, 2, 376, 379, 3, 2, 2, 2, 377, 375, 3, 2, 2, 2, 377, 378, 3, 2, 2, 2, 378, 45, 3, 2, 2, 2, 379, 377, 3, 2, 2, 2, 380, 382, 5, 20, 11, 2, 381, 380, 3, 2, 2, 2, 381, 382, 3, 2, 2, 2, 382, 383, 3, 2, 2, 2, 383, 384, 7, 32, 2, 2, 384, 385, 5, 170, 86, 2, 385, 387, 5, 56, 29, 2, 386, 388, 7, 107, 2, 2, 387, 386, 3, 2, 2, 2, 387, 388, 3, 2, 2, 2, 388, 389, 3, 2, 2, 2, 389, 390, 7, 4, 2, 2, 390, 47, 3, 2, 2, 2, 391, 392, 5, 170, 86, 2, 392, 49, 3, 2, 2, 2, 393, 394, 7, 33, 2, 2, 394, 395, 5, 170, 86, 2, 395, 397, 7, 16, 2, 2, 396, 398, 5, 48, 25, 2, 397, 396, 3, 2, 2, 2, 397, 398, 3, 2, 2, 2, 398, 403, 3, 2, 2, 2, 399, 400, 7, 17, 2, 2, 400, 402, 5, 48, 25, 2, 401, 399, 3, 2, 2, 2, 402, 405, 3, 2, 2, 2, 403, 401, 3, 2, 2, 2, 403, 404, 3, 2, 2, 2, 404, 406, 3, 2, 2, 2, 405, 403, 3, 2, 2, 2, 406, 407, 7, 18, 2, 2, 407, 51, 3, 2, 2, 2, 408, 417, 7, 23, 2, 2, 409, 414, 5, 54, 28, 2, 410, 411, 7, 17, 2, 2, 411, 413, 5, 54, 28, 2, 412, 410, 3, 2, 2, 2, 413, 416, 3, 2, 2, 2, 414, 412, 3, 2, 2, 2, 414, 415, 3, 2, 2, 2, 415, 418, 3, 2, 2, 2, 416, 414, 3, 2, 2, 2, 417, 409, 3, 2, 2, 2, 417, 418, 3, 2, 2, 2, 418, 419, 3, 2, 2, 2, 419, 420, 7, 24, 2, 2, 420, 53, 3, 2, 2, 2, 421, 423, 5, 66, 34, 2, 422, 424, 5, 74, 38, 2, 423, 422, 3, 2, 2, 2, 423, 424, 3, 2, 2, 2, 424, 426, 3, 2, 2, 2, 425, 427, 5, 170, 86, 2, 426, 425, 3, 2, 2, 2, 426, 427, 3, 2, 2, 2, 427, 55, 3, 2, 2, 2, 428, 437, 7, 23, 2, 2, 429, 434, 5, 58, 30, 2, 430, 431, 7, 17, 2, 2, 431, 433, 5, 58, 30, 2, 432, 430, 3, 2, 2, 2, 433, 436, 3, 2, 2, 2, 434, 432, 3, 2, 2, 2, 434, 435, 3, 2, 2, 2, 435, 438, 3, 2, 2, 2, 436, 434, 3, 2, 2, 2, 437, 429, 3, 2, 2, 2, 437, 438, 3, 2, 2, 2, 438, 439, 3, 2, 2, 2, 439, 440, 7, 24, 2, 2, 440, 57, 3, 2, 2, 2, 441, 443, 5, 66, 34, 2, 442, 444, 7, 112, 2, 2, 443, 442, 3, 2, 2, 2, 443, 444, 3, 2, 2, 2, 444, 446, 3, 2, 2, 2, 445, 447, 5, 170, 86, 2, 446, 445, 3, 2, 2, 2, 446, 447, 3, 2, 2, 2, 447, 59, 3, 2, 2, 2, 448, 457, 7, 23, 2, 2, 449, 454, 5, 62, 32, 2, 450, 451, 7, 17, 2, 2, 451, 453, 5, 62, 32, 2, 452, 450, 3, 2, 2, 2, 453, 456, 3, 2, 2, 2, 454, 452, 3, 2, 2, 2, 454, 455, 3, 2, 2, 2, 455, 458, 3, 2, 2, 2, 456, 454, 3, 2, 2, 2, 457, 449, 3, 2, 2, 2, 457, 458, 3, 2, 2, 2, 458, 459, 3, 2, 2, 2, 459, 460, 7, 24, 2, 2, 460, 61, 3, 2, 2, 2, 461, 463, 5, 66, 34, 2, 462, 464, 5, 74, 38, 2, 463, 462, 3, 2, 2, 2, 463, 464, 3, 2, 2, 2, 464, 63, 3, 2, 2, 2, 465, 467, 5, 66, 34, 2, 466, 468, 5, 74, 38, 2, 467, 466, 3, 2, 2, 2, 467, 468, 3, 2, 2, 2, 468, 469, 3, 2, 2, 2, 469, 470, 5, 170, 86, 2, 470, 65, 3, 2, 2, 2, 471, 472, 8, 34, 1, 2, 472, 479, 5, 112, 57, 2, 473, 479, 5, 68, 35, 2, 474, 479, 5, 70, 36, 2, 475, 479, 5, 72, 37, 2, 476, 477, 7, 36, 2, 2, 477, 479, 7, 114, 2, 2, 478, 471, 3, 2, 2, 2, 478, 473, 3, 2, 2, 2, 478, 474, 3, 2, 2, 2, 478, 475, 3, 2, 2, 2, 478, 476, 3, 2, 2, 2, 479, 488, 3, 2, 2, 2, 480, 481, 12, 5, 2, 2, 481, 483, 7, 34, 2, 2, 482, 484, 5, 114, 58, 2, 483, 482, 3, 2, 2, 2, 483, 484, 3, 2, 2, 2, 484, 485, 3, 2, 2, 2, 485, 487, 7, 35, 2, 2, 486, 480, 3, 2, 2, 2, 487, 490, 3, 2, 2, 2, 488, 486, 3, 2, 2, 2, 488, 489, 3, 2, 2, 2, 489, 67, 3, 2, 2, 2, 490, 488, 3, 2, 2, 2, 491, 496, 5, 170, 86, 2, 492, 493, 7, 37, 2, 2, 493, 495, 5, 170, 86, 2, 494, 492, 3, 2, 2, 2, 495, 498, 3, 2, 2, 2, 496, 494, 3, 2, 2, 2, 496, 497, 3, 2, 2, 2, 497, 69, 3, 2, 2, 2, 498, 496, 3, 2, 2, 2, 499, 500, 7, 38, 2, 2, 500, 501, 7, 23, 2, 2, 501, 502, 5, 112, 57, 2, 502, 503, 7, 39, 2, 2, 503, 504, 5, 66, 34, 2, 504, 505, 7, 24, 2, 2, 505, 71, 3, 2, 2, 2, 506, 507, 7, 30, 2, 2, 507, 513, 5, 60, 31, 2, 508, 512, 7, 113, 2, 2, 509, 512, 7, 111, 2, 2, 510, 512, 5, 76, 39, 2, 511, 508, 3, 2, 2, 2, 511, 509, 3, 2, 2, 2, 511, 510, 3, 2, 2, 2, 512, 515, 3, 2, 2, 2, 513, 511, 3, 2, 2, 2, 513, 514, 3, 2, 2, 2, 514, 518, 3, 2, 2, 2, 515, 513, 3, 2, 2, 2, 516, 517, 7, 31, 2, 2, 517, 519, 5, 60, 31, 2, 518, 516, 3, 2, 2, 2, 518, 519, 3, 2, 2, 2, 519, 73, 3, 2, 2, 2, 520, 521, 9, 6, 2, 2, 521, 75, 3, 2, 2, 2, 522, 523, 9, 7, 2, 2, 523, 77, 3, 2, 2, 2, 524, 528, 7, 16, 2, 2, 525, 527, 5, 80, 41, 2, 526, 525, 3, 2, 2, 2, 527, 530, 3, 2, 2, 2, 528, 526, 3, 2, 2, 2, 528, 529, 3, 2, 2, 2, 529, 531, 3, 2, 2, 2, 530, 528, 3, 2, 2, 2, 531, 532, 7, 18, 2, 2, 532, 79, 3, 2, 2, 2, 533, 546, 5, 84, 43, 2, 534, 546, 5, 86, 44, 2, 535, 546, 5, 90, 46, 2, 536, 546, 5, 78, 40, 2, 537, 546, 5, 92, 47, 2, 538, 546, 5, 94, 48, 2, 539, 546, 5, 96, 49, 2, 540, 546, 5, 98, 50, 2, 541, 546, 5, 100, 51, 2, 542, 546, 5, 102, 52, 2, 543, 546, 5, 104, 53, 2, 544, 546, 5, 88, 45, 2, 545, 533, 3, 2, 2, 2, 545, 534, 3, 2, 2, 2, 545, 535, 3, 2, 2, 2, 545, 536, 3, 2, 2, 2, 545, 537, 3, 2, 2, 2, 545, 538, 3, 2, 2, 2, 545, 539, 3, 2, 2, 2, 545, 540, 3, 2, 2, 2, 545, 541, 3, 2, 2, 2, 545, 542, 3, 2, 2, 2, 545, 543, 3, 2, 2, 2, 545, 544, 3, 2, 2, 2, 546, 81, 3, 2, 2, 2, 547, 548, 5, 114, 58, 2, 548, 549, 7, 4, 2, 2, 549, 83, 3, 2, 2, 2, 550, 551, 7, 43, 2, 2, 551, 552, 7, 23, 2, 2, 552, 553, 5, 114, 58, 2, 553, 554, 7, 24, 2, 2, 554, 557, 5, 80, 41, 2, 555, 556, 7, 44, 2, 2, 556, 558, 5, 80, 41, 2, 557, 555, 3, 2, 2, 2, 557, 558, 3, 2, 2, 2, 558, 85, 3, 2, 2, 2, 559, 560, 7, 45, 2, 2, 560, 561, 7, 23, 2, 2, 561, 562, 5, 114, 58, 2, 562, 563, 7, 24, 2, 2, 563, 564, 5, 80, 41, 2, 564, 87, 3, 2, 2, 2, 565, 568, 5, 106, 54, 2, 566, 568, 5, 82, 42, 2, 567, 565, 3, 2, 2, 2, 567, 566, 3, 2, 2, 2, 568, 89, 3, 2, 2, 2, 569, 570, 7, 26, 2, 2, 570, 573, 7, 23, 2, 2, 571, 574, 5, 88, 45, 2, 572, 574, 7, 4, 2, 2, 573, 571, 3, 2, 2, 2, 573, 572, 3, 2, 2, 2, 574, 577, 3, 2, 2, 2, 575, 578, 5, 82, 42, 2, 576, 578, 7, 4, 2, 2, 577, 575, 3, 2, 2, 2, 577, 576, 3, 2, 2, 2, 578, 580, 3, 2, 2, 2, 579, 581, 5, 114, 58, 2, 580, 579, 3, 2, 2, 2, 580, 581, 3, 2, 2, 2, 581, 582, 3, 2, 2, 2, 582, 583, 7, 24, 2, 2, 583, 584, 5, 80, 41, 2, 584, 91, 3, 2, 2, 2, 585, 587, 7, 46, 2, 2, 586, 588, 7, 121, 2, 2, 587, 586, 3, 2, 2, 2, 587, 588, 3, 2, 2, 2, 588, 589, 3, 2, 2, 2, 589, 590, 5, 128, 65, 2, 590, 93, 3, 2, 2, 2, 591, 592, 7, 47, 2, 2, 592, 593, 5, 80, 41, 2, 593, 594, 7, 45, 2, 2, 594, 595, 7, 23, 2, 2, 595, 596, 5, 114, 58, 2, 596, 597, 7, 24, 2, 2, 597, 598, 7, 4, 2, 2, 598, 95, 3, 2, 2, 2, 599, 600, 7, 110, 2, 2, 600, 601, 7, 4, 2, 2, 601, 97, 3, 2, 2, 2, 602, 603, 7, 108, 2, 2, 603, 604, 7, 4, 2, 2, 604, 99, 3, 2, 2, 2, 605, 607, 7, 48, 2, 2, 606, 608, 5, 114, 58, 2, 607, 606, 3, 2, 2, 2, 607, 608, 3, 2, 2, 2, 608, 609, 3, 2, 2, 2, 609, 610, 7, 4, 2, 2, 610, 101, 3, 2, 2, 2, 611, 612, 7, 49, 2, 2, 612, 613, 7, 4, 2, 2, 613, 103, 3, 2, 2, 2, 614, 615, 7, 50, 2, 2, 615, 616, 5, 126, 64, 2, 616, 617, 7, 4, 2, 2, 617, 105, 3, 2, 2, 2, 618, 619, 7, 51, 2, 2, 619, 626, 5, 110, 56, 2, 620, 626, 5, 64, 33, 2, 621, 622, 7, 23, 2, 2, 622, 623, 5, 108, 55, 2, 623, 624, 7, 24, 2, 2, 624, 626, 3, 2, 2, 2, 625, 618, 3, 2, 2, 2, 625, 620, 3, 2, 2, 2, 625, 621, 3, 2, 2, 2, 626, 629, 3, 2, 2, 2, 627, 628, 7, 11, 2, 2, 628, 630, 5, 114, 58, 2, 629, 627, 3, 2, 2, 2, 629, 630, 3, 2, 2, 2, 630, 631, 3, 2, 2, 2, 631, 632, 7, 4, 2, 2, 632, 107, 3, 2, 2, 2, 633, 635, 5, 64, 33, 2, 634, 633, 3, 2, 2, 2, 634, 635, 3, 2, 2, 2, 635, 642, 3, 2, 2, 2, 636, 638, 7, 17, 2, 2, 637, 639, 5, 64, 33, 2, 638, 637, 3, 2, 2, 2, 638, 639, 3, 2, 2, 2, 639, 641, 3, 2, 2, 2, 640, 636, 3, 2, 2, 2, 641, 644, 3, 2, 2, 2, 642, 640, 3, 2, 2, 2, 642, 643, 3, 2, 2, 2, 643, 109, 3, 2, 2, 2, 644, 642, 3, 2, 2, 2, 645, 652, 7, 23, 2, 2, 646, 648, 5, 170, 86, 2, 647, 646, 3, 2, 2, 2, 647, 648, 3, 2, 2, 2, 648, 649, 3, 2, 2, 2, 649, 651, 7, 17, 2, 2, 650, 647, 3, 2, 2, 2, 651, 654, 3, 2, 2, 2, 652, 650, 3, 2, 2, 2, 652, 653, 3, 2, 2, 2, 653, 656, 3, 2, 2, 2, 654, 652, 3, 2, 2, 2, 655, 657, 5, 170, 86, 2, 656, 655, 3, 2, 2, 2, 656, 657, 3, 2, 2, 2, 657, 658, 3, 2, 2, 2, 658, 659, 7, 24, 2, 2, 659, 111, 3, 2, 2, 2, 660, 661, 9, 8, 2, 2, 661, 113, 3, 2, 2, 2, 662, 663, 8, 58, 1, 2, 663, 664, 7, 57, 2, 2, 664, 681, 5, 66, 34, 2, 665, 666, 7, 23, 2, 2, 666, 667, 5, 114, 58, 2, 667, 668, 7, 24, 2, 2, 668, 681, 3, 2, 2, 2, 669, 670, 9, 9, 2, 2, 670, 681, 5, 114, 58, 21, 671, 672, 9, 10, 2, 2, 672, 681, 5, 114, 58, 20, 673, 674, 9, 11, 2, 2, 674, 681, 5, 114, 58, 19, 675, 676, 7, 62, 2, 2, 676, 681, 5, 114, 58, 18, 677, 678, 7, 6, 2, 2, 678, 681, 5, 114, 58, 17, 679, 681, 5, 116, 59, 2, 680, 662, 3, 2, 2, 2, 680, 665, 3, 2, 2, 2, 680, 669, 3, 2, 2, 2, 680, 671, 3, 2, 2, 2, 680, 673, 3, 2, 2, 2, 680, 675, 3, 2, 2, 2, 680, 677, 3, 2, 2, 2, 680, 679, 3, 2, 2, 2, 681, 741, 3, 2, 2, 2, 682, 683, 12, 16, 2, 2, 683, 684, 7, 63, 2, 2, 684, 740, 5, 114, 58, 17, 685, 686, 12, 15, 2, 2, 686, 687, 9, 12, 2, 2, 687, 740, 5, 114, 58, 16, 688, 689, 12, 14, 2, 2, 689, 690, 9, 10, 2, 2, 690, 740, 5, 114, 58, 15, 691, 692, 12, 13, 2, 2, 692, 693, 9, 13, 2, 2, 693, 740, 5, 114, 58, 14, 694, 695, 12, 12, 2, 2, 695, 696, 7, 68, 2, 2, 696, 740, 5, 114, 58, 13, 697, 698, 12, 11, 2, 2, 698, 699, 7, 5, 2, 2, 699, 740, 5, 114, 58, 12, 700, 701, 12, 10, 2, 2, 701, 702, 7, 69, 2, 2, 702, 740, 5, 114, 58, 11, 703, 704, 12, 9, 2, 2, 704, 705, 9, 14, 2, 2, 705, 740, 5, 114, 58, 10, 706, 707, 12, 8, 2, 2, 707, 708, 9, 15, 2, 2, 708, 740, 5, 114, 58, 9, 709, 710, 12, 7, 2, 2, 710, 711, 7, 72, 2, 2, 711, 740, 5, 114, 58, 8, 712, 713, 12, 6, 2, 2, 713, 714, 7, 73, 2, 2, 714, 740, 5, 114, 58, 7, 715, 716, 12, 5, 2, 2, 716, 717, 7, 74, 2, 2, 717, 718, 5, 114, 58, 2, 718, 719, 7, 75, 2, 2, 719, 720, 5, 114, 58, 6, 720, 740, 3, 2, 2, 2, 721, 722, 12, 4, 2, 2, 722, 723, 9, 16, 2, 2, 723, 740, 5, 114, 58, 5, 724, 725, 12, 27, 2, 2, 725, 740, 9, 9, 2, 2, 726, 727, 12, 25, 2, 2, 727, 728, 7, 34, 2, 2, 728, 729, 5, 114, 58, 2, 729, 730, 7, 35, 2, 2, 730, 740, 3, 2, 2, 2, 731, 732, 12, 24, 2, 2, 732, 733, 7, 23, 2, 2, 733, 734, 5, 124, 63, 2, 734, 735, 7, 24, 2, 2, 735, 740, 3, 2, 2, 2, 736, 737, 12, 23, 2, 2, 737, 738, 7, 37, 2, 2, 738, 740, 5, 170, 86, 2, 739, 682, 3, 2, 2, 2, 739, 685, 3, 2, 2, 2, 739, 688, 3, 2, 2, 2, 739, 691, 3, 2, 2, 2, 739, 694, 3, 2, 2, 2, 739, 697, 3, 2, 2, 2, 739, 700, 3, 2, 2, 2, 739, 703, 3, 2, 2, 2, 739, 706, 3, 2, 2, 2, 739, 709, 3, 2, 2, 2, 739, 712, 3, 2, 2, 2, 739, 715, 3, 2, 2, 2, 739, 721, 3, 2, 2, 2, 739, 724, 3, 2, 2, 2, 739, 726, 3, 2, 2, 2, 739, 731, 3, 2, 2, 2, 739, 736, 3, 2, 2, 2, 740, 743, 3, 2, 2, 2, 741, 739, 3, 2, 2, 2, 741, 742, 3, 2, 2, 2, 742, 115, 3, 2, 2, 2, 743, 741, 3, 2, 2, 2, 744, 761, 7, 101, 2, 2, 745, 761, 5, 168, 85, 2, 746, 761, 7, 105, 2, 2, 747, 761, 7, 121, 2, 2, 748, 751, 5, 170, 86, 2, 749, 750, 7, 34, 2, 2, 750, 752, 7, 35, 2, 2, 751, 749, 3, 2, 2, 2, 751, 752, 3, 2, 2, 2, 752, 761, 3, 2, 2, 2, 753, 761, 7, 118, 2, 2, 754, 761, 5, 164, 83, 2, 755, 758, 5, 166, 84, 2, 756, 757, 7, 34, 2, 2, 757, 759, 7, 35, 2, 2, 758, 756, 3, 2, 2, 2, 758, 759, 3, 2, 2, 2, 759, 761, 3, 2, 2, 2, 760, 744, 3, 2, 2, 2, 760, 745, 3, 2, 2, 2, 760, 746, 3, 2, 2, 2, 760, 747, 3, 2, 2, 2, 760, 748, 3, 2, 2, 2, 760, 753, 3, 2, 2, 2, 760, 754, 3, 2, 2, 2, 760, 755, 3, 2, 2, 2, 761, 117, 3, 2, 2, 2, 762, 767, 5, 114, 58, 2, 763, 764, 7, 17, 2, 2, 764, 766, 5, 114, 58, 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, 119, 3, 2, 2, 2, 769, 767, 3, 2, 2, 2, 770, 775, 5, 122, 62, 2, 771, 772, 7, 17, 2, 2, 772, 774, 5, 122, 62, 2, 773, 771, 3, 2, 2, 2, 774, 777, 3, 2, 2, 2, 775, 773, 3, 2, 2, 2, 775, 776, 3, 2, 2, 2, 776, 779, 3, 2, 2, 2, 777, 775, 3, 2, 2, 2, 778, 780, 7, 17, 2, 2, 779, 778, 3, 2, 2, 2, 779, 780, 3, 2, 2, 2, 780, 121, 3, 2, 2, 2, 781, 782, 5, 170, 86, 2, 782, 783, 7, 75, 2, 2, 783, 784, 5, 114, 58, 2, 784, 123, 3, 2, 2, 2, 785, 787, 7, 16, 2, 2, 786, 788, 5, 120, 61, 2, 787, 786, 3, 2, 2, 2, 787, 788, 3, 2, 2, 2, 788, 789, 3, 2, 2, 2, 789, 794, 7, 18, 2, 2, 790, 792, 5, 118, 60, 2, 791, 790, 3, 2, 2, 2, 791, 792, 3, 2, 2, 2, 792, 794, 3, 2, 2, 2, 793, 785, 3, 2, 2, 2, 793, 791, 3, 2, 2, 2, 794, 125, 3, 2, 2, 2, 795, 796, 5, 114, 58, 2, 796, 797, 7, 23, 2, 2, 797, 798, 5, 124, 63, 2, 798, 799, 7, 24, 2, 2, 799, 127, 3, 2, 2, 2, 800, 804, 7, 16, 2, 2, 801, 803, 5, 130, 66, 2, 802, 801, 3, 2, 2, 2, 803, 806, 3, 2, 2, 2, 804, 802, 3, 2, 2, 2, 804, 805, 3, 2, 2, 2, 805, 807, 3, 2, 2, 2, 806, 804, 3, 2, 2, 2, 807, 808, 7, 18, 2, 2, 808, 129, 3, 2, 2, 2, 809, 827, 5, 170, 86, 2, 810, 827, 5, 128, 65, 2, 811, 827, 5, 132, 67, 2, 812, 827, 5, 136, 69, 2, 813, 827, 5, 138, 70, 2, 814, 827, 5, 144, 73, 2, 815, 827, 5, 146, 74, 2, 816, 827, 5, 148, 75, 2, 817, 827, 5, 152, 77, 2, 818, 827, 5, 156, 79, 2, 819, 827, 5, 158, 80, 2, 820, 827, 7, 108, 2, 2, 821, 827, 7, 110, 2, 2, 822, 827, 5, 162, 82, 2, 823, 827, 5, 168, 85, 2, 824, 827, 7, 121, 2, 2, 825, 827, 7, 105, 2, 2, 826, 809, 3, 2, 2, 2, 826, 810, 3, 2, 2, 2, 826, 811, 3, 2, 2, 2, 826, 812, 3, 2, 2, 2, 826, 813, 3, 2, 2, 2, 826, 814, 3, 2, 2, 2, 826, 815, 3, 2, 2, 2, 826, 816, 3, 2, 2, 2, 826, 817, 3, 2, 2, 2, 826, 818, 3, 2, 2, 2, 826, 819, 3, 2, 2, 2, 826, 820, 3, 2, 2, 2, 826, 821, 3, 2, 2, 2, 826, 822, 3, 2, 2, 2, 826, 823, 3, 2, 2, 2, 826, 824, 3, 2, 2, 2, 826, 825, 3, 2, 2, 2, 827, 131, 3, 2, 2, 2, 828, 831, 5, 134, 68, 2, 829, 831, 5, 160, 81, 2, 830, 828, 3, 2, 2, 2, 830, 829, 3, 2, 2, 2, 831, 133, 3, 2, 2, 2, 832, 837, 7, 48, 2, 2, 833, 837, 7, 36, 2, 2, 834, 837, 7, 54, 2, 2, 835, 837, 5, 170, 86, 2, 836, 832, 3, 2, 2, 2, 836, 833, 3, 2, 2, 2, 836, 834, 3, 2, 2, 2, 836, 835, 3, 2, 2, 2, 837, 850, 3, 2, 2, 2, 838, 840, 7, 23, 2, 2, 839, 841, 5, 132, 67, 2, 840, 839, 3, 2, 2, 2, 840, 841, 3, 2, 2, 2, 841, 846, 3, 2, 2, 2, 842, 843, 7, 17, 2, 2, 843, 845, 5, 132, 67, 2, 844, 842, 3, 2, 2, 2, 845, 848, 3, 2, 2, 2, 846, 844, 3, 2, 2, 2, 846, 847, 3, 2, 2, 2, 847, 849, 3, 2, 2, 2, 848, 846, 3, 2, 2, 2, 849, 851, 7, 24, 2, 2, 850, 838, 3, 2, 2, 2, 850, 851, 3, 2, 2, 2, 851, 135, 3, 2, 2, 2, 852, 853, 7, 86, 2, 2, 853, 856, 5, 140, 71, 2, 854, 855, 7, 87, 2, 2, 855, 857, 5, 132, 67, 2, 856, 854, 3, 2, 2, 2, 856, 857, 3, 2, 2, 2, 857, 137, 3, 2, 2, 2, 858, 859, 5, 140, 71, 2, 859, 860, 7, 87, 2, 2, 860, 861, 5, 132, 67, 2, 861, 139, 3, 2, 2, 2, 862, 868, 5, 170, 86, 2, 863, 864, 7, 23, 2, 2, 864, 865, 5, 142, 72, 2, 865, 866, 7, 24, 2, 2, 866, 868, 3, 2, 2, 2, 867, 862, 3, 2, 2, 2, 867, 863, 3, 2, 2, 2, 868, 141, 3, 2, 2, 2, 869, 874, 5, 170, 86, 2, 870, 871, 7, 17, 2, 2, 871, 873, 5, 170, 86, 2, 872, 870, 3, 2, 2, 2, 873, 876, 3, 2, 2, 2, 874, 872, 3, 2, 2, 2, 874, 875, 3, 2, 2, 2, 875, 143, 3, 2, 2, 2, 876, 874, 3, 2, 2, 2, 877, 878, 7, 88, 2, 2, 878, 879, 5, 170, 86, 2, 879, 145, 3, 2, 2, 2, 880, 881, 5, 170, 86, 2, 881, 882, 7, 75, 2, 2, 882, 147, 3, 2, 2, 2, 883, 884, 7, 89, 2, 2, 884, 888, 5, 132, 67, 2, 885, 887, 5, 150, 76, 2, 886, 885, 3, 2, 2, 2, 887, 890, 3, 2, 2, 2, 888, 886, 3, 2, 2, 2, 888, 889, 3, 2, 2, 2, 889, 149, 3, 2, 2, 2, 890, 888, 3, 2, 2, 2, 891, 892, 7, 90, 2, 2, 892, 893, 5, 160, 81, 2, 893, 894, 5, 128, 65, 2, 894, 898, 3, 2, 2, 2, 895, 896, 7, 91, 2, 2, 896, 898, 5, 128, 65, 2, 897, 891, 3, 2, 2, 2, 897, 895, 3, 2, 2, 2, 898, 151, 3, 2, 2, 2, 899, 900, 7, 30, 2, 2, 900, 901, 5, 170, 86, 2, 901, 903, 7, 23, 2, 2, 902, 904, 5, 142, 72, 2, 903, 902, 3, 2, 2, 2, 903, 904, 3, 2, 2, 2, 904, 905, 3, 2, 2, 2, 905, 907, 7, 24, 2, 2, 906, 908, 5, 154, 78, 2, 907, 906, 3, 2, 2, 2, 907, 908, 3, 2, 2, 2, 908, 909, 3, 2, 2, 2, 909, 910, 5, 128, 65, 2, 910, 153, 3, 2, 2, 2, 911, 912, 7, 92, 2, 2, 912, 913, 5, 142, 72, 2, 913, 155, 3, 2, 2, 2, 914, 917, 7, 26, 2, 2, 915, 918, 5, 128, 65, 2, 916, 918, 5, 132, 67, 2, 917, 915, 3, 2, 2, 2, 917, 916, 3, 2, 2, 2, 918, 919, 3, 2, 2, 2, 919, 922, 5, 132, 67, 2, 920, 923, 5, 128, 65, 2, 921, 923, 5, 132, 67, 2, 922, 920, 3, 2, 2, 2, 922, 921, 3, 2, 2, 2, 923, 924, 3, 2, 2, 2, 924, 925, 5, 128, 65, 2, 925, 157, 3, 2, 2, 2, 926, 927, 7, 43, 2, 2, 927, 928, 5, 132, 67, 2, 928, 929, 5, 128, 65, 2, 929, 159, 3, 2, 2, 2, 930, 931, 9, 17, 2, 2, 931, 161, 3, 2, 2, 2, 932, 933, 7, 46, 2, 2, 933, 934, 5, 170, 86, 2, 934, 935, 5, 128, 65, 2, 935, 163, 3, 2, 2, 2, 936, 938, 7, 23, 2, 2, 937, 939, 5, 114, 58, 2, 938, 937, 3, 2, 2, 2, 938, 939, 3, 2, 2, 2, 939, 946, 3, 2, 2, 2, 940, 942, 7, 17, 2, 2, 941, 943, 5, 114, 58, 2, 942, 941, 3, 2, 2, 2, 942, 943, 3, 2, 2, 2, 943, 945, 3, 2, 2, 2, 944, 940, 3, 2, 2, 2, 945, 948, 3, 2, 2, 2, 946, 944, 3, 2, 2, 2, 946, 947, 3, 2, 2, 2, 947, 949, 3, 2, 2, 2, 948, 946, 3, 2, 2, 2, 949, 963, 7, 24, 2, 2, 950, 959, 7, 34, 2, 2, 951, 956, 5, 114, 58, 2, 952, 953, 7, 17, 2, 2, 953, 955, 5, 114, 58, 2, 954, 952, 3, 2, 2, 2, 955, 958, 3, 2, 2, 2, 956, 954, 3, 2, 2, 2, 956, 957, 3, 2, 2, 2, 957, 960, 3, 2, 2, 2, 958, 956, 3, 2, 2, 2, 959, 951, 3, 2, 2, 2, 959, 960, 3, 2, 2, 2, 960, 961, 3, 2, 2, 2, 961, 963, 7, 35, 2, 2, 962, 936, 3, 2, 2, 2, 962, 950, 3, 2, 2, 2, 963, 165, 3, 2, 2, 2, 964, 965, 5, 112, 57, 2, 965, 167, 3, 2, 2, 2, 966, 968, 9, 18, 2, 2, 967, 969, 7, 104, 2, 2, 968, 967, 3, 2, 2, 2, 968, 969, 3, 2, 2, 2, 969, 169, 3, 2, 2, 2, 970, 971, 9, 19, 2, 2, 971, 171, 3, 2, 2, 2, 109, 175, 177, 191, 195, 200, 207, 213, 219, 223, 235, 243, 248, 258, 261, 267, 275, 278, 288, 294, 300, 309, 323, 326, 338, 345, 348, 351, 355, 360, 364, 375, 377, 381, 387, 397, 403, 414, 417, 423, 426, 434, 437, 443, 446, 454, 457, 463, 467, 478, 483, 488, 496, 511, 513, 518, 528, 545, 557, 567, 573, 577, 580, 587, 607, 625, 629, 634, 638, 642, 647, 652, 656, 680, 739, 741, 751, 758, 760, 767, 775, 779, 787, 791, 793, 804, 826, 830, 836, 840, 846, 850, 856, 867, 874, 888, 897, 903, 907, 917, 922, 938, 942, 946, 956, 959, 962, 968] \ No newline at end of file diff --git a/src/lib/Solidity.tokens b/src/lib/Solidity.tokens index 875e228..cae3439 100644 --- a/src/lib/Solidity.tokens +++ b/src/lib/Solidity.tokens @@ -88,36 +88,38 @@ 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 -TypeKeyword=114 -ViewKeyword=115 -Identifier=116 -StringLiteral=117 -WS=118 -COMMENT=119 -LINE_COMMENT=120 +NatSpecSingleLine=91 +NatSpecMultiLine=92 +Int=93 +Uint=94 +Byte=95 +Fixed=96 +Ufixed=97 +VersionLiteral=98 +BooleanLiteral=99 +DecimalNumber=100 +HexNumber=101 +NumberUnit=102 +HexLiteral=103 +ReservedKeyword=104 +AnonymousKeyword=105 +BreakKeyword=106 +ConstantKeyword=107 +ContinueKeyword=108 +ExternalKeyword=109 +IndexedKeyword=110 +InternalKeyword=111 +PayableKeyword=112 +PrivateKeyword=113 +PublicKeyword=114 +PureKeyword=115 +TypeKeyword=116 +ViewKeyword=117 +Identifier=118 +StringLiteral=119 +WS=120 +COMMENT=121 +LINE_COMMENT=122 'pragma'=1 ';'=2 '^'=3 @@ -208,16 +210,16 @@ LINE_COMMENT=120 '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 -'type'=114 -'view'=115 +'anonymous'=105 +'break'=106 +'constant'=107 +'continue'=108 +'external'=109 +'indexed'=110 +'internal'=111 +'payable'=112 +'private'=113 +'public'=114 +'pure'=115 +'type'=116 +'view'=117 diff --git a/src/lib/SolidityLexer.interp b/src/lib/SolidityLexer.interp index 28faa44..45bf323 100644 --- a/src/lib/SolidityLexer.interp +++ b/src/lib/SolidityLexer.interp @@ -102,6 +102,8 @@ null null null null +null +null 'anonymous' 'break' 'constant' @@ -213,6 +215,8 @@ null null null null +NatSpecSingleLine +NatSpecMultiLine Int Uint Byte @@ -335,6 +339,8 @@ T__86 T__87 T__88 T__89 +NatSpecSingleLine +NatSpecMultiLine Int Uint Byte @@ -382,4 +388,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 122, 1725, 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, 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, 831, 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, 1048, 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, 1270, 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, 1284, 10, 95, 13, 95, 14, 95, 1285, 3, 95, 3, 95, 6, 95, 1290, 10, 95, 13, 95, 14, 95, 1291, 5, 95, 1294, 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, 1310, 10, 96, 13, 96, 14, 96, 1311, 3, 96, 3, 96, 6, 96, 1316, 10, 96, 13, 96, 14, 96, 1317, 5, 96, 1320, 10, 96, 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, 97, 3, 97, 6, 97, 1335, 10, 97, 13, 97, 14, 97, 1336, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 5, 98, 1348, 10, 98, 3, 99, 3, 99, 5, 99, 1352, 10, 99, 3, 99, 3, 99, 5, 99, 1356, 10, 99, 3, 99, 3, 99, 5, 99, 1360, 10, 99, 3, 100, 3, 100, 5, 100, 1364, 10, 100, 3, 100, 7, 100, 1367, 10, 100, 12, 100, 14, 100, 1370, 11, 100, 3, 101, 3, 101, 3, 101, 3, 101, 3, 102, 3, 102, 5, 102, 1378, 10, 102, 3, 102, 7, 102, 1381, 10, 102, 12, 102, 14, 102, 1384, 11, 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, 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, 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, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 5, 103, 1438, 10, 103, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 7, 104, 1446, 10, 104, 12, 104, 14, 104, 1449, 11, 104, 3, 104, 3, 104, 3, 104, 7, 104, 1454, 10, 104, 12, 104, 14, 104, 1457, 11, 104, 3, 104, 5, 104, 1460, 10, 104, 3, 105, 3, 105, 3, 105, 3, 106, 3, 106, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 5, 107, 1555, 10, 107, 3, 108, 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, 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, 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, 114, 3, 115, 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, 116, 3, 116, 3, 116, 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, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 121, 3, 121, 7, 121, 1657, 10, 121, 12, 121, 14, 121, 1660, 11, 121, 3, 122, 3, 122, 3, 123, 3, 123, 3, 124, 3, 124, 7, 124, 1668, 10, 124, 12, 124, 14, 124, 1671, 11, 124, 3, 124, 3, 124, 3, 124, 7, 124, 1676, 10, 124, 12, 124, 14, 124, 1679, 11, 124, 3, 124, 5, 124, 1682, 10, 124, 3, 125, 3, 125, 3, 125, 5, 125, 1687, 10, 125, 3, 126, 3, 126, 3, 126, 5, 126, 1692, 10, 126, 3, 127, 6, 127, 1695, 10, 127, 13, 127, 14, 127, 1696, 3, 127, 3, 127, 3, 128, 3, 128, 3, 128, 3, 128, 7, 128, 1705, 10, 128, 12, 128, 14, 128, 1708, 11, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 129, 3, 129, 3, 129, 3, 129, 7, 129, 1719, 10, 129, 12, 129, 14, 129, 1722, 11, 129, 3, 129, 3, 129, 3, 1706, 2, 130, 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, 2, 201, 101, 203, 2, 205, 102, 207, 103, 209, 2, 211, 2, 213, 104, 215, 105, 217, 106, 219, 107, 221, 108, 223, 109, 225, 110, 227, 111, 229, 112, 231, 113, 233, 114, 235, 115, 237, 116, 239, 117, 241, 118, 243, 2, 245, 2, 247, 119, 249, 2, 251, 2, 253, 120, 255, 121, 257, 122, 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, 1866, 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, 201, 3, 2, 2, 2, 2, 205, 3, 2, 2, 2, 2, 207, 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, 237, 3, 2, 2, 2, 2, 239, 3, 2, 2, 2, 2, 241, 3, 2, 2, 2, 2, 247, 3, 2, 2, 2, 2, 253, 3, 2, 2, 2, 2, 255, 3, 2, 2, 2, 2, 257, 3, 2, 2, 2, 3, 259, 3, 2, 2, 2, 5, 266, 3, 2, 2, 2, 7, 268, 3, 2, 2, 2, 9, 270, 3, 2, 2, 2, 11, 272, 3, 2, 2, 2, 13, 275, 3, 2, 2, 2, 15, 277, 3, 2, 2, 2, 17, 279, 3, 2, 2, 2, 19, 282, 3, 2, 2, 2, 21, 284, 3, 2, 2, 2, 23, 287, 3, 2, 2, 2, 25, 294, 3, 2, 2, 2, 27, 296, 3, 2, 2, 2, 29, 301, 3, 2, 2, 2, 31, 303, 3, 2, 2, 2, 33, 305, 3, 2, 2, 2, 35, 307, 3, 2, 2, 2, 37, 316, 3, 2, 2, 2, 39, 326, 3, 2, 2, 2, 41, 334, 3, 2, 2, 2, 43, 337, 3, 2, 2, 2, 45, 339, 3, 2, 2, 2, 47, 341, 3, 2, 2, 2, 49, 347, 3, 2, 2, 2, 51, 351, 3, 2, 2, 2, 53, 358, 3, 2, 2, 2, 55, 370, 3, 2, 2, 2, 57, 379, 3, 2, 2, 2, 59, 388, 3, 2, 2, 2, 61, 396, 3, 2, 2, 2, 63, 402, 3, 2, 2, 2, 65, 407, 3, 2, 2, 2, 67, 409, 3, 2, 2, 2, 69, 411, 3, 2, 2, 2, 71, 419, 3, 2, 2, 2, 73, 421, 3, 2, 2, 2, 75, 429, 3, 2, 2, 2, 77, 432, 3, 2, 2, 2, 79, 439, 3, 2, 2, 2, 81, 447, 3, 2, 2, 2, 83, 456, 3, 2, 2, 2, 85, 459, 3, 2, 2, 2, 87, 464, 3, 2, 2, 2, 89, 470, 3, 2, 2, 2, 91, 479, 3, 2, 2, 2, 93, 482, 3, 2, 2, 2, 95, 489, 3, 2, 2, 2, 97, 495, 3, 2, 2, 2, 99, 500, 3, 2, 2, 2, 101, 504, 3, 2, 2, 2, 103, 509, 3, 2, 2, 2, 105, 516, 3, 2, 2, 2, 107, 521, 3, 2, 2, 2, 109, 524, 3, 2, 2, 2, 111, 527, 3, 2, 2, 2, 113, 531, 3, 2, 2, 2, 115, 533, 3, 2, 2, 2, 117, 535, 3, 2, 2, 2, 119, 541, 3, 2, 2, 2, 121, 548, 3, 2, 2, 2, 123, 550, 3, 2, 2, 2, 125, 553, 3, 2, 2, 2, 127, 555, 3, 2, 2, 2, 129, 557, 3, 2, 2, 2, 131, 560, 3, 2, 2, 2, 133, 563, 3, 2, 2, 2, 135, 565, 3, 2, 2, 2, 137, 567, 3, 2, 2, 2, 139, 570, 3, 2, 2, 2, 141, 573, 3, 2, 2, 2, 143, 576, 3, 2, 2, 2, 145, 579, 3, 2, 2, 2, 147, 581, 3, 2, 2, 2, 149, 583, 3, 2, 2, 2, 151, 586, 3, 2, 2, 2, 153, 589, 3, 2, 2, 2, 155, 592, 3, 2, 2, 2, 157, 596, 3, 2, 2, 2, 159, 600, 3, 2, 2, 2, 161, 603, 3, 2, 2, 2, 163, 606, 3, 2, 2, 2, 165, 609, 3, 2, 2, 2, 167, 612, 3, 2, 2, 2, 169, 615, 3, 2, 2, 2, 171, 619, 3, 2, 2, 2, 173, 622, 3, 2, 2, 2, 175, 625, 3, 2, 2, 2, 177, 632, 3, 2, 2, 2, 179, 637, 3, 2, 2, 2, 181, 645, 3, 2, 2, 2, 183, 830, 3, 2, 2, 2, 185, 1047, 3, 2, 2, 2, 187, 1269, 3, 2, 2, 2, 189, 1293, 3, 2, 2, 2, 191, 1319, 3, 2, 2, 2, 193, 1322, 3, 2, 2, 2, 195, 1347, 3, 2, 2, 2, 197, 1355, 3, 2, 2, 2, 199, 1361, 3, 2, 2, 2, 201, 1371, 3, 2, 2, 2, 203, 1375, 3, 2, 2, 2, 205, 1437, 3, 2, 2, 2, 207, 1439, 3, 2, 2, 2, 209, 1461, 3, 2, 2, 2, 211, 1464, 3, 2, 2, 2, 213, 1554, 3, 2, 2, 2, 215, 1556, 3, 2, 2, 2, 217, 1566, 3, 2, 2, 2, 219, 1572, 3, 2, 2, 2, 221, 1581, 3, 2, 2, 2, 223, 1590, 3, 2, 2, 2, 225, 1599, 3, 2, 2, 2, 227, 1607, 3, 2, 2, 2, 229, 1616, 3, 2, 2, 2, 231, 1624, 3, 2, 2, 2, 233, 1632, 3, 2, 2, 2, 235, 1639, 3, 2, 2, 2, 237, 1644, 3, 2, 2, 2, 239, 1649, 3, 2, 2, 2, 241, 1654, 3, 2, 2, 2, 243, 1661, 3, 2, 2, 2, 245, 1663, 3, 2, 2, 2, 247, 1681, 3, 2, 2, 2, 249, 1686, 3, 2, 2, 2, 251, 1691, 3, 2, 2, 2, 253, 1694, 3, 2, 2, 2, 255, 1700, 3, 2, 2, 2, 257, 1714, 3, 2, 2, 2, 259, 260, 7, 114, 2, 2, 260, 261, 7, 116, 2, 2, 261, 262, 7, 99, 2, 2, 262, 263, 7, 105, 2, 2, 263, 264, 7, 111, 2, 2, 264, 265, 7, 99, 2, 2, 265, 4, 3, 2, 2, 2, 266, 267, 7, 61, 2, 2, 267, 6, 3, 2, 2, 2, 268, 269, 7, 96, 2, 2, 269, 8, 3, 2, 2, 2, 270, 271, 7, 128, 2, 2, 271, 10, 3, 2, 2, 2, 272, 273, 7, 64, 2, 2, 273, 274, 7, 63, 2, 2, 274, 12, 3, 2, 2, 2, 275, 276, 7, 64, 2, 2, 276, 14, 3, 2, 2, 2, 277, 278, 7, 62, 2, 2, 278, 16, 3, 2, 2, 2, 279, 280, 7, 62, 2, 2, 280, 281, 7, 63, 2, 2, 281, 18, 3, 2, 2, 2, 282, 283, 7, 63, 2, 2, 283, 20, 3, 2, 2, 2, 284, 285, 7, 99, 2, 2, 285, 286, 7, 117, 2, 2, 286, 22, 3, 2, 2, 2, 287, 288, 7, 107, 2, 2, 288, 289, 7, 111, 2, 2, 289, 290, 7, 114, 2, 2, 290, 291, 7, 113, 2, 2, 291, 292, 7, 116, 2, 2, 292, 293, 7, 118, 2, 2, 293, 24, 3, 2, 2, 2, 294, 295, 7, 44, 2, 2, 295, 26, 3, 2, 2, 2, 296, 297, 7, 104, 2, 2, 297, 298, 7, 116, 2, 2, 298, 299, 7, 113, 2, 2, 299, 300, 7, 111, 2, 2, 300, 28, 3, 2, 2, 2, 301, 302, 7, 125, 2, 2, 302, 30, 3, 2, 2, 2, 303, 304, 7, 46, 2, 2, 304, 32, 3, 2, 2, 2, 305, 306, 7, 127, 2, 2, 306, 34, 3, 2, 2, 2, 307, 308, 7, 101, 2, 2, 308, 309, 7, 113, 2, 2, 309, 310, 7, 112, 2, 2, 310, 311, 7, 118, 2, 2, 311, 312, 7, 116, 2, 2, 312, 313, 7, 99, 2, 2, 313, 314, 7, 101, 2, 2, 314, 315, 7, 118, 2, 2, 315, 36, 3, 2, 2, 2, 316, 317, 7, 107, 2, 2, 317, 318, 7, 112, 2, 2, 318, 319, 7, 118, 2, 2, 319, 320, 7, 103, 2, 2, 320, 321, 7, 116, 2, 2, 321, 322, 7, 104, 2, 2, 322, 323, 7, 99, 2, 2, 323, 324, 7, 101, 2, 2, 324, 325, 7, 103, 2, 2, 325, 38, 3, 2, 2, 2, 326, 327, 7, 110, 2, 2, 327, 328, 7, 107, 2, 2, 328, 329, 7, 100, 2, 2, 329, 330, 7, 116, 2, 2, 330, 331, 7, 99, 2, 2, 331, 332, 7, 116, 2, 2, 332, 333, 7, 123, 2, 2, 333, 40, 3, 2, 2, 2, 334, 335, 7, 107, 2, 2, 335, 336, 7, 117, 2, 2, 336, 42, 3, 2, 2, 2, 337, 338, 7, 42, 2, 2, 338, 44, 3, 2, 2, 2, 339, 340, 7, 43, 2, 2, 340, 46, 3, 2, 2, 2, 341, 342, 7, 119, 2, 2, 342, 343, 7, 117, 2, 2, 343, 344, 7, 107, 2, 2, 344, 345, 7, 112, 2, 2, 345, 346, 7, 105, 2, 2, 346, 48, 3, 2, 2, 2, 347, 348, 7, 104, 2, 2, 348, 349, 7, 113, 2, 2, 349, 350, 7, 116, 2, 2, 350, 50, 3, 2, 2, 2, 351, 352, 7, 117, 2, 2, 352, 353, 7, 118, 2, 2, 353, 354, 7, 116, 2, 2, 354, 355, 7, 119, 2, 2, 355, 356, 7, 101, 2, 2, 356, 357, 7, 118, 2, 2, 357, 52, 3, 2, 2, 2, 358, 359, 7, 101, 2, 2, 359, 360, 7, 113, 2, 2, 360, 361, 7, 112, 2, 2, 361, 362, 7, 117, 2, 2, 362, 363, 7, 118, 2, 2, 363, 364, 7, 116, 2, 2, 364, 365, 7, 119, 2, 2, 365, 366, 7, 101, 2, 2, 366, 367, 7, 118, 2, 2, 367, 368, 7, 113, 2, 2, 368, 369, 7, 116, 2, 2, 369, 54, 3, 2, 2, 2, 370, 371, 7, 111, 2, 2, 371, 372, 7, 113, 2, 2, 372, 373, 7, 102, 2, 2, 373, 374, 7, 107, 2, 2, 374, 375, 7, 104, 2, 2, 375, 376, 7, 107, 2, 2, 376, 377, 7, 103, 2, 2, 377, 378, 7, 116, 2, 2, 378, 56, 3, 2, 2, 2, 379, 380, 7, 104, 2, 2, 380, 381, 7, 119, 2, 2, 381, 382, 7, 112, 2, 2, 382, 383, 7, 101, 2, 2, 383, 384, 7, 118, 2, 2, 384, 385, 7, 107, 2, 2, 385, 386, 7, 113, 2, 2, 386, 387, 7, 112, 2, 2, 387, 58, 3, 2, 2, 2, 388, 389, 7, 116, 2, 2, 389, 390, 7, 103, 2, 2, 390, 391, 7, 118, 2, 2, 391, 392, 7, 119, 2, 2, 392, 393, 7, 116, 2, 2, 393, 394, 7, 112, 2, 2, 394, 395, 7, 117, 2, 2, 395, 60, 3, 2, 2, 2, 396, 397, 7, 103, 2, 2, 397, 398, 7, 120, 2, 2, 398, 399, 7, 103, 2, 2, 399, 400, 7, 112, 2, 2, 400, 401, 7, 118, 2, 2, 401, 62, 3, 2, 2, 2, 402, 403, 7, 103, 2, 2, 403, 404, 7, 112, 2, 2, 404, 405, 7, 119, 2, 2, 405, 406, 7, 111, 2, 2, 406, 64, 3, 2, 2, 2, 407, 408, 7, 93, 2, 2, 408, 66, 3, 2, 2, 2, 409, 410, 7, 95, 2, 2, 410, 68, 3, 2, 2, 2, 411, 412, 7, 99, 2, 2, 412, 413, 7, 102, 2, 2, 413, 414, 7, 102, 2, 2, 414, 415, 7, 116, 2, 2, 415, 416, 7, 103, 2, 2, 416, 417, 7, 117, 2, 2, 417, 418, 7, 117, 2, 2, 418, 70, 3, 2, 2, 2, 419, 420, 7, 48, 2, 2, 420, 72, 3, 2, 2, 2, 421, 422, 7, 111, 2, 2, 422, 423, 7, 99, 2, 2, 423, 424, 7, 114, 2, 2, 424, 425, 7, 114, 2, 2, 425, 426, 7, 107, 2, 2, 426, 427, 7, 112, 2, 2, 427, 428, 7, 105, 2, 2, 428, 74, 3, 2, 2, 2, 429, 430, 7, 63, 2, 2, 430, 431, 7, 64, 2, 2, 431, 76, 3, 2, 2, 2, 432, 433, 7, 111, 2, 2, 433, 434, 7, 103, 2, 2, 434, 435, 7, 111, 2, 2, 435, 436, 7, 113, 2, 2, 436, 437, 7, 116, 2, 2, 437, 438, 7, 123, 2, 2, 438, 78, 3, 2, 2, 2, 439, 440, 7, 117, 2, 2, 440, 441, 7, 118, 2, 2, 441, 442, 7, 113, 2, 2, 442, 443, 7, 116, 2, 2, 443, 444, 7, 99, 2, 2, 444, 445, 7, 105, 2, 2, 445, 446, 7, 103, 2, 2, 446, 80, 3, 2, 2, 2, 447, 448, 7, 101, 2, 2, 448, 449, 7, 99, 2, 2, 449, 450, 7, 110, 2, 2, 450, 451, 7, 110, 2, 2, 451, 452, 7, 102, 2, 2, 452, 453, 7, 99, 2, 2, 453, 454, 7, 118, 2, 2, 454, 455, 7, 99, 2, 2, 455, 82, 3, 2, 2, 2, 456, 457, 7, 107, 2, 2, 457, 458, 7, 104, 2, 2, 458, 84, 3, 2, 2, 2, 459, 460, 7, 103, 2, 2, 460, 461, 7, 110, 2, 2, 461, 462, 7, 117, 2, 2, 462, 463, 7, 103, 2, 2, 463, 86, 3, 2, 2, 2, 464, 465, 7, 121, 2, 2, 465, 466, 7, 106, 2, 2, 466, 467, 7, 107, 2, 2, 467, 468, 7, 110, 2, 2, 468, 469, 7, 103, 2, 2, 469, 88, 3, 2, 2, 2, 470, 471, 7, 99, 2, 2, 471, 472, 7, 117, 2, 2, 472, 473, 7, 117, 2, 2, 473, 474, 7, 103, 2, 2, 474, 475, 7, 111, 2, 2, 475, 476, 7, 100, 2, 2, 476, 477, 7, 110, 2, 2, 477, 478, 7, 123, 2, 2, 478, 90, 3, 2, 2, 2, 479, 480, 7, 102, 2, 2, 480, 481, 7, 113, 2, 2, 481, 92, 3, 2, 2, 2, 482, 483, 7, 116, 2, 2, 483, 484, 7, 103, 2, 2, 484, 485, 7, 118, 2, 2, 485, 486, 7, 119, 2, 2, 486, 487, 7, 116, 2, 2, 487, 488, 7, 112, 2, 2, 488, 94, 3, 2, 2, 2, 489, 490, 7, 118, 2, 2, 490, 491, 7, 106, 2, 2, 491, 492, 7, 116, 2, 2, 492, 493, 7, 113, 2, 2, 493, 494, 7, 121, 2, 2, 494, 96, 3, 2, 2, 2, 495, 496, 7, 103, 2, 2, 496, 497, 7, 111, 2, 2, 497, 498, 7, 107, 2, 2, 498, 499, 7, 118, 2, 2, 499, 98, 3, 2, 2, 2, 500, 501, 7, 120, 2, 2, 501, 502, 7, 99, 2, 2, 502, 503, 7, 116, 2, 2, 503, 100, 3, 2, 2, 2, 504, 505, 7, 100, 2, 2, 505, 506, 7, 113, 2, 2, 506, 507, 7, 113, 2, 2, 507, 508, 7, 110, 2, 2, 508, 102, 3, 2, 2, 2, 509, 510, 7, 117, 2, 2, 510, 511, 7, 118, 2, 2, 511, 512, 7, 116, 2, 2, 512, 513, 7, 107, 2, 2, 513, 514, 7, 112, 2, 2, 514, 515, 7, 105, 2, 2, 515, 104, 3, 2, 2, 2, 516, 517, 7, 100, 2, 2, 517, 518, 7, 123, 2, 2, 518, 519, 7, 118, 2, 2, 519, 520, 7, 103, 2, 2, 520, 106, 3, 2, 2, 2, 521, 522, 7, 45, 2, 2, 522, 523, 7, 45, 2, 2, 523, 108, 3, 2, 2, 2, 524, 525, 7, 47, 2, 2, 525, 526, 7, 47, 2, 2, 526, 110, 3, 2, 2, 2, 527, 528, 7, 112, 2, 2, 528, 529, 7, 103, 2, 2, 529, 530, 7, 121, 2, 2, 530, 112, 3, 2, 2, 2, 531, 532, 7, 45, 2, 2, 532, 114, 3, 2, 2, 2, 533, 534, 7, 47, 2, 2, 534, 116, 3, 2, 2, 2, 535, 536, 7, 99, 2, 2, 536, 537, 7, 104, 2, 2, 537, 538, 7, 118, 2, 2, 538, 539, 7, 103, 2, 2, 539, 540, 7, 116, 2, 2, 540, 118, 3, 2, 2, 2, 541, 542, 7, 102, 2, 2, 542, 543, 7, 103, 2, 2, 543, 544, 7, 110, 2, 2, 544, 545, 7, 103, 2, 2, 545, 546, 7, 118, 2, 2, 546, 547, 7, 103, 2, 2, 547, 120, 3, 2, 2, 2, 548, 549, 7, 35, 2, 2, 549, 122, 3, 2, 2, 2, 550, 551, 7, 44, 2, 2, 551, 552, 7, 44, 2, 2, 552, 124, 3, 2, 2, 2, 553, 554, 7, 49, 2, 2, 554, 126, 3, 2, 2, 2, 555, 556, 7, 39, 2, 2, 556, 128, 3, 2, 2, 2, 557, 558, 7, 62, 2, 2, 558, 559, 7, 62, 2, 2, 559, 130, 3, 2, 2, 2, 560, 561, 7, 64, 2, 2, 561, 562, 7, 64, 2, 2, 562, 132, 3, 2, 2, 2, 563, 564, 7, 40, 2, 2, 564, 134, 3, 2, 2, 2, 565, 566, 7, 126, 2, 2, 566, 136, 3, 2, 2, 2, 567, 568, 7, 63, 2, 2, 568, 569, 7, 63, 2, 2, 569, 138, 3, 2, 2, 2, 570, 571, 7, 35, 2, 2, 571, 572, 7, 63, 2, 2, 572, 140, 3, 2, 2, 2, 573, 574, 7, 40, 2, 2, 574, 575, 7, 40, 2, 2, 575, 142, 3, 2, 2, 2, 576, 577, 7, 126, 2, 2, 577, 578, 7, 126, 2, 2, 578, 144, 3, 2, 2, 2, 579, 580, 7, 65, 2, 2, 580, 146, 3, 2, 2, 2, 581, 582, 7, 60, 2, 2, 582, 148, 3, 2, 2, 2, 583, 584, 7, 126, 2, 2, 584, 585, 7, 63, 2, 2, 585, 150, 3, 2, 2, 2, 586, 587, 7, 96, 2, 2, 587, 588, 7, 63, 2, 2, 588, 152, 3, 2, 2, 2, 589, 590, 7, 40, 2, 2, 590, 591, 7, 63, 2, 2, 591, 154, 3, 2, 2, 2, 592, 593, 7, 62, 2, 2, 593, 594, 7, 62, 2, 2, 594, 595, 7, 63, 2, 2, 595, 156, 3, 2, 2, 2, 596, 597, 7, 64, 2, 2, 597, 598, 7, 64, 2, 2, 598, 599, 7, 63, 2, 2, 599, 158, 3, 2, 2, 2, 600, 601, 7, 45, 2, 2, 601, 602, 7, 63, 2, 2, 602, 160, 3, 2, 2, 2, 603, 604, 7, 47, 2, 2, 604, 605, 7, 63, 2, 2, 605, 162, 3, 2, 2, 2, 606, 607, 7, 44, 2, 2, 607, 608, 7, 63, 2, 2, 608, 164, 3, 2, 2, 2, 609, 610, 7, 49, 2, 2, 610, 611, 7, 63, 2, 2, 611, 166, 3, 2, 2, 2, 612, 613, 7, 39, 2, 2, 613, 614, 7, 63, 2, 2, 614, 168, 3, 2, 2, 2, 615, 616, 7, 110, 2, 2, 616, 617, 7, 103, 2, 2, 617, 618, 7, 118, 2, 2, 618, 170, 3, 2, 2, 2, 619, 620, 7, 60, 2, 2, 620, 621, 7, 63, 2, 2, 621, 172, 3, 2, 2, 2, 622, 623, 7, 63, 2, 2, 623, 624, 7, 60, 2, 2, 624, 174, 3, 2, 2, 2, 625, 626, 7, 117, 2, 2, 626, 627, 7, 121, 2, 2, 627, 628, 7, 107, 2, 2, 628, 629, 7, 118, 2, 2, 629, 630, 7, 101, 2, 2, 630, 631, 7, 106, 2, 2, 631, 176, 3, 2, 2, 2, 632, 633, 7, 101, 2, 2, 633, 634, 7, 99, 2, 2, 634, 635, 7, 117, 2, 2, 635, 636, 7, 103, 2, 2, 636, 178, 3, 2, 2, 2, 637, 638, 7, 102, 2, 2, 638, 639, 7, 103, 2, 2, 639, 640, 7, 104, 2, 2, 640, 641, 7, 99, 2, 2, 641, 642, 7, 119, 2, 2, 642, 643, 7, 110, 2, 2, 643, 644, 7, 118, 2, 2, 644, 180, 3, 2, 2, 2, 645, 646, 7, 47, 2, 2, 646, 647, 7, 64, 2, 2, 647, 182, 3, 2, 2, 2, 648, 649, 7, 107, 2, 2, 649, 650, 7, 112, 2, 2, 650, 831, 7, 118, 2, 2, 651, 652, 7, 107, 2, 2, 652, 653, 7, 112, 2, 2, 653, 654, 7, 118, 2, 2, 654, 831, 7, 58, 2, 2, 655, 656, 7, 107, 2, 2, 656, 657, 7, 112, 2, 2, 657, 658, 7, 118, 2, 2, 658, 659, 7, 51, 2, 2, 659, 831, 7, 56, 2, 2, 660, 661, 7, 107, 2, 2, 661, 662, 7, 112, 2, 2, 662, 663, 7, 118, 2, 2, 663, 664, 7, 52, 2, 2, 664, 831, 7, 54, 2, 2, 665, 666, 7, 107, 2, 2, 666, 667, 7, 112, 2, 2, 667, 668, 7, 118, 2, 2, 668, 669, 7, 53, 2, 2, 669, 831, 7, 52, 2, 2, 670, 671, 7, 107, 2, 2, 671, 672, 7, 112, 2, 2, 672, 673, 7, 118, 2, 2, 673, 674, 7, 54, 2, 2, 674, 831, 7, 50, 2, 2, 675, 676, 7, 107, 2, 2, 676, 677, 7, 112, 2, 2, 677, 678, 7, 118, 2, 2, 678, 679, 7, 54, 2, 2, 679, 831, 7, 58, 2, 2, 680, 681, 7, 107, 2, 2, 681, 682, 7, 112, 2, 2, 682, 683, 7, 118, 2, 2, 683, 684, 7, 55, 2, 2, 684, 831, 7, 56, 2, 2, 685, 686, 7, 107, 2, 2, 686, 687, 7, 112, 2, 2, 687, 688, 7, 118, 2, 2, 688, 689, 7, 56, 2, 2, 689, 831, 7, 54, 2, 2, 690, 691, 7, 107, 2, 2, 691, 692, 7, 112, 2, 2, 692, 693, 7, 118, 2, 2, 693, 694, 7, 57, 2, 2, 694, 831, 7, 52, 2, 2, 695, 696, 7, 107, 2, 2, 696, 697, 7, 112, 2, 2, 697, 698, 7, 118, 2, 2, 698, 699, 7, 58, 2, 2, 699, 831, 7, 50, 2, 2, 700, 701, 7, 107, 2, 2, 701, 702, 7, 112, 2, 2, 702, 703, 7, 118, 2, 2, 703, 704, 7, 58, 2, 2, 704, 831, 7, 58, 2, 2, 705, 706, 7, 107, 2, 2, 706, 707, 7, 112, 2, 2, 707, 708, 7, 118, 2, 2, 708, 709, 7, 59, 2, 2, 709, 831, 7, 56, 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, 50, 2, 2, 715, 831, 7, 54, 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, 51, 2, 2, 721, 831, 7, 52, 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, 831, 7, 50, 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, 52, 2, 2, 733, 831, 7, 58, 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, 53, 2, 2, 739, 831, 7, 56, 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, 54, 2, 2, 745, 831, 7, 54, 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, 55, 2, 2, 751, 831, 7, 52, 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, 831, 7, 50, 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, 56, 2, 2, 763, 831, 7, 58, 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, 57, 2, 2, 769, 831, 7, 56, 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, 58, 2, 2, 775, 831, 7, 54, 2, 2, 776, 777, 7, 107, 2, 2, 777, 778, 7, 112, 2, 2, 778, 779, 7, 118, 2, 2, 779, 780, 7, 51, 2, 2, 780, 781, 7, 59, 2, 2, 781, 831, 7, 52, 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, 831, 7, 50, 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, 50, 2, 2, 793, 831, 7, 58, 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, 51, 2, 2, 799, 831, 7, 56, 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, 52, 2, 2, 805, 831, 7, 54, 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, 53, 2, 2, 811, 831, 7, 52, 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, 831, 7, 50, 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, 54, 2, 2, 823, 831, 7, 58, 2, 2, 824, 825, 7, 107, 2, 2, 825, 826, 7, 112, 2, 2, 826, 827, 7, 118, 2, 2, 827, 828, 7, 52, 2, 2, 828, 829, 7, 55, 2, 2, 829, 831, 7, 56, 2, 2, 830, 648, 3, 2, 2, 2, 830, 651, 3, 2, 2, 2, 830, 655, 3, 2, 2, 2, 830, 660, 3, 2, 2, 2, 830, 665, 3, 2, 2, 2, 830, 670, 3, 2, 2, 2, 830, 675, 3, 2, 2, 2, 830, 680, 3, 2, 2, 2, 830, 685, 3, 2, 2, 2, 830, 690, 3, 2, 2, 2, 830, 695, 3, 2, 2, 2, 830, 700, 3, 2, 2, 2, 830, 705, 3, 2, 2, 2, 830, 710, 3, 2, 2, 2, 830, 716, 3, 2, 2, 2, 830, 722, 3, 2, 2, 2, 830, 728, 3, 2, 2, 2, 830, 734, 3, 2, 2, 2, 830, 740, 3, 2, 2, 2, 830, 746, 3, 2, 2, 2, 830, 752, 3, 2, 2, 2, 830, 758, 3, 2, 2, 2, 830, 764, 3, 2, 2, 2, 830, 770, 3, 2, 2, 2, 830, 776, 3, 2, 2, 2, 830, 782, 3, 2, 2, 2, 830, 788, 3, 2, 2, 2, 830, 794, 3, 2, 2, 2, 830, 800, 3, 2, 2, 2, 830, 806, 3, 2, 2, 2, 830, 812, 3, 2, 2, 2, 830, 818, 3, 2, 2, 2, 830, 824, 3, 2, 2, 2, 831, 184, 3, 2, 2, 2, 832, 833, 7, 119, 2, 2, 833, 834, 7, 107, 2, 2, 834, 835, 7, 112, 2, 2, 835, 1048, 7, 118, 2, 2, 836, 837, 7, 119, 2, 2, 837, 838, 7, 107, 2, 2, 838, 839, 7, 112, 2, 2, 839, 840, 7, 118, 2, 2, 840, 1048, 7, 58, 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, 51, 2, 2, 846, 1048, 7, 56, 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, 52, 2, 2, 852, 1048, 7, 54, 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, 53, 2, 2, 858, 1048, 7, 52, 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, 1048, 7, 50, 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, 54, 2, 2, 870, 1048, 7, 58, 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, 55, 2, 2, 876, 1048, 7, 56, 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, 56, 2, 2, 882, 1048, 7, 54, 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, 57, 2, 2, 888, 1048, 7, 52, 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, 1048, 7, 50, 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, 58, 2, 2, 900, 1048, 7, 58, 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, 59, 2, 2, 906, 1048, 7, 56, 2, 2, 907, 908, 7, 119, 2, 2, 908, 909, 7, 107, 2, 2, 909, 910, 7, 112, 2, 2, 910, 911, 7, 118, 2, 2, 911, 912, 7, 51, 2, 2, 912, 913, 7, 50, 2, 2, 913, 1048, 7, 54, 2, 2, 914, 915, 7, 119, 2, 2, 915, 916, 7, 107, 2, 2, 916, 917, 7, 112, 2, 2, 917, 918, 7, 118, 2, 2, 918, 919, 7, 51, 2, 2, 919, 920, 7, 51, 2, 2, 920, 1048, 7, 52, 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, 51, 2, 2, 926, 927, 7, 52, 2, 2, 927, 1048, 7, 50, 2, 2, 928, 929, 7, 119, 2, 2, 929, 930, 7, 107, 2, 2, 930, 931, 7, 112, 2, 2, 931, 932, 7, 118, 2, 2, 932, 933, 7, 51, 2, 2, 933, 934, 7, 52, 2, 2, 934, 1048, 7, 58, 2, 2, 935, 936, 7, 119, 2, 2, 936, 937, 7, 107, 2, 2, 937, 938, 7, 112, 2, 2, 938, 939, 7, 118, 2, 2, 939, 940, 7, 51, 2, 2, 940, 941, 7, 53, 2, 2, 941, 1048, 7, 56, 2, 2, 942, 943, 7, 119, 2, 2, 943, 944, 7, 107, 2, 2, 944, 945, 7, 112, 2, 2, 945, 946, 7, 118, 2, 2, 946, 947, 7, 51, 2, 2, 947, 948, 7, 54, 2, 2, 948, 1048, 7, 54, 2, 2, 949, 950, 7, 119, 2, 2, 950, 951, 7, 107, 2, 2, 951, 952, 7, 112, 2, 2, 952, 953, 7, 118, 2, 2, 953, 954, 7, 51, 2, 2, 954, 955, 7, 55, 2, 2, 955, 1048, 7, 52, 2, 2, 956, 957, 7, 119, 2, 2, 957, 958, 7, 107, 2, 2, 958, 959, 7, 112, 2, 2, 959, 960, 7, 118, 2, 2, 960, 961, 7, 51, 2, 2, 961, 962, 7, 56, 2, 2, 962, 1048, 7, 50, 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, 51, 2, 2, 968, 969, 7, 56, 2, 2, 969, 1048, 7, 58, 2, 2, 970, 971, 7, 119, 2, 2, 971, 972, 7, 107, 2, 2, 972, 973, 7, 112, 2, 2, 973, 974, 7, 118, 2, 2, 974, 975, 7, 51, 2, 2, 975, 976, 7, 57, 2, 2, 976, 1048, 7, 56, 2, 2, 977, 978, 7, 119, 2, 2, 978, 979, 7, 107, 2, 2, 979, 980, 7, 112, 2, 2, 980, 981, 7, 118, 2, 2, 981, 982, 7, 51, 2, 2, 982, 983, 7, 58, 2, 2, 983, 1048, 7, 54, 2, 2, 984, 985, 7, 119, 2, 2, 985, 986, 7, 107, 2, 2, 986, 987, 7, 112, 2, 2, 987, 988, 7, 118, 2, 2, 988, 989, 7, 51, 2, 2, 989, 990, 7, 59, 2, 2, 990, 1048, 7, 52, 2, 2, 991, 992, 7, 119, 2, 2, 992, 993, 7, 107, 2, 2, 993, 994, 7, 112, 2, 2, 994, 995, 7, 118, 2, 2, 995, 996, 7, 52, 2, 2, 996, 997, 7, 50, 2, 2, 997, 1048, 7, 50, 2, 2, 998, 999, 7, 119, 2, 2, 999, 1000, 7, 107, 2, 2, 1000, 1001, 7, 112, 2, 2, 1001, 1002, 7, 118, 2, 2, 1002, 1003, 7, 52, 2, 2, 1003, 1004, 7, 50, 2, 2, 1004, 1048, 7, 58, 2, 2, 1005, 1006, 7, 119, 2, 2, 1006, 1007, 7, 107, 2, 2, 1007, 1008, 7, 112, 2, 2, 1008, 1009, 7, 118, 2, 2, 1009, 1010, 7, 52, 2, 2, 1010, 1011, 7, 51, 2, 2, 1011, 1048, 7, 56, 2, 2, 1012, 1013, 7, 119, 2, 2, 1013, 1014, 7, 107, 2, 2, 1014, 1015, 7, 112, 2, 2, 1015, 1016, 7, 118, 2, 2, 1016, 1017, 7, 52, 2, 2, 1017, 1018, 7, 52, 2, 2, 1018, 1048, 7, 54, 2, 2, 1019, 1020, 7, 119, 2, 2, 1020, 1021, 7, 107, 2, 2, 1021, 1022, 7, 112, 2, 2, 1022, 1023, 7, 118, 2, 2, 1023, 1024, 7, 52, 2, 2, 1024, 1025, 7, 53, 2, 2, 1025, 1048, 7, 52, 2, 2, 1026, 1027, 7, 119, 2, 2, 1027, 1028, 7, 107, 2, 2, 1028, 1029, 7, 112, 2, 2, 1029, 1030, 7, 118, 2, 2, 1030, 1031, 7, 52, 2, 2, 1031, 1032, 7, 54, 2, 2, 1032, 1048, 7, 50, 2, 2, 1033, 1034, 7, 119, 2, 2, 1034, 1035, 7, 107, 2, 2, 1035, 1036, 7, 112, 2, 2, 1036, 1037, 7, 118, 2, 2, 1037, 1038, 7, 52, 2, 2, 1038, 1039, 7, 54, 2, 2, 1039, 1048, 7, 58, 2, 2, 1040, 1041, 7, 119, 2, 2, 1041, 1042, 7, 107, 2, 2, 1042, 1043, 7, 112, 2, 2, 1043, 1044, 7, 118, 2, 2, 1044, 1045, 7, 52, 2, 2, 1045, 1046, 7, 55, 2, 2, 1046, 1048, 7, 56, 2, 2, 1047, 832, 3, 2, 2, 2, 1047, 836, 3, 2, 2, 2, 1047, 841, 3, 2, 2, 2, 1047, 847, 3, 2, 2, 2, 1047, 853, 3, 2, 2, 2, 1047, 859, 3, 2, 2, 2, 1047, 865, 3, 2, 2, 2, 1047, 871, 3, 2, 2, 2, 1047, 877, 3, 2, 2, 2, 1047, 883, 3, 2, 2, 2, 1047, 889, 3, 2, 2, 2, 1047, 895, 3, 2, 2, 2, 1047, 901, 3, 2, 2, 2, 1047, 907, 3, 2, 2, 2, 1047, 914, 3, 2, 2, 2, 1047, 921, 3, 2, 2, 2, 1047, 928, 3, 2, 2, 2, 1047, 935, 3, 2, 2, 2, 1047, 942, 3, 2, 2, 2, 1047, 949, 3, 2, 2, 2, 1047, 956, 3, 2, 2, 2, 1047, 963, 3, 2, 2, 2, 1047, 970, 3, 2, 2, 2, 1047, 977, 3, 2, 2, 2, 1047, 984, 3, 2, 2, 2, 1047, 991, 3, 2, 2, 2, 1047, 998, 3, 2, 2, 2, 1047, 1005, 3, 2, 2, 2, 1047, 1012, 3, 2, 2, 2, 1047, 1019, 3, 2, 2, 2, 1047, 1026, 3, 2, 2, 2, 1047, 1033, 3, 2, 2, 2, 1047, 1040, 3, 2, 2, 2, 1048, 186, 3, 2, 2, 2, 1049, 1050, 7, 100, 2, 2, 1050, 1051, 7, 123, 2, 2, 1051, 1052, 7, 118, 2, 2, 1052, 1053, 7, 103, 2, 2, 1053, 1270, 7, 117, 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, 1270, 7, 51, 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, 1270, 7, 52, 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, 1270, 7, 53, 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, 1270, 7, 54, 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, 1270, 7, 55, 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, 1270, 7, 56, 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, 1270, 7, 57, 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, 1270, 7, 58, 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, 1270, 7, 59, 2, 2, 1108, 1109, 7, 100, 2, 2, 1109, 1110, 7, 123, 2, 2, 1110, 1111, 7, 118, 2, 2, 1111, 1112, 7, 103, 2, 2, 1112, 1113, 7, 117, 2, 2, 1113, 1114, 7, 51, 2, 2, 1114, 1270, 7, 50, 2, 2, 1115, 1116, 7, 100, 2, 2, 1116, 1117, 7, 123, 2, 2, 1117, 1118, 7, 118, 2, 2, 1118, 1119, 7, 103, 2, 2, 1119, 1120, 7, 117, 2, 2, 1120, 1121, 7, 51, 2, 2, 1121, 1270, 7, 51, 2, 2, 1122, 1123, 7, 100, 2, 2, 1123, 1124, 7, 123, 2, 2, 1124, 1125, 7, 118, 2, 2, 1125, 1126, 7, 103, 2, 2, 1126, 1127, 7, 117, 2, 2, 1127, 1128, 7, 51, 2, 2, 1128, 1270, 7, 52, 2, 2, 1129, 1130, 7, 100, 2, 2, 1130, 1131, 7, 123, 2, 2, 1131, 1132, 7, 118, 2, 2, 1132, 1133, 7, 103, 2, 2, 1133, 1134, 7, 117, 2, 2, 1134, 1135, 7, 51, 2, 2, 1135, 1270, 7, 53, 2, 2, 1136, 1137, 7, 100, 2, 2, 1137, 1138, 7, 123, 2, 2, 1138, 1139, 7, 118, 2, 2, 1139, 1140, 7, 103, 2, 2, 1140, 1141, 7, 117, 2, 2, 1141, 1142, 7, 51, 2, 2, 1142, 1270, 7, 54, 2, 2, 1143, 1144, 7, 100, 2, 2, 1144, 1145, 7, 123, 2, 2, 1145, 1146, 7, 118, 2, 2, 1146, 1147, 7, 103, 2, 2, 1147, 1148, 7, 117, 2, 2, 1148, 1149, 7, 51, 2, 2, 1149, 1270, 7, 55, 2, 2, 1150, 1151, 7, 100, 2, 2, 1151, 1152, 7, 123, 2, 2, 1152, 1153, 7, 118, 2, 2, 1153, 1154, 7, 103, 2, 2, 1154, 1155, 7, 117, 2, 2, 1155, 1156, 7, 51, 2, 2, 1156, 1270, 7, 56, 2, 2, 1157, 1158, 7, 100, 2, 2, 1158, 1159, 7, 123, 2, 2, 1159, 1160, 7, 118, 2, 2, 1160, 1161, 7, 103, 2, 2, 1161, 1162, 7, 117, 2, 2, 1162, 1163, 7, 51, 2, 2, 1163, 1270, 7, 57, 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, 1170, 7, 51, 2, 2, 1170, 1270, 7, 58, 2, 2, 1171, 1172, 7, 100, 2, 2, 1172, 1173, 7, 123, 2, 2, 1173, 1174, 7, 118, 2, 2, 1174, 1175, 7, 103, 2, 2, 1175, 1176, 7, 117, 2, 2, 1176, 1177, 7, 51, 2, 2, 1177, 1270, 7, 59, 2, 2, 1178, 1179, 7, 100, 2, 2, 1179, 1180, 7, 123, 2, 2, 1180, 1181, 7, 118, 2, 2, 1181, 1182, 7, 103, 2, 2, 1182, 1183, 7, 117, 2, 2, 1183, 1184, 7, 52, 2, 2, 1184, 1270, 7, 50, 2, 2, 1185, 1186, 7, 100, 2, 2, 1186, 1187, 7, 123, 2, 2, 1187, 1188, 7, 118, 2, 2, 1188, 1189, 7, 103, 2, 2, 1189, 1190, 7, 117, 2, 2, 1190, 1191, 7, 52, 2, 2, 1191, 1270, 7, 51, 2, 2, 1192, 1193, 7, 100, 2, 2, 1193, 1194, 7, 123, 2, 2, 1194, 1195, 7, 118, 2, 2, 1195, 1196, 7, 103, 2, 2, 1196, 1197, 7, 117, 2, 2, 1197, 1198, 7, 52, 2, 2, 1198, 1270, 7, 52, 2, 2, 1199, 1200, 7, 100, 2, 2, 1200, 1201, 7, 123, 2, 2, 1201, 1202, 7, 118, 2, 2, 1202, 1203, 7, 103, 2, 2, 1203, 1204, 7, 117, 2, 2, 1204, 1205, 7, 52, 2, 2, 1205, 1270, 7, 53, 2, 2, 1206, 1207, 7, 100, 2, 2, 1207, 1208, 7, 123, 2, 2, 1208, 1209, 7, 118, 2, 2, 1209, 1210, 7, 103, 2, 2, 1210, 1211, 7, 117, 2, 2, 1211, 1212, 7, 52, 2, 2, 1212, 1270, 7, 54, 2, 2, 1213, 1214, 7, 100, 2, 2, 1214, 1215, 7, 123, 2, 2, 1215, 1216, 7, 118, 2, 2, 1216, 1217, 7, 103, 2, 2, 1217, 1218, 7, 117, 2, 2, 1218, 1219, 7, 52, 2, 2, 1219, 1270, 7, 55, 2, 2, 1220, 1221, 7, 100, 2, 2, 1221, 1222, 7, 123, 2, 2, 1222, 1223, 7, 118, 2, 2, 1223, 1224, 7, 103, 2, 2, 1224, 1225, 7, 117, 2, 2, 1225, 1226, 7, 52, 2, 2, 1226, 1270, 7, 56, 2, 2, 1227, 1228, 7, 100, 2, 2, 1228, 1229, 7, 123, 2, 2, 1229, 1230, 7, 118, 2, 2, 1230, 1231, 7, 103, 2, 2, 1231, 1232, 7, 117, 2, 2, 1232, 1233, 7, 52, 2, 2, 1233, 1270, 7, 57, 2, 2, 1234, 1235, 7, 100, 2, 2, 1235, 1236, 7, 123, 2, 2, 1236, 1237, 7, 118, 2, 2, 1237, 1238, 7, 103, 2, 2, 1238, 1239, 7, 117, 2, 2, 1239, 1240, 7, 52, 2, 2, 1240, 1270, 7, 58, 2, 2, 1241, 1242, 7, 100, 2, 2, 1242, 1243, 7, 123, 2, 2, 1243, 1244, 7, 118, 2, 2, 1244, 1245, 7, 103, 2, 2, 1245, 1246, 7, 117, 2, 2, 1246, 1247, 7, 52, 2, 2, 1247, 1270, 7, 59, 2, 2, 1248, 1249, 7, 100, 2, 2, 1249, 1250, 7, 123, 2, 2, 1250, 1251, 7, 118, 2, 2, 1251, 1252, 7, 103, 2, 2, 1252, 1253, 7, 117, 2, 2, 1253, 1254, 7, 53, 2, 2, 1254, 1270, 7, 50, 2, 2, 1255, 1256, 7, 100, 2, 2, 1256, 1257, 7, 123, 2, 2, 1257, 1258, 7, 118, 2, 2, 1258, 1259, 7, 103, 2, 2, 1259, 1260, 7, 117, 2, 2, 1260, 1261, 7, 53, 2, 2, 1261, 1270, 7, 51, 2, 2, 1262, 1263, 7, 100, 2, 2, 1263, 1264, 7, 123, 2, 2, 1264, 1265, 7, 118, 2, 2, 1265, 1266, 7, 103, 2, 2, 1266, 1267, 7, 117, 2, 2, 1267, 1268, 7, 53, 2, 2, 1268, 1270, 7, 52, 2, 2, 1269, 1049, 3, 2, 2, 2, 1269, 1054, 3, 2, 2, 2, 1269, 1060, 3, 2, 2, 2, 1269, 1066, 3, 2, 2, 2, 1269, 1072, 3, 2, 2, 2, 1269, 1078, 3, 2, 2, 2, 1269, 1084, 3, 2, 2, 2, 1269, 1090, 3, 2, 2, 2, 1269, 1096, 3, 2, 2, 2, 1269, 1102, 3, 2, 2, 2, 1269, 1108, 3, 2, 2, 2, 1269, 1115, 3, 2, 2, 2, 1269, 1122, 3, 2, 2, 2, 1269, 1129, 3, 2, 2, 2, 1269, 1136, 3, 2, 2, 2, 1269, 1143, 3, 2, 2, 2, 1269, 1150, 3, 2, 2, 2, 1269, 1157, 3, 2, 2, 2, 1269, 1164, 3, 2, 2, 2, 1269, 1171, 3, 2, 2, 2, 1269, 1178, 3, 2, 2, 2, 1269, 1185, 3, 2, 2, 2, 1269, 1192, 3, 2, 2, 2, 1269, 1199, 3, 2, 2, 2, 1269, 1206, 3, 2, 2, 2, 1269, 1213, 3, 2, 2, 2, 1269, 1220, 3, 2, 2, 2, 1269, 1227, 3, 2, 2, 2, 1269, 1234, 3, 2, 2, 2, 1269, 1241, 3, 2, 2, 2, 1269, 1248, 3, 2, 2, 2, 1269, 1255, 3, 2, 2, 2, 1269, 1262, 3, 2, 2, 2, 1270, 188, 3, 2, 2, 2, 1271, 1272, 7, 104, 2, 2, 1272, 1273, 7, 107, 2, 2, 1273, 1274, 7, 122, 2, 2, 1274, 1275, 7, 103, 2, 2, 1275, 1294, 7, 102, 2, 2, 1276, 1277, 7, 104, 2, 2, 1277, 1278, 7, 107, 2, 2, 1278, 1279, 7, 122, 2, 2, 1279, 1280, 7, 103, 2, 2, 1280, 1281, 7, 102, 2, 2, 1281, 1283, 3, 2, 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, 1287, 3, 2, 2, 2, 1287, 1289, 7, 122, 2, 2, 1288, 1290, 9, 2, 2, 2, 1289, 1288, 3, 2, 2, 2, 1290, 1291, 3, 2, 2, 2, 1291, 1289, 3, 2, 2, 2, 1291, 1292, 3, 2, 2, 2, 1292, 1294, 3, 2, 2, 2, 1293, 1271, 3, 2, 2, 2, 1293, 1276, 3, 2, 2, 2, 1294, 190, 3, 2, 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, 1320, 7, 102, 2, 2, 1301, 1302, 7, 119, 2, 2, 1302, 1303, 7, 104, 2, 2, 1303, 1304, 7, 107, 2, 2, 1304, 1305, 7, 122, 2, 2, 1305, 1306, 7, 103, 2, 2, 1306, 1307, 7, 102, 2, 2, 1307, 1309, 3, 2, 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, 1313, 3, 2, 2, 2, 1313, 1315, 7, 122, 2, 2, 1314, 1316, 9, 2, 2, 2, 1315, 1314, 3, 2, 2, 2, 1316, 1317, 3, 2, 2, 2, 1317, 1315, 3, 2, 2, 2, 1317, 1318, 3, 2, 2, 2, 1318, 1320, 3, 2, 2, 2, 1319, 1295, 3, 2, 2, 2, 1319, 1301, 3, 2, 2, 2, 1320, 192, 3, 2, 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, 1332, 3, 2, 2, 2, 1332, 1334, 7, 48, 2, 2, 1333, 1335, 9, 2, 2, 2, 1334, 1333, 3, 2, 2, 2, 1335, 1336, 3, 2, 2, 2, 1336, 1334, 3, 2, 2, 2, 1336, 1337, 3, 2, 2, 2, 1337, 194, 3, 2, 2, 2, 1338, 1339, 7, 118, 2, 2, 1339, 1340, 7, 116, 2, 2, 1340, 1341, 7, 119, 2, 2, 1341, 1348, 7, 103, 2, 2, 1342, 1343, 7, 104, 2, 2, 1343, 1344, 7, 99, 2, 2, 1344, 1345, 7, 110, 2, 2, 1345, 1346, 7, 117, 2, 2, 1346, 1348, 7, 103, 2, 2, 1347, 1338, 3, 2, 2, 2, 1347, 1342, 3, 2, 2, 2, 1348, 196, 3, 2, 2, 2, 1349, 1356, 5, 199, 100, 2, 1350, 1352, 5, 199, 100, 2, 1351, 1350, 3, 2, 2, 2, 1351, 1352, 3, 2, 2, 2, 1352, 1353, 3, 2, 2, 2, 1353, 1354, 7, 48, 2, 2, 1354, 1356, 5, 199, 100, 2, 1355, 1349, 3, 2, 2, 2, 1355, 1351, 3, 2, 2, 2, 1356, 1359, 3, 2, 2, 2, 1357, 1358, 9, 3, 2, 2, 1358, 1360, 5, 199, 100, 2, 1359, 1357, 3, 2, 2, 2, 1359, 1360, 3, 2, 2, 2, 1360, 198, 3, 2, 2, 2, 1361, 1368, 9, 2, 2, 2, 1362, 1364, 7, 97, 2, 2, 1363, 1362, 3, 2, 2, 2, 1363, 1364, 3, 2, 2, 2, 1364, 1365, 3, 2, 2, 2, 1365, 1367, 9, 2, 2, 2, 1366, 1363, 3, 2, 2, 2, 1367, 1370, 3, 2, 2, 2, 1368, 1366, 3, 2, 2, 2, 1368, 1369, 3, 2, 2, 2, 1369, 200, 3, 2, 2, 2, 1370, 1368, 3, 2, 2, 2, 1371, 1372, 7, 50, 2, 2, 1372, 1373, 9, 4, 2, 2, 1373, 1374, 5, 203, 102, 2, 1374, 202, 3, 2, 2, 2, 1375, 1382, 5, 211, 106, 2, 1376, 1378, 7, 97, 2, 2, 1377, 1376, 3, 2, 2, 2, 1377, 1378, 3, 2, 2, 2, 1378, 1379, 3, 2, 2, 2, 1379, 1381, 5, 211, 106, 2, 1380, 1377, 3, 2, 2, 2, 1381, 1384, 3, 2, 2, 2, 1382, 1380, 3, 2, 2, 2, 1382, 1383, 3, 2, 2, 2, 1383, 204, 3, 2, 2, 2, 1384, 1382, 3, 2, 2, 2, 1385, 1386, 7, 121, 2, 2, 1386, 1387, 7, 103, 2, 2, 1387, 1438, 7, 107, 2, 2, 1388, 1389, 7, 117, 2, 2, 1389, 1390, 7, 124, 2, 2, 1390, 1391, 7, 99, 2, 2, 1391, 1392, 7, 100, 2, 2, 1392, 1438, 7, 113, 2, 2, 1393, 1394, 7, 104, 2, 2, 1394, 1395, 7, 107, 2, 2, 1395, 1396, 7, 112, 2, 2, 1396, 1397, 7, 112, 2, 2, 1397, 1398, 7, 103, 2, 2, 1398, 1438, 7, 123, 2, 2, 1399, 1400, 7, 103, 2, 2, 1400, 1401, 7, 118, 2, 2, 1401, 1402, 7, 106, 2, 2, 1402, 1403, 7, 103, 2, 2, 1403, 1438, 7, 116, 2, 2, 1404, 1405, 7, 117, 2, 2, 1405, 1406, 7, 103, 2, 2, 1406, 1407, 7, 101, 2, 2, 1407, 1408, 7, 113, 2, 2, 1408, 1409, 7, 112, 2, 2, 1409, 1410, 7, 102, 2, 2, 1410, 1438, 7, 117, 2, 2, 1411, 1412, 7, 111, 2, 2, 1412, 1413, 7, 107, 2, 2, 1413, 1414, 7, 112, 2, 2, 1414, 1415, 7, 119, 2, 2, 1415, 1416, 7, 118, 2, 2, 1416, 1417, 7, 103, 2, 2, 1417, 1438, 7, 117, 2, 2, 1418, 1419, 7, 106, 2, 2, 1419, 1420, 7, 113, 2, 2, 1420, 1421, 7, 119, 2, 2, 1421, 1422, 7, 116, 2, 2, 1422, 1438, 7, 117, 2, 2, 1423, 1424, 7, 102, 2, 2, 1424, 1425, 7, 99, 2, 2, 1425, 1426, 7, 123, 2, 2, 1426, 1438, 7, 117, 2, 2, 1427, 1428, 7, 121, 2, 2, 1428, 1429, 7, 103, 2, 2, 1429, 1430, 7, 103, 2, 2, 1430, 1431, 7, 109, 2, 2, 1431, 1438, 7, 117, 2, 2, 1432, 1433, 7, 123, 2, 2, 1433, 1434, 7, 103, 2, 2, 1434, 1435, 7, 99, 2, 2, 1435, 1436, 7, 116, 2, 2, 1436, 1438, 7, 117, 2, 2, 1437, 1385, 3, 2, 2, 2, 1437, 1388, 3, 2, 2, 2, 1437, 1393, 3, 2, 2, 2, 1437, 1399, 3, 2, 2, 2, 1437, 1404, 3, 2, 2, 2, 1437, 1411, 3, 2, 2, 2, 1437, 1418, 3, 2, 2, 2, 1437, 1423, 3, 2, 2, 2, 1437, 1427, 3, 2, 2, 2, 1437, 1432, 3, 2, 2, 2, 1438, 206, 3, 2, 2, 2, 1439, 1440, 7, 106, 2, 2, 1440, 1441, 7, 103, 2, 2, 1441, 1442, 7, 122, 2, 2, 1442, 1459, 3, 2, 2, 2, 1443, 1447, 7, 36, 2, 2, 1444, 1446, 5, 209, 105, 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, 1460, 7, 36, 2, 2, 1451, 1455, 7, 41, 2, 2, 1452, 1454, 5, 209, 105, 2, 1453, 1452, 3, 2, 2, 2, 1454, 1457, 3, 2, 2, 2, 1455, 1453, 3, 2, 2, 2, 1455, 1456, 3, 2, 2, 2, 1456, 1458, 3, 2, 2, 2, 1457, 1455, 3, 2, 2, 2, 1458, 1460, 7, 41, 2, 2, 1459, 1443, 3, 2, 2, 2, 1459, 1451, 3, 2, 2, 2, 1460, 208, 3, 2, 2, 2, 1461, 1462, 5, 211, 106, 2, 1462, 1463, 5, 211, 106, 2, 1463, 210, 3, 2, 2, 2, 1464, 1465, 9, 5, 2, 2, 1465, 212, 3, 2, 2, 2, 1466, 1467, 7, 99, 2, 2, 1467, 1468, 7, 100, 2, 2, 1468, 1469, 7, 117, 2, 2, 1469, 1470, 7, 118, 2, 2, 1470, 1471, 7, 116, 2, 2, 1471, 1472, 7, 99, 2, 2, 1472, 1473, 7, 101, 2, 2, 1473, 1555, 7, 118, 2, 2, 1474, 1475, 7, 99, 2, 2, 1475, 1476, 7, 104, 2, 2, 1476, 1477, 7, 118, 2, 2, 1477, 1478, 7, 103, 2, 2, 1478, 1555, 7, 116, 2, 2, 1479, 1480, 7, 101, 2, 2, 1480, 1481, 7, 99, 2, 2, 1481, 1482, 7, 117, 2, 2, 1482, 1555, 7, 103, 2, 2, 1483, 1484, 7, 101, 2, 2, 1484, 1485, 7, 99, 2, 2, 1485, 1486, 7, 118, 2, 2, 1486, 1487, 7, 101, 2, 2, 1487, 1555, 7, 106, 2, 2, 1488, 1489, 7, 102, 2, 2, 1489, 1490, 7, 103, 2, 2, 1490, 1491, 7, 104, 2, 2, 1491, 1492, 7, 99, 2, 2, 1492, 1493, 7, 119, 2, 2, 1493, 1494, 7, 110, 2, 2, 1494, 1555, 7, 118, 2, 2, 1495, 1496, 7, 104, 2, 2, 1496, 1497, 7, 107, 2, 2, 1497, 1498, 7, 112, 2, 2, 1498, 1499, 7, 99, 2, 2, 1499, 1555, 7, 110, 2, 2, 1500, 1501, 7, 107, 2, 2, 1501, 1555, 7, 112, 2, 2, 1502, 1503, 7, 107, 2, 2, 1503, 1504, 7, 112, 2, 2, 1504, 1505, 7, 110, 2, 2, 1505, 1506, 7, 107, 2, 2, 1506, 1507, 7, 112, 2, 2, 1507, 1555, 7, 103, 2, 2, 1508, 1509, 7, 110, 2, 2, 1509, 1510, 7, 103, 2, 2, 1510, 1555, 7, 118, 2, 2, 1511, 1512, 7, 111, 2, 2, 1512, 1513, 7, 99, 2, 2, 1513, 1514, 7, 118, 2, 2, 1514, 1515, 7, 101, 2, 2, 1515, 1555, 7, 106, 2, 2, 1516, 1517, 7, 112, 2, 2, 1517, 1518, 7, 119, 2, 2, 1518, 1519, 7, 110, 2, 2, 1519, 1555, 7, 110, 2, 2, 1520, 1521, 7, 113, 2, 2, 1521, 1555, 7, 104, 2, 2, 1522, 1523, 7, 116, 2, 2, 1523, 1524, 7, 103, 2, 2, 1524, 1525, 7, 110, 2, 2, 1525, 1526, 7, 113, 2, 2, 1526, 1527, 7, 101, 2, 2, 1527, 1528, 7, 99, 2, 2, 1528, 1529, 7, 118, 2, 2, 1529, 1530, 7, 99, 2, 2, 1530, 1531, 7, 100, 2, 2, 1531, 1532, 7, 110, 2, 2, 1532, 1555, 7, 103, 2, 2, 1533, 1534, 7, 117, 2, 2, 1534, 1535, 7, 118, 2, 2, 1535, 1536, 7, 99, 2, 2, 1536, 1537, 7, 118, 2, 2, 1537, 1538, 7, 107, 2, 2, 1538, 1555, 7, 101, 2, 2, 1539, 1540, 7, 117, 2, 2, 1540, 1541, 7, 121, 2, 2, 1541, 1542, 7, 107, 2, 2, 1542, 1543, 7, 118, 2, 2, 1543, 1544, 7, 101, 2, 2, 1544, 1555, 7, 106, 2, 2, 1545, 1546, 7, 118, 2, 2, 1546, 1547, 7, 116, 2, 2, 1547, 1555, 7, 123, 2, 2, 1548, 1549, 7, 118, 2, 2, 1549, 1550, 7, 123, 2, 2, 1550, 1551, 7, 114, 2, 2, 1551, 1552, 7, 103, 2, 2, 1552, 1553, 7, 113, 2, 2, 1553, 1555, 7, 104, 2, 2, 1554, 1466, 3, 2, 2, 2, 1554, 1474, 3, 2, 2, 2, 1554, 1479, 3, 2, 2, 2, 1554, 1483, 3, 2, 2, 2, 1554, 1488, 3, 2, 2, 2, 1554, 1495, 3, 2, 2, 2, 1554, 1500, 3, 2, 2, 2, 1554, 1502, 3, 2, 2, 2, 1554, 1508, 3, 2, 2, 2, 1554, 1511, 3, 2, 2, 2, 1554, 1516, 3, 2, 2, 2, 1554, 1520, 3, 2, 2, 2, 1554, 1522, 3, 2, 2, 2, 1554, 1533, 3, 2, 2, 2, 1554, 1539, 3, 2, 2, 2, 1554, 1545, 3, 2, 2, 2, 1554, 1548, 3, 2, 2, 2, 1555, 214, 3, 2, 2, 2, 1556, 1557, 7, 99, 2, 2, 1557, 1558, 7, 112, 2, 2, 1558, 1559, 7, 113, 2, 2, 1559, 1560, 7, 112, 2, 2, 1560, 1561, 7, 123, 2, 2, 1561, 1562, 7, 111, 2, 2, 1562, 1563, 7, 113, 2, 2, 1563, 1564, 7, 119, 2, 2, 1564, 1565, 7, 117, 2, 2, 1565, 216, 3, 2, 2, 2, 1566, 1567, 7, 100, 2, 2, 1567, 1568, 7, 116, 2, 2, 1568, 1569, 7, 103, 2, 2, 1569, 1570, 7, 99, 2, 2, 1570, 1571, 7, 109, 2, 2, 1571, 218, 3, 2, 2, 2, 1572, 1573, 7, 101, 2, 2, 1573, 1574, 7, 113, 2, 2, 1574, 1575, 7, 112, 2, 2, 1575, 1576, 7, 117, 2, 2, 1576, 1577, 7, 118, 2, 2, 1577, 1578, 7, 99, 2, 2, 1578, 1579, 7, 112, 2, 2, 1579, 1580, 7, 118, 2, 2, 1580, 220, 3, 2, 2, 2, 1581, 1582, 7, 101, 2, 2, 1582, 1583, 7, 113, 2, 2, 1583, 1584, 7, 112, 2, 2, 1584, 1585, 7, 118, 2, 2, 1585, 1586, 7, 107, 2, 2, 1586, 1587, 7, 112, 2, 2, 1587, 1588, 7, 119, 2, 2, 1588, 1589, 7, 103, 2, 2, 1589, 222, 3, 2, 2, 2, 1590, 1591, 7, 103, 2, 2, 1591, 1592, 7, 122, 2, 2, 1592, 1593, 7, 118, 2, 2, 1593, 1594, 7, 103, 2, 2, 1594, 1595, 7, 116, 2, 2, 1595, 1596, 7, 112, 2, 2, 1596, 1597, 7, 99, 2, 2, 1597, 1598, 7, 110, 2, 2, 1598, 224, 3, 2, 2, 2, 1599, 1600, 7, 107, 2, 2, 1600, 1601, 7, 112, 2, 2, 1601, 1602, 7, 102, 2, 2, 1602, 1603, 7, 103, 2, 2, 1603, 1604, 7, 122, 2, 2, 1604, 1605, 7, 103, 2, 2, 1605, 1606, 7, 102, 2, 2, 1606, 226, 3, 2, 2, 2, 1607, 1608, 7, 107, 2, 2, 1608, 1609, 7, 112, 2, 2, 1609, 1610, 7, 118, 2, 2, 1610, 1611, 7, 103, 2, 2, 1611, 1612, 7, 116, 2, 2, 1612, 1613, 7, 112, 2, 2, 1613, 1614, 7, 99, 2, 2, 1614, 1615, 7, 110, 2, 2, 1615, 228, 3, 2, 2, 2, 1616, 1617, 7, 114, 2, 2, 1617, 1618, 7, 99, 2, 2, 1618, 1619, 7, 123, 2, 2, 1619, 1620, 7, 99, 2, 2, 1620, 1621, 7, 100, 2, 2, 1621, 1622, 7, 110, 2, 2, 1622, 1623, 7, 103, 2, 2, 1623, 230, 3, 2, 2, 2, 1624, 1625, 7, 114, 2, 2, 1625, 1626, 7, 116, 2, 2, 1626, 1627, 7, 107, 2, 2, 1627, 1628, 7, 120, 2, 2, 1628, 1629, 7, 99, 2, 2, 1629, 1630, 7, 118, 2, 2, 1630, 1631, 7, 103, 2, 2, 1631, 232, 3, 2, 2, 2, 1632, 1633, 7, 114, 2, 2, 1633, 1634, 7, 119, 2, 2, 1634, 1635, 7, 100, 2, 2, 1635, 1636, 7, 110, 2, 2, 1636, 1637, 7, 107, 2, 2, 1637, 1638, 7, 101, 2, 2, 1638, 234, 3, 2, 2, 2, 1639, 1640, 7, 114, 2, 2, 1640, 1641, 7, 119, 2, 2, 1641, 1642, 7, 116, 2, 2, 1642, 1643, 7, 103, 2, 2, 1643, 236, 3, 2, 2, 2, 1644, 1645, 7, 118, 2, 2, 1645, 1646, 7, 123, 2, 2, 1646, 1647, 7, 114, 2, 2, 1647, 1648, 7, 103, 2, 2, 1648, 238, 3, 2, 2, 2, 1649, 1650, 7, 120, 2, 2, 1650, 1651, 7, 107, 2, 2, 1651, 1652, 7, 103, 2, 2, 1652, 1653, 7, 121, 2, 2, 1653, 240, 3, 2, 2, 2, 1654, 1658, 5, 243, 122, 2, 1655, 1657, 5, 245, 123, 2, 1656, 1655, 3, 2, 2, 2, 1657, 1660, 3, 2, 2, 2, 1658, 1656, 3, 2, 2, 2, 1658, 1659, 3, 2, 2, 2, 1659, 242, 3, 2, 2, 2, 1660, 1658, 3, 2, 2, 2, 1661, 1662, 9, 6, 2, 2, 1662, 244, 3, 2, 2, 2, 1663, 1664, 9, 7, 2, 2, 1664, 246, 3, 2, 2, 2, 1665, 1669, 7, 36, 2, 2, 1666, 1668, 5, 249, 125, 2, 1667, 1666, 3, 2, 2, 2, 1668, 1671, 3, 2, 2, 2, 1669, 1667, 3, 2, 2, 2, 1669, 1670, 3, 2, 2, 2, 1670, 1672, 3, 2, 2, 2, 1671, 1669, 3, 2, 2, 2, 1672, 1682, 7, 36, 2, 2, 1673, 1677, 7, 41, 2, 2, 1674, 1676, 5, 251, 126, 2, 1675, 1674, 3, 2, 2, 2, 1676, 1679, 3, 2, 2, 2, 1677, 1675, 3, 2, 2, 2, 1677, 1678, 3, 2, 2, 2, 1678, 1680, 3, 2, 2, 2, 1679, 1677, 3, 2, 2, 2, 1680, 1682, 7, 41, 2, 2, 1681, 1665, 3, 2, 2, 2, 1681, 1673, 3, 2, 2, 2, 1682, 248, 3, 2, 2, 2, 1683, 1687, 10, 8, 2, 2, 1684, 1685, 7, 94, 2, 2, 1685, 1687, 11, 2, 2, 2, 1686, 1683, 3, 2, 2, 2, 1686, 1684, 3, 2, 2, 2, 1687, 250, 3, 2, 2, 2, 1688, 1692, 10, 9, 2, 2, 1689, 1690, 7, 94, 2, 2, 1690, 1692, 11, 2, 2, 2, 1691, 1688, 3, 2, 2, 2, 1691, 1689, 3, 2, 2, 2, 1692, 252, 3, 2, 2, 2, 1693, 1695, 9, 10, 2, 2, 1694, 1693, 3, 2, 2, 2, 1695, 1696, 3, 2, 2, 2, 1696, 1694, 3, 2, 2, 2, 1696, 1697, 3, 2, 2, 2, 1697, 1698, 3, 2, 2, 2, 1698, 1699, 8, 127, 2, 2, 1699, 254, 3, 2, 2, 2, 1700, 1701, 7, 49, 2, 2, 1701, 1702, 7, 44, 2, 2, 1702, 1706, 3, 2, 2, 2, 1703, 1705, 11, 2, 2, 2, 1704, 1703, 3, 2, 2, 2, 1705, 1708, 3, 2, 2, 2, 1706, 1707, 3, 2, 2, 2, 1706, 1704, 3, 2, 2, 2, 1707, 1709, 3, 2, 2, 2, 1708, 1706, 3, 2, 2, 2, 1709, 1710, 7, 44, 2, 2, 1710, 1711, 7, 49, 2, 2, 1711, 1712, 3, 2, 2, 2, 1712, 1713, 8, 128, 3, 2, 1713, 256, 3, 2, 2, 2, 1714, 1715, 7, 49, 2, 2, 1715, 1716, 7, 49, 2, 2, 1716, 1720, 3, 2, 2, 2, 1717, 1719, 10, 11, 2, 2, 1718, 1717, 3, 2, 2, 2, 1719, 1722, 3, 2, 2, 2, 1720, 1718, 3, 2, 2, 2, 1720, 1721, 3, 2, 2, 2, 1721, 1723, 3, 2, 2, 2, 1722, 1720, 3, 2, 2, 2, 1723, 1724, 8, 129, 3, 2, 1724, 258, 3, 2, 2, 2, 37, 2, 830, 1047, 1269, 1285, 1291, 1293, 1311, 1317, 1319, 1324, 1330, 1336, 1347, 1351, 1355, 1359, 1363, 1368, 1377, 1382, 1437, 1447, 1455, 1459, 1554, 1658, 1669, 1677, 1681, 1686, 1691, 1696, 1706, 1720, 4, 8, 2, 2, 2, 3, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 124, 1757, 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, 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, 7, 92, 658, 10, 92, 12, 92, 14, 92, 661, 11, 92, 3, 92, 6, 92, 664, 10, 92, 13, 92, 14, 92, 665, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 7, 93, 673, 10, 93, 12, 93, 14, 93, 676, 11, 93, 3, 93, 3, 93, 3, 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, 5, 94, 863, 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, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 5, 95, 1080, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 5, 96, 1302, 10, 96, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 6, 97, 1316, 10, 97, 13, 97, 14, 97, 1317, 3, 97, 3, 97, 6, 97, 1322, 10, 97, 13, 97, 14, 97, 1323, 5, 97, 1326, 10, 97, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 6, 98, 1342, 10, 98, 13, 98, 14, 98, 1343, 3, 98, 3, 98, 6, 98, 1348, 10, 98, 13, 98, 14, 98, 1349, 5, 98, 1352, 10, 98, 3, 99, 6, 99, 1355, 10, 99, 13, 99, 14, 99, 1356, 3, 99, 3, 99, 6, 99, 1361, 10, 99, 13, 99, 14, 99, 1362, 3, 99, 3, 99, 6, 99, 1367, 10, 99, 13, 99, 14, 99, 1368, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 5, 100, 1380, 10, 100, 3, 101, 3, 101, 5, 101, 1384, 10, 101, 3, 101, 3, 101, 5, 101, 1388, 10, 101, 3, 101, 3, 101, 5, 101, 1392, 10, 101, 3, 102, 3, 102, 5, 102, 1396, 10, 102, 3, 102, 7, 102, 1399, 10, 102, 12, 102, 14, 102, 1402, 11, 102, 3, 103, 3, 103, 3, 103, 3, 103, 3, 104, 3, 104, 5, 104, 1410, 10, 104, 3, 104, 7, 104, 1413, 10, 104, 12, 104, 14, 104, 1416, 11, 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, 5, 105, 1470, 10, 105, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 7, 106, 1478, 10, 106, 12, 106, 14, 106, 1481, 11, 106, 3, 106, 3, 106, 3, 106, 7, 106, 1486, 10, 106, 12, 106, 14, 106, 1489, 11, 106, 3, 106, 5, 106, 1492, 10, 106, 3, 107, 3, 107, 3, 107, 3, 108, 3, 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, 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, 1587, 10, 109, 3, 110, 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, 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, 113, 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, 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, 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, 119, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 123, 3, 123, 7, 123, 1689, 10, 123, 12, 123, 14, 123, 1692, 11, 123, 3, 124, 3, 124, 3, 125, 3, 125, 3, 126, 3, 126, 7, 126, 1700, 10, 126, 12, 126, 14, 126, 1703, 11, 126, 3, 126, 3, 126, 3, 126, 7, 126, 1708, 10, 126, 12, 126, 14, 126, 1711, 11, 126, 3, 126, 5, 126, 1714, 10, 126, 3, 127, 3, 127, 3, 127, 5, 127, 1719, 10, 127, 3, 128, 3, 128, 3, 128, 5, 128, 1724, 10, 128, 3, 129, 6, 129, 1727, 10, 129, 13, 129, 14, 129, 1728, 3, 129, 3, 129, 3, 130, 3, 130, 3, 130, 3, 130, 7, 130, 1737, 10, 130, 12, 130, 14, 130, 1740, 11, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 131, 3, 131, 3, 131, 3, 131, 7, 131, 1751, 10, 131, 12, 131, 14, 131, 1754, 11, 131, 3, 131, 3, 131, 5, 659, 674, 1738, 2, 132, 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, 2, 205, 103, 207, 2, 209, 104, 211, 105, 213, 2, 215, 2, 217, 106, 219, 107, 221, 108, 223, 109, 225, 110, 227, 111, 229, 112, 231, 113, 233, 114, 235, 115, 237, 116, 239, 117, 241, 118, 243, 119, 245, 120, 247, 2, 249, 2, 251, 121, 253, 2, 255, 2, 257, 122, 259, 123, 261, 124, 3, 2, 12, 4, 2, 12, 12, 15, 15, 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, 2, 1901, 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, 205, 3, 2, 2, 2, 2, 209, 3, 2, 2, 2, 2, 211, 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, 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, 251, 3, 2, 2, 2, 2, 257, 3, 2, 2, 2, 2, 259, 3, 2, 2, 2, 2, 261, 3, 2, 2, 2, 3, 263, 3, 2, 2, 2, 5, 270, 3, 2, 2, 2, 7, 272, 3, 2, 2, 2, 9, 274, 3, 2, 2, 2, 11, 276, 3, 2, 2, 2, 13, 279, 3, 2, 2, 2, 15, 281, 3, 2, 2, 2, 17, 283, 3, 2, 2, 2, 19, 286, 3, 2, 2, 2, 21, 288, 3, 2, 2, 2, 23, 291, 3, 2, 2, 2, 25, 298, 3, 2, 2, 2, 27, 300, 3, 2, 2, 2, 29, 305, 3, 2, 2, 2, 31, 307, 3, 2, 2, 2, 33, 309, 3, 2, 2, 2, 35, 311, 3, 2, 2, 2, 37, 320, 3, 2, 2, 2, 39, 330, 3, 2, 2, 2, 41, 338, 3, 2, 2, 2, 43, 341, 3, 2, 2, 2, 45, 343, 3, 2, 2, 2, 47, 345, 3, 2, 2, 2, 49, 351, 3, 2, 2, 2, 51, 355, 3, 2, 2, 2, 53, 362, 3, 2, 2, 2, 55, 374, 3, 2, 2, 2, 57, 383, 3, 2, 2, 2, 59, 392, 3, 2, 2, 2, 61, 400, 3, 2, 2, 2, 63, 406, 3, 2, 2, 2, 65, 411, 3, 2, 2, 2, 67, 413, 3, 2, 2, 2, 69, 415, 3, 2, 2, 2, 71, 423, 3, 2, 2, 2, 73, 425, 3, 2, 2, 2, 75, 433, 3, 2, 2, 2, 77, 436, 3, 2, 2, 2, 79, 443, 3, 2, 2, 2, 81, 451, 3, 2, 2, 2, 83, 460, 3, 2, 2, 2, 85, 463, 3, 2, 2, 2, 87, 468, 3, 2, 2, 2, 89, 474, 3, 2, 2, 2, 91, 483, 3, 2, 2, 2, 93, 486, 3, 2, 2, 2, 95, 493, 3, 2, 2, 2, 97, 499, 3, 2, 2, 2, 99, 504, 3, 2, 2, 2, 101, 508, 3, 2, 2, 2, 103, 513, 3, 2, 2, 2, 105, 520, 3, 2, 2, 2, 107, 525, 3, 2, 2, 2, 109, 528, 3, 2, 2, 2, 111, 531, 3, 2, 2, 2, 113, 535, 3, 2, 2, 2, 115, 537, 3, 2, 2, 2, 117, 539, 3, 2, 2, 2, 119, 545, 3, 2, 2, 2, 121, 552, 3, 2, 2, 2, 123, 554, 3, 2, 2, 2, 125, 557, 3, 2, 2, 2, 127, 559, 3, 2, 2, 2, 129, 561, 3, 2, 2, 2, 131, 564, 3, 2, 2, 2, 133, 567, 3, 2, 2, 2, 135, 569, 3, 2, 2, 2, 137, 571, 3, 2, 2, 2, 139, 574, 3, 2, 2, 2, 141, 577, 3, 2, 2, 2, 143, 580, 3, 2, 2, 2, 145, 583, 3, 2, 2, 2, 147, 585, 3, 2, 2, 2, 149, 587, 3, 2, 2, 2, 151, 590, 3, 2, 2, 2, 153, 593, 3, 2, 2, 2, 155, 596, 3, 2, 2, 2, 157, 600, 3, 2, 2, 2, 159, 604, 3, 2, 2, 2, 161, 607, 3, 2, 2, 2, 163, 610, 3, 2, 2, 2, 165, 613, 3, 2, 2, 2, 167, 616, 3, 2, 2, 2, 169, 619, 3, 2, 2, 2, 171, 623, 3, 2, 2, 2, 173, 626, 3, 2, 2, 2, 175, 629, 3, 2, 2, 2, 177, 636, 3, 2, 2, 2, 179, 641, 3, 2, 2, 2, 181, 649, 3, 2, 2, 2, 183, 663, 3, 2, 2, 2, 185, 667, 3, 2, 2, 2, 187, 862, 3, 2, 2, 2, 189, 1079, 3, 2, 2, 2, 191, 1301, 3, 2, 2, 2, 193, 1325, 3, 2, 2, 2, 195, 1351, 3, 2, 2, 2, 197, 1354, 3, 2, 2, 2, 199, 1379, 3, 2, 2, 2, 201, 1387, 3, 2, 2, 2, 203, 1393, 3, 2, 2, 2, 205, 1403, 3, 2, 2, 2, 207, 1407, 3, 2, 2, 2, 209, 1469, 3, 2, 2, 2, 211, 1471, 3, 2, 2, 2, 213, 1493, 3, 2, 2, 2, 215, 1496, 3, 2, 2, 2, 217, 1586, 3, 2, 2, 2, 219, 1588, 3, 2, 2, 2, 221, 1598, 3, 2, 2, 2, 223, 1604, 3, 2, 2, 2, 225, 1613, 3, 2, 2, 2, 227, 1622, 3, 2, 2, 2, 229, 1631, 3, 2, 2, 2, 231, 1639, 3, 2, 2, 2, 233, 1648, 3, 2, 2, 2, 235, 1656, 3, 2, 2, 2, 237, 1664, 3, 2, 2, 2, 239, 1671, 3, 2, 2, 2, 241, 1676, 3, 2, 2, 2, 243, 1681, 3, 2, 2, 2, 245, 1686, 3, 2, 2, 2, 247, 1693, 3, 2, 2, 2, 249, 1695, 3, 2, 2, 2, 251, 1713, 3, 2, 2, 2, 253, 1718, 3, 2, 2, 2, 255, 1723, 3, 2, 2, 2, 257, 1726, 3, 2, 2, 2, 259, 1732, 3, 2, 2, 2, 261, 1746, 3, 2, 2, 2, 263, 264, 7, 114, 2, 2, 264, 265, 7, 116, 2, 2, 265, 266, 7, 99, 2, 2, 266, 267, 7, 105, 2, 2, 267, 268, 7, 111, 2, 2, 268, 269, 7, 99, 2, 2, 269, 4, 3, 2, 2, 2, 270, 271, 7, 61, 2, 2, 271, 6, 3, 2, 2, 2, 272, 273, 7, 96, 2, 2, 273, 8, 3, 2, 2, 2, 274, 275, 7, 128, 2, 2, 275, 10, 3, 2, 2, 2, 276, 277, 7, 64, 2, 2, 277, 278, 7, 63, 2, 2, 278, 12, 3, 2, 2, 2, 279, 280, 7, 64, 2, 2, 280, 14, 3, 2, 2, 2, 281, 282, 7, 62, 2, 2, 282, 16, 3, 2, 2, 2, 283, 284, 7, 62, 2, 2, 284, 285, 7, 63, 2, 2, 285, 18, 3, 2, 2, 2, 286, 287, 7, 63, 2, 2, 287, 20, 3, 2, 2, 2, 288, 289, 7, 99, 2, 2, 289, 290, 7, 117, 2, 2, 290, 22, 3, 2, 2, 2, 291, 292, 7, 107, 2, 2, 292, 293, 7, 111, 2, 2, 293, 294, 7, 114, 2, 2, 294, 295, 7, 113, 2, 2, 295, 296, 7, 116, 2, 2, 296, 297, 7, 118, 2, 2, 297, 24, 3, 2, 2, 2, 298, 299, 7, 44, 2, 2, 299, 26, 3, 2, 2, 2, 300, 301, 7, 104, 2, 2, 301, 302, 7, 116, 2, 2, 302, 303, 7, 113, 2, 2, 303, 304, 7, 111, 2, 2, 304, 28, 3, 2, 2, 2, 305, 306, 7, 125, 2, 2, 306, 30, 3, 2, 2, 2, 307, 308, 7, 46, 2, 2, 308, 32, 3, 2, 2, 2, 309, 310, 7, 127, 2, 2, 310, 34, 3, 2, 2, 2, 311, 312, 7, 101, 2, 2, 312, 313, 7, 113, 2, 2, 313, 314, 7, 112, 2, 2, 314, 315, 7, 118, 2, 2, 315, 316, 7, 116, 2, 2, 316, 317, 7, 99, 2, 2, 317, 318, 7, 101, 2, 2, 318, 319, 7, 118, 2, 2, 319, 36, 3, 2, 2, 2, 320, 321, 7, 107, 2, 2, 321, 322, 7, 112, 2, 2, 322, 323, 7, 118, 2, 2, 323, 324, 7, 103, 2, 2, 324, 325, 7, 116, 2, 2, 325, 326, 7, 104, 2, 2, 326, 327, 7, 99, 2, 2, 327, 328, 7, 101, 2, 2, 328, 329, 7, 103, 2, 2, 329, 38, 3, 2, 2, 2, 330, 331, 7, 110, 2, 2, 331, 332, 7, 107, 2, 2, 332, 333, 7, 100, 2, 2, 333, 334, 7, 116, 2, 2, 334, 335, 7, 99, 2, 2, 335, 336, 7, 116, 2, 2, 336, 337, 7, 123, 2, 2, 337, 40, 3, 2, 2, 2, 338, 339, 7, 107, 2, 2, 339, 340, 7, 117, 2, 2, 340, 42, 3, 2, 2, 2, 341, 342, 7, 42, 2, 2, 342, 44, 3, 2, 2, 2, 343, 344, 7, 43, 2, 2, 344, 46, 3, 2, 2, 2, 345, 346, 7, 119, 2, 2, 346, 347, 7, 117, 2, 2, 347, 348, 7, 107, 2, 2, 348, 349, 7, 112, 2, 2, 349, 350, 7, 105, 2, 2, 350, 48, 3, 2, 2, 2, 351, 352, 7, 104, 2, 2, 352, 353, 7, 113, 2, 2, 353, 354, 7, 116, 2, 2, 354, 50, 3, 2, 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, 52, 3, 2, 2, 2, 362, 363, 7, 101, 2, 2, 363, 364, 7, 113, 2, 2, 364, 365, 7, 112, 2, 2, 365, 366, 7, 117, 2, 2, 366, 367, 7, 118, 2, 2, 367, 368, 7, 116, 2, 2, 368, 369, 7, 119, 2, 2, 369, 370, 7, 101, 2, 2, 370, 371, 7, 118, 2, 2, 371, 372, 7, 113, 2, 2, 372, 373, 7, 116, 2, 2, 373, 54, 3, 2, 2, 2, 374, 375, 7, 111, 2, 2, 375, 376, 7, 113, 2, 2, 376, 377, 7, 102, 2, 2, 377, 378, 7, 107, 2, 2, 378, 379, 7, 104, 2, 2, 379, 380, 7, 107, 2, 2, 380, 381, 7, 103, 2, 2, 381, 382, 7, 116, 2, 2, 382, 56, 3, 2, 2, 2, 383, 384, 7, 104, 2, 2, 384, 385, 7, 119, 2, 2, 385, 386, 7, 112, 2, 2, 386, 387, 7, 101, 2, 2, 387, 388, 7, 118, 2, 2, 388, 389, 7, 107, 2, 2, 389, 390, 7, 113, 2, 2, 390, 391, 7, 112, 2, 2, 391, 58, 3, 2, 2, 2, 392, 393, 7, 116, 2, 2, 393, 394, 7, 103, 2, 2, 394, 395, 7, 118, 2, 2, 395, 396, 7, 119, 2, 2, 396, 397, 7, 116, 2, 2, 397, 398, 7, 112, 2, 2, 398, 399, 7, 117, 2, 2, 399, 60, 3, 2, 2, 2, 400, 401, 7, 103, 2, 2, 401, 402, 7, 120, 2, 2, 402, 403, 7, 103, 2, 2, 403, 404, 7, 112, 2, 2, 404, 405, 7, 118, 2, 2, 405, 62, 3, 2, 2, 2, 406, 407, 7, 103, 2, 2, 407, 408, 7, 112, 2, 2, 408, 409, 7, 119, 2, 2, 409, 410, 7, 111, 2, 2, 410, 64, 3, 2, 2, 2, 411, 412, 7, 93, 2, 2, 412, 66, 3, 2, 2, 2, 413, 414, 7, 95, 2, 2, 414, 68, 3, 2, 2, 2, 415, 416, 7, 99, 2, 2, 416, 417, 7, 102, 2, 2, 417, 418, 7, 102, 2, 2, 418, 419, 7, 116, 2, 2, 419, 420, 7, 103, 2, 2, 420, 421, 7, 117, 2, 2, 421, 422, 7, 117, 2, 2, 422, 70, 3, 2, 2, 2, 423, 424, 7, 48, 2, 2, 424, 72, 3, 2, 2, 2, 425, 426, 7, 111, 2, 2, 426, 427, 7, 99, 2, 2, 427, 428, 7, 114, 2, 2, 428, 429, 7, 114, 2, 2, 429, 430, 7, 107, 2, 2, 430, 431, 7, 112, 2, 2, 431, 432, 7, 105, 2, 2, 432, 74, 3, 2, 2, 2, 433, 434, 7, 63, 2, 2, 434, 435, 7, 64, 2, 2, 435, 76, 3, 2, 2, 2, 436, 437, 7, 111, 2, 2, 437, 438, 7, 103, 2, 2, 438, 439, 7, 111, 2, 2, 439, 440, 7, 113, 2, 2, 440, 441, 7, 116, 2, 2, 441, 442, 7, 123, 2, 2, 442, 78, 3, 2, 2, 2, 443, 444, 7, 117, 2, 2, 444, 445, 7, 118, 2, 2, 445, 446, 7, 113, 2, 2, 446, 447, 7, 116, 2, 2, 447, 448, 7, 99, 2, 2, 448, 449, 7, 105, 2, 2, 449, 450, 7, 103, 2, 2, 450, 80, 3, 2, 2, 2, 451, 452, 7, 101, 2, 2, 452, 453, 7, 99, 2, 2, 453, 454, 7, 110, 2, 2, 454, 455, 7, 110, 2, 2, 455, 456, 7, 102, 2, 2, 456, 457, 7, 99, 2, 2, 457, 458, 7, 118, 2, 2, 458, 459, 7, 99, 2, 2, 459, 82, 3, 2, 2, 2, 460, 461, 7, 107, 2, 2, 461, 462, 7, 104, 2, 2, 462, 84, 3, 2, 2, 2, 463, 464, 7, 103, 2, 2, 464, 465, 7, 110, 2, 2, 465, 466, 7, 117, 2, 2, 466, 467, 7, 103, 2, 2, 467, 86, 3, 2, 2, 2, 468, 469, 7, 121, 2, 2, 469, 470, 7, 106, 2, 2, 470, 471, 7, 107, 2, 2, 471, 472, 7, 110, 2, 2, 472, 473, 7, 103, 2, 2, 473, 88, 3, 2, 2, 2, 474, 475, 7, 99, 2, 2, 475, 476, 7, 117, 2, 2, 476, 477, 7, 117, 2, 2, 477, 478, 7, 103, 2, 2, 478, 479, 7, 111, 2, 2, 479, 480, 7, 100, 2, 2, 480, 481, 7, 110, 2, 2, 481, 482, 7, 123, 2, 2, 482, 90, 3, 2, 2, 2, 483, 484, 7, 102, 2, 2, 484, 485, 7, 113, 2, 2, 485, 92, 3, 2, 2, 2, 486, 487, 7, 116, 2, 2, 487, 488, 7, 103, 2, 2, 488, 489, 7, 118, 2, 2, 489, 490, 7, 119, 2, 2, 490, 491, 7, 116, 2, 2, 491, 492, 7, 112, 2, 2, 492, 94, 3, 2, 2, 2, 493, 494, 7, 118, 2, 2, 494, 495, 7, 106, 2, 2, 495, 496, 7, 116, 2, 2, 496, 497, 7, 113, 2, 2, 497, 498, 7, 121, 2, 2, 498, 96, 3, 2, 2, 2, 499, 500, 7, 103, 2, 2, 500, 501, 7, 111, 2, 2, 501, 502, 7, 107, 2, 2, 502, 503, 7, 118, 2, 2, 503, 98, 3, 2, 2, 2, 504, 505, 7, 120, 2, 2, 505, 506, 7, 99, 2, 2, 506, 507, 7, 116, 2, 2, 507, 100, 3, 2, 2, 2, 508, 509, 7, 100, 2, 2, 509, 510, 7, 113, 2, 2, 510, 511, 7, 113, 2, 2, 511, 512, 7, 110, 2, 2, 512, 102, 3, 2, 2, 2, 513, 514, 7, 117, 2, 2, 514, 515, 7, 118, 2, 2, 515, 516, 7, 116, 2, 2, 516, 517, 7, 107, 2, 2, 517, 518, 7, 112, 2, 2, 518, 519, 7, 105, 2, 2, 519, 104, 3, 2, 2, 2, 520, 521, 7, 100, 2, 2, 521, 522, 7, 123, 2, 2, 522, 523, 7, 118, 2, 2, 523, 524, 7, 103, 2, 2, 524, 106, 3, 2, 2, 2, 525, 526, 7, 45, 2, 2, 526, 527, 7, 45, 2, 2, 527, 108, 3, 2, 2, 2, 528, 529, 7, 47, 2, 2, 529, 530, 7, 47, 2, 2, 530, 110, 3, 2, 2, 2, 531, 532, 7, 112, 2, 2, 532, 533, 7, 103, 2, 2, 533, 534, 7, 121, 2, 2, 534, 112, 3, 2, 2, 2, 535, 536, 7, 45, 2, 2, 536, 114, 3, 2, 2, 2, 537, 538, 7, 47, 2, 2, 538, 116, 3, 2, 2, 2, 539, 540, 7, 99, 2, 2, 540, 541, 7, 104, 2, 2, 541, 542, 7, 118, 2, 2, 542, 543, 7, 103, 2, 2, 543, 544, 7, 116, 2, 2, 544, 118, 3, 2, 2, 2, 545, 546, 7, 102, 2, 2, 546, 547, 7, 103, 2, 2, 547, 548, 7, 110, 2, 2, 548, 549, 7, 103, 2, 2, 549, 550, 7, 118, 2, 2, 550, 551, 7, 103, 2, 2, 551, 120, 3, 2, 2, 2, 552, 553, 7, 35, 2, 2, 553, 122, 3, 2, 2, 2, 554, 555, 7, 44, 2, 2, 555, 556, 7, 44, 2, 2, 556, 124, 3, 2, 2, 2, 557, 558, 7, 49, 2, 2, 558, 126, 3, 2, 2, 2, 559, 560, 7, 39, 2, 2, 560, 128, 3, 2, 2, 2, 561, 562, 7, 62, 2, 2, 562, 563, 7, 62, 2, 2, 563, 130, 3, 2, 2, 2, 564, 565, 7, 64, 2, 2, 565, 566, 7, 64, 2, 2, 566, 132, 3, 2, 2, 2, 567, 568, 7, 40, 2, 2, 568, 134, 3, 2, 2, 2, 569, 570, 7, 126, 2, 2, 570, 136, 3, 2, 2, 2, 571, 572, 7, 63, 2, 2, 572, 573, 7, 63, 2, 2, 573, 138, 3, 2, 2, 2, 574, 575, 7, 35, 2, 2, 575, 576, 7, 63, 2, 2, 576, 140, 3, 2, 2, 2, 577, 578, 7, 40, 2, 2, 578, 579, 7, 40, 2, 2, 579, 142, 3, 2, 2, 2, 580, 581, 7, 126, 2, 2, 581, 582, 7, 126, 2, 2, 582, 144, 3, 2, 2, 2, 583, 584, 7, 65, 2, 2, 584, 146, 3, 2, 2, 2, 585, 586, 7, 60, 2, 2, 586, 148, 3, 2, 2, 2, 587, 588, 7, 126, 2, 2, 588, 589, 7, 63, 2, 2, 589, 150, 3, 2, 2, 2, 590, 591, 7, 96, 2, 2, 591, 592, 7, 63, 2, 2, 592, 152, 3, 2, 2, 2, 593, 594, 7, 40, 2, 2, 594, 595, 7, 63, 2, 2, 595, 154, 3, 2, 2, 2, 596, 597, 7, 62, 2, 2, 597, 598, 7, 62, 2, 2, 598, 599, 7, 63, 2, 2, 599, 156, 3, 2, 2, 2, 600, 601, 7, 64, 2, 2, 601, 602, 7, 64, 2, 2, 602, 603, 7, 63, 2, 2, 603, 158, 3, 2, 2, 2, 604, 605, 7, 45, 2, 2, 605, 606, 7, 63, 2, 2, 606, 160, 3, 2, 2, 2, 607, 608, 7, 47, 2, 2, 608, 609, 7, 63, 2, 2, 609, 162, 3, 2, 2, 2, 610, 611, 7, 44, 2, 2, 611, 612, 7, 63, 2, 2, 612, 164, 3, 2, 2, 2, 613, 614, 7, 49, 2, 2, 614, 615, 7, 63, 2, 2, 615, 166, 3, 2, 2, 2, 616, 617, 7, 39, 2, 2, 617, 618, 7, 63, 2, 2, 618, 168, 3, 2, 2, 2, 619, 620, 7, 110, 2, 2, 620, 621, 7, 103, 2, 2, 621, 622, 7, 118, 2, 2, 622, 170, 3, 2, 2, 2, 623, 624, 7, 60, 2, 2, 624, 625, 7, 63, 2, 2, 625, 172, 3, 2, 2, 2, 626, 627, 7, 63, 2, 2, 627, 628, 7, 60, 2, 2, 628, 174, 3, 2, 2, 2, 629, 630, 7, 117, 2, 2, 630, 631, 7, 121, 2, 2, 631, 632, 7, 107, 2, 2, 632, 633, 7, 118, 2, 2, 633, 634, 7, 101, 2, 2, 634, 635, 7, 106, 2, 2, 635, 176, 3, 2, 2, 2, 636, 637, 7, 101, 2, 2, 637, 638, 7, 99, 2, 2, 638, 639, 7, 117, 2, 2, 639, 640, 7, 103, 2, 2, 640, 178, 3, 2, 2, 2, 641, 642, 7, 102, 2, 2, 642, 643, 7, 103, 2, 2, 643, 644, 7, 104, 2, 2, 644, 645, 7, 99, 2, 2, 645, 646, 7, 119, 2, 2, 646, 647, 7, 110, 2, 2, 647, 648, 7, 118, 2, 2, 648, 180, 3, 2, 2, 2, 649, 650, 7, 47, 2, 2, 650, 651, 7, 64, 2, 2, 651, 182, 3, 2, 2, 2, 652, 653, 7, 49, 2, 2, 653, 654, 7, 49, 2, 2, 654, 655, 7, 49, 2, 2, 655, 659, 3, 2, 2, 2, 656, 658, 11, 2, 2, 2, 657, 656, 3, 2, 2, 2, 658, 661, 3, 2, 2, 2, 659, 660, 3, 2, 2, 2, 659, 657, 3, 2, 2, 2, 660, 662, 3, 2, 2, 2, 661, 659, 3, 2, 2, 2, 662, 664, 9, 2, 2, 2, 663, 652, 3, 2, 2, 2, 664, 665, 3, 2, 2, 2, 665, 663, 3, 2, 2, 2, 665, 666, 3, 2, 2, 2, 666, 184, 3, 2, 2, 2, 667, 668, 7, 49, 2, 2, 668, 669, 7, 44, 2, 2, 669, 670, 7, 44, 2, 2, 670, 674, 3, 2, 2, 2, 671, 673, 11, 2, 2, 2, 672, 671, 3, 2, 2, 2, 673, 676, 3, 2, 2, 2, 674, 675, 3, 2, 2, 2, 674, 672, 3, 2, 2, 2, 675, 677, 3, 2, 2, 2, 676, 674, 3, 2, 2, 2, 677, 678, 7, 44, 2, 2, 678, 679, 7, 49, 2, 2, 679, 186, 3, 2, 2, 2, 680, 681, 7, 107, 2, 2, 681, 682, 7, 112, 2, 2, 682, 863, 7, 118, 2, 2, 683, 684, 7, 107, 2, 2, 684, 685, 7, 112, 2, 2, 685, 686, 7, 118, 2, 2, 686, 863, 7, 58, 2, 2, 687, 688, 7, 107, 2, 2, 688, 689, 7, 112, 2, 2, 689, 690, 7, 118, 2, 2, 690, 691, 7, 51, 2, 2, 691, 863, 7, 56, 2, 2, 692, 693, 7, 107, 2, 2, 693, 694, 7, 112, 2, 2, 694, 695, 7, 118, 2, 2, 695, 696, 7, 52, 2, 2, 696, 863, 7, 54, 2, 2, 697, 698, 7, 107, 2, 2, 698, 699, 7, 112, 2, 2, 699, 700, 7, 118, 2, 2, 700, 701, 7, 53, 2, 2, 701, 863, 7, 52, 2, 2, 702, 703, 7, 107, 2, 2, 703, 704, 7, 112, 2, 2, 704, 705, 7, 118, 2, 2, 705, 706, 7, 54, 2, 2, 706, 863, 7, 50, 2, 2, 707, 708, 7, 107, 2, 2, 708, 709, 7, 112, 2, 2, 709, 710, 7, 118, 2, 2, 710, 711, 7, 54, 2, 2, 711, 863, 7, 58, 2, 2, 712, 713, 7, 107, 2, 2, 713, 714, 7, 112, 2, 2, 714, 715, 7, 118, 2, 2, 715, 716, 7, 55, 2, 2, 716, 863, 7, 56, 2, 2, 717, 718, 7, 107, 2, 2, 718, 719, 7, 112, 2, 2, 719, 720, 7, 118, 2, 2, 720, 721, 7, 56, 2, 2, 721, 863, 7, 54, 2, 2, 722, 723, 7, 107, 2, 2, 723, 724, 7, 112, 2, 2, 724, 725, 7, 118, 2, 2, 725, 726, 7, 57, 2, 2, 726, 863, 7, 52, 2, 2, 727, 728, 7, 107, 2, 2, 728, 729, 7, 112, 2, 2, 729, 730, 7, 118, 2, 2, 730, 731, 7, 58, 2, 2, 731, 863, 7, 50, 2, 2, 732, 733, 7, 107, 2, 2, 733, 734, 7, 112, 2, 2, 734, 735, 7, 118, 2, 2, 735, 736, 7, 58, 2, 2, 736, 863, 7, 58, 2, 2, 737, 738, 7, 107, 2, 2, 738, 739, 7, 112, 2, 2, 739, 740, 7, 118, 2, 2, 740, 741, 7, 59, 2, 2, 741, 863, 7, 56, 2, 2, 742, 743, 7, 107, 2, 2, 743, 744, 7, 112, 2, 2, 744, 745, 7, 118, 2, 2, 745, 746, 7, 51, 2, 2, 746, 747, 7, 50, 2, 2, 747, 863, 7, 54, 2, 2, 748, 749, 7, 107, 2, 2, 749, 750, 7, 112, 2, 2, 750, 751, 7, 118, 2, 2, 751, 752, 7, 51, 2, 2, 752, 753, 7, 51, 2, 2, 753, 863, 7, 52, 2, 2, 754, 755, 7, 107, 2, 2, 755, 756, 7, 112, 2, 2, 756, 757, 7, 118, 2, 2, 757, 758, 7, 51, 2, 2, 758, 759, 7, 52, 2, 2, 759, 863, 7, 50, 2, 2, 760, 761, 7, 107, 2, 2, 761, 762, 7, 112, 2, 2, 762, 763, 7, 118, 2, 2, 763, 764, 7, 51, 2, 2, 764, 765, 7, 52, 2, 2, 765, 863, 7, 58, 2, 2, 766, 767, 7, 107, 2, 2, 767, 768, 7, 112, 2, 2, 768, 769, 7, 118, 2, 2, 769, 770, 7, 51, 2, 2, 770, 771, 7, 53, 2, 2, 771, 863, 7, 56, 2, 2, 772, 773, 7, 107, 2, 2, 773, 774, 7, 112, 2, 2, 774, 775, 7, 118, 2, 2, 775, 776, 7, 51, 2, 2, 776, 777, 7, 54, 2, 2, 777, 863, 7, 54, 2, 2, 778, 779, 7, 107, 2, 2, 779, 780, 7, 112, 2, 2, 780, 781, 7, 118, 2, 2, 781, 782, 7, 51, 2, 2, 782, 783, 7, 55, 2, 2, 783, 863, 7, 52, 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, 56, 2, 2, 789, 863, 7, 50, 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, 56, 2, 2, 795, 863, 7, 58, 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, 57, 2, 2, 801, 863, 7, 56, 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, 58, 2, 2, 807, 863, 7, 54, 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, 59, 2, 2, 813, 863, 7, 52, 2, 2, 814, 815, 7, 107, 2, 2, 815, 816, 7, 112, 2, 2, 816, 817, 7, 118, 2, 2, 817, 818, 7, 52, 2, 2, 818, 819, 7, 50, 2, 2, 819, 863, 7, 50, 2, 2, 820, 821, 7, 107, 2, 2, 821, 822, 7, 112, 2, 2, 822, 823, 7, 118, 2, 2, 823, 824, 7, 52, 2, 2, 824, 825, 7, 50, 2, 2, 825, 863, 7, 58, 2, 2, 826, 827, 7, 107, 2, 2, 827, 828, 7, 112, 2, 2, 828, 829, 7, 118, 2, 2, 829, 830, 7, 52, 2, 2, 830, 831, 7, 51, 2, 2, 831, 863, 7, 56, 2, 2, 832, 833, 7, 107, 2, 2, 833, 834, 7, 112, 2, 2, 834, 835, 7, 118, 2, 2, 835, 836, 7, 52, 2, 2, 836, 837, 7, 52, 2, 2, 837, 863, 7, 54, 2, 2, 838, 839, 7, 107, 2, 2, 839, 840, 7, 112, 2, 2, 840, 841, 7, 118, 2, 2, 841, 842, 7, 52, 2, 2, 842, 843, 7, 53, 2, 2, 843, 863, 7, 52, 2, 2, 844, 845, 7, 107, 2, 2, 845, 846, 7, 112, 2, 2, 846, 847, 7, 118, 2, 2, 847, 848, 7, 52, 2, 2, 848, 849, 7, 54, 2, 2, 849, 863, 7, 50, 2, 2, 850, 851, 7, 107, 2, 2, 851, 852, 7, 112, 2, 2, 852, 853, 7, 118, 2, 2, 853, 854, 7, 52, 2, 2, 854, 855, 7, 54, 2, 2, 855, 863, 7, 58, 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, 55, 2, 2, 861, 863, 7, 56, 2, 2, 862, 680, 3, 2, 2, 2, 862, 683, 3, 2, 2, 2, 862, 687, 3, 2, 2, 2, 862, 692, 3, 2, 2, 2, 862, 697, 3, 2, 2, 2, 862, 702, 3, 2, 2, 2, 862, 707, 3, 2, 2, 2, 862, 712, 3, 2, 2, 2, 862, 717, 3, 2, 2, 2, 862, 722, 3, 2, 2, 2, 862, 727, 3, 2, 2, 2, 862, 732, 3, 2, 2, 2, 862, 737, 3, 2, 2, 2, 862, 742, 3, 2, 2, 2, 862, 748, 3, 2, 2, 2, 862, 754, 3, 2, 2, 2, 862, 760, 3, 2, 2, 2, 862, 766, 3, 2, 2, 2, 862, 772, 3, 2, 2, 2, 862, 778, 3, 2, 2, 2, 862, 784, 3, 2, 2, 2, 862, 790, 3, 2, 2, 2, 862, 796, 3, 2, 2, 2, 862, 802, 3, 2, 2, 2, 862, 808, 3, 2, 2, 2, 862, 814, 3, 2, 2, 2, 862, 820, 3, 2, 2, 2, 862, 826, 3, 2, 2, 2, 862, 832, 3, 2, 2, 2, 862, 838, 3, 2, 2, 2, 862, 844, 3, 2, 2, 2, 862, 850, 3, 2, 2, 2, 862, 856, 3, 2, 2, 2, 863, 188, 3, 2, 2, 2, 864, 865, 7, 119, 2, 2, 865, 866, 7, 107, 2, 2, 866, 867, 7, 112, 2, 2, 867, 1080, 7, 118, 2, 2, 868, 869, 7, 119, 2, 2, 869, 870, 7, 107, 2, 2, 870, 871, 7, 112, 2, 2, 871, 872, 7, 118, 2, 2, 872, 1080, 7, 58, 2, 2, 873, 874, 7, 119, 2, 2, 874, 875, 7, 107, 2, 2, 875, 876, 7, 112, 2, 2, 876, 877, 7, 118, 2, 2, 877, 878, 7, 51, 2, 2, 878, 1080, 7, 56, 2, 2, 879, 880, 7, 119, 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, 1080, 7, 54, 2, 2, 885, 886, 7, 119, 2, 2, 886, 887, 7, 107, 2, 2, 887, 888, 7, 112, 2, 2, 888, 889, 7, 118, 2, 2, 889, 890, 7, 53, 2, 2, 890, 1080, 7, 52, 2, 2, 891, 892, 7, 119, 2, 2, 892, 893, 7, 107, 2, 2, 893, 894, 7, 112, 2, 2, 894, 895, 7, 118, 2, 2, 895, 896, 7, 54, 2, 2, 896, 1080, 7, 50, 2, 2, 897, 898, 7, 119, 2, 2, 898, 899, 7, 107, 2, 2, 899, 900, 7, 112, 2, 2, 900, 901, 7, 118, 2, 2, 901, 902, 7, 54, 2, 2, 902, 1080, 7, 58, 2, 2, 903, 904, 7, 119, 2, 2, 904, 905, 7, 107, 2, 2, 905, 906, 7, 112, 2, 2, 906, 907, 7, 118, 2, 2, 907, 908, 7, 55, 2, 2, 908, 1080, 7, 56, 2, 2, 909, 910, 7, 119, 2, 2, 910, 911, 7, 107, 2, 2, 911, 912, 7, 112, 2, 2, 912, 913, 7, 118, 2, 2, 913, 914, 7, 56, 2, 2, 914, 1080, 7, 54, 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, 57, 2, 2, 920, 1080, 7, 52, 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, 58, 2, 2, 926, 1080, 7, 50, 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, 58, 2, 2, 932, 1080, 7, 58, 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, 59, 2, 2, 938, 1080, 7, 56, 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, 51, 2, 2, 944, 945, 7, 50, 2, 2, 945, 1080, 7, 54, 2, 2, 946, 947, 7, 119, 2, 2, 947, 948, 7, 107, 2, 2, 948, 949, 7, 112, 2, 2, 949, 950, 7, 118, 2, 2, 950, 951, 7, 51, 2, 2, 951, 952, 7, 51, 2, 2, 952, 1080, 7, 52, 2, 2, 953, 954, 7, 119, 2, 2, 954, 955, 7, 107, 2, 2, 955, 956, 7, 112, 2, 2, 956, 957, 7, 118, 2, 2, 957, 958, 7, 51, 2, 2, 958, 959, 7, 52, 2, 2, 959, 1080, 7, 50, 2, 2, 960, 961, 7, 119, 2, 2, 961, 962, 7, 107, 2, 2, 962, 963, 7, 112, 2, 2, 963, 964, 7, 118, 2, 2, 964, 965, 7, 51, 2, 2, 965, 966, 7, 52, 2, 2, 966, 1080, 7, 58, 2, 2, 967, 968, 7, 119, 2, 2, 968, 969, 7, 107, 2, 2, 969, 970, 7, 112, 2, 2, 970, 971, 7, 118, 2, 2, 971, 972, 7, 51, 2, 2, 972, 973, 7, 53, 2, 2, 973, 1080, 7, 56, 2, 2, 974, 975, 7, 119, 2, 2, 975, 976, 7, 107, 2, 2, 976, 977, 7, 112, 2, 2, 977, 978, 7, 118, 2, 2, 978, 979, 7, 51, 2, 2, 979, 980, 7, 54, 2, 2, 980, 1080, 7, 54, 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, 55, 2, 2, 987, 1080, 7, 52, 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, 56, 2, 2, 994, 1080, 7, 50, 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, 56, 2, 2, 1001, 1080, 7, 58, 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, 57, 2, 2, 1008, 1080, 7, 56, 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, 58, 2, 2, 1015, 1080, 7, 54, 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, 59, 2, 2, 1022, 1080, 7, 52, 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, 52, 2, 2, 1028, 1029, 7, 50, 2, 2, 1029, 1080, 7, 50, 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, 52, 2, 2, 1035, 1036, 7, 50, 2, 2, 1036, 1080, 7, 58, 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, 52, 2, 2, 1042, 1043, 7, 51, 2, 2, 1043, 1080, 7, 56, 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, 52, 2, 2, 1049, 1050, 7, 52, 2, 2, 1050, 1080, 7, 54, 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, 52, 2, 2, 1056, 1057, 7, 53, 2, 2, 1057, 1080, 7, 52, 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, 52, 2, 2, 1063, 1064, 7, 54, 2, 2, 1064, 1080, 7, 50, 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, 54, 2, 2, 1071, 1080, 7, 58, 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, 55, 2, 2, 1078, 1080, 7, 56, 2, 2, 1079, 864, 3, 2, 2, 2, 1079, 868, 3, 2, 2, 2, 1079, 873, 3, 2, 2, 2, 1079, 879, 3, 2, 2, 2, 1079, 885, 3, 2, 2, 2, 1079, 891, 3, 2, 2, 2, 1079, 897, 3, 2, 2, 2, 1079, 903, 3, 2, 2, 2, 1079, 909, 3, 2, 2, 2, 1079, 915, 3, 2, 2, 2, 1079, 921, 3, 2, 2, 2, 1079, 927, 3, 2, 2, 2, 1079, 933, 3, 2, 2, 2, 1079, 939, 3, 2, 2, 2, 1079, 946, 3, 2, 2, 2, 1079, 953, 3, 2, 2, 2, 1079, 960, 3, 2, 2, 2, 1079, 967, 3, 2, 2, 2, 1079, 974, 3, 2, 2, 2, 1079, 981, 3, 2, 2, 2, 1079, 988, 3, 2, 2, 2, 1079, 995, 3, 2, 2, 2, 1079, 1002, 3, 2, 2, 2, 1079, 1009, 3, 2, 2, 2, 1079, 1016, 3, 2, 2, 2, 1079, 1023, 3, 2, 2, 2, 1079, 1030, 3, 2, 2, 2, 1079, 1037, 3, 2, 2, 2, 1079, 1044, 3, 2, 2, 2, 1079, 1051, 3, 2, 2, 2, 1079, 1058, 3, 2, 2, 2, 1079, 1065, 3, 2, 2, 2, 1079, 1072, 3, 2, 2, 2, 1080, 190, 3, 2, 2, 2, 1081, 1082, 7, 100, 2, 2, 1082, 1083, 7, 123, 2, 2, 1083, 1084, 7, 118, 2, 2, 1084, 1085, 7, 103, 2, 2, 1085, 1302, 7, 117, 2, 2, 1086, 1087, 7, 100, 2, 2, 1087, 1088, 7, 123, 2, 2, 1088, 1089, 7, 118, 2, 2, 1089, 1090, 7, 103, 2, 2, 1090, 1091, 7, 117, 2, 2, 1091, 1302, 7, 51, 2, 2, 1092, 1093, 7, 100, 2, 2, 1093, 1094, 7, 123, 2, 2, 1094, 1095, 7, 118, 2, 2, 1095, 1096, 7, 103, 2, 2, 1096, 1097, 7, 117, 2, 2, 1097, 1302, 7, 52, 2, 2, 1098, 1099, 7, 100, 2, 2, 1099, 1100, 7, 123, 2, 2, 1100, 1101, 7, 118, 2, 2, 1101, 1102, 7, 103, 2, 2, 1102, 1103, 7, 117, 2, 2, 1103, 1302, 7, 53, 2, 2, 1104, 1105, 7, 100, 2, 2, 1105, 1106, 7, 123, 2, 2, 1106, 1107, 7, 118, 2, 2, 1107, 1108, 7, 103, 2, 2, 1108, 1109, 7, 117, 2, 2, 1109, 1302, 7, 54, 2, 2, 1110, 1111, 7, 100, 2, 2, 1111, 1112, 7, 123, 2, 2, 1112, 1113, 7, 118, 2, 2, 1113, 1114, 7, 103, 2, 2, 1114, 1115, 7, 117, 2, 2, 1115, 1302, 7, 55, 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, 1302, 7, 56, 2, 2, 1122, 1123, 7, 100, 2, 2, 1123, 1124, 7, 123, 2, 2, 1124, 1125, 7, 118, 2, 2, 1125, 1126, 7, 103, 2, 2, 1126, 1127, 7, 117, 2, 2, 1127, 1302, 7, 57, 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, 1302, 7, 58, 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, 1302, 7, 59, 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, 1146, 7, 51, 2, 2, 1146, 1302, 7, 50, 2, 2, 1147, 1148, 7, 100, 2, 2, 1148, 1149, 7, 123, 2, 2, 1149, 1150, 7, 118, 2, 2, 1150, 1151, 7, 103, 2, 2, 1151, 1152, 7, 117, 2, 2, 1152, 1153, 7, 51, 2, 2, 1153, 1302, 7, 51, 2, 2, 1154, 1155, 7, 100, 2, 2, 1155, 1156, 7, 123, 2, 2, 1156, 1157, 7, 118, 2, 2, 1157, 1158, 7, 103, 2, 2, 1158, 1159, 7, 117, 2, 2, 1159, 1160, 7, 51, 2, 2, 1160, 1302, 7, 52, 2, 2, 1161, 1162, 7, 100, 2, 2, 1162, 1163, 7, 123, 2, 2, 1163, 1164, 7, 118, 2, 2, 1164, 1165, 7, 103, 2, 2, 1165, 1166, 7, 117, 2, 2, 1166, 1167, 7, 51, 2, 2, 1167, 1302, 7, 53, 2, 2, 1168, 1169, 7, 100, 2, 2, 1169, 1170, 7, 123, 2, 2, 1170, 1171, 7, 118, 2, 2, 1171, 1172, 7, 103, 2, 2, 1172, 1173, 7, 117, 2, 2, 1173, 1174, 7, 51, 2, 2, 1174, 1302, 7, 54, 2, 2, 1175, 1176, 7, 100, 2, 2, 1176, 1177, 7, 123, 2, 2, 1177, 1178, 7, 118, 2, 2, 1178, 1179, 7, 103, 2, 2, 1179, 1180, 7, 117, 2, 2, 1180, 1181, 7, 51, 2, 2, 1181, 1302, 7, 55, 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, 1302, 7, 56, 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, 1302, 7, 57, 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, 1302, 7, 58, 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, 1302, 7, 59, 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, 52, 2, 2, 1216, 1302, 7, 50, 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, 52, 2, 2, 1223, 1302, 7, 51, 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, 52, 2, 2, 1230, 1302, 7, 52, 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, 52, 2, 2, 1237, 1302, 7, 53, 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, 52, 2, 2, 1244, 1302, 7, 54, 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, 52, 2, 2, 1251, 1302, 7, 55, 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, 1302, 7, 56, 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, 1302, 7, 57, 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, 1302, 7, 58, 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, 1302, 7, 59, 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, 53, 2, 2, 1286, 1302, 7, 50, 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, 53, 2, 2, 1293, 1302, 7, 51, 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, 53, 2, 2, 1300, 1302, 7, 52, 2, 2, 1301, 1081, 3, 2, 2, 2, 1301, 1086, 3, 2, 2, 2, 1301, 1092, 3, 2, 2, 2, 1301, 1098, 3, 2, 2, 2, 1301, 1104, 3, 2, 2, 2, 1301, 1110, 3, 2, 2, 2, 1301, 1116, 3, 2, 2, 2, 1301, 1122, 3, 2, 2, 2, 1301, 1128, 3, 2, 2, 2, 1301, 1134, 3, 2, 2, 2, 1301, 1140, 3, 2, 2, 2, 1301, 1147, 3, 2, 2, 2, 1301, 1154, 3, 2, 2, 2, 1301, 1161, 3, 2, 2, 2, 1301, 1168, 3, 2, 2, 2, 1301, 1175, 3, 2, 2, 2, 1301, 1182, 3, 2, 2, 2, 1301, 1189, 3, 2, 2, 2, 1301, 1196, 3, 2, 2, 2, 1301, 1203, 3, 2, 2, 2, 1301, 1210, 3, 2, 2, 2, 1301, 1217, 3, 2, 2, 2, 1301, 1224, 3, 2, 2, 2, 1301, 1231, 3, 2, 2, 2, 1301, 1238, 3, 2, 2, 2, 1301, 1245, 3, 2, 2, 2, 1301, 1252, 3, 2, 2, 2, 1301, 1259, 3, 2, 2, 2, 1301, 1266, 3, 2, 2, 2, 1301, 1273, 3, 2, 2, 2, 1301, 1280, 3, 2, 2, 2, 1301, 1287, 3, 2, 2, 2, 1301, 1294, 3, 2, 2, 2, 1302, 192, 3, 2, 2, 2, 1303, 1304, 7, 104, 2, 2, 1304, 1305, 7, 107, 2, 2, 1305, 1306, 7, 122, 2, 2, 1306, 1307, 7, 103, 2, 2, 1307, 1326, 7, 102, 2, 2, 1308, 1309, 7, 104, 2, 2, 1309, 1310, 7, 107, 2, 2, 1310, 1311, 7, 122, 2, 2, 1311, 1312, 7, 103, 2, 2, 1312, 1313, 7, 102, 2, 2, 1313, 1315, 3, 2, 2, 2, 1314, 1316, 9, 3, 2, 2, 1315, 1314, 3, 2, 2, 2, 1316, 1317, 3, 2, 2, 2, 1317, 1315, 3, 2, 2, 2, 1317, 1318, 3, 2, 2, 2, 1318, 1319, 3, 2, 2, 2, 1319, 1321, 7, 122, 2, 2, 1320, 1322, 9, 3, 2, 2, 1321, 1320, 3, 2, 2, 2, 1322, 1323, 3, 2, 2, 2, 1323, 1321, 3, 2, 2, 2, 1323, 1324, 3, 2, 2, 2, 1324, 1326, 3, 2, 2, 2, 1325, 1303, 3, 2, 2, 2, 1325, 1308, 3, 2, 2, 2, 1326, 194, 3, 2, 2, 2, 1327, 1328, 7, 119, 2, 2, 1328, 1329, 7, 104, 2, 2, 1329, 1330, 7, 107, 2, 2, 1330, 1331, 7, 122, 2, 2, 1331, 1332, 7, 103, 2, 2, 1332, 1352, 7, 102, 2, 2, 1333, 1334, 7, 119, 2, 2, 1334, 1335, 7, 104, 2, 2, 1335, 1336, 7, 107, 2, 2, 1336, 1337, 7, 122, 2, 2, 1337, 1338, 7, 103, 2, 2, 1338, 1339, 7, 102, 2, 2, 1339, 1341, 3, 2, 2, 2, 1340, 1342, 9, 3, 2, 2, 1341, 1340, 3, 2, 2, 2, 1342, 1343, 3, 2, 2, 2, 1343, 1341, 3, 2, 2, 2, 1343, 1344, 3, 2, 2, 2, 1344, 1345, 3, 2, 2, 2, 1345, 1347, 7, 122, 2, 2, 1346, 1348, 9, 3, 2, 2, 1347, 1346, 3, 2, 2, 2, 1348, 1349, 3, 2, 2, 2, 1349, 1347, 3, 2, 2, 2, 1349, 1350, 3, 2, 2, 2, 1350, 1352, 3, 2, 2, 2, 1351, 1327, 3, 2, 2, 2, 1351, 1333, 3, 2, 2, 2, 1352, 196, 3, 2, 2, 2, 1353, 1355, 9, 3, 2, 2, 1354, 1353, 3, 2, 2, 2, 1355, 1356, 3, 2, 2, 2, 1356, 1354, 3, 2, 2, 2, 1356, 1357, 3, 2, 2, 2, 1357, 1358, 3, 2, 2, 2, 1358, 1360, 7, 48, 2, 2, 1359, 1361, 9, 3, 2, 2, 1360, 1359, 3, 2, 2, 2, 1361, 1362, 3, 2, 2, 2, 1362, 1360, 3, 2, 2, 2, 1362, 1363, 3, 2, 2, 2, 1363, 1364, 3, 2, 2, 2, 1364, 1366, 7, 48, 2, 2, 1365, 1367, 9, 3, 2, 2, 1366, 1365, 3, 2, 2, 2, 1367, 1368, 3, 2, 2, 2, 1368, 1366, 3, 2, 2, 2, 1368, 1369, 3, 2, 2, 2, 1369, 198, 3, 2, 2, 2, 1370, 1371, 7, 118, 2, 2, 1371, 1372, 7, 116, 2, 2, 1372, 1373, 7, 119, 2, 2, 1373, 1380, 7, 103, 2, 2, 1374, 1375, 7, 104, 2, 2, 1375, 1376, 7, 99, 2, 2, 1376, 1377, 7, 110, 2, 2, 1377, 1378, 7, 117, 2, 2, 1378, 1380, 7, 103, 2, 2, 1379, 1370, 3, 2, 2, 2, 1379, 1374, 3, 2, 2, 2, 1380, 200, 3, 2, 2, 2, 1381, 1388, 5, 203, 102, 2, 1382, 1384, 5, 203, 102, 2, 1383, 1382, 3, 2, 2, 2, 1383, 1384, 3, 2, 2, 2, 1384, 1385, 3, 2, 2, 2, 1385, 1386, 7, 48, 2, 2, 1386, 1388, 5, 203, 102, 2, 1387, 1381, 3, 2, 2, 2, 1387, 1383, 3, 2, 2, 2, 1388, 1391, 3, 2, 2, 2, 1389, 1390, 9, 4, 2, 2, 1390, 1392, 5, 203, 102, 2, 1391, 1389, 3, 2, 2, 2, 1391, 1392, 3, 2, 2, 2, 1392, 202, 3, 2, 2, 2, 1393, 1400, 9, 3, 2, 2, 1394, 1396, 7, 97, 2, 2, 1395, 1394, 3, 2, 2, 2, 1395, 1396, 3, 2, 2, 2, 1396, 1397, 3, 2, 2, 2, 1397, 1399, 9, 3, 2, 2, 1398, 1395, 3, 2, 2, 2, 1399, 1402, 3, 2, 2, 2, 1400, 1398, 3, 2, 2, 2, 1400, 1401, 3, 2, 2, 2, 1401, 204, 3, 2, 2, 2, 1402, 1400, 3, 2, 2, 2, 1403, 1404, 7, 50, 2, 2, 1404, 1405, 9, 5, 2, 2, 1405, 1406, 5, 207, 104, 2, 1406, 206, 3, 2, 2, 2, 1407, 1414, 5, 215, 108, 2, 1408, 1410, 7, 97, 2, 2, 1409, 1408, 3, 2, 2, 2, 1409, 1410, 3, 2, 2, 2, 1410, 1411, 3, 2, 2, 2, 1411, 1413, 5, 215, 108, 2, 1412, 1409, 3, 2, 2, 2, 1413, 1416, 3, 2, 2, 2, 1414, 1412, 3, 2, 2, 2, 1414, 1415, 3, 2, 2, 2, 1415, 208, 3, 2, 2, 2, 1416, 1414, 3, 2, 2, 2, 1417, 1418, 7, 121, 2, 2, 1418, 1419, 7, 103, 2, 2, 1419, 1470, 7, 107, 2, 2, 1420, 1421, 7, 117, 2, 2, 1421, 1422, 7, 124, 2, 2, 1422, 1423, 7, 99, 2, 2, 1423, 1424, 7, 100, 2, 2, 1424, 1470, 7, 113, 2, 2, 1425, 1426, 7, 104, 2, 2, 1426, 1427, 7, 107, 2, 2, 1427, 1428, 7, 112, 2, 2, 1428, 1429, 7, 112, 2, 2, 1429, 1430, 7, 103, 2, 2, 1430, 1470, 7, 123, 2, 2, 1431, 1432, 7, 103, 2, 2, 1432, 1433, 7, 118, 2, 2, 1433, 1434, 7, 106, 2, 2, 1434, 1435, 7, 103, 2, 2, 1435, 1470, 7, 116, 2, 2, 1436, 1437, 7, 117, 2, 2, 1437, 1438, 7, 103, 2, 2, 1438, 1439, 7, 101, 2, 2, 1439, 1440, 7, 113, 2, 2, 1440, 1441, 7, 112, 2, 2, 1441, 1442, 7, 102, 2, 2, 1442, 1470, 7, 117, 2, 2, 1443, 1444, 7, 111, 2, 2, 1444, 1445, 7, 107, 2, 2, 1445, 1446, 7, 112, 2, 2, 1446, 1447, 7, 119, 2, 2, 1447, 1448, 7, 118, 2, 2, 1448, 1449, 7, 103, 2, 2, 1449, 1470, 7, 117, 2, 2, 1450, 1451, 7, 106, 2, 2, 1451, 1452, 7, 113, 2, 2, 1452, 1453, 7, 119, 2, 2, 1453, 1454, 7, 116, 2, 2, 1454, 1470, 7, 117, 2, 2, 1455, 1456, 7, 102, 2, 2, 1456, 1457, 7, 99, 2, 2, 1457, 1458, 7, 123, 2, 2, 1458, 1470, 7, 117, 2, 2, 1459, 1460, 7, 121, 2, 2, 1460, 1461, 7, 103, 2, 2, 1461, 1462, 7, 103, 2, 2, 1462, 1463, 7, 109, 2, 2, 1463, 1470, 7, 117, 2, 2, 1464, 1465, 7, 123, 2, 2, 1465, 1466, 7, 103, 2, 2, 1466, 1467, 7, 99, 2, 2, 1467, 1468, 7, 116, 2, 2, 1468, 1470, 7, 117, 2, 2, 1469, 1417, 3, 2, 2, 2, 1469, 1420, 3, 2, 2, 2, 1469, 1425, 3, 2, 2, 2, 1469, 1431, 3, 2, 2, 2, 1469, 1436, 3, 2, 2, 2, 1469, 1443, 3, 2, 2, 2, 1469, 1450, 3, 2, 2, 2, 1469, 1455, 3, 2, 2, 2, 1469, 1459, 3, 2, 2, 2, 1469, 1464, 3, 2, 2, 2, 1470, 210, 3, 2, 2, 2, 1471, 1472, 7, 106, 2, 2, 1472, 1473, 7, 103, 2, 2, 1473, 1474, 7, 122, 2, 2, 1474, 1491, 3, 2, 2, 2, 1475, 1479, 7, 36, 2, 2, 1476, 1478, 5, 213, 107, 2, 1477, 1476, 3, 2, 2, 2, 1478, 1481, 3, 2, 2, 2, 1479, 1477, 3, 2, 2, 2, 1479, 1480, 3, 2, 2, 2, 1480, 1482, 3, 2, 2, 2, 1481, 1479, 3, 2, 2, 2, 1482, 1492, 7, 36, 2, 2, 1483, 1487, 7, 41, 2, 2, 1484, 1486, 5, 213, 107, 2, 1485, 1484, 3, 2, 2, 2, 1486, 1489, 3, 2, 2, 2, 1487, 1485, 3, 2, 2, 2, 1487, 1488, 3, 2, 2, 2, 1488, 1490, 3, 2, 2, 2, 1489, 1487, 3, 2, 2, 2, 1490, 1492, 7, 41, 2, 2, 1491, 1475, 3, 2, 2, 2, 1491, 1483, 3, 2, 2, 2, 1492, 212, 3, 2, 2, 2, 1493, 1494, 5, 215, 108, 2, 1494, 1495, 5, 215, 108, 2, 1495, 214, 3, 2, 2, 2, 1496, 1497, 9, 6, 2, 2, 1497, 216, 3, 2, 2, 2, 1498, 1499, 7, 99, 2, 2, 1499, 1500, 7, 100, 2, 2, 1500, 1501, 7, 117, 2, 2, 1501, 1502, 7, 118, 2, 2, 1502, 1503, 7, 116, 2, 2, 1503, 1504, 7, 99, 2, 2, 1504, 1505, 7, 101, 2, 2, 1505, 1587, 7, 118, 2, 2, 1506, 1507, 7, 99, 2, 2, 1507, 1508, 7, 104, 2, 2, 1508, 1509, 7, 118, 2, 2, 1509, 1510, 7, 103, 2, 2, 1510, 1587, 7, 116, 2, 2, 1511, 1512, 7, 101, 2, 2, 1512, 1513, 7, 99, 2, 2, 1513, 1514, 7, 117, 2, 2, 1514, 1587, 7, 103, 2, 2, 1515, 1516, 7, 101, 2, 2, 1516, 1517, 7, 99, 2, 2, 1517, 1518, 7, 118, 2, 2, 1518, 1519, 7, 101, 2, 2, 1519, 1587, 7, 106, 2, 2, 1520, 1521, 7, 102, 2, 2, 1521, 1522, 7, 103, 2, 2, 1522, 1523, 7, 104, 2, 2, 1523, 1524, 7, 99, 2, 2, 1524, 1525, 7, 119, 2, 2, 1525, 1526, 7, 110, 2, 2, 1526, 1587, 7, 118, 2, 2, 1527, 1528, 7, 104, 2, 2, 1528, 1529, 7, 107, 2, 2, 1529, 1530, 7, 112, 2, 2, 1530, 1531, 7, 99, 2, 2, 1531, 1587, 7, 110, 2, 2, 1532, 1533, 7, 107, 2, 2, 1533, 1587, 7, 112, 2, 2, 1534, 1535, 7, 107, 2, 2, 1535, 1536, 7, 112, 2, 2, 1536, 1537, 7, 110, 2, 2, 1537, 1538, 7, 107, 2, 2, 1538, 1539, 7, 112, 2, 2, 1539, 1587, 7, 103, 2, 2, 1540, 1541, 7, 110, 2, 2, 1541, 1542, 7, 103, 2, 2, 1542, 1587, 7, 118, 2, 2, 1543, 1544, 7, 111, 2, 2, 1544, 1545, 7, 99, 2, 2, 1545, 1546, 7, 118, 2, 2, 1546, 1547, 7, 101, 2, 2, 1547, 1587, 7, 106, 2, 2, 1548, 1549, 7, 112, 2, 2, 1549, 1550, 7, 119, 2, 2, 1550, 1551, 7, 110, 2, 2, 1551, 1587, 7, 110, 2, 2, 1552, 1553, 7, 113, 2, 2, 1553, 1587, 7, 104, 2, 2, 1554, 1555, 7, 116, 2, 2, 1555, 1556, 7, 103, 2, 2, 1556, 1557, 7, 110, 2, 2, 1557, 1558, 7, 113, 2, 2, 1558, 1559, 7, 101, 2, 2, 1559, 1560, 7, 99, 2, 2, 1560, 1561, 7, 118, 2, 2, 1561, 1562, 7, 99, 2, 2, 1562, 1563, 7, 100, 2, 2, 1563, 1564, 7, 110, 2, 2, 1564, 1587, 7, 103, 2, 2, 1565, 1566, 7, 117, 2, 2, 1566, 1567, 7, 118, 2, 2, 1567, 1568, 7, 99, 2, 2, 1568, 1569, 7, 118, 2, 2, 1569, 1570, 7, 107, 2, 2, 1570, 1587, 7, 101, 2, 2, 1571, 1572, 7, 117, 2, 2, 1572, 1573, 7, 121, 2, 2, 1573, 1574, 7, 107, 2, 2, 1574, 1575, 7, 118, 2, 2, 1575, 1576, 7, 101, 2, 2, 1576, 1587, 7, 106, 2, 2, 1577, 1578, 7, 118, 2, 2, 1578, 1579, 7, 116, 2, 2, 1579, 1587, 7, 123, 2, 2, 1580, 1581, 7, 118, 2, 2, 1581, 1582, 7, 123, 2, 2, 1582, 1583, 7, 114, 2, 2, 1583, 1584, 7, 103, 2, 2, 1584, 1585, 7, 113, 2, 2, 1585, 1587, 7, 104, 2, 2, 1586, 1498, 3, 2, 2, 2, 1586, 1506, 3, 2, 2, 2, 1586, 1511, 3, 2, 2, 2, 1586, 1515, 3, 2, 2, 2, 1586, 1520, 3, 2, 2, 2, 1586, 1527, 3, 2, 2, 2, 1586, 1532, 3, 2, 2, 2, 1586, 1534, 3, 2, 2, 2, 1586, 1540, 3, 2, 2, 2, 1586, 1543, 3, 2, 2, 2, 1586, 1548, 3, 2, 2, 2, 1586, 1552, 3, 2, 2, 2, 1586, 1554, 3, 2, 2, 2, 1586, 1565, 3, 2, 2, 2, 1586, 1571, 3, 2, 2, 2, 1586, 1577, 3, 2, 2, 2, 1586, 1580, 3, 2, 2, 2, 1587, 218, 3, 2, 2, 2, 1588, 1589, 7, 99, 2, 2, 1589, 1590, 7, 112, 2, 2, 1590, 1591, 7, 113, 2, 2, 1591, 1592, 7, 112, 2, 2, 1592, 1593, 7, 123, 2, 2, 1593, 1594, 7, 111, 2, 2, 1594, 1595, 7, 113, 2, 2, 1595, 1596, 7, 119, 2, 2, 1596, 1597, 7, 117, 2, 2, 1597, 220, 3, 2, 2, 2, 1598, 1599, 7, 100, 2, 2, 1599, 1600, 7, 116, 2, 2, 1600, 1601, 7, 103, 2, 2, 1601, 1602, 7, 99, 2, 2, 1602, 1603, 7, 109, 2, 2, 1603, 222, 3, 2, 2, 2, 1604, 1605, 7, 101, 2, 2, 1605, 1606, 7, 113, 2, 2, 1606, 1607, 7, 112, 2, 2, 1607, 1608, 7, 117, 2, 2, 1608, 1609, 7, 118, 2, 2, 1609, 1610, 7, 99, 2, 2, 1610, 1611, 7, 112, 2, 2, 1611, 1612, 7, 118, 2, 2, 1612, 224, 3, 2, 2, 2, 1613, 1614, 7, 101, 2, 2, 1614, 1615, 7, 113, 2, 2, 1615, 1616, 7, 112, 2, 2, 1616, 1617, 7, 118, 2, 2, 1617, 1618, 7, 107, 2, 2, 1618, 1619, 7, 112, 2, 2, 1619, 1620, 7, 119, 2, 2, 1620, 1621, 7, 103, 2, 2, 1621, 226, 3, 2, 2, 2, 1622, 1623, 7, 103, 2, 2, 1623, 1624, 7, 122, 2, 2, 1624, 1625, 7, 118, 2, 2, 1625, 1626, 7, 103, 2, 2, 1626, 1627, 7, 116, 2, 2, 1627, 1628, 7, 112, 2, 2, 1628, 1629, 7, 99, 2, 2, 1629, 1630, 7, 110, 2, 2, 1630, 228, 3, 2, 2, 2, 1631, 1632, 7, 107, 2, 2, 1632, 1633, 7, 112, 2, 2, 1633, 1634, 7, 102, 2, 2, 1634, 1635, 7, 103, 2, 2, 1635, 1636, 7, 122, 2, 2, 1636, 1637, 7, 103, 2, 2, 1637, 1638, 7, 102, 2, 2, 1638, 230, 3, 2, 2, 2, 1639, 1640, 7, 107, 2, 2, 1640, 1641, 7, 112, 2, 2, 1641, 1642, 7, 118, 2, 2, 1642, 1643, 7, 103, 2, 2, 1643, 1644, 7, 116, 2, 2, 1644, 1645, 7, 112, 2, 2, 1645, 1646, 7, 99, 2, 2, 1646, 1647, 7, 110, 2, 2, 1647, 232, 3, 2, 2, 2, 1648, 1649, 7, 114, 2, 2, 1649, 1650, 7, 99, 2, 2, 1650, 1651, 7, 123, 2, 2, 1651, 1652, 7, 99, 2, 2, 1652, 1653, 7, 100, 2, 2, 1653, 1654, 7, 110, 2, 2, 1654, 1655, 7, 103, 2, 2, 1655, 234, 3, 2, 2, 2, 1656, 1657, 7, 114, 2, 2, 1657, 1658, 7, 116, 2, 2, 1658, 1659, 7, 107, 2, 2, 1659, 1660, 7, 120, 2, 2, 1660, 1661, 7, 99, 2, 2, 1661, 1662, 7, 118, 2, 2, 1662, 1663, 7, 103, 2, 2, 1663, 236, 3, 2, 2, 2, 1664, 1665, 7, 114, 2, 2, 1665, 1666, 7, 119, 2, 2, 1666, 1667, 7, 100, 2, 2, 1667, 1668, 7, 110, 2, 2, 1668, 1669, 7, 107, 2, 2, 1669, 1670, 7, 101, 2, 2, 1670, 238, 3, 2, 2, 2, 1671, 1672, 7, 114, 2, 2, 1672, 1673, 7, 119, 2, 2, 1673, 1674, 7, 116, 2, 2, 1674, 1675, 7, 103, 2, 2, 1675, 240, 3, 2, 2, 2, 1676, 1677, 7, 118, 2, 2, 1677, 1678, 7, 123, 2, 2, 1678, 1679, 7, 114, 2, 2, 1679, 1680, 7, 103, 2, 2, 1680, 242, 3, 2, 2, 2, 1681, 1682, 7, 120, 2, 2, 1682, 1683, 7, 107, 2, 2, 1683, 1684, 7, 103, 2, 2, 1684, 1685, 7, 121, 2, 2, 1685, 244, 3, 2, 2, 2, 1686, 1690, 5, 247, 124, 2, 1687, 1689, 5, 249, 125, 2, 1688, 1687, 3, 2, 2, 2, 1689, 1692, 3, 2, 2, 2, 1690, 1688, 3, 2, 2, 2, 1690, 1691, 3, 2, 2, 2, 1691, 246, 3, 2, 2, 2, 1692, 1690, 3, 2, 2, 2, 1693, 1694, 9, 7, 2, 2, 1694, 248, 3, 2, 2, 2, 1695, 1696, 9, 8, 2, 2, 1696, 250, 3, 2, 2, 2, 1697, 1701, 7, 36, 2, 2, 1698, 1700, 5, 253, 127, 2, 1699, 1698, 3, 2, 2, 2, 1700, 1703, 3, 2, 2, 2, 1701, 1699, 3, 2, 2, 2, 1701, 1702, 3, 2, 2, 2, 1702, 1704, 3, 2, 2, 2, 1703, 1701, 3, 2, 2, 2, 1704, 1714, 7, 36, 2, 2, 1705, 1709, 7, 41, 2, 2, 1706, 1708, 5, 255, 128, 2, 1707, 1706, 3, 2, 2, 2, 1708, 1711, 3, 2, 2, 2, 1709, 1707, 3, 2, 2, 2, 1709, 1710, 3, 2, 2, 2, 1710, 1712, 3, 2, 2, 2, 1711, 1709, 3, 2, 2, 2, 1712, 1714, 7, 41, 2, 2, 1713, 1697, 3, 2, 2, 2, 1713, 1705, 3, 2, 2, 2, 1714, 252, 3, 2, 2, 2, 1715, 1719, 10, 9, 2, 2, 1716, 1717, 7, 94, 2, 2, 1717, 1719, 11, 2, 2, 2, 1718, 1715, 3, 2, 2, 2, 1718, 1716, 3, 2, 2, 2, 1719, 254, 3, 2, 2, 2, 1720, 1724, 10, 10, 2, 2, 1721, 1722, 7, 94, 2, 2, 1722, 1724, 11, 2, 2, 2, 1723, 1720, 3, 2, 2, 2, 1723, 1721, 3, 2, 2, 2, 1724, 256, 3, 2, 2, 2, 1725, 1727, 9, 11, 2, 2, 1726, 1725, 3, 2, 2, 2, 1727, 1728, 3, 2, 2, 2, 1728, 1726, 3, 2, 2, 2, 1728, 1729, 3, 2, 2, 2, 1729, 1730, 3, 2, 2, 2, 1730, 1731, 8, 129, 2, 2, 1731, 258, 3, 2, 2, 2, 1732, 1733, 7, 49, 2, 2, 1733, 1734, 7, 44, 2, 2, 1734, 1738, 3, 2, 2, 2, 1735, 1737, 11, 2, 2, 2, 1736, 1735, 3, 2, 2, 2, 1737, 1740, 3, 2, 2, 2, 1738, 1739, 3, 2, 2, 2, 1738, 1736, 3, 2, 2, 2, 1739, 1741, 3, 2, 2, 2, 1740, 1738, 3, 2, 2, 2, 1741, 1742, 7, 44, 2, 2, 1742, 1743, 7, 49, 2, 2, 1743, 1744, 3, 2, 2, 2, 1744, 1745, 8, 130, 3, 2, 1745, 260, 3, 2, 2, 2, 1746, 1747, 7, 49, 2, 2, 1747, 1748, 7, 49, 2, 2, 1748, 1752, 3, 2, 2, 2, 1749, 1751, 10, 2, 2, 2, 1750, 1749, 3, 2, 2, 2, 1751, 1754, 3, 2, 2, 2, 1752, 1750, 3, 2, 2, 2, 1752, 1753, 3, 2, 2, 2, 1753, 1755, 3, 2, 2, 2, 1754, 1752, 3, 2, 2, 2, 1755, 1756, 8, 131, 3, 2, 1756, 262, 3, 2, 2, 2, 40, 2, 659, 665, 674, 862, 1079, 1301, 1317, 1323, 1325, 1343, 1349, 1351, 1356, 1362, 1368, 1379, 1383, 1387, 1391, 1395, 1400, 1409, 1414, 1469, 1479, 1487, 1491, 1586, 1690, 1701, 1709, 1713, 1718, 1723, 1728, 1738, 1752, 4, 8, 2, 2, 2, 3, 2] \ No newline at end of file diff --git a/src/lib/SolidityLexer.js b/src/lib/SolidityLexer.js index e137446..63ae56e 100644 --- a/src/lib/SolidityLexer.js +++ b/src/lib/SolidityLexer.js @@ -5,7 +5,7 @@ var antlr4 = require('../antlr4/index'); var serializedATN = ["\u0003\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964", - "\u0002z\u06bd\b\u0001\u0004\u0002\t\u0002\u0004\u0003\t\u0003\u0004", + "\u0002|\u06dd\b\u0001\u0004\u0002\t\u0002\u0004\u0003\t\u0003\u0004", "\u0004\t\u0004\u0004\u0005\t\u0005\u0004\u0006\t\u0006\u0004\u0007\t", "\u0007\u0004\b\t\b\u0004\t\t\t\u0004\n\t\n\u0004\u000b\t\u000b\u0004", "\f\t\f\u0004\r\t\r\u0004\u000e\t\u000e\u0004\u000f\t\u000f\u0004\u0010", @@ -27,101 +27,59 @@ var serializedATN = ["\u0003\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964", "i\ti\u0004j\tj\u0004k\tk\u0004l\tl\u0004m\tm\u0004n\tn\u0004o\to\u0004", "p\tp\u0004q\tq\u0004r\tr\u0004s\ts\u0004t\tt\u0004u\tu\u0004v\tv\u0004", "w\tw\u0004x\tx\u0004y\ty\u0004z\tz\u0004{\t{\u0004|\t|\u0004}\t}\u0004", - "~\t~\u0004\u007f\t\u007f\u0004\u0080\t\u0080\u0004\u0081\t\u0081\u0003", - "\u0002\u0003\u0002\u0003\u0002\u0003\u0002\u0003\u0002\u0003\u0002\u0003", - "\u0002\u0003\u0003\u0003\u0003\u0003\u0004\u0003\u0004\u0003\u0005\u0003", - "\u0005\u0003\u0006\u0003\u0006\u0003\u0006\u0003\u0007\u0003\u0007\u0003", - "\b\u0003\b\u0003\t\u0003\t\u0003\t\u0003\n\u0003\n\u0003\u000b\u0003", - "\u000b\u0003\u000b\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003", - "\f\u0003\r\u0003\r\u0003\u000e\u0003\u000e\u0003\u000e\u0003\u000e\u0003", - "\u000e\u0003\u000f\u0003\u000f\u0003\u0010\u0003\u0010\u0003\u0011\u0003", - "\u0011\u0003\u0012\u0003\u0012\u0003\u0012\u0003\u0012\u0003\u0012\u0003", - "\u0012\u0003\u0012\u0003\u0012\u0003\u0012\u0003\u0013\u0003\u0013\u0003", + "~\t~\u0004\u007f\t\u007f\u0004\u0080\t\u0080\u0004\u0081\t\u0081\u0004", + "\u0082\t\u0082\u0004\u0083\t\u0083\u0003\u0002\u0003\u0002\u0003\u0002", + "\u0003\u0002\u0003\u0002\u0003\u0002\u0003\u0002\u0003\u0003\u0003\u0003", + "\u0003\u0004\u0003\u0004\u0003\u0005\u0003\u0005\u0003\u0006\u0003\u0006", + "\u0003\u0006\u0003\u0007\u0003\u0007\u0003\b\u0003\b\u0003\t\u0003\t", + "\u0003\t\u0003\n\u0003\n\u0003\u000b\u0003\u000b\u0003\u000b\u0003\f", + "\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\r\u0003\r\u0003", + "\u000e\u0003\u000e\u0003\u000e\u0003\u000e\u0003\u000e\u0003\u000f\u0003", + "\u000f\u0003\u0010\u0003\u0010\u0003\u0011\u0003\u0011\u0003\u0012\u0003", + "\u0012\u0003\u0012\u0003\u0012\u0003\u0012\u0003\u0012\u0003\u0012\u0003", + "\u0012\u0003\u0012\u0003\u0013\u0003\u0013\u0003\u0013\u0003\u0013\u0003", "\u0013\u0003\u0013\u0003\u0013\u0003\u0013\u0003\u0013\u0003\u0013\u0003", - "\u0013\u0003\u0013\u0003\u0014\u0003\u0014\u0003\u0014\u0003\u0014\u0003", - "\u0014\u0003\u0014\u0003\u0014\u0003\u0014\u0003\u0015\u0003\u0015\u0003", - "\u0015\u0003\u0016\u0003\u0016\u0003\u0017\u0003\u0017\u0003\u0018\u0003", - "\u0018\u0003\u0018\u0003\u0018\u0003\u0018\u0003\u0018\u0003\u0019\u0003", - "\u0019\u0003\u0019\u0003\u0019\u0003\u001a\u0003\u001a\u0003\u001a\u0003", - "\u001a\u0003\u001a\u0003\u001a\u0003\u001a\u0003\u001b\u0003\u001b\u0003", + "\u0014\u0003\u0014\u0003\u0014\u0003\u0014\u0003\u0014\u0003\u0014\u0003", + "\u0014\u0003\u0014\u0003\u0015\u0003\u0015\u0003\u0015\u0003\u0016\u0003", + "\u0016\u0003\u0017\u0003\u0017\u0003\u0018\u0003\u0018\u0003\u0018\u0003", + "\u0018\u0003\u0018\u0003\u0018\u0003\u0019\u0003\u0019\u0003\u0019\u0003", + "\u0019\u0003\u001a\u0003\u001a\u0003\u001a\u0003\u001a\u0003\u001a\u0003", + "\u001a\u0003\u001a\u0003\u001b\u0003\u001b\u0003\u001b\u0003\u001b\u0003", "\u001b\u0003\u001b\u0003\u001b\u0003\u001b\u0003\u001b\u0003\u001b\u0003", - "\u001b\u0003\u001b\u0003\u001b\u0003\u001b\u0003\u001c\u0003\u001c\u0003", - "\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0003", - "\u001c\u0003\u001d\u0003\u001d\u0003\u001d\u0003\u001d\u0003\u001d\u0003", - "\u001d\u0003\u001d\u0003\u001d\u0003\u001d\u0003\u001e\u0003\u001e\u0003", - "\u001e\u0003\u001e\u0003\u001e\u0003\u001e\u0003\u001e\u0003\u001e\u0003", - "\u001f\u0003\u001f\u0003\u001f\u0003\u001f\u0003\u001f\u0003\u001f\u0003", - " \u0003 \u0003 \u0003 \u0003 \u0003!\u0003!\u0003\"\u0003\"\u0003#\u0003", - "#\u0003#\u0003#\u0003#\u0003#\u0003#\u0003#\u0003$\u0003$\u0003%\u0003", - "%\u0003%\u0003%\u0003%\u0003%\u0003%\u0003%\u0003&\u0003&\u0003&\u0003", - "\'\u0003\'\u0003\'\u0003\'\u0003\'\u0003\'\u0003\'\u0003(\u0003(\u0003", - "(\u0003(\u0003(\u0003(\u0003(\u0003(\u0003)\u0003)\u0003)\u0003)\u0003", - ")\u0003)\u0003)\u0003)\u0003)\u0003*\u0003*\u0003*\u0003+\u0003+\u0003", - "+\u0003+\u0003+\u0003,\u0003,\u0003,\u0003,\u0003,\u0003,\u0003-\u0003", - "-\u0003-\u0003-\u0003-\u0003-\u0003-\u0003-\u0003-\u0003.\u0003.\u0003", - ".\u0003/\u0003/\u0003/\u0003/\u0003/\u0003/\u0003/\u00030\u00030\u0003", - "0\u00030\u00030\u00030\u00031\u00031\u00031\u00031\u00031\u00032\u0003", - "2\u00032\u00032\u00033\u00033\u00033\u00033\u00033\u00034\u00034\u0003", - "4\u00034\u00034\u00034\u00034\u00035\u00035\u00035\u00035\u00035\u0003", - "6\u00036\u00036\u00037\u00037\u00037\u00038\u00038\u00038\u00038\u0003", - "9\u00039\u0003:\u0003:\u0003;\u0003;\u0003;\u0003;\u0003;\u0003;\u0003", - "<\u0003<\u0003<\u0003<\u0003<\u0003<\u0003<\u0003=\u0003=\u0003>\u0003", - ">\u0003>\u0003?\u0003?\u0003@\u0003@\u0003A\u0003A\u0003A\u0003B\u0003", - "B\u0003B\u0003C\u0003C\u0003D\u0003D\u0003E\u0003E\u0003E\u0003F\u0003", - "F\u0003F\u0003G\u0003G\u0003G\u0003H\u0003H\u0003H\u0003I\u0003I\u0003", - "J\u0003J\u0003K\u0003K\u0003K\u0003L\u0003L\u0003L\u0003M\u0003M\u0003", - "M\u0003N\u0003N\u0003N\u0003N\u0003O\u0003O\u0003O\u0003O\u0003P\u0003", - "P\u0003P\u0003Q\u0003Q\u0003Q\u0003R\u0003R\u0003R\u0003S\u0003S\u0003", - "S\u0003T\u0003T\u0003T\u0003U\u0003U\u0003U\u0003U\u0003V\u0003V\u0003", - "V\u0003W\u0003W\u0003W\u0003X\u0003X\u0003X\u0003X\u0003X\u0003X\u0003", - "X\u0003Y\u0003Y\u0003Y\u0003Y\u0003Y\u0003Z\u0003Z\u0003Z\u0003Z\u0003", - "Z\u0003Z\u0003Z\u0003Z\u0003[\u0003[\u0003[\u0003\\\u0003\\\u0003\\", - "\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003", - "\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003", - "\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003", - "\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003", - "\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003", - "\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003", - "\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003", - "\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003", - "\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003", - "\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003", - "\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003", - "\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003", - "\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003", - "\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003", - "\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003", - "\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003", - "\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003", - "\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003", - "\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003", - "\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0005", - "\\\u033f\n\\\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003", - "]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003", - "]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003", - "]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003", - "]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003", - "]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003", - "]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003", - "]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003", - "]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003", - "]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003", - "]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003", - "]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003", - "]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003", - "]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003", - "]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003", - "]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003", - "]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003", - "]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003", - "]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003", - "]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003", - "]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003", - "]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0005]\u0418\n]\u0003", - "^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003", - "^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003", - "^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003", - "^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003", + "\u001b\u0003\u001b\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0003", + "\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001d\u0003", + "\u001d\u0003\u001d\u0003\u001d\u0003\u001d\u0003\u001d\u0003\u001d\u0003", + "\u001d\u0003\u001d\u0003\u001e\u0003\u001e\u0003\u001e\u0003\u001e\u0003", + "\u001e\u0003\u001e\u0003\u001e\u0003\u001e\u0003\u001f\u0003\u001f\u0003", + "\u001f\u0003\u001f\u0003\u001f\u0003\u001f\u0003 \u0003 \u0003 \u0003", + " \u0003 \u0003!\u0003!\u0003\"\u0003\"\u0003#\u0003#\u0003#\u0003#\u0003", + "#\u0003#\u0003#\u0003#\u0003$\u0003$\u0003%\u0003%\u0003%\u0003%\u0003", + "%\u0003%\u0003%\u0003%\u0003&\u0003&\u0003&\u0003\'\u0003\'\u0003\'", + "\u0003\'\u0003\'\u0003\'\u0003\'\u0003(\u0003(\u0003(\u0003(\u0003(", + "\u0003(\u0003(\u0003(\u0003)\u0003)\u0003)\u0003)\u0003)\u0003)\u0003", + ")\u0003)\u0003)\u0003*\u0003*\u0003*\u0003+\u0003+\u0003+\u0003+\u0003", + "+\u0003,\u0003,\u0003,\u0003,\u0003,\u0003,\u0003-\u0003-\u0003-\u0003", + "-\u0003-\u0003-\u0003-\u0003-\u0003-\u0003.\u0003.\u0003.\u0003/\u0003", + "/\u0003/\u0003/\u0003/\u0003/\u0003/\u00030\u00030\u00030\u00030\u0003", + "0\u00030\u00031\u00031\u00031\u00031\u00031\u00032\u00032\u00032\u0003", + "2\u00033\u00033\u00033\u00033\u00033\u00034\u00034\u00034\u00034\u0003", + "4\u00034\u00034\u00035\u00035\u00035\u00035\u00035\u00036\u00036\u0003", + "6\u00037\u00037\u00037\u00038\u00038\u00038\u00038\u00039\u00039\u0003", + ":\u0003:\u0003;\u0003;\u0003;\u0003;\u0003;\u0003;\u0003<\u0003<\u0003", + "<\u0003<\u0003<\u0003<\u0003<\u0003=\u0003=\u0003>\u0003>\u0003>\u0003", + "?\u0003?\u0003@\u0003@\u0003A\u0003A\u0003A\u0003B\u0003B\u0003B\u0003", + "C\u0003C\u0003D\u0003D\u0003E\u0003E\u0003E\u0003F\u0003F\u0003F\u0003", + "G\u0003G\u0003G\u0003H\u0003H\u0003H\u0003I\u0003I\u0003J\u0003J\u0003", + "K\u0003K\u0003K\u0003L\u0003L\u0003L\u0003M\u0003M\u0003M\u0003N\u0003", + "N\u0003N\u0003N\u0003O\u0003O\u0003O\u0003O\u0003P\u0003P\u0003P\u0003", + "Q\u0003Q\u0003Q\u0003R\u0003R\u0003R\u0003S\u0003S\u0003S\u0003T\u0003", + "T\u0003T\u0003U\u0003U\u0003U\u0003U\u0003V\u0003V\u0003V\u0003W\u0003", + "W\u0003W\u0003X\u0003X\u0003X\u0003X\u0003X\u0003X\u0003X\u0003Y\u0003", + "Y\u0003Y\u0003Y\u0003Y\u0003Z\u0003Z\u0003Z\u0003Z\u0003Z\u0003Z\u0003", + "Z\u0003Z\u0003[\u0003[\u0003[\u0003\\\u0003\\\u0003\\\u0003\\\u0003", + "\\\u0007\\\u0292\n\\\f\\\u000e\\\u0295\u000b\\\u0003\\\u0006\\\u0298", + "\n\\\r\\\u000e\\\u0299\u0003]\u0003]\u0003]\u0003]\u0003]\u0007]\u02a1", + "\n]\f]\u000e]\u02a4\u000b]\u0003]\u0003]\u0003]\u0003^\u0003^\u0003", "^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003", "^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003", "^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003", @@ -140,950 +98,1012 @@ var serializedATN = ["\u0003\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964", "^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003", "^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003", "^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0005", - "^\u04f6\n^\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003", - "_\u0003_\u0003_\u0003_\u0006_\u0504\n_\r_\u000e_\u0505\u0003_\u0003", - "_\u0006_\u050a\n_\r_\u000e_\u050b\u0005_\u050e\n_\u0003`\u0003`\u0003", + "^\u035f\n^\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003", + "_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003", + "_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003", + "_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003", + "_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003", + "_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003", + "_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003", + "_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003", + "_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003", + "_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003", + "_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003", + "_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003", + "_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003", + "_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003", + "_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003", + "_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003", + "_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003", + "_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003", + "_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003", + "_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003", + "_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003", + "_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0005_\u0438\n_\u0003`\u0003", + "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", + "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", + "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", + "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", + "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", + "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", + "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", + "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", + "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", + "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", + "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", + "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", + "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", + "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", + "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", + "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", + "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", + "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", + "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", + "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", - "`\u0003`\u0006`\u051e\n`\r`\u000e`\u051f\u0003`\u0003`\u0006`\u0524", - "\n`\r`\u000e`\u0525\u0005`\u0528\n`\u0003a\u0006a\u052b\na\ra\u000e", - "a\u052c\u0003a\u0003a\u0006a\u0531\na\ra\u000ea\u0532\u0003a\u0003a", - "\u0006a\u0537\na\ra\u000ea\u0538\u0003b\u0003b\u0003b\u0003b\u0003b", - "\u0003b\u0003b\u0003b\u0003b\u0005b\u0544\nb\u0003c\u0003c\u0005c\u0548", - "\nc\u0003c\u0003c\u0005c\u054c\nc\u0003c\u0003c\u0005c\u0550\nc\u0003", - "d\u0003d\u0005d\u0554\nd\u0003d\u0007d\u0557\nd\fd\u000ed\u055a\u000b", - "d\u0003e\u0003e\u0003e\u0003e\u0003f\u0003f\u0005f\u0562\nf\u0003f\u0007", - "f\u0565\nf\ff\u000ef\u0568\u000bf\u0003g\u0003g\u0003g\u0003g\u0003", - "g\u0003g\u0003g\u0003g\u0003g\u0003g\u0003g\u0003g\u0003g\u0003g\u0003", - "g\u0003g\u0003g\u0003g\u0003g\u0003g\u0003g\u0003g\u0003g\u0003g\u0003", - "g\u0003g\u0003g\u0003g\u0003g\u0003g\u0003g\u0003g\u0003g\u0003g\u0003", - "g\u0003g\u0003g\u0003g\u0003g\u0003g\u0003g\u0003g\u0003g\u0003g\u0003", - "g\u0003g\u0003g\u0003g\u0003g\u0003g\u0003g\u0003g\u0005g\u059e\ng\u0003", - "h\u0003h\u0003h\u0003h\u0003h\u0003h\u0007h\u05a6\nh\fh\u000eh\u05a9", - "\u000bh\u0003h\u0003h\u0003h\u0007h\u05ae\nh\fh\u000eh\u05b1\u000bh", - "\u0003h\u0005h\u05b4\nh\u0003i\u0003i\u0003i\u0003j\u0003j\u0003k\u0003", - "k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003", - "k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003", - "k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003", - "k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003", - "k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003", - "k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003", - "k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003", - "k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003", - "k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0005k\u0613\nk\u0003l\u0003", - "l\u0003l\u0003l\u0003l\u0003l\u0003l\u0003l\u0003l\u0003l\u0003m\u0003", - "m\u0003m\u0003m\u0003m\u0003m\u0003n\u0003n\u0003n\u0003n\u0003n\u0003", - "n\u0003n\u0003n\u0003n\u0003o\u0003o\u0003o\u0003o\u0003o\u0003o\u0003", - "o\u0003o\u0003o\u0003p\u0003p\u0003p\u0003p\u0003p\u0003p\u0003p\u0003", - "p\u0003p\u0003q\u0003q\u0003q\u0003q\u0003q\u0003q\u0003q\u0003q\u0003", - "r\u0003r\u0003r\u0003r\u0003r\u0003r\u0003r\u0003r\u0003r\u0003s\u0003", - "s\u0003s\u0003s\u0003s\u0003s\u0003s\u0003s\u0003t\u0003t\u0003t\u0003", - "t\u0003t\u0003t\u0003t\u0003t\u0003u\u0003u\u0003u\u0003u\u0003u\u0003", - "u\u0003u\u0003v\u0003v\u0003v\u0003v\u0003v\u0003w\u0003w\u0003w\u0003", - "w\u0003w\u0003x\u0003x\u0003x\u0003x\u0003x\u0003y\u0003y\u0007y\u0679", - "\ny\fy\u000ey\u067c\u000by\u0003z\u0003z\u0003{\u0003{\u0003|\u0003", - "|\u0007|\u0684\n|\f|\u000e|\u0687\u000b|\u0003|\u0003|\u0003|\u0007", - "|\u068c\n|\f|\u000e|\u068f\u000b|\u0003|\u0005|\u0692\n|\u0003}\u0003", - "}\u0003}\u0005}\u0697\n}\u0003~\u0003~\u0003~\u0005~\u069c\n~\u0003", - "\u007f\u0006\u007f\u069f\n\u007f\r\u007f\u000e\u007f\u06a0\u0003\u007f", - "\u0003\u007f\u0003\u0080\u0003\u0080\u0003\u0080\u0003\u0080\u0007\u0080", - "\u06a9\n\u0080\f\u0080\u000e\u0080\u06ac\u000b\u0080\u0003\u0080\u0003", - "\u0080\u0003\u0080\u0003\u0080\u0003\u0080\u0003\u0081\u0003\u0081\u0003", - "\u0081\u0003\u0081\u0007\u0081\u06b7\n\u0081\f\u0081\u000e\u0081\u06ba", - "\u000b\u0081\u0003\u0081\u0003\u0081\u0003\u06aa\u0002\u0082\u0003\u0003", - "\u0005\u0004\u0007\u0005\t\u0006\u000b\u0007\r\b\u000f\t\u0011\n\u0013", - "\u000b\u0015\f\u0017\r\u0019\u000e\u001b\u000f\u001d\u0010\u001f\u0011", - "!\u0012#\u0013%\u0014\'\u0015)\u0016+\u0017-\u0018/\u00191\u001a3\u001b", - "5\u001c7\u001d9\u001e;\u001f= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]0_1a", - "2c3e4g5i6k7m8o9q:s;u{?}@\u007fA\u0081B\u0083C\u0085D\u0087E\u0089", - "F\u008bG\u008dH\u008fI\u0091J\u0093K\u0095L\u0097M\u0099N\u009bO\u009d", - "P\u009fQ\u00a1R\u00a3S\u00a5T\u00a7U\u00a9V\u00abW\u00adX\u00afY\u00b1", - "Z\u00b3[\u00b5\\\u00b7]\u00b9^\u00bb_\u00bd`\u00bfa\u00c1b\u00c3c\u00c5", - "d\u00c7\u0002\u00c9e\u00cb\u0002\u00cdf\u00cfg\u00d1\u0002\u00d3\u0002", - "\u00d5h\u00d7i\u00d9j\u00dbk\u00ddl\u00dfm\u00e1n\u00e3o\u00e5p\u00e7", - "q\u00e9r\u00ebs\u00edt\u00efu\u00f1v\u00f3\u0002\u00f5\u0002\u00f7w", - "\u00f9\u0002\u00fb\u0002\u00fdx\u00ffy\u0101z\u0003\u0002\f\u0003\u0002", - "2;\u0004\u0002GGgg\u0004\u0002ZZzz\u0005\u00022;CHch\u0006\u0002&&C", - "\\aac|\u0007\u0002&&2;C\\aac|\u0006\u0002\f\f\u000f\u000f$$^^\u0006", - "\u0002\f\f\u000f\u000f))^^\u0005\u0002\u000b\f\u000e\u000f\"\"\u0004", - "\u0002\f\f\u000f\u000f\u0002\u074a\u0002\u0003\u0003\u0002\u0002\u0002", - "\u0002\u0005\u0003\u0002\u0002\u0002\u0002\u0007\u0003\u0002\u0002\u0002", - "\u0002\t\u0003\u0002\u0002\u0002\u0002\u000b\u0003\u0002\u0002\u0002", - "\u0002\r\u0003\u0002\u0002\u0002\u0002\u000f\u0003\u0002\u0002\u0002", - "\u0002\u0011\u0003\u0002\u0002\u0002\u0002\u0013\u0003\u0002\u0002\u0002", - "\u0002\u0015\u0003\u0002\u0002\u0002\u0002\u0017\u0003\u0002\u0002\u0002", - "\u0002\u0019\u0003\u0002\u0002\u0002\u0002\u001b\u0003\u0002\u0002\u0002", - "\u0002\u001d\u0003\u0002\u0002\u0002\u0002\u001f\u0003\u0002\u0002\u0002", - "\u0002!\u0003\u0002\u0002\u0002\u0002#\u0003\u0002\u0002\u0002\u0002", - "%\u0003\u0002\u0002\u0002\u0002\'\u0003\u0002\u0002\u0002\u0002)\u0003", - "\u0002\u0002\u0002\u0002+\u0003\u0002\u0002\u0002\u0002-\u0003\u0002", - "\u0002\u0002\u0002/\u0003\u0002\u0002\u0002\u00021\u0003\u0002\u0002", - "\u0002\u00023\u0003\u0002\u0002\u0002\u00025\u0003\u0002\u0002\u0002", - "\u00027\u0003\u0002\u0002\u0002\u00029\u0003\u0002\u0002\u0002\u0002", - ";\u0003\u0002\u0002\u0002\u0002=\u0003\u0002\u0002\u0002\u0002?\u0003", - "\u0002\u0002\u0002\u0002A\u0003\u0002\u0002\u0002\u0002C\u0003\u0002", - "\u0002\u0002\u0002E\u0003\u0002\u0002\u0002\u0002G\u0003\u0002\u0002", - "\u0002\u0002I\u0003\u0002\u0002\u0002\u0002K\u0003\u0002\u0002\u0002", - "\u0002M\u0003\u0002\u0002\u0002\u0002O\u0003\u0002\u0002\u0002\u0002", - "Q\u0003\u0002\u0002\u0002\u0002S\u0003\u0002\u0002\u0002\u0002U\u0003", - "\u0002\u0002\u0002\u0002W\u0003\u0002\u0002\u0002\u0002Y\u0003\u0002", - "\u0002\u0002\u0002[\u0003\u0002\u0002\u0002\u0002]\u0003\u0002\u0002", - "\u0002\u0002_\u0003\u0002\u0002\u0002\u0002a\u0003\u0002\u0002\u0002", - "\u0002c\u0003\u0002\u0002\u0002\u0002e\u0003\u0002\u0002\u0002\u0002", - "g\u0003\u0002\u0002\u0002\u0002i\u0003\u0002\u0002\u0002\u0002k\u0003", - "\u0002\u0002\u0002\u0002m\u0003\u0002\u0002\u0002\u0002o\u0003\u0002", - "\u0002\u0002\u0002q\u0003\u0002\u0002\u0002\u0002s\u0003\u0002\u0002", - "\u0002\u0002u\u0003\u0002\u0002\u0002\u0002w\u0003\u0002\u0002\u0002", - "\u0002y\u0003\u0002\u0002\u0002\u0002{\u0003\u0002\u0002\u0002\u0002", - "}\u0003\u0002\u0002\u0002\u0002\u007f\u0003\u0002\u0002\u0002\u0002", - "\u0081\u0003\u0002\u0002\u0002\u0002\u0083\u0003\u0002\u0002\u0002\u0002", - "\u0085\u0003\u0002\u0002\u0002\u0002\u0087\u0003\u0002\u0002\u0002\u0002", - "\u0089\u0003\u0002\u0002\u0002\u0002\u008b\u0003\u0002\u0002\u0002\u0002", - "\u008d\u0003\u0002\u0002\u0002\u0002\u008f\u0003\u0002\u0002\u0002\u0002", - "\u0091\u0003\u0002\u0002\u0002\u0002\u0093\u0003\u0002\u0002\u0002\u0002", - "\u0095\u0003\u0002\u0002\u0002\u0002\u0097\u0003\u0002\u0002\u0002\u0002", - "\u0099\u0003\u0002\u0002\u0002\u0002\u009b\u0003\u0002\u0002\u0002\u0002", - "\u009d\u0003\u0002\u0002\u0002\u0002\u009f\u0003\u0002\u0002\u0002\u0002", - "\u00a1\u0003\u0002\u0002\u0002\u0002\u00a3\u0003\u0002\u0002\u0002\u0002", - "\u00a5\u0003\u0002\u0002\u0002\u0002\u00a7\u0003\u0002\u0002\u0002\u0002", - "\u00a9\u0003\u0002\u0002\u0002\u0002\u00ab\u0003\u0002\u0002\u0002\u0002", - "\u00ad\u0003\u0002\u0002\u0002\u0002\u00af\u0003\u0002\u0002\u0002\u0002", - "\u00b1\u0003\u0002\u0002\u0002\u0002\u00b3\u0003\u0002\u0002\u0002\u0002", - "\u00b5\u0003\u0002\u0002\u0002\u0002\u00b7\u0003\u0002\u0002\u0002\u0002", - "\u00b9\u0003\u0002\u0002\u0002\u0002\u00bb\u0003\u0002\u0002\u0002\u0002", - "\u00bd\u0003\u0002\u0002\u0002\u0002\u00bf\u0003\u0002\u0002\u0002\u0002", - "\u00c1\u0003\u0002\u0002\u0002\u0002\u00c3\u0003\u0002\u0002\u0002\u0002", - "\u00c5\u0003\u0002\u0002\u0002\u0002\u00c9\u0003\u0002\u0002\u0002\u0002", - "\u00cd\u0003\u0002\u0002\u0002\u0002\u00cf\u0003\u0002\u0002\u0002\u0002", - "\u00d5\u0003\u0002\u0002\u0002\u0002\u00d7\u0003\u0002\u0002\u0002\u0002", - "\u00d9\u0003\u0002\u0002\u0002\u0002\u00db\u0003\u0002\u0002\u0002\u0002", - "\u00dd\u0003\u0002\u0002\u0002\u0002\u00df\u0003\u0002\u0002\u0002\u0002", - "\u00e1\u0003\u0002\u0002\u0002\u0002\u00e3\u0003\u0002\u0002\u0002\u0002", - "\u00e5\u0003\u0002\u0002\u0002\u0002\u00e7\u0003\u0002\u0002\u0002\u0002", - "\u00e9\u0003\u0002\u0002\u0002\u0002\u00eb\u0003\u0002\u0002\u0002\u0002", - "\u00ed\u0003\u0002\u0002\u0002\u0002\u00ef\u0003\u0002\u0002\u0002\u0002", - "\u00f1\u0003\u0002\u0002\u0002\u0002\u00f7\u0003\u0002\u0002\u0002\u0002", - "\u00fd\u0003\u0002\u0002\u0002\u0002\u00ff\u0003\u0002\u0002\u0002\u0002", - "\u0101\u0003\u0002\u0002\u0002\u0003\u0103\u0003\u0002\u0002\u0002\u0005", - "\u010a\u0003\u0002\u0002\u0002\u0007\u010c\u0003\u0002\u0002\u0002\t", - "\u010e\u0003\u0002\u0002\u0002\u000b\u0110\u0003\u0002\u0002\u0002\r", - "\u0113\u0003\u0002\u0002\u0002\u000f\u0115\u0003\u0002\u0002\u0002\u0011", - "\u0117\u0003\u0002\u0002\u0002\u0013\u011a\u0003\u0002\u0002\u0002\u0015", - "\u011c\u0003\u0002\u0002\u0002\u0017\u011f\u0003\u0002\u0002\u0002\u0019", - "\u0126\u0003\u0002\u0002\u0002\u001b\u0128\u0003\u0002\u0002\u0002\u001d", - "\u012d\u0003\u0002\u0002\u0002\u001f\u012f\u0003\u0002\u0002\u0002!", - "\u0131\u0003\u0002\u0002\u0002#\u0133\u0003\u0002\u0002\u0002%\u013c", - "\u0003\u0002\u0002\u0002\'\u0146\u0003\u0002\u0002\u0002)\u014e\u0003", - "\u0002\u0002\u0002+\u0151\u0003\u0002\u0002\u0002-\u0153\u0003\u0002", - "\u0002\u0002/\u0155\u0003\u0002\u0002\u00021\u015b\u0003\u0002\u0002", - "\u00023\u015f\u0003\u0002\u0002\u00025\u0166\u0003\u0002\u0002\u0002", - "7\u0172\u0003\u0002\u0002\u00029\u017b\u0003\u0002\u0002\u0002;\u0184", - "\u0003\u0002\u0002\u0002=\u018c\u0003\u0002\u0002\u0002?\u0192\u0003", - "\u0002\u0002\u0002A\u0197\u0003\u0002\u0002\u0002C\u0199\u0003\u0002", - "\u0002\u0002E\u019b\u0003\u0002\u0002\u0002G\u01a3\u0003\u0002\u0002", - "\u0002I\u01a5\u0003\u0002\u0002\u0002K\u01ad\u0003\u0002\u0002\u0002", - "M\u01b0\u0003\u0002\u0002\u0002O\u01b7\u0003\u0002\u0002\u0002Q\u01bf", - "\u0003\u0002\u0002\u0002S\u01c8\u0003\u0002\u0002\u0002U\u01cb\u0003", - "\u0002\u0002\u0002W\u01d0\u0003\u0002\u0002\u0002Y\u01d6\u0003\u0002", - "\u0002\u0002[\u01df\u0003\u0002\u0002\u0002]\u01e2\u0003\u0002\u0002", - "\u0002_\u01e9\u0003\u0002\u0002\u0002a\u01ef\u0003\u0002\u0002\u0002", - "c\u01f4\u0003\u0002\u0002\u0002e\u01f8\u0003\u0002\u0002\u0002g\u01fd", - "\u0003\u0002\u0002\u0002i\u0204\u0003\u0002\u0002\u0002k\u0209\u0003", - "\u0002\u0002\u0002m\u020c\u0003\u0002\u0002\u0002o\u020f\u0003\u0002", - "\u0002\u0002q\u0213\u0003\u0002\u0002\u0002s\u0215\u0003\u0002\u0002", - "\u0002u\u0217\u0003\u0002\u0002\u0002w\u021d\u0003\u0002\u0002\u0002", - "y\u0224\u0003\u0002\u0002\u0002{\u0226\u0003\u0002\u0002\u0002}\u0229", - "\u0003\u0002\u0002\u0002\u007f\u022b\u0003\u0002\u0002\u0002\u0081\u022d", - "\u0003\u0002\u0002\u0002\u0083\u0230\u0003\u0002\u0002\u0002\u0085\u0233", - "\u0003\u0002\u0002\u0002\u0087\u0235\u0003\u0002\u0002\u0002\u0089\u0237", - "\u0003\u0002\u0002\u0002\u008b\u023a\u0003\u0002\u0002\u0002\u008d\u023d", - "\u0003\u0002\u0002\u0002\u008f\u0240\u0003\u0002\u0002\u0002\u0091\u0243", - "\u0003\u0002\u0002\u0002\u0093\u0245\u0003\u0002\u0002\u0002\u0095\u0247", - "\u0003\u0002\u0002\u0002\u0097\u024a\u0003\u0002\u0002\u0002\u0099\u024d", - "\u0003\u0002\u0002\u0002\u009b\u0250\u0003\u0002\u0002\u0002\u009d\u0254", - "\u0003\u0002\u0002\u0002\u009f\u0258\u0003\u0002\u0002\u0002\u00a1\u025b", - "\u0003\u0002\u0002\u0002\u00a3\u025e\u0003\u0002\u0002\u0002\u00a5\u0261", - "\u0003\u0002\u0002\u0002\u00a7\u0264\u0003\u0002\u0002\u0002\u00a9\u0267", - "\u0003\u0002\u0002\u0002\u00ab\u026b\u0003\u0002\u0002\u0002\u00ad\u026e", - "\u0003\u0002\u0002\u0002\u00af\u0271\u0003\u0002\u0002\u0002\u00b1\u0278", - "\u0003\u0002\u0002\u0002\u00b3\u027d\u0003\u0002\u0002\u0002\u00b5\u0285", - "\u0003\u0002\u0002\u0002\u00b7\u033e\u0003\u0002\u0002\u0002\u00b9\u0417", - "\u0003\u0002\u0002\u0002\u00bb\u04f5\u0003\u0002\u0002\u0002\u00bd\u050d", - "\u0003\u0002\u0002\u0002\u00bf\u0527\u0003\u0002\u0002\u0002\u00c1\u052a", - "\u0003\u0002\u0002\u0002\u00c3\u0543\u0003\u0002\u0002\u0002\u00c5\u054b", - "\u0003\u0002\u0002\u0002\u00c7\u0551\u0003\u0002\u0002\u0002\u00c9\u055b", - "\u0003\u0002\u0002\u0002\u00cb\u055f\u0003\u0002\u0002\u0002\u00cd\u059d", - "\u0003\u0002\u0002\u0002\u00cf\u059f\u0003\u0002\u0002\u0002\u00d1\u05b5", - "\u0003\u0002\u0002\u0002\u00d3\u05b8\u0003\u0002\u0002\u0002\u00d5\u0612", - "\u0003\u0002\u0002\u0002\u00d7\u0614\u0003\u0002\u0002\u0002\u00d9\u061e", - "\u0003\u0002\u0002\u0002\u00db\u0624\u0003\u0002\u0002\u0002\u00dd\u062d", - "\u0003\u0002\u0002\u0002\u00df\u0636\u0003\u0002\u0002\u0002\u00e1\u063f", - "\u0003\u0002\u0002\u0002\u00e3\u0647\u0003\u0002\u0002\u0002\u00e5\u0650", - "\u0003\u0002\u0002\u0002\u00e7\u0658\u0003\u0002\u0002\u0002\u00e9\u0660", - "\u0003\u0002\u0002\u0002\u00eb\u0667\u0003\u0002\u0002\u0002\u00ed\u066c", - "\u0003\u0002\u0002\u0002\u00ef\u0671\u0003\u0002\u0002\u0002\u00f1\u0676", - "\u0003\u0002\u0002\u0002\u00f3\u067d\u0003\u0002\u0002\u0002\u00f5\u067f", - "\u0003\u0002\u0002\u0002\u00f7\u0691\u0003\u0002\u0002\u0002\u00f9\u0696", - "\u0003\u0002\u0002\u0002\u00fb\u069b\u0003\u0002\u0002\u0002\u00fd\u069e", - "\u0003\u0002\u0002\u0002\u00ff\u06a4\u0003\u0002\u0002\u0002\u0101\u06b2", - "\u0003\u0002\u0002\u0002\u0103\u0104\u0007r\u0002\u0002\u0104\u0105", - "\u0007t\u0002\u0002\u0105\u0106\u0007c\u0002\u0002\u0106\u0107\u0007", - "i\u0002\u0002\u0107\u0108\u0007o\u0002\u0002\u0108\u0109\u0007c\u0002", - "\u0002\u0109\u0004\u0003\u0002\u0002\u0002\u010a\u010b\u0007=\u0002", - "\u0002\u010b\u0006\u0003\u0002\u0002\u0002\u010c\u010d\u0007`\u0002", - "\u0002\u010d\b\u0003\u0002\u0002\u0002\u010e\u010f\u0007\u0080\u0002", - "\u0002\u010f\n\u0003\u0002\u0002\u0002\u0110\u0111\u0007@\u0002\u0002", - "\u0111\u0112\u0007?\u0002\u0002\u0112\f\u0003\u0002\u0002\u0002\u0113", - "\u0114\u0007@\u0002\u0002\u0114\u000e\u0003\u0002\u0002\u0002\u0115", - "\u0116\u0007>\u0002\u0002\u0116\u0010\u0003\u0002\u0002\u0002\u0117", - "\u0118\u0007>\u0002\u0002\u0118\u0119\u0007?\u0002\u0002\u0119\u0012", - "\u0003\u0002\u0002\u0002\u011a\u011b\u0007?\u0002\u0002\u011b\u0014", - "\u0003\u0002\u0002\u0002\u011c\u011d\u0007c\u0002\u0002\u011d\u011e", - "\u0007u\u0002\u0002\u011e\u0016\u0003\u0002\u0002\u0002\u011f\u0120", - "\u0007k\u0002\u0002\u0120\u0121\u0007o\u0002\u0002\u0121\u0122\u0007", - "r\u0002\u0002\u0122\u0123\u0007q\u0002\u0002\u0123\u0124\u0007t\u0002", - "\u0002\u0124\u0125\u0007v\u0002\u0002\u0125\u0018\u0003\u0002\u0002", - "\u0002\u0126\u0127\u0007,\u0002\u0002\u0127\u001a\u0003\u0002\u0002", - "\u0002\u0128\u0129\u0007h\u0002\u0002\u0129\u012a\u0007t\u0002\u0002", - "\u012a\u012b\u0007q\u0002\u0002\u012b\u012c\u0007o\u0002\u0002\u012c", - "\u001c\u0003\u0002\u0002\u0002\u012d\u012e\u0007}\u0002\u0002\u012e", - "\u001e\u0003\u0002\u0002\u0002\u012f\u0130\u0007.\u0002\u0002\u0130", - " \u0003\u0002\u0002\u0002\u0131\u0132\u0007\u007f\u0002\u0002\u0132", - "\"\u0003\u0002\u0002\u0002\u0133\u0134\u0007e\u0002\u0002\u0134\u0135", - "\u0007q\u0002\u0002\u0135\u0136\u0007p\u0002\u0002\u0136\u0137\u0007", - "v\u0002\u0002\u0137\u0138\u0007t\u0002\u0002\u0138\u0139\u0007c\u0002", - "\u0002\u0139\u013a\u0007e\u0002\u0002\u013a\u013b\u0007v\u0002\u0002", - "\u013b$\u0003\u0002\u0002\u0002\u013c\u013d\u0007k\u0002\u0002\u013d", - "\u013e\u0007p\u0002\u0002\u013e\u013f\u0007v\u0002\u0002\u013f\u0140", - "\u0007g\u0002\u0002\u0140\u0141\u0007t\u0002\u0002\u0141\u0142\u0007", - "h\u0002\u0002\u0142\u0143\u0007c\u0002\u0002\u0143\u0144\u0007e\u0002", - "\u0002\u0144\u0145\u0007g\u0002\u0002\u0145&\u0003\u0002\u0002\u0002", - "\u0146\u0147\u0007n\u0002\u0002\u0147\u0148\u0007k\u0002\u0002\u0148", - "\u0149\u0007d\u0002\u0002\u0149\u014a\u0007t\u0002\u0002\u014a\u014b", - "\u0007c\u0002\u0002\u014b\u014c\u0007t\u0002\u0002\u014c\u014d\u0007", - "{\u0002\u0002\u014d(\u0003\u0002\u0002\u0002\u014e\u014f\u0007k\u0002", - "\u0002\u014f\u0150\u0007u\u0002\u0002\u0150*\u0003\u0002\u0002\u0002", - "\u0151\u0152\u0007*\u0002\u0002\u0152,\u0003\u0002\u0002\u0002\u0153", - "\u0154\u0007+\u0002\u0002\u0154.\u0003\u0002\u0002\u0002\u0155\u0156", - "\u0007w\u0002\u0002\u0156\u0157\u0007u\u0002\u0002\u0157\u0158\u0007", - "k\u0002\u0002\u0158\u0159\u0007p\u0002\u0002\u0159\u015a\u0007i\u0002", - "\u0002\u015a0\u0003\u0002\u0002\u0002\u015b\u015c\u0007h\u0002\u0002", - "\u015c\u015d\u0007q\u0002\u0002\u015d\u015e\u0007t\u0002\u0002\u015e", - "2\u0003\u0002\u0002\u0002\u015f\u0160\u0007u\u0002\u0002\u0160\u0161", - "\u0007v\u0002\u0002\u0161\u0162\u0007t\u0002\u0002\u0162\u0163\u0007", - "w\u0002\u0002\u0163\u0164\u0007e\u0002\u0002\u0164\u0165\u0007v\u0002", - "\u0002\u01654\u0003\u0002\u0002\u0002\u0166\u0167\u0007e\u0002\u0002", - "\u0167\u0168\u0007q\u0002\u0002\u0168\u0169\u0007p\u0002\u0002\u0169", - "\u016a\u0007u\u0002\u0002\u016a\u016b\u0007v\u0002\u0002\u016b\u016c", - "\u0007t\u0002\u0002\u016c\u016d\u0007w\u0002\u0002\u016d\u016e\u0007", - "e\u0002\u0002\u016e\u016f\u0007v\u0002\u0002\u016f\u0170\u0007q\u0002", - "\u0002\u0170\u0171\u0007t\u0002\u0002\u01716\u0003\u0002\u0002\u0002", - "\u0172\u0173\u0007o\u0002\u0002\u0173\u0174\u0007q\u0002\u0002\u0174", - "\u0175\u0007f\u0002\u0002\u0175\u0176\u0007k\u0002\u0002\u0176\u0177", - "\u0007h\u0002\u0002\u0177\u0178\u0007k\u0002\u0002\u0178\u0179\u0007", - "g\u0002\u0002\u0179\u017a\u0007t\u0002\u0002\u017a8\u0003\u0002\u0002", - "\u0002\u017b\u017c\u0007h\u0002\u0002\u017c\u017d\u0007w\u0002\u0002", - "\u017d\u017e\u0007p\u0002\u0002\u017e\u017f\u0007e\u0002\u0002\u017f", - "\u0180\u0007v\u0002\u0002\u0180\u0181\u0007k\u0002\u0002\u0181\u0182", - "\u0007q\u0002\u0002\u0182\u0183\u0007p\u0002\u0002\u0183:\u0003\u0002", - "\u0002\u0002\u0184\u0185\u0007t\u0002\u0002\u0185\u0186\u0007g\u0002", - "\u0002\u0186\u0187\u0007v\u0002\u0002\u0187\u0188\u0007w\u0002\u0002", - "\u0188\u0189\u0007t\u0002\u0002\u0189\u018a\u0007p\u0002\u0002\u018a", - "\u018b\u0007u\u0002\u0002\u018b<\u0003\u0002\u0002\u0002\u018c\u018d", - "\u0007g\u0002\u0002\u018d\u018e\u0007x\u0002\u0002\u018e\u018f\u0007", - "g\u0002\u0002\u018f\u0190\u0007p\u0002\u0002\u0190\u0191\u0007v\u0002", - "\u0002\u0191>\u0003\u0002\u0002\u0002\u0192\u0193\u0007g\u0002\u0002", - "\u0193\u0194\u0007p\u0002\u0002\u0194\u0195\u0007w\u0002\u0002\u0195", - "\u0196\u0007o\u0002\u0002\u0196@\u0003\u0002\u0002\u0002\u0197\u0198", - "\u0007]\u0002\u0002\u0198B\u0003\u0002\u0002\u0002\u0199\u019a\u0007", - "_\u0002\u0002\u019aD\u0003\u0002\u0002\u0002\u019b\u019c\u0007c\u0002", - "\u0002\u019c\u019d\u0007f\u0002\u0002\u019d\u019e\u0007f\u0002\u0002", - "\u019e\u019f\u0007t\u0002\u0002\u019f\u01a0\u0007g\u0002\u0002\u01a0", - "\u01a1\u0007u\u0002\u0002\u01a1\u01a2\u0007u\u0002\u0002\u01a2F\u0003", - "\u0002\u0002\u0002\u01a3\u01a4\u00070\u0002\u0002\u01a4H\u0003\u0002", - "\u0002\u0002\u01a5\u01a6\u0007o\u0002\u0002\u01a6\u01a7\u0007c\u0002", - "\u0002\u01a7\u01a8\u0007r\u0002\u0002\u01a8\u01a9\u0007r\u0002\u0002", - "\u01a9\u01aa\u0007k\u0002\u0002\u01aa\u01ab\u0007p\u0002\u0002\u01ab", - "\u01ac\u0007i\u0002\u0002\u01acJ\u0003\u0002\u0002\u0002\u01ad\u01ae", - "\u0007?\u0002\u0002\u01ae\u01af\u0007@\u0002\u0002\u01afL\u0003\u0002", - "\u0002\u0002\u01b0\u01b1\u0007o\u0002\u0002\u01b1\u01b2\u0007g\u0002", - "\u0002\u01b2\u01b3\u0007o\u0002\u0002\u01b3\u01b4\u0007q\u0002\u0002", - "\u01b4\u01b5\u0007t\u0002\u0002\u01b5\u01b6\u0007{\u0002\u0002\u01b6", - "N\u0003\u0002\u0002\u0002\u01b7\u01b8\u0007u\u0002\u0002\u01b8\u01b9", - "\u0007v\u0002\u0002\u01b9\u01ba\u0007q\u0002\u0002\u01ba\u01bb\u0007", - "t\u0002\u0002\u01bb\u01bc\u0007c\u0002\u0002\u01bc\u01bd\u0007i\u0002", - "\u0002\u01bd\u01be\u0007g\u0002\u0002\u01beP\u0003\u0002\u0002\u0002", - "\u01bf\u01c0\u0007e\u0002\u0002\u01c0\u01c1\u0007c\u0002\u0002\u01c1", - "\u01c2\u0007n\u0002\u0002\u01c2\u01c3\u0007n\u0002\u0002\u01c3\u01c4", - "\u0007f\u0002\u0002\u01c4\u01c5\u0007c\u0002\u0002\u01c5\u01c6\u0007", - "v\u0002\u0002\u01c6\u01c7\u0007c\u0002\u0002\u01c7R\u0003\u0002\u0002", - "\u0002\u01c8\u01c9\u0007k\u0002\u0002\u01c9\u01ca\u0007h\u0002\u0002", - "\u01caT\u0003\u0002\u0002\u0002\u01cb\u01cc\u0007g\u0002\u0002\u01cc", - "\u01cd\u0007n\u0002\u0002\u01cd\u01ce\u0007u\u0002\u0002\u01ce\u01cf", - "\u0007g\u0002\u0002\u01cfV\u0003\u0002\u0002\u0002\u01d0\u01d1\u0007", - "y\u0002\u0002\u01d1\u01d2\u0007j\u0002\u0002\u01d2\u01d3\u0007k\u0002", - "\u0002\u01d3\u01d4\u0007n\u0002\u0002\u01d4\u01d5\u0007g\u0002\u0002", - "\u01d5X\u0003\u0002\u0002\u0002\u01d6\u01d7\u0007c\u0002\u0002\u01d7", - "\u01d8\u0007u\u0002\u0002\u01d8\u01d9\u0007u\u0002\u0002\u01d9\u01da", - "\u0007g\u0002\u0002\u01da\u01db\u0007o\u0002\u0002\u01db\u01dc\u0007", - "d\u0002\u0002\u01dc\u01dd\u0007n\u0002\u0002\u01dd\u01de\u0007{\u0002", - "\u0002\u01deZ\u0003\u0002\u0002\u0002\u01df\u01e0\u0007f\u0002\u0002", - "\u01e0\u01e1\u0007q\u0002\u0002\u01e1\\\u0003\u0002\u0002\u0002\u01e2", - "\u01e3\u0007t\u0002\u0002\u01e3\u01e4\u0007g\u0002\u0002\u01e4\u01e5", - "\u0007v\u0002\u0002\u01e5\u01e6\u0007w\u0002\u0002\u01e6\u01e7\u0007", - "t\u0002\u0002\u01e7\u01e8\u0007p\u0002\u0002\u01e8^\u0003\u0002\u0002", - "\u0002\u01e9\u01ea\u0007v\u0002\u0002\u01ea\u01eb\u0007j\u0002\u0002", - "\u01eb\u01ec\u0007t\u0002\u0002\u01ec\u01ed\u0007q\u0002\u0002\u01ed", - "\u01ee\u0007y\u0002\u0002\u01ee`\u0003\u0002\u0002\u0002\u01ef\u01f0", - "\u0007g\u0002\u0002\u01f0\u01f1\u0007o\u0002\u0002\u01f1\u01f2\u0007", - "k\u0002\u0002\u01f2\u01f3\u0007v\u0002\u0002\u01f3b\u0003\u0002\u0002", - "\u0002\u01f4\u01f5\u0007x\u0002\u0002\u01f5\u01f6\u0007c\u0002\u0002", - "\u01f6\u01f7\u0007t\u0002\u0002\u01f7d\u0003\u0002\u0002\u0002\u01f8", - "\u01f9\u0007d\u0002\u0002\u01f9\u01fa\u0007q\u0002\u0002\u01fa\u01fb", - "\u0007q\u0002\u0002\u01fb\u01fc\u0007n\u0002\u0002\u01fcf\u0003\u0002", - "\u0002\u0002\u01fd\u01fe\u0007u\u0002\u0002\u01fe\u01ff\u0007v\u0002", - "\u0002\u01ff\u0200\u0007t\u0002\u0002\u0200\u0201\u0007k\u0002\u0002", - "\u0201\u0202\u0007p\u0002\u0002\u0202\u0203\u0007i\u0002\u0002\u0203", - "h\u0003\u0002\u0002\u0002\u0204\u0205\u0007d\u0002\u0002\u0205\u0206", - "\u0007{\u0002\u0002\u0206\u0207\u0007v\u0002\u0002\u0207\u0208\u0007", - "g\u0002\u0002\u0208j\u0003\u0002\u0002\u0002\u0209\u020a\u0007-\u0002", - "\u0002\u020a\u020b\u0007-\u0002\u0002\u020bl\u0003\u0002\u0002\u0002", - "\u020c\u020d\u0007/\u0002\u0002\u020d\u020e\u0007/\u0002\u0002\u020e", - "n\u0003\u0002\u0002\u0002\u020f\u0210\u0007p\u0002\u0002\u0210\u0211", - "\u0007g\u0002\u0002\u0211\u0212\u0007y\u0002\u0002\u0212p\u0003\u0002", - "\u0002\u0002\u0213\u0214\u0007-\u0002\u0002\u0214r\u0003\u0002\u0002", - "\u0002\u0215\u0216\u0007/\u0002\u0002\u0216t\u0003\u0002\u0002\u0002", - "\u0217\u0218\u0007c\u0002\u0002\u0218\u0219\u0007h\u0002\u0002\u0219", - "\u021a\u0007v\u0002\u0002\u021a\u021b\u0007g\u0002\u0002\u021b\u021c", - "\u0007t\u0002\u0002\u021cv\u0003\u0002\u0002\u0002\u021d\u021e\u0007", - "f\u0002\u0002\u021e\u021f\u0007g\u0002\u0002\u021f\u0220\u0007n\u0002", - "\u0002\u0220\u0221\u0007g\u0002\u0002\u0221\u0222\u0007v\u0002\u0002", - "\u0222\u0223\u0007g\u0002\u0002\u0223x\u0003\u0002\u0002\u0002\u0224", - "\u0225\u0007#\u0002\u0002\u0225z\u0003\u0002\u0002\u0002\u0226\u0227", - "\u0007,\u0002\u0002\u0227\u0228\u0007,\u0002\u0002\u0228|\u0003\u0002", - "\u0002\u0002\u0229\u022a\u00071\u0002\u0002\u022a~\u0003\u0002\u0002", - "\u0002\u022b\u022c\u0007\'\u0002\u0002\u022c\u0080\u0003\u0002\u0002", - "\u0002\u022d\u022e\u0007>\u0002\u0002\u022e\u022f\u0007>\u0002\u0002", - "\u022f\u0082\u0003\u0002\u0002\u0002\u0230\u0231\u0007@\u0002\u0002", - "\u0231\u0232\u0007@\u0002\u0002\u0232\u0084\u0003\u0002\u0002\u0002", - "\u0233\u0234\u0007(\u0002\u0002\u0234\u0086\u0003\u0002\u0002\u0002", - "\u0235\u0236\u0007~\u0002\u0002\u0236\u0088\u0003\u0002\u0002\u0002", - "\u0237\u0238\u0007?\u0002\u0002\u0238\u0239\u0007?\u0002\u0002\u0239", - "\u008a\u0003\u0002\u0002\u0002\u023a\u023b\u0007#\u0002\u0002\u023b", - "\u023c\u0007?\u0002\u0002\u023c\u008c\u0003\u0002\u0002\u0002\u023d", - "\u023e\u0007(\u0002\u0002\u023e\u023f\u0007(\u0002\u0002\u023f\u008e", - "\u0003\u0002\u0002\u0002\u0240\u0241\u0007~\u0002\u0002\u0241\u0242", - "\u0007~\u0002\u0002\u0242\u0090\u0003\u0002\u0002\u0002\u0243\u0244", - "\u0007A\u0002\u0002\u0244\u0092\u0003\u0002\u0002\u0002\u0245\u0246", - "\u0007<\u0002\u0002\u0246\u0094\u0003\u0002\u0002\u0002\u0247\u0248", - "\u0007~\u0002\u0002\u0248\u0249\u0007?\u0002\u0002\u0249\u0096\u0003", - "\u0002\u0002\u0002\u024a\u024b\u0007`\u0002\u0002\u024b\u024c\u0007", - "?\u0002\u0002\u024c\u0098\u0003\u0002\u0002\u0002\u024d\u024e\u0007", - "(\u0002\u0002\u024e\u024f\u0007?\u0002\u0002\u024f\u009a\u0003\u0002", - "\u0002\u0002\u0250\u0251\u0007>\u0002\u0002\u0251\u0252\u0007>\u0002", - "\u0002\u0252\u0253\u0007?\u0002\u0002\u0253\u009c\u0003\u0002\u0002", - "\u0002\u0254\u0255\u0007@\u0002\u0002\u0255\u0256\u0007@\u0002\u0002", - "\u0256\u0257\u0007?\u0002\u0002\u0257\u009e\u0003\u0002\u0002\u0002", - "\u0258\u0259\u0007-\u0002\u0002\u0259\u025a\u0007?\u0002\u0002\u025a", - "\u00a0\u0003\u0002\u0002\u0002\u025b\u025c\u0007/\u0002\u0002\u025c", - "\u025d\u0007?\u0002\u0002\u025d\u00a2\u0003\u0002\u0002\u0002\u025e", - "\u025f\u0007,\u0002\u0002\u025f\u0260\u0007?\u0002\u0002\u0260\u00a4", - "\u0003\u0002\u0002\u0002\u0261\u0262\u00071\u0002\u0002\u0262\u0263", - "\u0007?\u0002\u0002\u0263\u00a6\u0003\u0002\u0002\u0002\u0264\u0265", - "\u0007\'\u0002\u0002\u0265\u0266\u0007?\u0002\u0002\u0266\u00a8\u0003", - "\u0002\u0002\u0002\u0267\u0268\u0007n\u0002\u0002\u0268\u0269\u0007", - "g\u0002\u0002\u0269\u026a\u0007v\u0002\u0002\u026a\u00aa\u0003\u0002", - "\u0002\u0002\u026b\u026c\u0007<\u0002\u0002\u026c\u026d\u0007?\u0002", - "\u0002\u026d\u00ac\u0003\u0002\u0002\u0002\u026e\u026f\u0007?\u0002", - "\u0002\u026f\u0270\u0007<\u0002\u0002\u0270\u00ae\u0003\u0002\u0002", - "\u0002\u0271\u0272\u0007u\u0002\u0002\u0272\u0273\u0007y\u0002\u0002", - "\u0273\u0274\u0007k\u0002\u0002\u0274\u0275\u0007v\u0002\u0002\u0275", - "\u0276\u0007e\u0002\u0002\u0276\u0277\u0007j\u0002\u0002\u0277\u00b0", - "\u0003\u0002\u0002\u0002\u0278\u0279\u0007e\u0002\u0002\u0279\u027a", - "\u0007c\u0002\u0002\u027a\u027b\u0007u\u0002\u0002\u027b\u027c\u0007", - "g\u0002\u0002\u027c\u00b2\u0003\u0002\u0002\u0002\u027d\u027e\u0007", - "f\u0002\u0002\u027e\u027f\u0007g\u0002\u0002\u027f\u0280\u0007h\u0002", - "\u0002\u0280\u0281\u0007c\u0002\u0002\u0281\u0282\u0007w\u0002\u0002", - "\u0282\u0283\u0007n\u0002\u0002\u0283\u0284\u0007v\u0002\u0002\u0284", - "\u00b4\u0003\u0002\u0002\u0002\u0285\u0286\u0007/\u0002\u0002\u0286", - "\u0287\u0007@\u0002\u0002\u0287\u00b6\u0003\u0002\u0002\u0002\u0288", - "\u0289\u0007k\u0002\u0002\u0289\u028a\u0007p\u0002\u0002\u028a\u033f", - "\u0007v\u0002\u0002\u028b\u028c\u0007k\u0002\u0002\u028c\u028d\u0007", - "p\u0002\u0002\u028d\u028e\u0007v\u0002\u0002\u028e\u033f\u0007:\u0002", - "\u0002\u028f\u0290\u0007k\u0002\u0002\u0290\u0291\u0007p\u0002\u0002", - "\u0291\u0292\u0007v\u0002\u0002\u0292\u0293\u00073\u0002\u0002\u0293", - "\u033f\u00078\u0002\u0002\u0294\u0295\u0007k\u0002\u0002\u0295\u0296", - "\u0007p\u0002\u0002\u0296\u0297\u0007v\u0002\u0002\u0297\u0298\u0007", - "4\u0002\u0002\u0298\u033f\u00076\u0002\u0002\u0299\u029a\u0007k\u0002", - "\u0002\u029a\u029b\u0007p\u0002\u0002\u029b\u029c\u0007v\u0002\u0002", - "\u029c\u029d\u00075\u0002\u0002\u029d\u033f\u00074\u0002\u0002\u029e", - "\u029f\u0007k\u0002\u0002\u029f\u02a0\u0007p\u0002\u0002\u02a0\u02a1", - "\u0007v\u0002\u0002\u02a1\u02a2\u00076\u0002\u0002\u02a2\u033f\u0007", - "2\u0002\u0002\u02a3\u02a4\u0007k\u0002\u0002\u02a4\u02a5\u0007p\u0002", - "\u0002\u02a5\u02a6\u0007v\u0002\u0002\u02a6\u02a7\u00076\u0002\u0002", - "\u02a7\u033f\u0007:\u0002\u0002\u02a8\u02a9\u0007k\u0002\u0002\u02a9", - "\u02aa\u0007p\u0002\u0002\u02aa\u02ab\u0007v\u0002\u0002\u02ab\u02ac", - "\u00077\u0002\u0002\u02ac\u033f\u00078\u0002\u0002\u02ad\u02ae\u0007", - "k\u0002\u0002\u02ae\u02af\u0007p\u0002\u0002\u02af\u02b0\u0007v\u0002", - "\u0002\u02b0\u02b1\u00078\u0002\u0002\u02b1\u033f\u00076\u0002\u0002", - "\u02b2\u02b3\u0007k\u0002\u0002\u02b3\u02b4\u0007p\u0002\u0002\u02b4", - "\u02b5\u0007v\u0002\u0002\u02b5\u02b6\u00079\u0002\u0002\u02b6\u033f", - "\u00074\u0002\u0002\u02b7\u02b8\u0007k\u0002\u0002\u02b8\u02b9\u0007", - "p\u0002\u0002\u02b9\u02ba\u0007v\u0002\u0002\u02ba\u02bb\u0007:\u0002", - "\u0002\u02bb\u033f\u00072\u0002\u0002\u02bc\u02bd\u0007k\u0002\u0002", - "\u02bd\u02be\u0007p\u0002\u0002\u02be\u02bf\u0007v\u0002\u0002\u02bf", - "\u02c0\u0007:\u0002\u0002\u02c0\u033f\u0007:\u0002\u0002\u02c1\u02c2", - "\u0007k\u0002\u0002\u02c2\u02c3\u0007p\u0002\u0002\u02c3\u02c4\u0007", - "v\u0002\u0002\u02c4\u02c5\u0007;\u0002\u0002\u02c5\u033f\u00078\u0002", - "\u0002\u02c6\u02c7\u0007k\u0002\u0002\u02c7\u02c8\u0007p\u0002\u0002", - "\u02c8\u02c9\u0007v\u0002\u0002\u02c9\u02ca\u00073\u0002\u0002\u02ca", - "\u02cb\u00072\u0002\u0002\u02cb\u033f\u00076\u0002\u0002\u02cc\u02cd", - "\u0007k\u0002\u0002\u02cd\u02ce\u0007p\u0002\u0002\u02ce\u02cf\u0007", - "v\u0002\u0002\u02cf\u02d0\u00073\u0002\u0002\u02d0\u02d1\u00073\u0002", - "\u0002\u02d1\u033f\u00074\u0002\u0002\u02d2\u02d3\u0007k\u0002\u0002", - "\u02d3\u02d4\u0007p\u0002\u0002\u02d4\u02d5\u0007v\u0002\u0002\u02d5", - "\u02d6\u00073\u0002\u0002\u02d6\u02d7\u00074\u0002\u0002\u02d7\u033f", - "\u00072\u0002\u0002\u02d8\u02d9\u0007k\u0002\u0002\u02d9\u02da\u0007", - "p\u0002\u0002\u02da\u02db\u0007v\u0002\u0002\u02db\u02dc\u00073\u0002", - "\u0002\u02dc\u02dd\u00074\u0002\u0002\u02dd\u033f\u0007:\u0002\u0002", - "\u02de\u02df\u0007k\u0002\u0002\u02df\u02e0\u0007p\u0002\u0002\u02e0", - "\u02e1\u0007v\u0002\u0002\u02e1\u02e2\u00073\u0002\u0002\u02e2\u02e3", - "\u00075\u0002\u0002\u02e3\u033f\u00078\u0002\u0002\u02e4\u02e5\u0007", - "k\u0002\u0002\u02e5\u02e6\u0007p\u0002\u0002\u02e6\u02e7\u0007v\u0002", - "\u0002\u02e7\u02e8\u00073\u0002\u0002\u02e8\u02e9\u00076\u0002\u0002", - "\u02e9\u033f\u00076\u0002\u0002\u02ea\u02eb\u0007k\u0002\u0002\u02eb", - "\u02ec\u0007p\u0002\u0002\u02ec\u02ed\u0007v\u0002\u0002\u02ed\u02ee", - "\u00073\u0002\u0002\u02ee\u02ef\u00077\u0002\u0002\u02ef\u033f\u0007", - "4\u0002\u0002\u02f0\u02f1\u0007k\u0002\u0002\u02f1\u02f2\u0007p\u0002", - "\u0002\u02f2\u02f3\u0007v\u0002\u0002\u02f3\u02f4\u00073\u0002\u0002", - "\u02f4\u02f5\u00078\u0002\u0002\u02f5\u033f\u00072\u0002\u0002\u02f6", - "\u02f7\u0007k\u0002\u0002\u02f7\u02f8\u0007p\u0002\u0002\u02f8\u02f9", - "\u0007v\u0002\u0002\u02f9\u02fa\u00073\u0002\u0002\u02fa\u02fb\u0007", - "8\u0002\u0002\u02fb\u033f\u0007:\u0002\u0002\u02fc\u02fd\u0007k\u0002", - "\u0002\u02fd\u02fe\u0007p\u0002\u0002\u02fe\u02ff\u0007v\u0002\u0002", - "\u02ff\u0300\u00073\u0002\u0002\u0300\u0301\u00079\u0002\u0002\u0301", - "\u033f\u00078\u0002\u0002\u0302\u0303\u0007k\u0002\u0002\u0303\u0304", - "\u0007p\u0002\u0002\u0304\u0305\u0007v\u0002\u0002\u0305\u0306\u0007", - "3\u0002\u0002\u0306\u0307\u0007:\u0002\u0002\u0307\u033f\u00076\u0002", - "\u0002\u0308\u0309\u0007k\u0002\u0002\u0309\u030a\u0007p\u0002\u0002", - "\u030a\u030b\u0007v\u0002\u0002\u030b\u030c\u00073\u0002\u0002\u030c", - "\u030d\u0007;\u0002\u0002\u030d\u033f\u00074\u0002\u0002\u030e\u030f", - "\u0007k\u0002\u0002\u030f\u0310\u0007p\u0002\u0002\u0310\u0311\u0007", - "v\u0002\u0002\u0311\u0312\u00074\u0002\u0002\u0312\u0313\u00072\u0002", - "\u0002\u0313\u033f\u00072\u0002\u0002\u0314\u0315\u0007k\u0002\u0002", - "\u0315\u0316\u0007p\u0002\u0002\u0316\u0317\u0007v\u0002\u0002\u0317", - "\u0318\u00074\u0002\u0002\u0318\u0319\u00072\u0002\u0002\u0319\u033f", - "\u0007:\u0002\u0002\u031a\u031b\u0007k\u0002\u0002\u031b\u031c\u0007", - "p\u0002\u0002\u031c\u031d\u0007v\u0002\u0002\u031d\u031e\u00074\u0002", - "\u0002\u031e\u031f\u00073\u0002\u0002\u031f\u033f\u00078\u0002\u0002", - "\u0320\u0321\u0007k\u0002\u0002\u0321\u0322\u0007p\u0002\u0002\u0322", - "\u0323\u0007v\u0002\u0002\u0323\u0324\u00074\u0002\u0002\u0324\u0325", - "\u00074\u0002\u0002\u0325\u033f\u00076\u0002\u0002\u0326\u0327\u0007", - "k\u0002\u0002\u0327\u0328\u0007p\u0002\u0002\u0328\u0329\u0007v\u0002", - "\u0002\u0329\u032a\u00074\u0002\u0002\u032a\u032b\u00075\u0002\u0002", - "\u032b\u033f\u00074\u0002\u0002\u032c\u032d\u0007k\u0002\u0002\u032d", - "\u032e\u0007p\u0002\u0002\u032e\u032f\u0007v\u0002\u0002\u032f\u0330", - "\u00074\u0002\u0002\u0330\u0331\u00076\u0002\u0002\u0331\u033f\u0007", - "2\u0002\u0002\u0332\u0333\u0007k\u0002\u0002\u0333\u0334\u0007p\u0002", - "\u0002\u0334\u0335\u0007v\u0002\u0002\u0335\u0336\u00074\u0002\u0002", - "\u0336\u0337\u00076\u0002\u0002\u0337\u033f\u0007:\u0002\u0002\u0338", - "\u0339\u0007k\u0002\u0002\u0339\u033a\u0007p\u0002\u0002\u033a\u033b", - "\u0007v\u0002\u0002\u033b\u033c\u00074\u0002\u0002\u033c\u033d\u0007", - "7\u0002\u0002\u033d\u033f\u00078\u0002\u0002\u033e\u0288\u0003\u0002", - "\u0002\u0002\u033e\u028b\u0003\u0002\u0002\u0002\u033e\u028f\u0003\u0002", - "\u0002\u0002\u033e\u0294\u0003\u0002\u0002\u0002\u033e\u0299\u0003\u0002", - "\u0002\u0002\u033e\u029e\u0003\u0002\u0002\u0002\u033e\u02a3\u0003\u0002", - "\u0002\u0002\u033e\u02a8\u0003\u0002\u0002\u0002\u033e\u02ad\u0003\u0002", - "\u0002\u0002\u033e\u02b2\u0003\u0002\u0002\u0002\u033e\u02b7\u0003\u0002", - "\u0002\u0002\u033e\u02bc\u0003\u0002\u0002\u0002\u033e\u02c1\u0003\u0002", - "\u0002\u0002\u033e\u02c6\u0003\u0002\u0002\u0002\u033e\u02cc\u0003\u0002", - "\u0002\u0002\u033e\u02d2\u0003\u0002\u0002\u0002\u033e\u02d8\u0003\u0002", - "\u0002\u0002\u033e\u02de\u0003\u0002\u0002\u0002\u033e\u02e4\u0003\u0002", - "\u0002\u0002\u033e\u02ea\u0003\u0002\u0002\u0002\u033e\u02f0\u0003\u0002", - "\u0002\u0002\u033e\u02f6\u0003\u0002\u0002\u0002\u033e\u02fc\u0003\u0002", - "\u0002\u0002\u033e\u0302\u0003\u0002\u0002\u0002\u033e\u0308\u0003\u0002", - "\u0002\u0002\u033e\u030e\u0003\u0002\u0002\u0002\u033e\u0314\u0003\u0002", - "\u0002\u0002\u033e\u031a\u0003\u0002\u0002\u0002\u033e\u0320\u0003\u0002", - "\u0002\u0002\u033e\u0326\u0003\u0002\u0002\u0002\u033e\u032c\u0003\u0002", - "\u0002\u0002\u033e\u0332\u0003\u0002\u0002\u0002\u033e\u0338\u0003\u0002", - "\u0002\u0002\u033f\u00b8\u0003\u0002\u0002\u0002\u0340\u0341\u0007w", - "\u0002\u0002\u0341\u0342\u0007k\u0002\u0002\u0342\u0343\u0007p\u0002", - "\u0002\u0343\u0418\u0007v\u0002\u0002\u0344\u0345\u0007w\u0002\u0002", - "\u0345\u0346\u0007k\u0002\u0002\u0346\u0347\u0007p\u0002\u0002\u0347", - "\u0348\u0007v\u0002\u0002\u0348\u0418\u0007:\u0002\u0002\u0349\u034a", - "\u0007w\u0002\u0002\u034a\u034b\u0007k\u0002\u0002\u034b\u034c\u0007", - "p\u0002\u0002\u034c\u034d\u0007v\u0002\u0002\u034d\u034e\u00073\u0002", - "\u0002\u034e\u0418\u00078\u0002\u0002\u034f\u0350\u0007w\u0002\u0002", - "\u0350\u0351\u0007k\u0002\u0002\u0351\u0352\u0007p\u0002\u0002\u0352", - "\u0353\u0007v\u0002\u0002\u0353\u0354\u00074\u0002\u0002\u0354\u0418", - "\u00076\u0002\u0002\u0355\u0356\u0007w\u0002\u0002\u0356\u0357\u0007", - "k\u0002\u0002\u0357\u0358\u0007p\u0002\u0002\u0358\u0359\u0007v\u0002", - "\u0002\u0359\u035a\u00075\u0002\u0002\u035a\u0418\u00074\u0002\u0002", - "\u035b\u035c\u0007w\u0002\u0002\u035c\u035d\u0007k\u0002\u0002\u035d", - "\u035e\u0007p\u0002\u0002\u035e\u035f\u0007v\u0002\u0002\u035f\u0360", - "\u00076\u0002\u0002\u0360\u0418\u00072\u0002\u0002\u0361\u0362\u0007", - "w\u0002\u0002\u0362\u0363\u0007k\u0002\u0002\u0363\u0364\u0007p\u0002", - "\u0002\u0364\u0365\u0007v\u0002\u0002\u0365\u0366\u00076\u0002\u0002", - "\u0366\u0418\u0007:\u0002\u0002\u0367\u0368\u0007w\u0002\u0002\u0368", - "\u0369\u0007k\u0002\u0002\u0369\u036a\u0007p\u0002\u0002\u036a\u036b", - "\u0007v\u0002\u0002\u036b\u036c\u00077\u0002\u0002\u036c\u0418\u0007", - "8\u0002\u0002\u036d\u036e\u0007w\u0002\u0002\u036e\u036f\u0007k\u0002", - "\u0002\u036f\u0370\u0007p\u0002\u0002\u0370\u0371\u0007v\u0002\u0002", - "\u0371\u0372\u00078\u0002\u0002\u0372\u0418\u00076\u0002\u0002\u0373", - "\u0374\u0007w\u0002\u0002\u0374\u0375\u0007k\u0002\u0002\u0375\u0376", - "\u0007p\u0002\u0002\u0376\u0377\u0007v\u0002\u0002\u0377\u0378\u0007", - "9\u0002\u0002\u0378\u0418\u00074\u0002\u0002\u0379\u037a\u0007w\u0002", - "\u0002\u037a\u037b\u0007k\u0002\u0002\u037b\u037c\u0007p\u0002\u0002", - "\u037c\u037d\u0007v\u0002\u0002\u037d\u037e\u0007:\u0002\u0002\u037e", - "\u0418\u00072\u0002\u0002\u037f\u0380\u0007w\u0002\u0002\u0380\u0381", - "\u0007k\u0002\u0002\u0381\u0382\u0007p\u0002\u0002\u0382\u0383\u0007", - "v\u0002\u0002\u0383\u0384\u0007:\u0002\u0002\u0384\u0418\u0007:\u0002", - "\u0002\u0385\u0386\u0007w\u0002\u0002\u0386\u0387\u0007k\u0002\u0002", - "\u0387\u0388\u0007p\u0002\u0002\u0388\u0389\u0007v\u0002\u0002\u0389", - "\u038a\u0007;\u0002\u0002\u038a\u0418\u00078\u0002\u0002\u038b\u038c", - "\u0007w\u0002\u0002\u038c\u038d\u0007k\u0002\u0002\u038d\u038e\u0007", - "p\u0002\u0002\u038e\u038f\u0007v\u0002\u0002\u038f\u0390\u00073\u0002", - "\u0002\u0390\u0391\u00072\u0002\u0002\u0391\u0418\u00076\u0002\u0002", - "\u0392\u0393\u0007w\u0002\u0002\u0393\u0394\u0007k\u0002\u0002\u0394", - "\u0395\u0007p\u0002\u0002\u0395\u0396\u0007v\u0002\u0002\u0396\u0397", - "\u00073\u0002\u0002\u0397\u0398\u00073\u0002\u0002\u0398\u0418\u0007", - "4\u0002\u0002\u0399\u039a\u0007w\u0002\u0002\u039a\u039b\u0007k\u0002", - "\u0002\u039b\u039c\u0007p\u0002\u0002\u039c\u039d\u0007v\u0002\u0002", - "\u039d\u039e\u00073\u0002\u0002\u039e\u039f\u00074\u0002\u0002\u039f", - "\u0418\u00072\u0002\u0002\u03a0\u03a1\u0007w\u0002\u0002\u03a1\u03a2", - "\u0007k\u0002\u0002\u03a2\u03a3\u0007p\u0002\u0002\u03a3\u03a4\u0007", - "v\u0002\u0002\u03a4\u03a5\u00073\u0002\u0002\u03a5\u03a6\u00074\u0002", - "\u0002\u03a6\u0418\u0007:\u0002\u0002\u03a7\u03a8\u0007w\u0002\u0002", - "\u03a8\u03a9\u0007k\u0002\u0002\u03a9\u03aa\u0007p\u0002\u0002\u03aa", - "\u03ab\u0007v\u0002\u0002\u03ab\u03ac\u00073\u0002\u0002\u03ac\u03ad", - "\u00075\u0002\u0002\u03ad\u0418\u00078\u0002\u0002\u03ae\u03af\u0007", - "w\u0002\u0002\u03af\u03b0\u0007k\u0002\u0002\u03b0\u03b1\u0007p\u0002", - "\u0002\u03b1\u03b2\u0007v\u0002\u0002\u03b2\u03b3\u00073\u0002\u0002", - "\u03b3\u03b4\u00076\u0002\u0002\u03b4\u0418\u00076\u0002\u0002\u03b5", - "\u03b6\u0007w\u0002\u0002\u03b6\u03b7\u0007k\u0002\u0002\u03b7\u03b8", - "\u0007p\u0002\u0002\u03b8\u03b9\u0007v\u0002\u0002\u03b9\u03ba\u0007", - "3\u0002\u0002\u03ba\u03bb\u00077\u0002\u0002\u03bb\u0418\u00074\u0002", - "\u0002\u03bc\u03bd\u0007w\u0002\u0002\u03bd\u03be\u0007k\u0002\u0002", - "\u03be\u03bf\u0007p\u0002\u0002\u03bf\u03c0\u0007v\u0002\u0002\u03c0", - "\u03c1\u00073\u0002\u0002\u03c1\u03c2\u00078\u0002\u0002\u03c2\u0418", - "\u00072\u0002\u0002\u03c3\u03c4\u0007w\u0002\u0002\u03c4\u03c5\u0007", - "k\u0002\u0002\u03c5\u03c6\u0007p\u0002\u0002\u03c6\u03c7\u0007v\u0002", - "\u0002\u03c7\u03c8\u00073\u0002\u0002\u03c8\u03c9\u00078\u0002\u0002", - "\u03c9\u0418\u0007:\u0002\u0002\u03ca\u03cb\u0007w\u0002\u0002\u03cb", - "\u03cc\u0007k\u0002\u0002\u03cc\u03cd\u0007p\u0002\u0002\u03cd\u03ce", - "\u0007v\u0002\u0002\u03ce\u03cf\u00073\u0002\u0002\u03cf\u03d0\u0007", - "9\u0002\u0002\u03d0\u0418\u00078\u0002\u0002\u03d1\u03d2\u0007w\u0002", - "\u0002\u03d2\u03d3\u0007k\u0002\u0002\u03d3\u03d4\u0007p\u0002\u0002", - "\u03d4\u03d5\u0007v\u0002\u0002\u03d5\u03d6\u00073\u0002\u0002\u03d6", - "\u03d7\u0007:\u0002\u0002\u03d7\u0418\u00076\u0002\u0002\u03d8\u03d9", - "\u0007w\u0002\u0002\u03d9\u03da\u0007k\u0002\u0002\u03da\u03db\u0007", - "p\u0002\u0002\u03db\u03dc\u0007v\u0002\u0002\u03dc\u03dd\u00073\u0002", - "\u0002\u03dd\u03de\u0007;\u0002\u0002\u03de\u0418\u00074\u0002\u0002", - "\u03df\u03e0\u0007w\u0002\u0002\u03e0\u03e1\u0007k\u0002\u0002\u03e1", - "\u03e2\u0007p\u0002\u0002\u03e2\u03e3\u0007v\u0002\u0002\u03e3\u03e4", - "\u00074\u0002\u0002\u03e4\u03e5\u00072\u0002\u0002\u03e5\u0418\u0007", - "2\u0002\u0002\u03e6\u03e7\u0007w\u0002\u0002\u03e7\u03e8\u0007k\u0002", - "\u0002\u03e8\u03e9\u0007p\u0002\u0002\u03e9\u03ea\u0007v\u0002\u0002", - "\u03ea\u03eb\u00074\u0002\u0002\u03eb\u03ec\u00072\u0002\u0002\u03ec", - "\u0418\u0007:\u0002\u0002\u03ed\u03ee\u0007w\u0002\u0002\u03ee\u03ef", - "\u0007k\u0002\u0002\u03ef\u03f0\u0007p\u0002\u0002\u03f0\u03f1\u0007", - "v\u0002\u0002\u03f1\u03f2\u00074\u0002\u0002\u03f2\u03f3\u00073\u0002", - "\u0002\u03f3\u0418\u00078\u0002\u0002\u03f4\u03f5\u0007w\u0002\u0002", - "\u03f5\u03f6\u0007k\u0002\u0002\u03f6\u03f7\u0007p\u0002\u0002\u03f7", - "\u03f8\u0007v\u0002\u0002\u03f8\u03f9\u00074\u0002\u0002\u03f9\u03fa", - "\u00074\u0002\u0002\u03fa\u0418\u00076\u0002\u0002\u03fb\u03fc\u0007", - "w\u0002\u0002\u03fc\u03fd\u0007k\u0002\u0002\u03fd\u03fe\u0007p\u0002", - "\u0002\u03fe\u03ff\u0007v\u0002\u0002\u03ff\u0400\u00074\u0002\u0002", - "\u0400\u0401\u00075\u0002\u0002\u0401\u0418\u00074\u0002\u0002\u0402", - "\u0403\u0007w\u0002\u0002\u0403\u0404\u0007k\u0002\u0002\u0404\u0405", - "\u0007p\u0002\u0002\u0405\u0406\u0007v\u0002\u0002\u0406\u0407\u0007", - "4\u0002\u0002\u0407\u0408\u00076\u0002\u0002\u0408\u0418\u00072\u0002", - "\u0002\u0409\u040a\u0007w\u0002\u0002\u040a\u040b\u0007k\u0002\u0002", - "\u040b\u040c\u0007p\u0002\u0002\u040c\u040d\u0007v\u0002\u0002\u040d", - "\u040e\u00074\u0002\u0002\u040e\u040f\u00076\u0002\u0002\u040f\u0418", - "\u0007:\u0002\u0002\u0410\u0411\u0007w\u0002\u0002\u0411\u0412\u0007", - "k\u0002\u0002\u0412\u0413\u0007p\u0002\u0002\u0413\u0414\u0007v\u0002", - "\u0002\u0414\u0415\u00074\u0002\u0002\u0415\u0416\u00077\u0002\u0002", - "\u0416\u0418\u00078\u0002\u0002\u0417\u0340\u0003\u0002\u0002\u0002", - "\u0417\u0344\u0003\u0002\u0002\u0002\u0417\u0349\u0003\u0002\u0002\u0002", - "\u0417\u034f\u0003\u0002\u0002\u0002\u0417\u0355\u0003\u0002\u0002\u0002", - "\u0417\u035b\u0003\u0002\u0002\u0002\u0417\u0361\u0003\u0002\u0002\u0002", - "\u0417\u0367\u0003\u0002\u0002\u0002\u0417\u036d\u0003\u0002\u0002\u0002", - "\u0417\u0373\u0003\u0002\u0002\u0002\u0417\u0379\u0003\u0002\u0002\u0002", - "\u0417\u037f\u0003\u0002\u0002\u0002\u0417\u0385\u0003\u0002\u0002\u0002", - "\u0417\u038b\u0003\u0002\u0002\u0002\u0417\u0392\u0003\u0002\u0002\u0002", - "\u0417\u0399\u0003\u0002\u0002\u0002\u0417\u03a0\u0003\u0002\u0002\u0002", - "\u0417\u03a7\u0003\u0002\u0002\u0002\u0417\u03ae\u0003\u0002\u0002\u0002", - "\u0417\u03b5\u0003\u0002\u0002\u0002\u0417\u03bc\u0003\u0002\u0002\u0002", - "\u0417\u03c3\u0003\u0002\u0002\u0002\u0417\u03ca\u0003\u0002\u0002\u0002", - "\u0417\u03d1\u0003\u0002\u0002\u0002\u0417\u03d8\u0003\u0002\u0002\u0002", - "\u0417\u03df\u0003\u0002\u0002\u0002\u0417\u03e6\u0003\u0002\u0002\u0002", - "\u0417\u03ed\u0003\u0002\u0002\u0002\u0417\u03f4\u0003\u0002\u0002\u0002", - "\u0417\u03fb\u0003\u0002\u0002\u0002\u0417\u0402\u0003\u0002\u0002\u0002", - "\u0417\u0409\u0003\u0002\u0002\u0002\u0417\u0410\u0003\u0002\u0002\u0002", - "\u0418\u00ba\u0003\u0002\u0002\u0002\u0419\u041a\u0007d\u0002\u0002", - "\u041a\u041b\u0007{\u0002\u0002\u041b\u041c\u0007v\u0002\u0002\u041c", - "\u041d\u0007g\u0002\u0002\u041d\u04f6\u0007u\u0002\u0002\u041e\u041f", - "\u0007d\u0002\u0002\u041f\u0420\u0007{\u0002\u0002\u0420\u0421\u0007", - "v\u0002\u0002\u0421\u0422\u0007g\u0002\u0002\u0422\u0423\u0007u\u0002", - "\u0002\u0423\u04f6\u00073\u0002\u0002\u0424\u0425\u0007d\u0002\u0002", - "\u0425\u0426\u0007{\u0002\u0002\u0426\u0427\u0007v\u0002\u0002\u0427", - "\u0428\u0007g\u0002\u0002\u0428\u0429\u0007u\u0002\u0002\u0429\u04f6", - "\u00074\u0002\u0002\u042a\u042b\u0007d\u0002\u0002\u042b\u042c\u0007", - "{\u0002\u0002\u042c\u042d\u0007v\u0002\u0002\u042d\u042e\u0007g\u0002", - "\u0002\u042e\u042f\u0007u\u0002\u0002\u042f\u04f6\u00075\u0002\u0002", - "\u0430\u0431\u0007d\u0002\u0002\u0431\u0432\u0007{\u0002\u0002\u0432", - "\u0433\u0007v\u0002\u0002\u0433\u0434\u0007g\u0002\u0002\u0434\u0435", - "\u0007u\u0002\u0002\u0435\u04f6\u00076\u0002\u0002\u0436\u0437\u0007", - "d\u0002\u0002\u0437\u0438\u0007{\u0002\u0002\u0438\u0439\u0007v\u0002", - "\u0002\u0439\u043a\u0007g\u0002\u0002\u043a\u043b\u0007u\u0002\u0002", - "\u043b\u04f6\u00077\u0002\u0002\u043c\u043d\u0007d\u0002\u0002\u043d", - "\u043e\u0007{\u0002\u0002\u043e\u043f\u0007v\u0002\u0002\u043f\u0440", - "\u0007g\u0002\u0002\u0440\u0441\u0007u\u0002\u0002\u0441\u04f6\u0007", - "8\u0002\u0002\u0442\u0443\u0007d\u0002\u0002\u0443\u0444\u0007{\u0002", - "\u0002\u0444\u0445\u0007v\u0002\u0002\u0445\u0446\u0007g\u0002\u0002", - "\u0446\u0447\u0007u\u0002\u0002\u0447\u04f6\u00079\u0002\u0002\u0448", - "\u0449\u0007d\u0002\u0002\u0449\u044a\u0007{\u0002\u0002\u044a\u044b", - "\u0007v\u0002\u0002\u044b\u044c\u0007g\u0002\u0002\u044c\u044d\u0007", - "u\u0002\u0002\u044d\u04f6\u0007:\u0002\u0002\u044e\u044f\u0007d\u0002", - "\u0002\u044f\u0450\u0007{\u0002\u0002\u0450\u0451\u0007v\u0002\u0002", - "\u0451\u0452\u0007g\u0002\u0002\u0452\u0453\u0007u\u0002\u0002\u0453", - "\u04f6\u0007;\u0002\u0002\u0454\u0455\u0007d\u0002\u0002\u0455\u0456", - "\u0007{\u0002\u0002\u0456\u0457\u0007v\u0002\u0002\u0457\u0458\u0007", - "g\u0002\u0002\u0458\u0459\u0007u\u0002\u0002\u0459\u045a\u00073\u0002", - "\u0002\u045a\u04f6\u00072\u0002\u0002\u045b\u045c\u0007d\u0002\u0002", - "\u045c\u045d\u0007{\u0002\u0002\u045d\u045e\u0007v\u0002\u0002\u045e", - "\u045f\u0007g\u0002\u0002\u045f\u0460\u0007u\u0002\u0002\u0460\u0461", - "\u00073\u0002\u0002\u0461\u04f6\u00073\u0002\u0002\u0462\u0463\u0007", - "d\u0002\u0002\u0463\u0464\u0007{\u0002\u0002\u0464\u0465\u0007v\u0002", - "\u0002\u0465\u0466\u0007g\u0002\u0002\u0466\u0467\u0007u\u0002\u0002", - "\u0467\u0468\u00073\u0002\u0002\u0468\u04f6\u00074\u0002\u0002\u0469", - "\u046a\u0007d\u0002\u0002\u046a\u046b\u0007{\u0002\u0002\u046b\u046c", - "\u0007v\u0002\u0002\u046c\u046d\u0007g\u0002\u0002\u046d\u046e\u0007", - "u\u0002\u0002\u046e\u046f\u00073\u0002\u0002\u046f\u04f6\u00075\u0002", - "\u0002\u0470\u0471\u0007d\u0002\u0002\u0471\u0472\u0007{\u0002\u0002", - "\u0472\u0473\u0007v\u0002\u0002\u0473\u0474\u0007g\u0002\u0002\u0474", - "\u0475\u0007u\u0002\u0002\u0475\u0476\u00073\u0002\u0002\u0476\u04f6", - "\u00076\u0002\u0002\u0477\u0478\u0007d\u0002\u0002\u0478\u0479\u0007", - "{\u0002\u0002\u0479\u047a\u0007v\u0002\u0002\u047a\u047b\u0007g\u0002", - "\u0002\u047b\u047c\u0007u\u0002\u0002\u047c\u047d\u00073\u0002\u0002", - "\u047d\u04f6\u00077\u0002\u0002\u047e\u047f\u0007d\u0002\u0002\u047f", - "\u0480\u0007{\u0002\u0002\u0480\u0481\u0007v\u0002\u0002\u0481\u0482", - "\u0007g\u0002\u0002\u0482\u0483\u0007u\u0002\u0002\u0483\u0484\u0007", - "3\u0002\u0002\u0484\u04f6\u00078\u0002\u0002\u0485\u0486\u0007d\u0002", - "\u0002\u0486\u0487\u0007{\u0002\u0002\u0487\u0488\u0007v\u0002\u0002", - "\u0488\u0489\u0007g\u0002\u0002\u0489\u048a\u0007u\u0002\u0002\u048a", - "\u048b\u00073\u0002\u0002\u048b\u04f6\u00079\u0002\u0002\u048c\u048d", - "\u0007d\u0002\u0002\u048d\u048e\u0007{\u0002\u0002\u048e\u048f\u0007", - "v\u0002\u0002\u048f\u0490\u0007g\u0002\u0002\u0490\u0491\u0007u\u0002", - "\u0002\u0491\u0492\u00073\u0002\u0002\u0492\u04f6\u0007:\u0002\u0002", - "\u0493\u0494\u0007d\u0002\u0002\u0494\u0495\u0007{\u0002\u0002\u0495", - "\u0496\u0007v\u0002\u0002\u0496\u0497\u0007g\u0002\u0002\u0497\u0498", - "\u0007u\u0002\u0002\u0498\u0499\u00073\u0002\u0002\u0499\u04f6\u0007", - ";\u0002\u0002\u049a\u049b\u0007d\u0002\u0002\u049b\u049c\u0007{\u0002", - "\u0002\u049c\u049d\u0007v\u0002\u0002\u049d\u049e\u0007g\u0002\u0002", - "\u049e\u049f\u0007u\u0002\u0002\u049f\u04a0\u00074\u0002\u0002\u04a0", - "\u04f6\u00072\u0002\u0002\u04a1\u04a2\u0007d\u0002\u0002\u04a2\u04a3", - "\u0007{\u0002\u0002\u04a3\u04a4\u0007v\u0002\u0002\u04a4\u04a5\u0007", - "g\u0002\u0002\u04a5\u04a6\u0007u\u0002\u0002\u04a6\u04a7\u00074\u0002", - "\u0002\u04a7\u04f6\u00073\u0002\u0002\u04a8\u04a9\u0007d\u0002\u0002", - "\u04a9\u04aa\u0007{\u0002\u0002\u04aa\u04ab\u0007v\u0002\u0002\u04ab", - "\u04ac\u0007g\u0002\u0002\u04ac\u04ad\u0007u\u0002\u0002\u04ad\u04ae", - "\u00074\u0002\u0002\u04ae\u04f6\u00074\u0002\u0002\u04af\u04b0\u0007", - "d\u0002\u0002\u04b0\u04b1\u0007{\u0002\u0002\u04b1\u04b2\u0007v\u0002", - "\u0002\u04b2\u04b3\u0007g\u0002\u0002\u04b3\u04b4\u0007u\u0002\u0002", - "\u04b4\u04b5\u00074\u0002\u0002\u04b5\u04f6\u00075\u0002\u0002\u04b6", - "\u04b7\u0007d\u0002\u0002\u04b7\u04b8\u0007{\u0002\u0002\u04b8\u04b9", - "\u0007v\u0002\u0002\u04b9\u04ba\u0007g\u0002\u0002\u04ba\u04bb\u0007", - "u\u0002\u0002\u04bb\u04bc\u00074\u0002\u0002\u04bc\u04f6\u00076\u0002", - "\u0002\u04bd\u04be\u0007d\u0002\u0002\u04be\u04bf\u0007{\u0002\u0002", - "\u04bf\u04c0\u0007v\u0002\u0002\u04c0\u04c1\u0007g\u0002\u0002\u04c1", - "\u04c2\u0007u\u0002\u0002\u04c2\u04c3\u00074\u0002\u0002\u04c3\u04f6", - "\u00077\u0002\u0002\u04c4\u04c5\u0007d\u0002\u0002\u04c5\u04c6\u0007", - "{\u0002\u0002\u04c6\u04c7\u0007v\u0002\u0002\u04c7\u04c8\u0007g\u0002", - "\u0002\u04c8\u04c9\u0007u\u0002\u0002\u04c9\u04ca\u00074\u0002\u0002", - "\u04ca\u04f6\u00078\u0002\u0002\u04cb\u04cc\u0007d\u0002\u0002\u04cc", - "\u04cd\u0007{\u0002\u0002\u04cd\u04ce\u0007v\u0002\u0002\u04ce\u04cf", - "\u0007g\u0002\u0002\u04cf\u04d0\u0007u\u0002\u0002\u04d0\u04d1\u0007", - "4\u0002\u0002\u04d1\u04f6\u00079\u0002\u0002\u04d2\u04d3\u0007d\u0002", - "\u0002\u04d3\u04d4\u0007{\u0002\u0002\u04d4\u04d5\u0007v\u0002\u0002", - "\u04d5\u04d6\u0007g\u0002\u0002\u04d6\u04d7\u0007u\u0002\u0002\u04d7", - "\u04d8\u00074\u0002\u0002\u04d8\u04f6\u0007:\u0002\u0002\u04d9\u04da", - "\u0007d\u0002\u0002\u04da\u04db\u0007{\u0002\u0002\u04db\u04dc\u0007", - "v\u0002\u0002\u04dc\u04dd\u0007g\u0002\u0002\u04dd\u04de\u0007u\u0002", - "\u0002\u04de\u04df\u00074\u0002\u0002\u04df\u04f6\u0007;\u0002\u0002", - "\u04e0\u04e1\u0007d\u0002\u0002\u04e1\u04e2\u0007{\u0002\u0002\u04e2", - "\u04e3\u0007v\u0002\u0002\u04e3\u04e4\u0007g\u0002\u0002\u04e4\u04e5", - "\u0007u\u0002\u0002\u04e5\u04e6\u00075\u0002\u0002\u04e6\u04f6\u0007", - "2\u0002\u0002\u04e7\u04e8\u0007d\u0002\u0002\u04e8\u04e9\u0007{\u0002", - "\u0002\u04e9\u04ea\u0007v\u0002\u0002\u04ea\u04eb\u0007g\u0002\u0002", - "\u04eb\u04ec\u0007u\u0002\u0002\u04ec\u04ed\u00075\u0002\u0002\u04ed", - "\u04f6\u00073\u0002\u0002\u04ee\u04ef\u0007d\u0002\u0002\u04ef\u04f0", - "\u0007{\u0002\u0002\u04f0\u04f1\u0007v\u0002\u0002\u04f1\u04f2\u0007", - "g\u0002\u0002\u04f2\u04f3\u0007u\u0002\u0002\u04f3\u04f4\u00075\u0002", - "\u0002\u04f4\u04f6\u00074\u0002\u0002\u04f5\u0419\u0003\u0002\u0002", - "\u0002\u04f5\u041e\u0003\u0002\u0002\u0002\u04f5\u0424\u0003\u0002\u0002", - "\u0002\u04f5\u042a\u0003\u0002\u0002\u0002\u04f5\u0430\u0003\u0002\u0002", - "\u0002\u04f5\u0436\u0003\u0002\u0002\u0002\u04f5\u043c\u0003\u0002\u0002", - "\u0002\u04f5\u0442\u0003\u0002\u0002\u0002\u04f5\u0448\u0003\u0002\u0002", - "\u0002\u04f5\u044e\u0003\u0002\u0002\u0002\u04f5\u0454\u0003\u0002\u0002", - "\u0002\u04f5\u045b\u0003\u0002\u0002\u0002\u04f5\u0462\u0003\u0002\u0002", - "\u0002\u04f5\u0469\u0003\u0002\u0002\u0002\u04f5\u0470\u0003\u0002\u0002", - "\u0002\u04f5\u0477\u0003\u0002\u0002\u0002\u04f5\u047e\u0003\u0002\u0002", - "\u0002\u04f5\u0485\u0003\u0002\u0002\u0002\u04f5\u048c\u0003\u0002\u0002", - "\u0002\u04f5\u0493\u0003\u0002\u0002\u0002\u04f5\u049a\u0003\u0002\u0002", - "\u0002\u04f5\u04a1\u0003\u0002\u0002\u0002\u04f5\u04a8\u0003\u0002\u0002", - "\u0002\u04f5\u04af\u0003\u0002\u0002\u0002\u04f5\u04b6\u0003\u0002\u0002", - "\u0002\u04f5\u04bd\u0003\u0002\u0002\u0002\u04f5\u04c4\u0003\u0002\u0002", - "\u0002\u04f5\u04cb\u0003\u0002\u0002\u0002\u04f5\u04d2\u0003\u0002\u0002", - "\u0002\u04f5\u04d9\u0003\u0002\u0002\u0002\u04f5\u04e0\u0003\u0002\u0002", - "\u0002\u04f5\u04e7\u0003\u0002\u0002\u0002\u04f5\u04ee\u0003\u0002\u0002", - "\u0002\u04f6\u00bc\u0003\u0002\u0002\u0002\u04f7\u04f8\u0007h\u0002", - "\u0002\u04f8\u04f9\u0007k\u0002\u0002\u04f9\u04fa\u0007z\u0002\u0002", - "\u04fa\u04fb\u0007g\u0002\u0002\u04fb\u050e\u0007f\u0002\u0002\u04fc", - "\u04fd\u0007h\u0002\u0002\u04fd\u04fe\u0007k\u0002\u0002\u04fe\u04ff", - "\u0007z\u0002\u0002\u04ff\u0500\u0007g\u0002\u0002\u0500\u0501\u0007", - "f\u0002\u0002\u0501\u0503\u0003\u0002\u0002\u0002\u0502\u0504\t\u0002", - "\u0002\u0002\u0503\u0502\u0003\u0002\u0002\u0002\u0504\u0505\u0003\u0002", - "\u0002\u0002\u0505\u0503\u0003\u0002\u0002\u0002\u0505\u0506\u0003\u0002", - "\u0002\u0002\u0506\u0507\u0003\u0002\u0002\u0002\u0507\u0509\u0007z", - "\u0002\u0002\u0508\u050a\t\u0002\u0002\u0002\u0509\u0508\u0003\u0002", - "\u0002\u0002\u050a\u050b\u0003\u0002\u0002\u0002\u050b\u0509\u0003\u0002", - "\u0002\u0002\u050b\u050c\u0003\u0002\u0002\u0002\u050c\u050e\u0003\u0002", - "\u0002\u0002\u050d\u04f7\u0003\u0002\u0002\u0002\u050d\u04fc\u0003\u0002", - "\u0002\u0002\u050e\u00be\u0003\u0002\u0002\u0002\u050f\u0510\u0007w", - "\u0002\u0002\u0510\u0511\u0007h\u0002\u0002\u0511\u0512\u0007k\u0002", - "\u0002\u0512\u0513\u0007z\u0002\u0002\u0513\u0514\u0007g\u0002\u0002", - "\u0514\u0528\u0007f\u0002\u0002\u0515\u0516\u0007w\u0002\u0002\u0516", - "\u0517\u0007h\u0002\u0002\u0517\u0518\u0007k\u0002\u0002\u0518\u0519", - "\u0007z\u0002\u0002\u0519\u051a\u0007g\u0002\u0002\u051a\u051b\u0007", - "f\u0002\u0002\u051b\u051d\u0003\u0002\u0002\u0002\u051c\u051e\t\u0002", - "\u0002\u0002\u051d\u051c\u0003\u0002\u0002\u0002\u051e\u051f\u0003\u0002", - "\u0002\u0002\u051f\u051d\u0003\u0002\u0002\u0002\u051f\u0520\u0003\u0002", - "\u0002\u0002\u0520\u0521\u0003\u0002\u0002\u0002\u0521\u0523\u0007z", - "\u0002\u0002\u0522\u0524\t\u0002\u0002\u0002\u0523\u0522\u0003\u0002", - "\u0002\u0002\u0524\u0525\u0003\u0002\u0002\u0002\u0525\u0523\u0003\u0002", - "\u0002\u0002\u0525\u0526\u0003\u0002\u0002\u0002\u0526\u0528\u0003\u0002", - "\u0002\u0002\u0527\u050f\u0003\u0002\u0002\u0002\u0527\u0515\u0003\u0002", - "\u0002\u0002\u0528\u00c0\u0003\u0002\u0002\u0002\u0529\u052b\t\u0002", - "\u0002\u0002\u052a\u0529\u0003\u0002\u0002\u0002\u052b\u052c\u0003\u0002", - "\u0002\u0002\u052c\u052a\u0003\u0002\u0002\u0002\u052c\u052d\u0003\u0002", - "\u0002\u0002\u052d\u052e\u0003\u0002\u0002\u0002\u052e\u0530\u00070", - "\u0002\u0002\u052f\u0531\t\u0002\u0002\u0002\u0530\u052f\u0003\u0002", - "\u0002\u0002\u0531\u0532\u0003\u0002\u0002\u0002\u0532\u0530\u0003\u0002", - "\u0002\u0002\u0532\u0533\u0003\u0002\u0002\u0002\u0533\u0534\u0003\u0002", - "\u0002\u0002\u0534\u0536\u00070\u0002\u0002\u0535\u0537\t\u0002\u0002", - "\u0002\u0536\u0535\u0003\u0002\u0002\u0002\u0537\u0538\u0003\u0002\u0002", - "\u0002\u0538\u0536\u0003\u0002\u0002\u0002\u0538\u0539\u0003\u0002\u0002", - "\u0002\u0539\u00c2\u0003\u0002\u0002\u0002\u053a\u053b\u0007v\u0002", - "\u0002\u053b\u053c\u0007t\u0002\u0002\u053c\u053d\u0007w\u0002\u0002", - "\u053d\u0544\u0007g\u0002\u0002\u053e\u053f\u0007h\u0002\u0002\u053f", - "\u0540\u0007c\u0002\u0002\u0540\u0541\u0007n\u0002\u0002\u0541\u0542", - "\u0007u\u0002\u0002\u0542\u0544\u0007g\u0002\u0002\u0543\u053a\u0003", - "\u0002\u0002\u0002\u0543\u053e\u0003\u0002\u0002\u0002\u0544\u00c4\u0003", - "\u0002\u0002\u0002\u0545\u054c\u0005\u00c7d\u0002\u0546\u0548\u0005", - "\u00c7d\u0002\u0547\u0546\u0003\u0002\u0002\u0002\u0547\u0548\u0003", - "\u0002\u0002\u0002\u0548\u0549\u0003\u0002\u0002\u0002\u0549\u054a\u0007", - "0\u0002\u0002\u054a\u054c\u0005\u00c7d\u0002\u054b\u0545\u0003\u0002", - "\u0002\u0002\u054b\u0547\u0003\u0002\u0002\u0002\u054c\u054f\u0003\u0002", - "\u0002\u0002\u054d\u054e\t\u0003\u0002\u0002\u054e\u0550\u0005\u00c7", - "d\u0002\u054f\u054d\u0003\u0002\u0002\u0002\u054f\u0550\u0003\u0002", - "\u0002\u0002\u0550\u00c6\u0003\u0002\u0002\u0002\u0551\u0558\t\u0002", - "\u0002\u0002\u0552\u0554\u0007a\u0002\u0002\u0553\u0552\u0003\u0002", - "\u0002\u0002\u0553\u0554\u0003\u0002\u0002\u0002\u0554\u0555\u0003\u0002", - "\u0002\u0002\u0555\u0557\t\u0002\u0002\u0002\u0556\u0553\u0003\u0002", - "\u0002\u0002\u0557\u055a\u0003\u0002\u0002\u0002\u0558\u0556\u0003\u0002", - "\u0002\u0002\u0558\u0559\u0003\u0002\u0002\u0002\u0559\u00c8\u0003\u0002", - "\u0002\u0002\u055a\u0558\u0003\u0002\u0002\u0002\u055b\u055c\u00072", - "\u0002\u0002\u055c\u055d\t\u0004\u0002\u0002\u055d\u055e\u0005\u00cb", - "f\u0002\u055e\u00ca\u0003\u0002\u0002\u0002\u055f\u0566\u0005\u00d3", - "j\u0002\u0560\u0562\u0007a\u0002\u0002\u0561\u0560\u0003\u0002\u0002", - "\u0002\u0561\u0562\u0003\u0002\u0002\u0002\u0562\u0563\u0003\u0002\u0002", - "\u0002\u0563\u0565\u0005\u00d3j\u0002\u0564\u0561\u0003\u0002\u0002", - "\u0002\u0565\u0568\u0003\u0002\u0002\u0002\u0566\u0564\u0003\u0002\u0002", - "\u0002\u0566\u0567\u0003\u0002\u0002\u0002\u0567\u00cc\u0003\u0002\u0002", - "\u0002\u0568\u0566\u0003\u0002\u0002\u0002\u0569\u056a\u0007y\u0002", - "\u0002\u056a\u056b\u0007g\u0002\u0002\u056b\u059e\u0007k\u0002\u0002", - "\u056c\u056d\u0007u\u0002\u0002\u056d\u056e\u0007|\u0002\u0002\u056e", - "\u056f\u0007c\u0002\u0002\u056f\u0570\u0007d\u0002\u0002\u0570\u059e", - "\u0007q\u0002\u0002\u0571\u0572\u0007h\u0002\u0002\u0572\u0573\u0007", - "k\u0002\u0002\u0573\u0574\u0007p\u0002\u0002\u0574\u0575\u0007p\u0002", - "\u0002\u0575\u0576\u0007g\u0002\u0002\u0576\u059e\u0007{\u0002\u0002", - "\u0577\u0578\u0007g\u0002\u0002\u0578\u0579\u0007v\u0002\u0002\u0579", - "\u057a\u0007j\u0002\u0002\u057a\u057b\u0007g\u0002\u0002\u057b\u059e", - "\u0007t\u0002\u0002\u057c\u057d\u0007u\u0002\u0002\u057d\u057e\u0007", - "g\u0002\u0002\u057e\u057f\u0007e\u0002\u0002\u057f\u0580\u0007q\u0002", - "\u0002\u0580\u0581\u0007p\u0002\u0002\u0581\u0582\u0007f\u0002\u0002", - "\u0582\u059e\u0007u\u0002\u0002\u0583\u0584\u0007o\u0002\u0002\u0584", - "\u0585\u0007k\u0002\u0002\u0585\u0586\u0007p\u0002\u0002\u0586\u0587", - "\u0007w\u0002\u0002\u0587\u0588\u0007v\u0002\u0002\u0588\u0589\u0007", - "g\u0002\u0002\u0589\u059e\u0007u\u0002\u0002\u058a\u058b\u0007j\u0002", - "\u0002\u058b\u058c\u0007q\u0002\u0002\u058c\u058d\u0007w\u0002\u0002", - "\u058d\u058e\u0007t\u0002\u0002\u058e\u059e\u0007u\u0002\u0002\u058f", - "\u0590\u0007f\u0002\u0002\u0590\u0591\u0007c\u0002\u0002\u0591\u0592", - "\u0007{\u0002\u0002\u0592\u059e\u0007u\u0002\u0002\u0593\u0594\u0007", - "y\u0002\u0002\u0594\u0595\u0007g\u0002\u0002\u0595\u0596\u0007g\u0002", - "\u0002\u0596\u0597\u0007m\u0002\u0002\u0597\u059e\u0007u\u0002\u0002", - "\u0598\u0599\u0007{\u0002\u0002\u0599\u059a\u0007g\u0002\u0002\u059a", - "\u059b\u0007c\u0002\u0002\u059b\u059c\u0007t\u0002\u0002\u059c\u059e", - "\u0007u\u0002\u0002\u059d\u0569\u0003\u0002\u0002\u0002\u059d\u056c", - "\u0003\u0002\u0002\u0002\u059d\u0571\u0003\u0002\u0002\u0002\u059d\u0577", - "\u0003\u0002\u0002\u0002\u059d\u057c\u0003\u0002\u0002\u0002\u059d\u0583", - "\u0003\u0002\u0002\u0002\u059d\u058a\u0003\u0002\u0002\u0002\u059d\u058f", - "\u0003\u0002\u0002\u0002\u059d\u0593\u0003\u0002\u0002\u0002\u059d\u0598", - "\u0003\u0002\u0002\u0002\u059e\u00ce\u0003\u0002\u0002\u0002\u059f\u05a0", - "\u0007j\u0002\u0002\u05a0\u05a1\u0007g\u0002\u0002\u05a1\u05a2\u0007", - "z\u0002\u0002\u05a2\u05b3\u0003\u0002\u0002\u0002\u05a3\u05a7\u0007", - "$\u0002\u0002\u05a4\u05a6\u0005\u00d1i\u0002\u05a5\u05a4\u0003\u0002", - "\u0002\u0002\u05a6\u05a9\u0003\u0002\u0002\u0002\u05a7\u05a5\u0003\u0002", - "\u0002\u0002\u05a7\u05a8\u0003\u0002\u0002\u0002\u05a8\u05aa\u0003\u0002", - "\u0002\u0002\u05a9\u05a7\u0003\u0002\u0002\u0002\u05aa\u05b4\u0007$", - "\u0002\u0002\u05ab\u05af\u0007)\u0002\u0002\u05ac\u05ae\u0005\u00d1", - "i\u0002\u05ad\u05ac\u0003\u0002\u0002\u0002\u05ae\u05b1\u0003\u0002", - "\u0002\u0002\u05af\u05ad\u0003\u0002\u0002\u0002\u05af\u05b0\u0003\u0002", - "\u0002\u0002\u05b0\u05b2\u0003\u0002\u0002\u0002\u05b1\u05af\u0003\u0002", - "\u0002\u0002\u05b2\u05b4\u0007)\u0002\u0002\u05b3\u05a3\u0003\u0002", - "\u0002\u0002\u05b3\u05ab\u0003\u0002\u0002\u0002\u05b4\u00d0\u0003\u0002", - "\u0002\u0002\u05b5\u05b6\u0005\u00d3j\u0002\u05b6\u05b7\u0005\u00d3", - "j\u0002\u05b7\u00d2\u0003\u0002\u0002\u0002\u05b8\u05b9\t\u0005\u0002", - "\u0002\u05b9\u00d4\u0003\u0002\u0002\u0002\u05ba\u05bb\u0007c\u0002", - "\u0002\u05bb\u05bc\u0007d\u0002\u0002\u05bc\u05bd\u0007u\u0002\u0002", - "\u05bd\u05be\u0007v\u0002\u0002\u05be\u05bf\u0007t\u0002\u0002\u05bf", - "\u05c0\u0007c\u0002\u0002\u05c0\u05c1\u0007e\u0002\u0002\u05c1\u0613", - "\u0007v\u0002\u0002\u05c2\u05c3\u0007c\u0002\u0002\u05c3\u05c4\u0007", - "h\u0002\u0002\u05c4\u05c5\u0007v\u0002\u0002\u05c5\u05c6\u0007g\u0002", - "\u0002\u05c6\u0613\u0007t\u0002\u0002\u05c7\u05c8\u0007e\u0002\u0002", - "\u05c8\u05c9\u0007c\u0002\u0002\u05c9\u05ca\u0007u\u0002\u0002\u05ca", - "\u0613\u0007g\u0002\u0002\u05cb\u05cc\u0007e\u0002\u0002\u05cc\u05cd", - "\u0007c\u0002\u0002\u05cd\u05ce\u0007v\u0002\u0002\u05ce\u05cf\u0007", - "e\u0002\u0002\u05cf\u0613\u0007j\u0002\u0002\u05d0\u05d1\u0007f\u0002", - "\u0002\u05d1\u05d2\u0007g\u0002\u0002\u05d2\u05d3\u0007h\u0002\u0002", - "\u05d3\u05d4\u0007c\u0002\u0002\u05d4\u05d5\u0007w\u0002\u0002\u05d5", - "\u05d6\u0007n\u0002\u0002\u05d6\u0613\u0007v\u0002\u0002\u05d7\u05d8", - "\u0007h\u0002\u0002\u05d8\u05d9\u0007k\u0002\u0002\u05d9\u05da\u0007", - "p\u0002\u0002\u05da\u05db\u0007c\u0002\u0002\u05db\u0613\u0007n\u0002", - "\u0002\u05dc\u05dd\u0007k\u0002\u0002\u05dd\u0613\u0007p\u0002\u0002", - "\u05de\u05df\u0007k\u0002\u0002\u05df\u05e0\u0007p\u0002\u0002\u05e0", - "\u05e1\u0007n\u0002\u0002\u05e1\u05e2\u0007k\u0002\u0002\u05e2\u05e3", - "\u0007p\u0002\u0002\u05e3\u0613\u0007g\u0002\u0002\u05e4\u05e5\u0007", - "n\u0002\u0002\u05e5\u05e6\u0007g\u0002\u0002\u05e6\u0613\u0007v\u0002", - "\u0002\u05e7\u05e8\u0007o\u0002\u0002\u05e8\u05e9\u0007c\u0002\u0002", - "\u05e9\u05ea\u0007v\u0002\u0002\u05ea\u05eb\u0007e\u0002\u0002\u05eb", - "\u0613\u0007j\u0002\u0002\u05ec\u05ed\u0007p\u0002\u0002\u05ed\u05ee", - "\u0007w\u0002\u0002\u05ee\u05ef\u0007n\u0002\u0002\u05ef\u0613\u0007", - "n\u0002\u0002\u05f0\u05f1\u0007q\u0002\u0002\u05f1\u0613\u0007h\u0002", - "\u0002\u05f2\u05f3\u0007t\u0002\u0002\u05f3\u05f4\u0007g\u0002\u0002", - "\u05f4\u05f5\u0007n\u0002\u0002\u05f5\u05f6\u0007q\u0002\u0002\u05f6", - "\u05f7\u0007e\u0002\u0002\u05f7\u05f8\u0007c\u0002\u0002\u05f8\u05f9", - "\u0007v\u0002\u0002\u05f9\u05fa\u0007c\u0002\u0002\u05fa\u05fb\u0007", - "d\u0002\u0002\u05fb\u05fc\u0007n\u0002\u0002\u05fc\u0613\u0007g\u0002", - "\u0002\u05fd\u05fe\u0007u\u0002\u0002\u05fe\u05ff\u0007v\u0002\u0002", - "\u05ff\u0600\u0007c\u0002\u0002\u0600\u0601\u0007v\u0002\u0002\u0601", - "\u0602\u0007k\u0002\u0002\u0602\u0613\u0007e\u0002\u0002\u0603\u0604", - "\u0007u\u0002\u0002\u0604\u0605\u0007y\u0002\u0002\u0605\u0606\u0007", - "k\u0002\u0002\u0606\u0607\u0007v\u0002\u0002\u0607\u0608\u0007e\u0002", - "\u0002\u0608\u0613\u0007j\u0002\u0002\u0609\u060a\u0007v\u0002\u0002", - "\u060a\u060b\u0007t\u0002\u0002\u060b\u0613\u0007{\u0002\u0002\u060c", - "\u060d\u0007v\u0002\u0002\u060d\u060e\u0007{\u0002\u0002\u060e\u060f", - "\u0007r\u0002\u0002\u060f\u0610\u0007g\u0002\u0002\u0610\u0611\u0007", - "q\u0002\u0002\u0611\u0613\u0007h\u0002\u0002\u0612\u05ba\u0003\u0002", - "\u0002\u0002\u0612\u05c2\u0003\u0002\u0002\u0002\u0612\u05c7\u0003\u0002", - "\u0002\u0002\u0612\u05cb\u0003\u0002\u0002\u0002\u0612\u05d0\u0003\u0002", - "\u0002\u0002\u0612\u05d7\u0003\u0002\u0002\u0002\u0612\u05dc\u0003\u0002", - "\u0002\u0002\u0612\u05de\u0003\u0002\u0002\u0002\u0612\u05e4\u0003\u0002", - "\u0002\u0002\u0612\u05e7\u0003\u0002\u0002\u0002\u0612\u05ec\u0003\u0002", - "\u0002\u0002\u0612\u05f0\u0003\u0002\u0002\u0002\u0612\u05f2\u0003\u0002", - "\u0002\u0002\u0612\u05fd\u0003\u0002\u0002\u0002\u0612\u0603\u0003\u0002", - "\u0002\u0002\u0612\u0609\u0003\u0002\u0002\u0002\u0612\u060c\u0003\u0002", - "\u0002\u0002\u0613\u00d6\u0003\u0002\u0002\u0002\u0614\u0615\u0007c", - "\u0002\u0002\u0615\u0616\u0007p\u0002\u0002\u0616\u0617\u0007q\u0002", - "\u0002\u0617\u0618\u0007p\u0002\u0002\u0618\u0619\u0007{\u0002\u0002", - "\u0619\u061a\u0007o\u0002\u0002\u061a\u061b\u0007q\u0002\u0002\u061b", - "\u061c\u0007w\u0002\u0002\u061c\u061d\u0007u\u0002\u0002\u061d\u00d8", - "\u0003\u0002\u0002\u0002\u061e\u061f\u0007d\u0002\u0002\u061f\u0620", - "\u0007t\u0002\u0002\u0620\u0621\u0007g\u0002\u0002\u0621\u0622\u0007", - "c\u0002\u0002\u0622\u0623\u0007m\u0002\u0002\u0623\u00da\u0003\u0002", - "\u0002\u0002\u0624\u0625\u0007e\u0002\u0002\u0625\u0626\u0007q\u0002", - "\u0002\u0626\u0627\u0007p\u0002\u0002\u0627\u0628\u0007u\u0002\u0002", - "\u0628\u0629\u0007v\u0002\u0002\u0629\u062a\u0007c\u0002\u0002\u062a", - "\u062b\u0007p\u0002\u0002\u062b\u062c\u0007v\u0002\u0002\u062c\u00dc", - "\u0003\u0002\u0002\u0002\u062d\u062e\u0007e\u0002\u0002\u062e\u062f", - "\u0007q\u0002\u0002\u062f\u0630\u0007p\u0002\u0002\u0630\u0631\u0007", - "v\u0002\u0002\u0631\u0632\u0007k\u0002\u0002\u0632\u0633\u0007p\u0002", - "\u0002\u0633\u0634\u0007w\u0002\u0002\u0634\u0635\u0007g\u0002\u0002", - "\u0635\u00de\u0003\u0002\u0002\u0002\u0636\u0637\u0007g\u0002\u0002", - "\u0637\u0638\u0007z\u0002\u0002\u0638\u0639\u0007v\u0002\u0002\u0639", - "\u063a\u0007g\u0002\u0002\u063a\u063b\u0007t\u0002\u0002\u063b\u063c", - "\u0007p\u0002\u0002\u063c\u063d\u0007c\u0002\u0002\u063d\u063e\u0007", - "n\u0002\u0002\u063e\u00e0\u0003\u0002\u0002\u0002\u063f\u0640\u0007", - "k\u0002\u0002\u0640\u0641\u0007p\u0002\u0002\u0641\u0642\u0007f\u0002", - "\u0002\u0642\u0643\u0007g\u0002\u0002\u0643\u0644\u0007z\u0002\u0002", - "\u0644\u0645\u0007g\u0002\u0002\u0645\u0646\u0007f\u0002\u0002\u0646", - "\u00e2\u0003\u0002\u0002\u0002\u0647\u0648\u0007k\u0002\u0002\u0648", - "\u0649\u0007p\u0002\u0002\u0649\u064a\u0007v\u0002\u0002\u064a\u064b", - "\u0007g\u0002\u0002\u064b\u064c\u0007t\u0002\u0002\u064c\u064d\u0007", - "p\u0002\u0002\u064d\u064e\u0007c\u0002\u0002\u064e\u064f\u0007n\u0002", - "\u0002\u064f\u00e4\u0003\u0002\u0002\u0002\u0650\u0651\u0007r\u0002", - "\u0002\u0651\u0652\u0007c\u0002\u0002\u0652\u0653\u0007{\u0002\u0002", - "\u0653\u0654\u0007c\u0002\u0002\u0654\u0655\u0007d\u0002\u0002\u0655", - "\u0656\u0007n\u0002\u0002\u0656\u0657\u0007g\u0002\u0002\u0657\u00e6", - "\u0003\u0002\u0002\u0002\u0658\u0659\u0007r\u0002\u0002\u0659\u065a", - "\u0007t\u0002\u0002\u065a\u065b\u0007k\u0002\u0002\u065b\u065c\u0007", - "x\u0002\u0002\u065c\u065d\u0007c\u0002\u0002\u065d\u065e\u0007v\u0002", - "\u0002\u065e\u065f\u0007g\u0002\u0002\u065f\u00e8\u0003\u0002\u0002", - "\u0002\u0660\u0661\u0007r\u0002\u0002\u0661\u0662\u0007w\u0002\u0002", - "\u0662\u0663\u0007d\u0002\u0002\u0663\u0664\u0007n\u0002\u0002\u0664", - "\u0665\u0007k\u0002\u0002\u0665\u0666\u0007e\u0002\u0002\u0666\u00ea", - "\u0003\u0002\u0002\u0002\u0667\u0668\u0007r\u0002\u0002\u0668\u0669", - "\u0007w\u0002\u0002\u0669\u066a\u0007t\u0002\u0002\u066a\u066b\u0007", - "g\u0002\u0002\u066b\u00ec\u0003\u0002\u0002\u0002\u066c\u066d\u0007", - "v\u0002\u0002\u066d\u066e\u0007{\u0002\u0002\u066e\u066f\u0007r\u0002", - "\u0002\u066f\u0670\u0007g\u0002\u0002\u0670\u00ee\u0003\u0002\u0002", - "\u0002\u0671\u0672\u0007x\u0002\u0002\u0672\u0673\u0007k\u0002\u0002", - "\u0673\u0674\u0007g\u0002\u0002\u0674\u0675\u0007y\u0002\u0002\u0675", - "\u00f0\u0003\u0002\u0002\u0002\u0676\u067a\u0005\u00f3z\u0002\u0677", - "\u0679\u0005\u00f5{\u0002\u0678\u0677\u0003\u0002\u0002\u0002\u0679", - "\u067c\u0003\u0002\u0002\u0002\u067a\u0678\u0003\u0002\u0002\u0002\u067a", - "\u067b\u0003\u0002\u0002\u0002\u067b\u00f2\u0003\u0002\u0002\u0002\u067c", - "\u067a\u0003\u0002\u0002\u0002\u067d\u067e\t\u0006\u0002\u0002\u067e", - "\u00f4\u0003\u0002\u0002\u0002\u067f\u0680\t\u0007\u0002\u0002\u0680", - "\u00f6\u0003\u0002\u0002\u0002\u0681\u0685\u0007$\u0002\u0002\u0682", - "\u0684\u0005\u00f9}\u0002\u0683\u0682\u0003\u0002\u0002\u0002\u0684", - "\u0687\u0003\u0002\u0002\u0002\u0685\u0683\u0003\u0002\u0002\u0002\u0685", - "\u0686\u0003\u0002\u0002\u0002\u0686\u0688\u0003\u0002\u0002\u0002\u0687", - "\u0685\u0003\u0002\u0002\u0002\u0688\u0692\u0007$\u0002\u0002\u0689", - "\u068d\u0007)\u0002\u0002\u068a\u068c\u0005\u00fb~\u0002\u068b\u068a", - "\u0003\u0002\u0002\u0002\u068c\u068f\u0003\u0002\u0002\u0002\u068d\u068b", - "\u0003\u0002\u0002\u0002\u068d\u068e\u0003\u0002\u0002\u0002\u068e\u0690", - "\u0003\u0002\u0002\u0002\u068f\u068d\u0003\u0002\u0002\u0002\u0690\u0692", - "\u0007)\u0002\u0002\u0691\u0681\u0003\u0002\u0002\u0002\u0691\u0689", - "\u0003\u0002\u0002\u0002\u0692\u00f8\u0003\u0002\u0002\u0002\u0693\u0697", - "\n\b\u0002\u0002\u0694\u0695\u0007^\u0002\u0002\u0695\u0697\u000b\u0002", - "\u0002\u0002\u0696\u0693\u0003\u0002\u0002\u0002\u0696\u0694\u0003\u0002", - "\u0002\u0002\u0697\u00fa\u0003\u0002\u0002\u0002\u0698\u069c\n\t\u0002", - "\u0002\u0699\u069a\u0007^\u0002\u0002\u069a\u069c\u000b\u0002\u0002", - "\u0002\u069b\u0698\u0003\u0002\u0002\u0002\u069b\u0699\u0003\u0002\u0002", - "\u0002\u069c\u00fc\u0003\u0002\u0002\u0002\u069d\u069f\t\n\u0002\u0002", - "\u069e\u069d\u0003\u0002\u0002\u0002\u069f\u06a0\u0003\u0002\u0002\u0002", - "\u06a0\u069e\u0003\u0002\u0002\u0002\u06a0\u06a1\u0003\u0002\u0002\u0002", - "\u06a1\u06a2\u0003\u0002\u0002\u0002\u06a2\u06a3\b\u007f\u0002\u0002", - "\u06a3\u00fe\u0003\u0002\u0002\u0002\u06a4\u06a5\u00071\u0002\u0002", - "\u06a5\u06a6\u0007,\u0002\u0002\u06a6\u06aa\u0003\u0002\u0002\u0002", - "\u06a7\u06a9\u000b\u0002\u0002\u0002\u06a8\u06a7\u0003\u0002\u0002\u0002", - "\u06a9\u06ac\u0003\u0002\u0002\u0002\u06aa\u06ab\u0003\u0002\u0002\u0002", - "\u06aa\u06a8\u0003\u0002\u0002\u0002\u06ab\u06ad\u0003\u0002\u0002\u0002", - "\u06ac\u06aa\u0003\u0002\u0002\u0002\u06ad\u06ae\u0007,\u0002\u0002", - "\u06ae\u06af\u00071\u0002\u0002\u06af\u06b0\u0003\u0002\u0002\u0002", - "\u06b0\u06b1\b\u0080\u0003\u0002\u06b1\u0100\u0003\u0002\u0002\u0002", - "\u06b2\u06b3\u00071\u0002\u0002\u06b3\u06b4\u00071\u0002\u0002\u06b4", - "\u06b8\u0003\u0002\u0002\u0002\u06b5\u06b7\n\u000b\u0002\u0002\u06b6", - "\u06b5\u0003\u0002\u0002\u0002\u06b7\u06ba\u0003\u0002\u0002\u0002\u06b8", - "\u06b6\u0003\u0002\u0002\u0002\u06b8\u06b9\u0003\u0002\u0002\u0002\u06b9", - "\u06bb\u0003\u0002\u0002\u0002\u06ba\u06b8\u0003\u0002\u0002\u0002\u06bb", - "\u06bc\b\u0081\u0003\u0002\u06bc\u0102\u0003\u0002\u0002\u0002%\u0002", - "\u033e\u0417\u04f5\u0505\u050b\u050d\u051f\u0525\u0527\u052c\u0532\u0538", - "\u0543\u0547\u054b\u054f\u0553\u0558\u0561\u0566\u059d\u05a7\u05af\u05b3", - "\u0612\u067a\u0685\u068d\u0691\u0696\u069b\u06a0\u06aa\u06b8\u0004\b", - "\u0002\u0002\u0002\u0003\u0002"].join(""); + "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0005`\u0516", + "\n`\u0003a\u0003a\u0003a\u0003a\u0003a\u0003a\u0003a\u0003a\u0003a\u0003", + "a\u0003a\u0003a\u0006a\u0524\na\ra\u000ea\u0525\u0003a\u0003a\u0006", + "a\u052a\na\ra\u000ea\u052b\u0005a\u052e\na\u0003b\u0003b\u0003b\u0003", + "b\u0003b\u0003b\u0003b\u0003b\u0003b\u0003b\u0003b\u0003b\u0003b\u0003", + "b\u0006b\u053e\nb\rb\u000eb\u053f\u0003b\u0003b\u0006b\u0544\nb\rb\u000e", + "b\u0545\u0005b\u0548\nb\u0003c\u0006c\u054b\nc\rc\u000ec\u054c\u0003", + "c\u0003c\u0006c\u0551\nc\rc\u000ec\u0552\u0003c\u0003c\u0006c\u0557", + "\nc\rc\u000ec\u0558\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003", + "d\u0003d\u0003d\u0005d\u0564\nd\u0003e\u0003e\u0005e\u0568\ne\u0003", + "e\u0003e\u0005e\u056c\ne\u0003e\u0003e\u0005e\u0570\ne\u0003f\u0003", + "f\u0005f\u0574\nf\u0003f\u0007f\u0577\nf\ff\u000ef\u057a\u000bf\u0003", + "g\u0003g\u0003g\u0003g\u0003h\u0003h\u0005h\u0582\nh\u0003h\u0007h\u0585", + "\nh\fh\u000eh\u0588\u000bh\u0003i\u0003i\u0003i\u0003i\u0003i\u0003", + "i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003", + "i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003", + "i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003", + "i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003", + "i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0005i\u05be\ni\u0003j\u0003", + "j\u0003j\u0003j\u0003j\u0003j\u0007j\u05c6\nj\fj\u000ej\u05c9\u000b", + "j\u0003j\u0003j\u0003j\u0007j\u05ce\nj\fj\u000ej\u05d1\u000bj\u0003", + "j\u0005j\u05d4\nj\u0003k\u0003k\u0003k\u0003l\u0003l\u0003m\u0003m\u0003", + "m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003", + "m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003", + "m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003", + "m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003", + "m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003", + "m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003", + "m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003", + "m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003", + "m\u0003m\u0003m\u0003m\u0003m\u0003m\u0005m\u0633\nm\u0003n\u0003n\u0003", + "n\u0003n\u0003n\u0003n\u0003n\u0003n\u0003n\u0003n\u0003o\u0003o\u0003", + "o\u0003o\u0003o\u0003o\u0003p\u0003p\u0003p\u0003p\u0003p\u0003p\u0003", + "p\u0003p\u0003p\u0003q\u0003q\u0003q\u0003q\u0003q\u0003q\u0003q\u0003", + "q\u0003q\u0003r\u0003r\u0003r\u0003r\u0003r\u0003r\u0003r\u0003r\u0003", + "r\u0003s\u0003s\u0003s\u0003s\u0003s\u0003s\u0003s\u0003s\u0003t\u0003", + "t\u0003t\u0003t\u0003t\u0003t\u0003t\u0003t\u0003t\u0003u\u0003u\u0003", + "u\u0003u\u0003u\u0003u\u0003u\u0003u\u0003v\u0003v\u0003v\u0003v\u0003", + "v\u0003v\u0003v\u0003v\u0003w\u0003w\u0003w\u0003w\u0003w\u0003w\u0003", + "w\u0003x\u0003x\u0003x\u0003x\u0003x\u0003y\u0003y\u0003y\u0003y\u0003", + "y\u0003z\u0003z\u0003z\u0003z\u0003z\u0003{\u0003{\u0007{\u0699\n{\f", + "{\u000e{\u069c\u000b{\u0003|\u0003|\u0003}\u0003}\u0003~\u0003~\u0007", + "~\u06a4\n~\f~\u000e~\u06a7\u000b~\u0003~\u0003~\u0003~\u0007~\u06ac", + "\n~\f~\u000e~\u06af\u000b~\u0003~\u0005~\u06b2\n~\u0003\u007f\u0003", + "\u007f\u0003\u007f\u0005\u007f\u06b7\n\u007f\u0003\u0080\u0003\u0080", + "\u0003\u0080\u0005\u0080\u06bc\n\u0080\u0003\u0081\u0006\u0081\u06bf", + "\n\u0081\r\u0081\u000e\u0081\u06c0\u0003\u0081\u0003\u0081\u0003\u0082", + "\u0003\u0082\u0003\u0082\u0003\u0082\u0007\u0082\u06c9\n\u0082\f\u0082", + "\u000e\u0082\u06cc\u000b\u0082\u0003\u0082\u0003\u0082\u0003\u0082\u0003", + "\u0082\u0003\u0082\u0003\u0083\u0003\u0083\u0003\u0083\u0003\u0083\u0007", + "\u0083\u06d7\n\u0083\f\u0083\u000e\u0083\u06da\u000b\u0083\u0003\u0083", + "\u0003\u0083\u0005\u0293\u02a2\u06ca\u0002\u0084\u0003\u0003\u0005\u0004", + "\u0007\u0005\t\u0006\u000b\u0007\r\b\u000f\t\u0011\n\u0013\u000b\u0015", + "\f\u0017\r\u0019\u000e\u001b\u000f\u001d\u0010\u001f\u0011!\u0012#\u0013", + "%\u0014\'\u0015)\u0016+\u0017-\u0018/\u00191\u001a3\u001b5\u001c7\u001d", + "9\u001e;\u001f= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]0_1a2c3e4g5i6k7m8o", + "9q:s;u{?}@\u007fA\u0081B\u0083C\u0085D\u0087E\u0089F\u008bG\u008d", + "H\u008fI\u0091J\u0093K\u0095L\u0097M\u0099N\u009bO\u009dP\u009fQ\u00a1", + "R\u00a3S\u00a5T\u00a7U\u00a9V\u00abW\u00adX\u00afY\u00b1Z\u00b3[\u00b5", + "\\\u00b7]\u00b9^\u00bb_\u00bd`\u00bfa\u00c1b\u00c3c\u00c5d\u00c7e\u00c9", + "f\u00cb\u0002\u00cdg\u00cf\u0002\u00d1h\u00d3i\u00d5\u0002\u00d7\u0002", + "\u00d9j\u00dbk\u00ddl\u00dfm\u00e1n\u00e3o\u00e5p\u00e7q\u00e9r\u00eb", + "s\u00edt\u00efu\u00f1v\u00f3w\u00f5x\u00f7\u0002\u00f9\u0002\u00fby", + "\u00fd\u0002\u00ff\u0002\u0101z\u0103{\u0105|\u0003\u0002\f\u0004\u0002", + "\f\f\u000f\u000f\u0003\u00022;\u0004\u0002GGgg\u0004\u0002ZZzz\u0005", + "\u00022;CHch\u0006\u0002&&C\\aac|\u0007\u0002&&2;C\\aac|\u0006\u0002", + "\f\f\u000f\u000f$$^^\u0006\u0002\f\f\u000f\u000f))^^\u0005\u0002\u000b", + "\f\u000e\u000f\"\"\u0002\u076d\u0002\u0003\u0003\u0002\u0002\u0002\u0002", + "\u0005\u0003\u0002\u0002\u0002\u0002\u0007\u0003\u0002\u0002\u0002\u0002", + "\t\u0003\u0002\u0002\u0002\u0002\u000b\u0003\u0002\u0002\u0002\u0002", + "\r\u0003\u0002\u0002\u0002\u0002\u000f\u0003\u0002\u0002\u0002\u0002", + "\u0011\u0003\u0002\u0002\u0002\u0002\u0013\u0003\u0002\u0002\u0002\u0002", + "\u0015\u0003\u0002\u0002\u0002\u0002\u0017\u0003\u0002\u0002\u0002\u0002", + "\u0019\u0003\u0002\u0002\u0002\u0002\u001b\u0003\u0002\u0002\u0002\u0002", + "\u001d\u0003\u0002\u0002\u0002\u0002\u001f\u0003\u0002\u0002\u0002\u0002", + "!\u0003\u0002\u0002\u0002\u0002#\u0003\u0002\u0002\u0002\u0002%\u0003", + "\u0002\u0002\u0002\u0002\'\u0003\u0002\u0002\u0002\u0002)\u0003\u0002", + "\u0002\u0002\u0002+\u0003\u0002\u0002\u0002\u0002-\u0003\u0002\u0002", + "\u0002\u0002/\u0003\u0002\u0002\u0002\u00021\u0003\u0002\u0002\u0002", + "\u00023\u0003\u0002\u0002\u0002\u00025\u0003\u0002\u0002\u0002\u0002", + "7\u0003\u0002\u0002\u0002\u00029\u0003\u0002\u0002\u0002\u0002;\u0003", + "\u0002\u0002\u0002\u0002=\u0003\u0002\u0002\u0002\u0002?\u0003\u0002", + "\u0002\u0002\u0002A\u0003\u0002\u0002\u0002\u0002C\u0003\u0002\u0002", + "\u0002\u0002E\u0003\u0002\u0002\u0002\u0002G\u0003\u0002\u0002\u0002", + "\u0002I\u0003\u0002\u0002\u0002\u0002K\u0003\u0002\u0002\u0002\u0002", + "M\u0003\u0002\u0002\u0002\u0002O\u0003\u0002\u0002\u0002\u0002Q\u0003", + "\u0002\u0002\u0002\u0002S\u0003\u0002\u0002\u0002\u0002U\u0003\u0002", + "\u0002\u0002\u0002W\u0003\u0002\u0002\u0002\u0002Y\u0003\u0002\u0002", + "\u0002\u0002[\u0003\u0002\u0002\u0002\u0002]\u0003\u0002\u0002\u0002", + "\u0002_\u0003\u0002\u0002\u0002\u0002a\u0003\u0002\u0002\u0002\u0002", + "c\u0003\u0002\u0002\u0002\u0002e\u0003\u0002\u0002\u0002\u0002g\u0003", + "\u0002\u0002\u0002\u0002i\u0003\u0002\u0002\u0002\u0002k\u0003\u0002", + "\u0002\u0002\u0002m\u0003\u0002\u0002\u0002\u0002o\u0003\u0002\u0002", + "\u0002\u0002q\u0003\u0002\u0002\u0002\u0002s\u0003\u0002\u0002\u0002", + "\u0002u\u0003\u0002\u0002\u0002\u0002w\u0003\u0002\u0002\u0002\u0002", + "y\u0003\u0002\u0002\u0002\u0002{\u0003\u0002\u0002\u0002\u0002}\u0003", + "\u0002\u0002\u0002\u0002\u007f\u0003\u0002\u0002\u0002\u0002\u0081\u0003", + "\u0002\u0002\u0002\u0002\u0083\u0003\u0002\u0002\u0002\u0002\u0085\u0003", + "\u0002\u0002\u0002\u0002\u0087\u0003\u0002\u0002\u0002\u0002\u0089\u0003", + "\u0002\u0002\u0002\u0002\u008b\u0003\u0002\u0002\u0002\u0002\u008d\u0003", + "\u0002\u0002\u0002\u0002\u008f\u0003\u0002\u0002\u0002\u0002\u0091\u0003", + "\u0002\u0002\u0002\u0002\u0093\u0003\u0002\u0002\u0002\u0002\u0095\u0003", + "\u0002\u0002\u0002\u0002\u0097\u0003\u0002\u0002\u0002\u0002\u0099\u0003", + "\u0002\u0002\u0002\u0002\u009b\u0003\u0002\u0002\u0002\u0002\u009d\u0003", + "\u0002\u0002\u0002\u0002\u009f\u0003\u0002\u0002\u0002\u0002\u00a1\u0003", + "\u0002\u0002\u0002\u0002\u00a3\u0003\u0002\u0002\u0002\u0002\u00a5\u0003", + "\u0002\u0002\u0002\u0002\u00a7\u0003\u0002\u0002\u0002\u0002\u00a9\u0003", + "\u0002\u0002\u0002\u0002\u00ab\u0003\u0002\u0002\u0002\u0002\u00ad\u0003", + "\u0002\u0002\u0002\u0002\u00af\u0003\u0002\u0002\u0002\u0002\u00b1\u0003", + "\u0002\u0002\u0002\u0002\u00b3\u0003\u0002\u0002\u0002\u0002\u00b5\u0003", + "\u0002\u0002\u0002\u0002\u00b7\u0003\u0002\u0002\u0002\u0002\u00b9\u0003", + "\u0002\u0002\u0002\u0002\u00bb\u0003\u0002\u0002\u0002\u0002\u00bd\u0003", + "\u0002\u0002\u0002\u0002\u00bf\u0003\u0002\u0002\u0002\u0002\u00c1\u0003", + "\u0002\u0002\u0002\u0002\u00c3\u0003\u0002\u0002\u0002\u0002\u00c5\u0003", + "\u0002\u0002\u0002\u0002\u00c7\u0003\u0002\u0002\u0002\u0002\u00c9\u0003", + "\u0002\u0002\u0002\u0002\u00cd\u0003\u0002\u0002\u0002\u0002\u00d1\u0003", + "\u0002\u0002\u0002\u0002\u00d3\u0003\u0002\u0002\u0002\u0002\u00d9\u0003", + "\u0002\u0002\u0002\u0002\u00db\u0003\u0002\u0002\u0002\u0002\u00dd\u0003", + "\u0002\u0002\u0002\u0002\u00df\u0003\u0002\u0002\u0002\u0002\u00e1\u0003", + "\u0002\u0002\u0002\u0002\u00e3\u0003\u0002\u0002\u0002\u0002\u00e5\u0003", + "\u0002\u0002\u0002\u0002\u00e7\u0003\u0002\u0002\u0002\u0002\u00e9\u0003", + "\u0002\u0002\u0002\u0002\u00eb\u0003\u0002\u0002\u0002\u0002\u00ed\u0003", + "\u0002\u0002\u0002\u0002\u00ef\u0003\u0002\u0002\u0002\u0002\u00f1\u0003", + "\u0002\u0002\u0002\u0002\u00f3\u0003\u0002\u0002\u0002\u0002\u00f5\u0003", + "\u0002\u0002\u0002\u0002\u00fb\u0003\u0002\u0002\u0002\u0002\u0101\u0003", + "\u0002\u0002\u0002\u0002\u0103\u0003\u0002\u0002\u0002\u0002\u0105\u0003", + "\u0002\u0002\u0002\u0003\u0107\u0003\u0002\u0002\u0002\u0005\u010e\u0003", + "\u0002\u0002\u0002\u0007\u0110\u0003\u0002\u0002\u0002\t\u0112\u0003", + "\u0002\u0002\u0002\u000b\u0114\u0003\u0002\u0002\u0002\r\u0117\u0003", + "\u0002\u0002\u0002\u000f\u0119\u0003\u0002\u0002\u0002\u0011\u011b\u0003", + "\u0002\u0002\u0002\u0013\u011e\u0003\u0002\u0002\u0002\u0015\u0120\u0003", + "\u0002\u0002\u0002\u0017\u0123\u0003\u0002\u0002\u0002\u0019\u012a\u0003", + "\u0002\u0002\u0002\u001b\u012c\u0003\u0002\u0002\u0002\u001d\u0131\u0003", + "\u0002\u0002\u0002\u001f\u0133\u0003\u0002\u0002\u0002!\u0135\u0003", + "\u0002\u0002\u0002#\u0137\u0003\u0002\u0002\u0002%\u0140\u0003\u0002", + "\u0002\u0002\'\u014a\u0003\u0002\u0002\u0002)\u0152\u0003\u0002\u0002", + "\u0002+\u0155\u0003\u0002\u0002\u0002-\u0157\u0003\u0002\u0002\u0002", + "/\u0159\u0003\u0002\u0002\u00021\u015f\u0003\u0002\u0002\u00023\u0163", + "\u0003\u0002\u0002\u00025\u016a\u0003\u0002\u0002\u00027\u0176\u0003", + "\u0002\u0002\u00029\u017f\u0003\u0002\u0002\u0002;\u0188\u0003\u0002", + "\u0002\u0002=\u0190\u0003\u0002\u0002\u0002?\u0196\u0003\u0002\u0002", + "\u0002A\u019b\u0003\u0002\u0002\u0002C\u019d\u0003\u0002\u0002\u0002", + "E\u019f\u0003\u0002\u0002\u0002G\u01a7\u0003\u0002\u0002\u0002I\u01a9", + "\u0003\u0002\u0002\u0002K\u01b1\u0003\u0002\u0002\u0002M\u01b4\u0003", + "\u0002\u0002\u0002O\u01bb\u0003\u0002\u0002\u0002Q\u01c3\u0003\u0002", + "\u0002\u0002S\u01cc\u0003\u0002\u0002\u0002U\u01cf\u0003\u0002\u0002", + "\u0002W\u01d4\u0003\u0002\u0002\u0002Y\u01da\u0003\u0002\u0002\u0002", + "[\u01e3\u0003\u0002\u0002\u0002]\u01e6\u0003\u0002\u0002\u0002_\u01ed", + "\u0003\u0002\u0002\u0002a\u01f3\u0003\u0002\u0002\u0002c\u01f8\u0003", + "\u0002\u0002\u0002e\u01fc\u0003\u0002\u0002\u0002g\u0201\u0003\u0002", + "\u0002\u0002i\u0208\u0003\u0002\u0002\u0002k\u020d\u0003\u0002\u0002", + "\u0002m\u0210\u0003\u0002\u0002\u0002o\u0213\u0003\u0002\u0002\u0002", + "q\u0217\u0003\u0002\u0002\u0002s\u0219\u0003\u0002\u0002\u0002u\u021b", + "\u0003\u0002\u0002\u0002w\u0221\u0003\u0002\u0002\u0002y\u0228\u0003", + "\u0002\u0002\u0002{\u022a\u0003\u0002\u0002\u0002}\u022d\u0003\u0002", + "\u0002\u0002\u007f\u022f\u0003\u0002\u0002\u0002\u0081\u0231\u0003\u0002", + "\u0002\u0002\u0083\u0234\u0003\u0002\u0002\u0002\u0085\u0237\u0003\u0002", + "\u0002\u0002\u0087\u0239\u0003\u0002\u0002\u0002\u0089\u023b\u0003\u0002", + "\u0002\u0002\u008b\u023e\u0003\u0002\u0002\u0002\u008d\u0241\u0003\u0002", + "\u0002\u0002\u008f\u0244\u0003\u0002\u0002\u0002\u0091\u0247\u0003\u0002", + "\u0002\u0002\u0093\u0249\u0003\u0002\u0002\u0002\u0095\u024b\u0003\u0002", + "\u0002\u0002\u0097\u024e\u0003\u0002\u0002\u0002\u0099\u0251\u0003\u0002", + "\u0002\u0002\u009b\u0254\u0003\u0002\u0002\u0002\u009d\u0258\u0003\u0002", + "\u0002\u0002\u009f\u025c\u0003\u0002\u0002\u0002\u00a1\u025f\u0003\u0002", + "\u0002\u0002\u00a3\u0262\u0003\u0002\u0002\u0002\u00a5\u0265\u0003\u0002", + "\u0002\u0002\u00a7\u0268\u0003\u0002\u0002\u0002\u00a9\u026b\u0003\u0002", + "\u0002\u0002\u00ab\u026f\u0003\u0002\u0002\u0002\u00ad\u0272\u0003\u0002", + "\u0002\u0002\u00af\u0275\u0003\u0002\u0002\u0002\u00b1\u027c\u0003\u0002", + "\u0002\u0002\u00b3\u0281\u0003\u0002\u0002\u0002\u00b5\u0289\u0003\u0002", + "\u0002\u0002\u00b7\u0297\u0003\u0002\u0002\u0002\u00b9\u029b\u0003\u0002", + "\u0002\u0002\u00bb\u035e\u0003\u0002\u0002\u0002\u00bd\u0437\u0003\u0002", + "\u0002\u0002\u00bf\u0515\u0003\u0002\u0002\u0002\u00c1\u052d\u0003\u0002", + "\u0002\u0002\u00c3\u0547\u0003\u0002\u0002\u0002\u00c5\u054a\u0003\u0002", + "\u0002\u0002\u00c7\u0563\u0003\u0002\u0002\u0002\u00c9\u056b\u0003\u0002", + "\u0002\u0002\u00cb\u0571\u0003\u0002\u0002\u0002\u00cd\u057b\u0003\u0002", + "\u0002\u0002\u00cf\u057f\u0003\u0002\u0002\u0002\u00d1\u05bd\u0003\u0002", + "\u0002\u0002\u00d3\u05bf\u0003\u0002\u0002\u0002\u00d5\u05d5\u0003\u0002", + "\u0002\u0002\u00d7\u05d8\u0003\u0002\u0002\u0002\u00d9\u0632\u0003\u0002", + "\u0002\u0002\u00db\u0634\u0003\u0002\u0002\u0002\u00dd\u063e\u0003\u0002", + "\u0002\u0002\u00df\u0644\u0003\u0002\u0002\u0002\u00e1\u064d\u0003\u0002", + "\u0002\u0002\u00e3\u0656\u0003\u0002\u0002\u0002\u00e5\u065f\u0003\u0002", + "\u0002\u0002\u00e7\u0667\u0003\u0002\u0002\u0002\u00e9\u0670\u0003\u0002", + "\u0002\u0002\u00eb\u0678\u0003\u0002\u0002\u0002\u00ed\u0680\u0003\u0002", + "\u0002\u0002\u00ef\u0687\u0003\u0002\u0002\u0002\u00f1\u068c\u0003\u0002", + "\u0002\u0002\u00f3\u0691\u0003\u0002\u0002\u0002\u00f5\u0696\u0003\u0002", + "\u0002\u0002\u00f7\u069d\u0003\u0002\u0002\u0002\u00f9\u069f\u0003\u0002", + "\u0002\u0002\u00fb\u06b1\u0003\u0002\u0002\u0002\u00fd\u06b6\u0003\u0002", + "\u0002\u0002\u00ff\u06bb\u0003\u0002\u0002\u0002\u0101\u06be\u0003\u0002", + "\u0002\u0002\u0103\u06c4\u0003\u0002\u0002\u0002\u0105\u06d2\u0003\u0002", + "\u0002\u0002\u0107\u0108\u0007r\u0002\u0002\u0108\u0109\u0007t\u0002", + "\u0002\u0109\u010a\u0007c\u0002\u0002\u010a\u010b\u0007i\u0002\u0002", + "\u010b\u010c\u0007o\u0002\u0002\u010c\u010d\u0007c\u0002\u0002\u010d", + "\u0004\u0003\u0002\u0002\u0002\u010e\u010f\u0007=\u0002\u0002\u010f", + "\u0006\u0003\u0002\u0002\u0002\u0110\u0111\u0007`\u0002\u0002\u0111", + "\b\u0003\u0002\u0002\u0002\u0112\u0113\u0007\u0080\u0002\u0002\u0113", + "\n\u0003\u0002\u0002\u0002\u0114\u0115\u0007@\u0002\u0002\u0115\u0116", + "\u0007?\u0002\u0002\u0116\f\u0003\u0002\u0002\u0002\u0117\u0118\u0007", + "@\u0002\u0002\u0118\u000e\u0003\u0002\u0002\u0002\u0119\u011a\u0007", + ">\u0002\u0002\u011a\u0010\u0003\u0002\u0002\u0002\u011b\u011c\u0007", + ">\u0002\u0002\u011c\u011d\u0007?\u0002\u0002\u011d\u0012\u0003\u0002", + "\u0002\u0002\u011e\u011f\u0007?\u0002\u0002\u011f\u0014\u0003\u0002", + "\u0002\u0002\u0120\u0121\u0007c\u0002\u0002\u0121\u0122\u0007u\u0002", + "\u0002\u0122\u0016\u0003\u0002\u0002\u0002\u0123\u0124\u0007k\u0002", + "\u0002\u0124\u0125\u0007o\u0002\u0002\u0125\u0126\u0007r\u0002\u0002", + "\u0126\u0127\u0007q\u0002\u0002\u0127\u0128\u0007t\u0002\u0002\u0128", + "\u0129\u0007v\u0002\u0002\u0129\u0018\u0003\u0002\u0002\u0002\u012a", + "\u012b\u0007,\u0002\u0002\u012b\u001a\u0003\u0002\u0002\u0002\u012c", + "\u012d\u0007h\u0002\u0002\u012d\u012e\u0007t\u0002\u0002\u012e\u012f", + "\u0007q\u0002\u0002\u012f\u0130\u0007o\u0002\u0002\u0130\u001c\u0003", + "\u0002\u0002\u0002\u0131\u0132\u0007}\u0002\u0002\u0132\u001e\u0003", + "\u0002\u0002\u0002\u0133\u0134\u0007.\u0002\u0002\u0134 \u0003\u0002", + "\u0002\u0002\u0135\u0136\u0007\u007f\u0002\u0002\u0136\"\u0003\u0002", + "\u0002\u0002\u0137\u0138\u0007e\u0002\u0002\u0138\u0139\u0007q\u0002", + "\u0002\u0139\u013a\u0007p\u0002\u0002\u013a\u013b\u0007v\u0002\u0002", + "\u013b\u013c\u0007t\u0002\u0002\u013c\u013d\u0007c\u0002\u0002\u013d", + "\u013e\u0007e\u0002\u0002\u013e\u013f\u0007v\u0002\u0002\u013f$\u0003", + "\u0002\u0002\u0002\u0140\u0141\u0007k\u0002\u0002\u0141\u0142\u0007", + "p\u0002\u0002\u0142\u0143\u0007v\u0002\u0002\u0143\u0144\u0007g\u0002", + "\u0002\u0144\u0145\u0007t\u0002\u0002\u0145\u0146\u0007h\u0002\u0002", + "\u0146\u0147\u0007c\u0002\u0002\u0147\u0148\u0007e\u0002\u0002\u0148", + "\u0149\u0007g\u0002\u0002\u0149&\u0003\u0002\u0002\u0002\u014a\u014b", + "\u0007n\u0002\u0002\u014b\u014c\u0007k\u0002\u0002\u014c\u014d\u0007", + "d\u0002\u0002\u014d\u014e\u0007t\u0002\u0002\u014e\u014f\u0007c\u0002", + "\u0002\u014f\u0150\u0007t\u0002\u0002\u0150\u0151\u0007{\u0002\u0002", + "\u0151(\u0003\u0002\u0002\u0002\u0152\u0153\u0007k\u0002\u0002\u0153", + "\u0154\u0007u\u0002\u0002\u0154*\u0003\u0002\u0002\u0002\u0155\u0156", + "\u0007*\u0002\u0002\u0156,\u0003\u0002\u0002\u0002\u0157\u0158\u0007", + "+\u0002\u0002\u0158.\u0003\u0002\u0002\u0002\u0159\u015a\u0007w\u0002", + "\u0002\u015a\u015b\u0007u\u0002\u0002\u015b\u015c\u0007k\u0002\u0002", + "\u015c\u015d\u0007p\u0002\u0002\u015d\u015e\u0007i\u0002\u0002\u015e", + "0\u0003\u0002\u0002\u0002\u015f\u0160\u0007h\u0002\u0002\u0160\u0161", + "\u0007q\u0002\u0002\u0161\u0162\u0007t\u0002\u0002\u01622\u0003\u0002", + "\u0002\u0002\u0163\u0164\u0007u\u0002\u0002\u0164\u0165\u0007v\u0002", + "\u0002\u0165\u0166\u0007t\u0002\u0002\u0166\u0167\u0007w\u0002\u0002", + "\u0167\u0168\u0007e\u0002\u0002\u0168\u0169\u0007v\u0002\u0002\u0169", + "4\u0003\u0002\u0002\u0002\u016a\u016b\u0007e\u0002\u0002\u016b\u016c", + "\u0007q\u0002\u0002\u016c\u016d\u0007p\u0002\u0002\u016d\u016e\u0007", + "u\u0002\u0002\u016e\u016f\u0007v\u0002\u0002\u016f\u0170\u0007t\u0002", + "\u0002\u0170\u0171\u0007w\u0002\u0002\u0171\u0172\u0007e\u0002\u0002", + "\u0172\u0173\u0007v\u0002\u0002\u0173\u0174\u0007q\u0002\u0002\u0174", + "\u0175\u0007t\u0002\u0002\u01756\u0003\u0002\u0002\u0002\u0176\u0177", + "\u0007o\u0002\u0002\u0177\u0178\u0007q\u0002\u0002\u0178\u0179\u0007", + "f\u0002\u0002\u0179\u017a\u0007k\u0002\u0002\u017a\u017b\u0007h\u0002", + "\u0002\u017b\u017c\u0007k\u0002\u0002\u017c\u017d\u0007g\u0002\u0002", + "\u017d\u017e\u0007t\u0002\u0002\u017e8\u0003\u0002\u0002\u0002\u017f", + "\u0180\u0007h\u0002\u0002\u0180\u0181\u0007w\u0002\u0002\u0181\u0182", + "\u0007p\u0002\u0002\u0182\u0183\u0007e\u0002\u0002\u0183\u0184\u0007", + "v\u0002\u0002\u0184\u0185\u0007k\u0002\u0002\u0185\u0186\u0007q\u0002", + "\u0002\u0186\u0187\u0007p\u0002\u0002\u0187:\u0003\u0002\u0002\u0002", + "\u0188\u0189\u0007t\u0002\u0002\u0189\u018a\u0007g\u0002\u0002\u018a", + "\u018b\u0007v\u0002\u0002\u018b\u018c\u0007w\u0002\u0002\u018c\u018d", + "\u0007t\u0002\u0002\u018d\u018e\u0007p\u0002\u0002\u018e\u018f\u0007", + "u\u0002\u0002\u018f<\u0003\u0002\u0002\u0002\u0190\u0191\u0007g\u0002", + "\u0002\u0191\u0192\u0007x\u0002\u0002\u0192\u0193\u0007g\u0002\u0002", + "\u0193\u0194\u0007p\u0002\u0002\u0194\u0195\u0007v\u0002\u0002\u0195", + ">\u0003\u0002\u0002\u0002\u0196\u0197\u0007g\u0002\u0002\u0197\u0198", + "\u0007p\u0002\u0002\u0198\u0199\u0007w\u0002\u0002\u0199\u019a\u0007", + "o\u0002\u0002\u019a@\u0003\u0002\u0002\u0002\u019b\u019c\u0007]\u0002", + "\u0002\u019cB\u0003\u0002\u0002\u0002\u019d\u019e\u0007_\u0002\u0002", + "\u019eD\u0003\u0002\u0002\u0002\u019f\u01a0\u0007c\u0002\u0002\u01a0", + "\u01a1\u0007f\u0002\u0002\u01a1\u01a2\u0007f\u0002\u0002\u01a2\u01a3", + "\u0007t\u0002\u0002\u01a3\u01a4\u0007g\u0002\u0002\u01a4\u01a5\u0007", + "u\u0002\u0002\u01a5\u01a6\u0007u\u0002\u0002\u01a6F\u0003\u0002\u0002", + "\u0002\u01a7\u01a8\u00070\u0002\u0002\u01a8H\u0003\u0002\u0002\u0002", + "\u01a9\u01aa\u0007o\u0002\u0002\u01aa\u01ab\u0007c\u0002\u0002\u01ab", + "\u01ac\u0007r\u0002\u0002\u01ac\u01ad\u0007r\u0002\u0002\u01ad\u01ae", + "\u0007k\u0002\u0002\u01ae\u01af\u0007p\u0002\u0002\u01af\u01b0\u0007", + "i\u0002\u0002\u01b0J\u0003\u0002\u0002\u0002\u01b1\u01b2\u0007?\u0002", + "\u0002\u01b2\u01b3\u0007@\u0002\u0002\u01b3L\u0003\u0002\u0002\u0002", + "\u01b4\u01b5\u0007o\u0002\u0002\u01b5\u01b6\u0007g\u0002\u0002\u01b6", + "\u01b7\u0007o\u0002\u0002\u01b7\u01b8\u0007q\u0002\u0002\u01b8\u01b9", + "\u0007t\u0002\u0002\u01b9\u01ba\u0007{\u0002\u0002\u01baN\u0003\u0002", + "\u0002\u0002\u01bb\u01bc\u0007u\u0002\u0002\u01bc\u01bd\u0007v\u0002", + "\u0002\u01bd\u01be\u0007q\u0002\u0002\u01be\u01bf\u0007t\u0002\u0002", + "\u01bf\u01c0\u0007c\u0002\u0002\u01c0\u01c1\u0007i\u0002\u0002\u01c1", + "\u01c2\u0007g\u0002\u0002\u01c2P\u0003\u0002\u0002\u0002\u01c3\u01c4", + "\u0007e\u0002\u0002\u01c4\u01c5\u0007c\u0002\u0002\u01c5\u01c6\u0007", + "n\u0002\u0002\u01c6\u01c7\u0007n\u0002\u0002\u01c7\u01c8\u0007f\u0002", + "\u0002\u01c8\u01c9\u0007c\u0002\u0002\u01c9\u01ca\u0007v\u0002\u0002", + "\u01ca\u01cb\u0007c\u0002\u0002\u01cbR\u0003\u0002\u0002\u0002\u01cc", + "\u01cd\u0007k\u0002\u0002\u01cd\u01ce\u0007h\u0002\u0002\u01ceT\u0003", + "\u0002\u0002\u0002\u01cf\u01d0\u0007g\u0002\u0002\u01d0\u01d1\u0007", + "n\u0002\u0002\u01d1\u01d2\u0007u\u0002\u0002\u01d2\u01d3\u0007g\u0002", + "\u0002\u01d3V\u0003\u0002\u0002\u0002\u01d4\u01d5\u0007y\u0002\u0002", + "\u01d5\u01d6\u0007j\u0002\u0002\u01d6\u01d7\u0007k\u0002\u0002\u01d7", + "\u01d8\u0007n\u0002\u0002\u01d8\u01d9\u0007g\u0002\u0002\u01d9X\u0003", + "\u0002\u0002\u0002\u01da\u01db\u0007c\u0002\u0002\u01db\u01dc\u0007", + "u\u0002\u0002\u01dc\u01dd\u0007u\u0002\u0002\u01dd\u01de\u0007g\u0002", + "\u0002\u01de\u01df\u0007o\u0002\u0002\u01df\u01e0\u0007d\u0002\u0002", + "\u01e0\u01e1\u0007n\u0002\u0002\u01e1\u01e2\u0007{\u0002\u0002\u01e2", + "Z\u0003\u0002\u0002\u0002\u01e3\u01e4\u0007f\u0002\u0002\u01e4\u01e5", + "\u0007q\u0002\u0002\u01e5\\\u0003\u0002\u0002\u0002\u01e6\u01e7\u0007", + "t\u0002\u0002\u01e7\u01e8\u0007g\u0002\u0002\u01e8\u01e9\u0007v\u0002", + "\u0002\u01e9\u01ea\u0007w\u0002\u0002\u01ea\u01eb\u0007t\u0002\u0002", + "\u01eb\u01ec\u0007p\u0002\u0002\u01ec^\u0003\u0002\u0002\u0002\u01ed", + "\u01ee\u0007v\u0002\u0002\u01ee\u01ef\u0007j\u0002\u0002\u01ef\u01f0", + "\u0007t\u0002\u0002\u01f0\u01f1\u0007q\u0002\u0002\u01f1\u01f2\u0007", + "y\u0002\u0002\u01f2`\u0003\u0002\u0002\u0002\u01f3\u01f4\u0007g\u0002", + "\u0002\u01f4\u01f5\u0007o\u0002\u0002\u01f5\u01f6\u0007k\u0002\u0002", + "\u01f6\u01f7\u0007v\u0002\u0002\u01f7b\u0003\u0002\u0002\u0002\u01f8", + "\u01f9\u0007x\u0002\u0002\u01f9\u01fa\u0007c\u0002\u0002\u01fa\u01fb", + "\u0007t\u0002\u0002\u01fbd\u0003\u0002\u0002\u0002\u01fc\u01fd\u0007", + "d\u0002\u0002\u01fd\u01fe\u0007q\u0002\u0002\u01fe\u01ff\u0007q\u0002", + "\u0002\u01ff\u0200\u0007n\u0002\u0002\u0200f\u0003\u0002\u0002\u0002", + "\u0201\u0202\u0007u\u0002\u0002\u0202\u0203\u0007v\u0002\u0002\u0203", + "\u0204\u0007t\u0002\u0002\u0204\u0205\u0007k\u0002\u0002\u0205\u0206", + "\u0007p\u0002\u0002\u0206\u0207\u0007i\u0002\u0002\u0207h\u0003\u0002", + "\u0002\u0002\u0208\u0209\u0007d\u0002\u0002\u0209\u020a\u0007{\u0002", + "\u0002\u020a\u020b\u0007v\u0002\u0002\u020b\u020c\u0007g\u0002\u0002", + "\u020cj\u0003\u0002\u0002\u0002\u020d\u020e\u0007-\u0002\u0002\u020e", + "\u020f\u0007-\u0002\u0002\u020fl\u0003\u0002\u0002\u0002\u0210\u0211", + "\u0007/\u0002\u0002\u0211\u0212\u0007/\u0002\u0002\u0212n\u0003\u0002", + "\u0002\u0002\u0213\u0214\u0007p\u0002\u0002\u0214\u0215\u0007g\u0002", + "\u0002\u0215\u0216\u0007y\u0002\u0002\u0216p\u0003\u0002\u0002\u0002", + "\u0217\u0218\u0007-\u0002\u0002\u0218r\u0003\u0002\u0002\u0002\u0219", + "\u021a\u0007/\u0002\u0002\u021at\u0003\u0002\u0002\u0002\u021b\u021c", + "\u0007c\u0002\u0002\u021c\u021d\u0007h\u0002\u0002\u021d\u021e\u0007", + "v\u0002\u0002\u021e\u021f\u0007g\u0002\u0002\u021f\u0220\u0007t\u0002", + "\u0002\u0220v\u0003\u0002\u0002\u0002\u0221\u0222\u0007f\u0002\u0002", + "\u0222\u0223\u0007g\u0002\u0002\u0223\u0224\u0007n\u0002\u0002\u0224", + "\u0225\u0007g\u0002\u0002\u0225\u0226\u0007v\u0002\u0002\u0226\u0227", + "\u0007g\u0002\u0002\u0227x\u0003\u0002\u0002\u0002\u0228\u0229\u0007", + "#\u0002\u0002\u0229z\u0003\u0002\u0002\u0002\u022a\u022b\u0007,\u0002", + "\u0002\u022b\u022c\u0007,\u0002\u0002\u022c|\u0003\u0002\u0002\u0002", + "\u022d\u022e\u00071\u0002\u0002\u022e~\u0003\u0002\u0002\u0002\u022f", + "\u0230\u0007\'\u0002\u0002\u0230\u0080\u0003\u0002\u0002\u0002\u0231", + "\u0232\u0007>\u0002\u0002\u0232\u0233\u0007>\u0002\u0002\u0233\u0082", + "\u0003\u0002\u0002\u0002\u0234\u0235\u0007@\u0002\u0002\u0235\u0236", + "\u0007@\u0002\u0002\u0236\u0084\u0003\u0002\u0002\u0002\u0237\u0238", + "\u0007(\u0002\u0002\u0238\u0086\u0003\u0002\u0002\u0002\u0239\u023a", + "\u0007~\u0002\u0002\u023a\u0088\u0003\u0002\u0002\u0002\u023b\u023c", + "\u0007?\u0002\u0002\u023c\u023d\u0007?\u0002\u0002\u023d\u008a\u0003", + "\u0002\u0002\u0002\u023e\u023f\u0007#\u0002\u0002\u023f\u0240\u0007", + "?\u0002\u0002\u0240\u008c\u0003\u0002\u0002\u0002\u0241\u0242\u0007", + "(\u0002\u0002\u0242\u0243\u0007(\u0002\u0002\u0243\u008e\u0003\u0002", + "\u0002\u0002\u0244\u0245\u0007~\u0002\u0002\u0245\u0246\u0007~\u0002", + "\u0002\u0246\u0090\u0003\u0002\u0002\u0002\u0247\u0248\u0007A\u0002", + "\u0002\u0248\u0092\u0003\u0002\u0002\u0002\u0249\u024a\u0007<\u0002", + "\u0002\u024a\u0094\u0003\u0002\u0002\u0002\u024b\u024c\u0007~\u0002", + "\u0002\u024c\u024d\u0007?\u0002\u0002\u024d\u0096\u0003\u0002\u0002", + "\u0002\u024e\u024f\u0007`\u0002\u0002\u024f\u0250\u0007?\u0002\u0002", + "\u0250\u0098\u0003\u0002\u0002\u0002\u0251\u0252\u0007(\u0002\u0002", + "\u0252\u0253\u0007?\u0002\u0002\u0253\u009a\u0003\u0002\u0002\u0002", + "\u0254\u0255\u0007>\u0002\u0002\u0255\u0256\u0007>\u0002\u0002\u0256", + "\u0257\u0007?\u0002\u0002\u0257\u009c\u0003\u0002\u0002\u0002\u0258", + "\u0259\u0007@\u0002\u0002\u0259\u025a\u0007@\u0002\u0002\u025a\u025b", + "\u0007?\u0002\u0002\u025b\u009e\u0003\u0002\u0002\u0002\u025c\u025d", + "\u0007-\u0002\u0002\u025d\u025e\u0007?\u0002\u0002\u025e\u00a0\u0003", + "\u0002\u0002\u0002\u025f\u0260\u0007/\u0002\u0002\u0260\u0261\u0007", + "?\u0002\u0002\u0261\u00a2\u0003\u0002\u0002\u0002\u0262\u0263\u0007", + ",\u0002\u0002\u0263\u0264\u0007?\u0002\u0002\u0264\u00a4\u0003\u0002", + "\u0002\u0002\u0265\u0266\u00071\u0002\u0002\u0266\u0267\u0007?\u0002", + "\u0002\u0267\u00a6\u0003\u0002\u0002\u0002\u0268\u0269\u0007\'\u0002", + "\u0002\u0269\u026a\u0007?\u0002\u0002\u026a\u00a8\u0003\u0002\u0002", + "\u0002\u026b\u026c\u0007n\u0002\u0002\u026c\u026d\u0007g\u0002\u0002", + "\u026d\u026e\u0007v\u0002\u0002\u026e\u00aa\u0003\u0002\u0002\u0002", + "\u026f\u0270\u0007<\u0002\u0002\u0270\u0271\u0007?\u0002\u0002\u0271", + "\u00ac\u0003\u0002\u0002\u0002\u0272\u0273\u0007?\u0002\u0002\u0273", + "\u0274\u0007<\u0002\u0002\u0274\u00ae\u0003\u0002\u0002\u0002\u0275", + "\u0276\u0007u\u0002\u0002\u0276\u0277\u0007y\u0002\u0002\u0277\u0278", + "\u0007k\u0002\u0002\u0278\u0279\u0007v\u0002\u0002\u0279\u027a\u0007", + "e\u0002\u0002\u027a\u027b\u0007j\u0002\u0002\u027b\u00b0\u0003\u0002", + "\u0002\u0002\u027c\u027d\u0007e\u0002\u0002\u027d\u027e\u0007c\u0002", + "\u0002\u027e\u027f\u0007u\u0002\u0002\u027f\u0280\u0007g\u0002\u0002", + "\u0280\u00b2\u0003\u0002\u0002\u0002\u0281\u0282\u0007f\u0002\u0002", + "\u0282\u0283\u0007g\u0002\u0002\u0283\u0284\u0007h\u0002\u0002\u0284", + "\u0285\u0007c\u0002\u0002\u0285\u0286\u0007w\u0002\u0002\u0286\u0287", + "\u0007n\u0002\u0002\u0287\u0288\u0007v\u0002\u0002\u0288\u00b4\u0003", + "\u0002\u0002\u0002\u0289\u028a\u0007/\u0002\u0002\u028a\u028b\u0007", + "@\u0002\u0002\u028b\u00b6\u0003\u0002\u0002\u0002\u028c\u028d\u0007", + "1\u0002\u0002\u028d\u028e\u00071\u0002\u0002\u028e\u028f\u00071\u0002", + "\u0002\u028f\u0293\u0003\u0002\u0002\u0002\u0290\u0292\u000b\u0002\u0002", + "\u0002\u0291\u0290\u0003\u0002\u0002\u0002\u0292\u0295\u0003\u0002\u0002", + "\u0002\u0293\u0294\u0003\u0002\u0002\u0002\u0293\u0291\u0003\u0002\u0002", + "\u0002\u0294\u0296\u0003\u0002\u0002\u0002\u0295\u0293\u0003\u0002\u0002", + "\u0002\u0296\u0298\t\u0002\u0002\u0002\u0297\u028c\u0003\u0002\u0002", + "\u0002\u0298\u0299\u0003\u0002\u0002\u0002\u0299\u0297\u0003\u0002\u0002", + "\u0002\u0299\u029a\u0003\u0002\u0002\u0002\u029a\u00b8\u0003\u0002\u0002", + "\u0002\u029b\u029c\u00071\u0002\u0002\u029c\u029d\u0007,\u0002\u0002", + "\u029d\u029e\u0007,\u0002\u0002\u029e\u02a2\u0003\u0002\u0002\u0002", + "\u029f\u02a1\u000b\u0002\u0002\u0002\u02a0\u029f\u0003\u0002\u0002\u0002", + "\u02a1\u02a4\u0003\u0002\u0002\u0002\u02a2\u02a3\u0003\u0002\u0002\u0002", + "\u02a2\u02a0\u0003\u0002\u0002\u0002\u02a3\u02a5\u0003\u0002\u0002\u0002", + "\u02a4\u02a2\u0003\u0002\u0002\u0002\u02a5\u02a6\u0007,\u0002\u0002", + "\u02a6\u02a7\u00071\u0002\u0002\u02a7\u00ba\u0003\u0002\u0002\u0002", + "\u02a8\u02a9\u0007k\u0002\u0002\u02a9\u02aa\u0007p\u0002\u0002\u02aa", + "\u035f\u0007v\u0002\u0002\u02ab\u02ac\u0007k\u0002\u0002\u02ac\u02ad", + "\u0007p\u0002\u0002\u02ad\u02ae\u0007v\u0002\u0002\u02ae\u035f\u0007", + ":\u0002\u0002\u02af\u02b0\u0007k\u0002\u0002\u02b0\u02b1\u0007p\u0002", + "\u0002\u02b1\u02b2\u0007v\u0002\u0002\u02b2\u02b3\u00073\u0002\u0002", + "\u02b3\u035f\u00078\u0002\u0002\u02b4\u02b5\u0007k\u0002\u0002\u02b5", + "\u02b6\u0007p\u0002\u0002\u02b6\u02b7\u0007v\u0002\u0002\u02b7\u02b8", + "\u00074\u0002\u0002\u02b8\u035f\u00076\u0002\u0002\u02b9\u02ba\u0007", + "k\u0002\u0002\u02ba\u02bb\u0007p\u0002\u0002\u02bb\u02bc\u0007v\u0002", + "\u0002\u02bc\u02bd\u00075\u0002\u0002\u02bd\u035f\u00074\u0002\u0002", + "\u02be\u02bf\u0007k\u0002\u0002\u02bf\u02c0\u0007p\u0002\u0002\u02c0", + "\u02c1\u0007v\u0002\u0002\u02c1\u02c2\u00076\u0002\u0002\u02c2\u035f", + "\u00072\u0002\u0002\u02c3\u02c4\u0007k\u0002\u0002\u02c4\u02c5\u0007", + "p\u0002\u0002\u02c5\u02c6\u0007v\u0002\u0002\u02c6\u02c7\u00076\u0002", + "\u0002\u02c7\u035f\u0007:\u0002\u0002\u02c8\u02c9\u0007k\u0002\u0002", + "\u02c9\u02ca\u0007p\u0002\u0002\u02ca\u02cb\u0007v\u0002\u0002\u02cb", + "\u02cc\u00077\u0002\u0002\u02cc\u035f\u00078\u0002\u0002\u02cd\u02ce", + "\u0007k\u0002\u0002\u02ce\u02cf\u0007p\u0002\u0002\u02cf\u02d0\u0007", + "v\u0002\u0002\u02d0\u02d1\u00078\u0002\u0002\u02d1\u035f\u00076\u0002", + "\u0002\u02d2\u02d3\u0007k\u0002\u0002\u02d3\u02d4\u0007p\u0002\u0002", + "\u02d4\u02d5\u0007v\u0002\u0002\u02d5\u02d6\u00079\u0002\u0002\u02d6", + "\u035f\u00074\u0002\u0002\u02d7\u02d8\u0007k\u0002\u0002\u02d8\u02d9", + "\u0007p\u0002\u0002\u02d9\u02da\u0007v\u0002\u0002\u02da\u02db\u0007", + ":\u0002\u0002\u02db\u035f\u00072\u0002\u0002\u02dc\u02dd\u0007k\u0002", + "\u0002\u02dd\u02de\u0007p\u0002\u0002\u02de\u02df\u0007v\u0002\u0002", + "\u02df\u02e0\u0007:\u0002\u0002\u02e0\u035f\u0007:\u0002\u0002\u02e1", + "\u02e2\u0007k\u0002\u0002\u02e2\u02e3\u0007p\u0002\u0002\u02e3\u02e4", + "\u0007v\u0002\u0002\u02e4\u02e5\u0007;\u0002\u0002\u02e5\u035f\u0007", + "8\u0002\u0002\u02e6\u02e7\u0007k\u0002\u0002\u02e7\u02e8\u0007p\u0002", + "\u0002\u02e8\u02e9\u0007v\u0002\u0002\u02e9\u02ea\u00073\u0002\u0002", + "\u02ea\u02eb\u00072\u0002\u0002\u02eb\u035f\u00076\u0002\u0002\u02ec", + "\u02ed\u0007k\u0002\u0002\u02ed\u02ee\u0007p\u0002\u0002\u02ee\u02ef", + "\u0007v\u0002\u0002\u02ef\u02f0\u00073\u0002\u0002\u02f0\u02f1\u0007", + "3\u0002\u0002\u02f1\u035f\u00074\u0002\u0002\u02f2\u02f3\u0007k\u0002", + "\u0002\u02f3\u02f4\u0007p\u0002\u0002\u02f4\u02f5\u0007v\u0002\u0002", + "\u02f5\u02f6\u00073\u0002\u0002\u02f6\u02f7\u00074\u0002\u0002\u02f7", + "\u035f\u00072\u0002\u0002\u02f8\u02f9\u0007k\u0002\u0002\u02f9\u02fa", + "\u0007p\u0002\u0002\u02fa\u02fb\u0007v\u0002\u0002\u02fb\u02fc\u0007", + "3\u0002\u0002\u02fc\u02fd\u00074\u0002\u0002\u02fd\u035f\u0007:\u0002", + "\u0002\u02fe\u02ff\u0007k\u0002\u0002\u02ff\u0300\u0007p\u0002\u0002", + "\u0300\u0301\u0007v\u0002\u0002\u0301\u0302\u00073\u0002\u0002\u0302", + "\u0303\u00075\u0002\u0002\u0303\u035f\u00078\u0002\u0002\u0304\u0305", + "\u0007k\u0002\u0002\u0305\u0306\u0007p\u0002\u0002\u0306\u0307\u0007", + "v\u0002\u0002\u0307\u0308\u00073\u0002\u0002\u0308\u0309\u00076\u0002", + "\u0002\u0309\u035f\u00076\u0002\u0002\u030a\u030b\u0007k\u0002\u0002", + "\u030b\u030c\u0007p\u0002\u0002\u030c\u030d\u0007v\u0002\u0002\u030d", + "\u030e\u00073\u0002\u0002\u030e\u030f\u00077\u0002\u0002\u030f\u035f", + "\u00074\u0002\u0002\u0310\u0311\u0007k\u0002\u0002\u0311\u0312\u0007", + "p\u0002\u0002\u0312\u0313\u0007v\u0002\u0002\u0313\u0314\u00073\u0002", + "\u0002\u0314\u0315\u00078\u0002\u0002\u0315\u035f\u00072\u0002\u0002", + "\u0316\u0317\u0007k\u0002\u0002\u0317\u0318\u0007p\u0002\u0002\u0318", + "\u0319\u0007v\u0002\u0002\u0319\u031a\u00073\u0002\u0002\u031a\u031b", + "\u00078\u0002\u0002\u031b\u035f\u0007:\u0002\u0002\u031c\u031d\u0007", + "k\u0002\u0002\u031d\u031e\u0007p\u0002\u0002\u031e\u031f\u0007v\u0002", + "\u0002\u031f\u0320\u00073\u0002\u0002\u0320\u0321\u00079\u0002\u0002", + "\u0321\u035f\u00078\u0002\u0002\u0322\u0323\u0007k\u0002\u0002\u0323", + "\u0324\u0007p\u0002\u0002\u0324\u0325\u0007v\u0002\u0002\u0325\u0326", + "\u00073\u0002\u0002\u0326\u0327\u0007:\u0002\u0002\u0327\u035f\u0007", + "6\u0002\u0002\u0328\u0329\u0007k\u0002\u0002\u0329\u032a\u0007p\u0002", + "\u0002\u032a\u032b\u0007v\u0002\u0002\u032b\u032c\u00073\u0002\u0002", + "\u032c\u032d\u0007;\u0002\u0002\u032d\u035f\u00074\u0002\u0002\u032e", + "\u032f\u0007k\u0002\u0002\u032f\u0330\u0007p\u0002\u0002\u0330\u0331", + "\u0007v\u0002\u0002\u0331\u0332\u00074\u0002\u0002\u0332\u0333\u0007", + "2\u0002\u0002\u0333\u035f\u00072\u0002\u0002\u0334\u0335\u0007k\u0002", + "\u0002\u0335\u0336\u0007p\u0002\u0002\u0336\u0337\u0007v\u0002\u0002", + "\u0337\u0338\u00074\u0002\u0002\u0338\u0339\u00072\u0002\u0002\u0339", + "\u035f\u0007:\u0002\u0002\u033a\u033b\u0007k\u0002\u0002\u033b\u033c", + "\u0007p\u0002\u0002\u033c\u033d\u0007v\u0002\u0002\u033d\u033e\u0007", + "4\u0002\u0002\u033e\u033f\u00073\u0002\u0002\u033f\u035f\u00078\u0002", + "\u0002\u0340\u0341\u0007k\u0002\u0002\u0341\u0342\u0007p\u0002\u0002", + "\u0342\u0343\u0007v\u0002\u0002\u0343\u0344\u00074\u0002\u0002\u0344", + "\u0345\u00074\u0002\u0002\u0345\u035f\u00076\u0002\u0002\u0346\u0347", + "\u0007k\u0002\u0002\u0347\u0348\u0007p\u0002\u0002\u0348\u0349\u0007", + "v\u0002\u0002\u0349\u034a\u00074\u0002\u0002\u034a\u034b\u00075\u0002", + "\u0002\u034b\u035f\u00074\u0002\u0002\u034c\u034d\u0007k\u0002\u0002", + "\u034d\u034e\u0007p\u0002\u0002\u034e\u034f\u0007v\u0002\u0002\u034f", + "\u0350\u00074\u0002\u0002\u0350\u0351\u00076\u0002\u0002\u0351\u035f", + "\u00072\u0002\u0002\u0352\u0353\u0007k\u0002\u0002\u0353\u0354\u0007", + "p\u0002\u0002\u0354\u0355\u0007v\u0002\u0002\u0355\u0356\u00074\u0002", + "\u0002\u0356\u0357\u00076\u0002\u0002\u0357\u035f\u0007:\u0002\u0002", + "\u0358\u0359\u0007k\u0002\u0002\u0359\u035a\u0007p\u0002\u0002\u035a", + "\u035b\u0007v\u0002\u0002\u035b\u035c\u00074\u0002\u0002\u035c\u035d", + "\u00077\u0002\u0002\u035d\u035f\u00078\u0002\u0002\u035e\u02a8\u0003", + "\u0002\u0002\u0002\u035e\u02ab\u0003\u0002\u0002\u0002\u035e\u02af\u0003", + "\u0002\u0002\u0002\u035e\u02b4\u0003\u0002\u0002\u0002\u035e\u02b9\u0003", + "\u0002\u0002\u0002\u035e\u02be\u0003\u0002\u0002\u0002\u035e\u02c3\u0003", + "\u0002\u0002\u0002\u035e\u02c8\u0003\u0002\u0002\u0002\u035e\u02cd\u0003", + "\u0002\u0002\u0002\u035e\u02d2\u0003\u0002\u0002\u0002\u035e\u02d7\u0003", + "\u0002\u0002\u0002\u035e\u02dc\u0003\u0002\u0002\u0002\u035e\u02e1\u0003", + "\u0002\u0002\u0002\u035e\u02e6\u0003\u0002\u0002\u0002\u035e\u02ec\u0003", + "\u0002\u0002\u0002\u035e\u02f2\u0003\u0002\u0002\u0002\u035e\u02f8\u0003", + "\u0002\u0002\u0002\u035e\u02fe\u0003\u0002\u0002\u0002\u035e\u0304\u0003", + "\u0002\u0002\u0002\u035e\u030a\u0003\u0002\u0002\u0002\u035e\u0310\u0003", + "\u0002\u0002\u0002\u035e\u0316\u0003\u0002\u0002\u0002\u035e\u031c\u0003", + "\u0002\u0002\u0002\u035e\u0322\u0003\u0002\u0002\u0002\u035e\u0328\u0003", + "\u0002\u0002\u0002\u035e\u032e\u0003\u0002\u0002\u0002\u035e\u0334\u0003", + "\u0002\u0002\u0002\u035e\u033a\u0003\u0002\u0002\u0002\u035e\u0340\u0003", + "\u0002\u0002\u0002\u035e\u0346\u0003\u0002\u0002\u0002\u035e\u034c\u0003", + "\u0002\u0002\u0002\u035e\u0352\u0003\u0002\u0002\u0002\u035e\u0358\u0003", + "\u0002\u0002\u0002\u035f\u00bc\u0003\u0002\u0002\u0002\u0360\u0361\u0007", + "w\u0002\u0002\u0361\u0362\u0007k\u0002\u0002\u0362\u0363\u0007p\u0002", + "\u0002\u0363\u0438\u0007v\u0002\u0002\u0364\u0365\u0007w\u0002\u0002", + "\u0365\u0366\u0007k\u0002\u0002\u0366\u0367\u0007p\u0002\u0002\u0367", + "\u0368\u0007v\u0002\u0002\u0368\u0438\u0007:\u0002\u0002\u0369\u036a", + "\u0007w\u0002\u0002\u036a\u036b\u0007k\u0002\u0002\u036b\u036c\u0007", + "p\u0002\u0002\u036c\u036d\u0007v\u0002\u0002\u036d\u036e\u00073\u0002", + "\u0002\u036e\u0438\u00078\u0002\u0002\u036f\u0370\u0007w\u0002\u0002", + "\u0370\u0371\u0007k\u0002\u0002\u0371\u0372\u0007p\u0002\u0002\u0372", + "\u0373\u0007v\u0002\u0002\u0373\u0374\u00074\u0002\u0002\u0374\u0438", + "\u00076\u0002\u0002\u0375\u0376\u0007w\u0002\u0002\u0376\u0377\u0007", + "k\u0002\u0002\u0377\u0378\u0007p\u0002\u0002\u0378\u0379\u0007v\u0002", + "\u0002\u0379\u037a\u00075\u0002\u0002\u037a\u0438\u00074\u0002\u0002", + "\u037b\u037c\u0007w\u0002\u0002\u037c\u037d\u0007k\u0002\u0002\u037d", + "\u037e\u0007p\u0002\u0002\u037e\u037f\u0007v\u0002\u0002\u037f\u0380", + "\u00076\u0002\u0002\u0380\u0438\u00072\u0002\u0002\u0381\u0382\u0007", + "w\u0002\u0002\u0382\u0383\u0007k\u0002\u0002\u0383\u0384\u0007p\u0002", + "\u0002\u0384\u0385\u0007v\u0002\u0002\u0385\u0386\u00076\u0002\u0002", + "\u0386\u0438\u0007:\u0002\u0002\u0387\u0388\u0007w\u0002\u0002\u0388", + "\u0389\u0007k\u0002\u0002\u0389\u038a\u0007p\u0002\u0002\u038a\u038b", + "\u0007v\u0002\u0002\u038b\u038c\u00077\u0002\u0002\u038c\u0438\u0007", + "8\u0002\u0002\u038d\u038e\u0007w\u0002\u0002\u038e\u038f\u0007k\u0002", + "\u0002\u038f\u0390\u0007p\u0002\u0002\u0390\u0391\u0007v\u0002\u0002", + "\u0391\u0392\u00078\u0002\u0002\u0392\u0438\u00076\u0002\u0002\u0393", + "\u0394\u0007w\u0002\u0002\u0394\u0395\u0007k\u0002\u0002\u0395\u0396", + "\u0007p\u0002\u0002\u0396\u0397\u0007v\u0002\u0002\u0397\u0398\u0007", + "9\u0002\u0002\u0398\u0438\u00074\u0002\u0002\u0399\u039a\u0007w\u0002", + "\u0002\u039a\u039b\u0007k\u0002\u0002\u039b\u039c\u0007p\u0002\u0002", + "\u039c\u039d\u0007v\u0002\u0002\u039d\u039e\u0007:\u0002\u0002\u039e", + "\u0438\u00072\u0002\u0002\u039f\u03a0\u0007w\u0002\u0002\u03a0\u03a1", + "\u0007k\u0002\u0002\u03a1\u03a2\u0007p\u0002\u0002\u03a2\u03a3\u0007", + "v\u0002\u0002\u03a3\u03a4\u0007:\u0002\u0002\u03a4\u0438\u0007:\u0002", + "\u0002\u03a5\u03a6\u0007w\u0002\u0002\u03a6\u03a7\u0007k\u0002\u0002", + "\u03a7\u03a8\u0007p\u0002\u0002\u03a8\u03a9\u0007v\u0002\u0002\u03a9", + "\u03aa\u0007;\u0002\u0002\u03aa\u0438\u00078\u0002\u0002\u03ab\u03ac", + "\u0007w\u0002\u0002\u03ac\u03ad\u0007k\u0002\u0002\u03ad\u03ae\u0007", + "p\u0002\u0002\u03ae\u03af\u0007v\u0002\u0002\u03af\u03b0\u00073\u0002", + "\u0002\u03b0\u03b1\u00072\u0002\u0002\u03b1\u0438\u00076\u0002\u0002", + "\u03b2\u03b3\u0007w\u0002\u0002\u03b3\u03b4\u0007k\u0002\u0002\u03b4", + "\u03b5\u0007p\u0002\u0002\u03b5\u03b6\u0007v\u0002\u0002\u03b6\u03b7", + "\u00073\u0002\u0002\u03b7\u03b8\u00073\u0002\u0002\u03b8\u0438\u0007", + "4\u0002\u0002\u03b9\u03ba\u0007w\u0002\u0002\u03ba\u03bb\u0007k\u0002", + "\u0002\u03bb\u03bc\u0007p\u0002\u0002\u03bc\u03bd\u0007v\u0002\u0002", + "\u03bd\u03be\u00073\u0002\u0002\u03be\u03bf\u00074\u0002\u0002\u03bf", + "\u0438\u00072\u0002\u0002\u03c0\u03c1\u0007w\u0002\u0002\u03c1\u03c2", + "\u0007k\u0002\u0002\u03c2\u03c3\u0007p\u0002\u0002\u03c3\u03c4\u0007", + "v\u0002\u0002\u03c4\u03c5\u00073\u0002\u0002\u03c5\u03c6\u00074\u0002", + "\u0002\u03c6\u0438\u0007:\u0002\u0002\u03c7\u03c8\u0007w\u0002\u0002", + "\u03c8\u03c9\u0007k\u0002\u0002\u03c9\u03ca\u0007p\u0002\u0002\u03ca", + "\u03cb\u0007v\u0002\u0002\u03cb\u03cc\u00073\u0002\u0002\u03cc\u03cd", + "\u00075\u0002\u0002\u03cd\u0438\u00078\u0002\u0002\u03ce\u03cf\u0007", + "w\u0002\u0002\u03cf\u03d0\u0007k\u0002\u0002\u03d0\u03d1\u0007p\u0002", + "\u0002\u03d1\u03d2\u0007v\u0002\u0002\u03d2\u03d3\u00073\u0002\u0002", + "\u03d3\u03d4\u00076\u0002\u0002\u03d4\u0438\u00076\u0002\u0002\u03d5", + "\u03d6\u0007w\u0002\u0002\u03d6\u03d7\u0007k\u0002\u0002\u03d7\u03d8", + "\u0007p\u0002\u0002\u03d8\u03d9\u0007v\u0002\u0002\u03d9\u03da\u0007", + "3\u0002\u0002\u03da\u03db\u00077\u0002\u0002\u03db\u0438\u00074\u0002", + "\u0002\u03dc\u03dd\u0007w\u0002\u0002\u03dd\u03de\u0007k\u0002\u0002", + "\u03de\u03df\u0007p\u0002\u0002\u03df\u03e0\u0007v\u0002\u0002\u03e0", + "\u03e1\u00073\u0002\u0002\u03e1\u03e2\u00078\u0002\u0002\u03e2\u0438", + "\u00072\u0002\u0002\u03e3\u03e4\u0007w\u0002\u0002\u03e4\u03e5\u0007", + "k\u0002\u0002\u03e5\u03e6\u0007p\u0002\u0002\u03e6\u03e7\u0007v\u0002", + "\u0002\u03e7\u03e8\u00073\u0002\u0002\u03e8\u03e9\u00078\u0002\u0002", + "\u03e9\u0438\u0007:\u0002\u0002\u03ea\u03eb\u0007w\u0002\u0002\u03eb", + "\u03ec\u0007k\u0002\u0002\u03ec\u03ed\u0007p\u0002\u0002\u03ed\u03ee", + "\u0007v\u0002\u0002\u03ee\u03ef\u00073\u0002\u0002\u03ef\u03f0\u0007", + "9\u0002\u0002\u03f0\u0438\u00078\u0002\u0002\u03f1\u03f2\u0007w\u0002", + "\u0002\u03f2\u03f3\u0007k\u0002\u0002\u03f3\u03f4\u0007p\u0002\u0002", + "\u03f4\u03f5\u0007v\u0002\u0002\u03f5\u03f6\u00073\u0002\u0002\u03f6", + "\u03f7\u0007:\u0002\u0002\u03f7\u0438\u00076\u0002\u0002\u03f8\u03f9", + "\u0007w\u0002\u0002\u03f9\u03fa\u0007k\u0002\u0002\u03fa\u03fb\u0007", + "p\u0002\u0002\u03fb\u03fc\u0007v\u0002\u0002\u03fc\u03fd\u00073\u0002", + "\u0002\u03fd\u03fe\u0007;\u0002\u0002\u03fe\u0438\u00074\u0002\u0002", + "\u03ff\u0400\u0007w\u0002\u0002\u0400\u0401\u0007k\u0002\u0002\u0401", + "\u0402\u0007p\u0002\u0002\u0402\u0403\u0007v\u0002\u0002\u0403\u0404", + "\u00074\u0002\u0002\u0404\u0405\u00072\u0002\u0002\u0405\u0438\u0007", + "2\u0002\u0002\u0406\u0407\u0007w\u0002\u0002\u0407\u0408\u0007k\u0002", + "\u0002\u0408\u0409\u0007p\u0002\u0002\u0409\u040a\u0007v\u0002\u0002", + "\u040a\u040b\u00074\u0002\u0002\u040b\u040c\u00072\u0002\u0002\u040c", + "\u0438\u0007:\u0002\u0002\u040d\u040e\u0007w\u0002\u0002\u040e\u040f", + "\u0007k\u0002\u0002\u040f\u0410\u0007p\u0002\u0002\u0410\u0411\u0007", + "v\u0002\u0002\u0411\u0412\u00074\u0002\u0002\u0412\u0413\u00073\u0002", + "\u0002\u0413\u0438\u00078\u0002\u0002\u0414\u0415\u0007w\u0002\u0002", + "\u0415\u0416\u0007k\u0002\u0002\u0416\u0417\u0007p\u0002\u0002\u0417", + "\u0418\u0007v\u0002\u0002\u0418\u0419\u00074\u0002\u0002\u0419\u041a", + "\u00074\u0002\u0002\u041a\u0438\u00076\u0002\u0002\u041b\u041c\u0007", + "w\u0002\u0002\u041c\u041d\u0007k\u0002\u0002\u041d\u041e\u0007p\u0002", + "\u0002\u041e\u041f\u0007v\u0002\u0002\u041f\u0420\u00074\u0002\u0002", + "\u0420\u0421\u00075\u0002\u0002\u0421\u0438\u00074\u0002\u0002\u0422", + "\u0423\u0007w\u0002\u0002\u0423\u0424\u0007k\u0002\u0002\u0424\u0425", + "\u0007p\u0002\u0002\u0425\u0426\u0007v\u0002\u0002\u0426\u0427\u0007", + "4\u0002\u0002\u0427\u0428\u00076\u0002\u0002\u0428\u0438\u00072\u0002", + "\u0002\u0429\u042a\u0007w\u0002\u0002\u042a\u042b\u0007k\u0002\u0002", + "\u042b\u042c\u0007p\u0002\u0002\u042c\u042d\u0007v\u0002\u0002\u042d", + "\u042e\u00074\u0002\u0002\u042e\u042f\u00076\u0002\u0002\u042f\u0438", + "\u0007:\u0002\u0002\u0430\u0431\u0007w\u0002\u0002\u0431\u0432\u0007", + "k\u0002\u0002\u0432\u0433\u0007p\u0002\u0002\u0433\u0434\u0007v\u0002", + "\u0002\u0434\u0435\u00074\u0002\u0002\u0435\u0436\u00077\u0002\u0002", + "\u0436\u0438\u00078\u0002\u0002\u0437\u0360\u0003\u0002\u0002\u0002", + "\u0437\u0364\u0003\u0002\u0002\u0002\u0437\u0369\u0003\u0002\u0002\u0002", + "\u0437\u036f\u0003\u0002\u0002\u0002\u0437\u0375\u0003\u0002\u0002\u0002", + "\u0437\u037b\u0003\u0002\u0002\u0002\u0437\u0381\u0003\u0002\u0002\u0002", + "\u0437\u0387\u0003\u0002\u0002\u0002\u0437\u038d\u0003\u0002\u0002\u0002", + "\u0437\u0393\u0003\u0002\u0002\u0002\u0437\u0399\u0003\u0002\u0002\u0002", + "\u0437\u039f\u0003\u0002\u0002\u0002\u0437\u03a5\u0003\u0002\u0002\u0002", + "\u0437\u03ab\u0003\u0002\u0002\u0002\u0437\u03b2\u0003\u0002\u0002\u0002", + "\u0437\u03b9\u0003\u0002\u0002\u0002\u0437\u03c0\u0003\u0002\u0002\u0002", + "\u0437\u03c7\u0003\u0002\u0002\u0002\u0437\u03ce\u0003\u0002\u0002\u0002", + "\u0437\u03d5\u0003\u0002\u0002\u0002\u0437\u03dc\u0003\u0002\u0002\u0002", + "\u0437\u03e3\u0003\u0002\u0002\u0002\u0437\u03ea\u0003\u0002\u0002\u0002", + "\u0437\u03f1\u0003\u0002\u0002\u0002\u0437\u03f8\u0003\u0002\u0002\u0002", + "\u0437\u03ff\u0003\u0002\u0002\u0002\u0437\u0406\u0003\u0002\u0002\u0002", + "\u0437\u040d\u0003\u0002\u0002\u0002\u0437\u0414\u0003\u0002\u0002\u0002", + "\u0437\u041b\u0003\u0002\u0002\u0002\u0437\u0422\u0003\u0002\u0002\u0002", + "\u0437\u0429\u0003\u0002\u0002\u0002\u0437\u0430\u0003\u0002\u0002\u0002", + "\u0438\u00be\u0003\u0002\u0002\u0002\u0439\u043a\u0007d\u0002\u0002", + "\u043a\u043b\u0007{\u0002\u0002\u043b\u043c\u0007v\u0002\u0002\u043c", + "\u043d\u0007g\u0002\u0002\u043d\u0516\u0007u\u0002\u0002\u043e\u043f", + "\u0007d\u0002\u0002\u043f\u0440\u0007{\u0002\u0002\u0440\u0441\u0007", + "v\u0002\u0002\u0441\u0442\u0007g\u0002\u0002\u0442\u0443\u0007u\u0002", + "\u0002\u0443\u0516\u00073\u0002\u0002\u0444\u0445\u0007d\u0002\u0002", + "\u0445\u0446\u0007{\u0002\u0002\u0446\u0447\u0007v\u0002\u0002\u0447", + "\u0448\u0007g\u0002\u0002\u0448\u0449\u0007u\u0002\u0002\u0449\u0516", + "\u00074\u0002\u0002\u044a\u044b\u0007d\u0002\u0002\u044b\u044c\u0007", + "{\u0002\u0002\u044c\u044d\u0007v\u0002\u0002\u044d\u044e\u0007g\u0002", + "\u0002\u044e\u044f\u0007u\u0002\u0002\u044f\u0516\u00075\u0002\u0002", + "\u0450\u0451\u0007d\u0002\u0002\u0451\u0452\u0007{\u0002\u0002\u0452", + "\u0453\u0007v\u0002\u0002\u0453\u0454\u0007g\u0002\u0002\u0454\u0455", + "\u0007u\u0002\u0002\u0455\u0516\u00076\u0002\u0002\u0456\u0457\u0007", + "d\u0002\u0002\u0457\u0458\u0007{\u0002\u0002\u0458\u0459\u0007v\u0002", + "\u0002\u0459\u045a\u0007g\u0002\u0002\u045a\u045b\u0007u\u0002\u0002", + "\u045b\u0516\u00077\u0002\u0002\u045c\u045d\u0007d\u0002\u0002\u045d", + "\u045e\u0007{\u0002\u0002\u045e\u045f\u0007v\u0002\u0002\u045f\u0460", + "\u0007g\u0002\u0002\u0460\u0461\u0007u\u0002\u0002\u0461\u0516\u0007", + "8\u0002\u0002\u0462\u0463\u0007d\u0002\u0002\u0463\u0464\u0007{\u0002", + "\u0002\u0464\u0465\u0007v\u0002\u0002\u0465\u0466\u0007g\u0002\u0002", + "\u0466\u0467\u0007u\u0002\u0002\u0467\u0516\u00079\u0002\u0002\u0468", + "\u0469\u0007d\u0002\u0002\u0469\u046a\u0007{\u0002\u0002\u046a\u046b", + "\u0007v\u0002\u0002\u046b\u046c\u0007g\u0002\u0002\u046c\u046d\u0007", + "u\u0002\u0002\u046d\u0516\u0007:\u0002\u0002\u046e\u046f\u0007d\u0002", + "\u0002\u046f\u0470\u0007{\u0002\u0002\u0470\u0471\u0007v\u0002\u0002", + "\u0471\u0472\u0007g\u0002\u0002\u0472\u0473\u0007u\u0002\u0002\u0473", + "\u0516\u0007;\u0002\u0002\u0474\u0475\u0007d\u0002\u0002\u0475\u0476", + "\u0007{\u0002\u0002\u0476\u0477\u0007v\u0002\u0002\u0477\u0478\u0007", + "g\u0002\u0002\u0478\u0479\u0007u\u0002\u0002\u0479\u047a\u00073\u0002", + "\u0002\u047a\u0516\u00072\u0002\u0002\u047b\u047c\u0007d\u0002\u0002", + "\u047c\u047d\u0007{\u0002\u0002\u047d\u047e\u0007v\u0002\u0002\u047e", + "\u047f\u0007g\u0002\u0002\u047f\u0480\u0007u\u0002\u0002\u0480\u0481", + "\u00073\u0002\u0002\u0481\u0516\u00073\u0002\u0002\u0482\u0483\u0007", + "d\u0002\u0002\u0483\u0484\u0007{\u0002\u0002\u0484\u0485\u0007v\u0002", + "\u0002\u0485\u0486\u0007g\u0002\u0002\u0486\u0487\u0007u\u0002\u0002", + "\u0487\u0488\u00073\u0002\u0002\u0488\u0516\u00074\u0002\u0002\u0489", + "\u048a\u0007d\u0002\u0002\u048a\u048b\u0007{\u0002\u0002\u048b\u048c", + "\u0007v\u0002\u0002\u048c\u048d\u0007g\u0002\u0002\u048d\u048e\u0007", + "u\u0002\u0002\u048e\u048f\u00073\u0002\u0002\u048f\u0516\u00075\u0002", + "\u0002\u0490\u0491\u0007d\u0002\u0002\u0491\u0492\u0007{\u0002\u0002", + "\u0492\u0493\u0007v\u0002\u0002\u0493\u0494\u0007g\u0002\u0002\u0494", + "\u0495\u0007u\u0002\u0002\u0495\u0496\u00073\u0002\u0002\u0496\u0516", + "\u00076\u0002\u0002\u0497\u0498\u0007d\u0002\u0002\u0498\u0499\u0007", + "{\u0002\u0002\u0499\u049a\u0007v\u0002\u0002\u049a\u049b\u0007g\u0002", + "\u0002\u049b\u049c\u0007u\u0002\u0002\u049c\u049d\u00073\u0002\u0002", + "\u049d\u0516\u00077\u0002\u0002\u049e\u049f\u0007d\u0002\u0002\u049f", + "\u04a0\u0007{\u0002\u0002\u04a0\u04a1\u0007v\u0002\u0002\u04a1\u04a2", + "\u0007g\u0002\u0002\u04a2\u04a3\u0007u\u0002\u0002\u04a3\u04a4\u0007", + "3\u0002\u0002\u04a4\u0516\u00078\u0002\u0002\u04a5\u04a6\u0007d\u0002", + "\u0002\u04a6\u04a7\u0007{\u0002\u0002\u04a7\u04a8\u0007v\u0002\u0002", + "\u04a8\u04a9\u0007g\u0002\u0002\u04a9\u04aa\u0007u\u0002\u0002\u04aa", + "\u04ab\u00073\u0002\u0002\u04ab\u0516\u00079\u0002\u0002\u04ac\u04ad", + "\u0007d\u0002\u0002\u04ad\u04ae\u0007{\u0002\u0002\u04ae\u04af\u0007", + "v\u0002\u0002\u04af\u04b0\u0007g\u0002\u0002\u04b0\u04b1\u0007u\u0002", + "\u0002\u04b1\u04b2\u00073\u0002\u0002\u04b2\u0516\u0007:\u0002\u0002", + "\u04b3\u04b4\u0007d\u0002\u0002\u04b4\u04b5\u0007{\u0002\u0002\u04b5", + "\u04b6\u0007v\u0002\u0002\u04b6\u04b7\u0007g\u0002\u0002\u04b7\u04b8", + "\u0007u\u0002\u0002\u04b8\u04b9\u00073\u0002\u0002\u04b9\u0516\u0007", + ";\u0002\u0002\u04ba\u04bb\u0007d\u0002\u0002\u04bb\u04bc\u0007{\u0002", + "\u0002\u04bc\u04bd\u0007v\u0002\u0002\u04bd\u04be\u0007g\u0002\u0002", + "\u04be\u04bf\u0007u\u0002\u0002\u04bf\u04c0\u00074\u0002\u0002\u04c0", + "\u0516\u00072\u0002\u0002\u04c1\u04c2\u0007d\u0002\u0002\u04c2\u04c3", + "\u0007{\u0002\u0002\u04c3\u04c4\u0007v\u0002\u0002\u04c4\u04c5\u0007", + "g\u0002\u0002\u04c5\u04c6\u0007u\u0002\u0002\u04c6\u04c7\u00074\u0002", + "\u0002\u04c7\u0516\u00073\u0002\u0002\u04c8\u04c9\u0007d\u0002\u0002", + "\u04c9\u04ca\u0007{\u0002\u0002\u04ca\u04cb\u0007v\u0002\u0002\u04cb", + "\u04cc\u0007g\u0002\u0002\u04cc\u04cd\u0007u\u0002\u0002\u04cd\u04ce", + "\u00074\u0002\u0002\u04ce\u0516\u00074\u0002\u0002\u04cf\u04d0\u0007", + "d\u0002\u0002\u04d0\u04d1\u0007{\u0002\u0002\u04d1\u04d2\u0007v\u0002", + "\u0002\u04d2\u04d3\u0007g\u0002\u0002\u04d3\u04d4\u0007u\u0002\u0002", + "\u04d4\u04d5\u00074\u0002\u0002\u04d5\u0516\u00075\u0002\u0002\u04d6", + "\u04d7\u0007d\u0002\u0002\u04d7\u04d8\u0007{\u0002\u0002\u04d8\u04d9", + "\u0007v\u0002\u0002\u04d9\u04da\u0007g\u0002\u0002\u04da\u04db\u0007", + "u\u0002\u0002\u04db\u04dc\u00074\u0002\u0002\u04dc\u0516\u00076\u0002", + "\u0002\u04dd\u04de\u0007d\u0002\u0002\u04de\u04df\u0007{\u0002\u0002", + "\u04df\u04e0\u0007v\u0002\u0002\u04e0\u04e1\u0007g\u0002\u0002\u04e1", + "\u04e2\u0007u\u0002\u0002\u04e2\u04e3\u00074\u0002\u0002\u04e3\u0516", + "\u00077\u0002\u0002\u04e4\u04e5\u0007d\u0002\u0002\u04e5\u04e6\u0007", + "{\u0002\u0002\u04e6\u04e7\u0007v\u0002\u0002\u04e7\u04e8\u0007g\u0002", + "\u0002\u04e8\u04e9\u0007u\u0002\u0002\u04e9\u04ea\u00074\u0002\u0002", + "\u04ea\u0516\u00078\u0002\u0002\u04eb\u04ec\u0007d\u0002\u0002\u04ec", + "\u04ed\u0007{\u0002\u0002\u04ed\u04ee\u0007v\u0002\u0002\u04ee\u04ef", + "\u0007g\u0002\u0002\u04ef\u04f0\u0007u\u0002\u0002\u04f0\u04f1\u0007", + "4\u0002\u0002\u04f1\u0516\u00079\u0002\u0002\u04f2\u04f3\u0007d\u0002", + "\u0002\u04f3\u04f4\u0007{\u0002\u0002\u04f4\u04f5\u0007v\u0002\u0002", + "\u04f5\u04f6\u0007g\u0002\u0002\u04f6\u04f7\u0007u\u0002\u0002\u04f7", + "\u04f8\u00074\u0002\u0002\u04f8\u0516\u0007:\u0002\u0002\u04f9\u04fa", + "\u0007d\u0002\u0002\u04fa\u04fb\u0007{\u0002\u0002\u04fb\u04fc\u0007", + "v\u0002\u0002\u04fc\u04fd\u0007g\u0002\u0002\u04fd\u04fe\u0007u\u0002", + "\u0002\u04fe\u04ff\u00074\u0002\u0002\u04ff\u0516\u0007;\u0002\u0002", + "\u0500\u0501\u0007d\u0002\u0002\u0501\u0502\u0007{\u0002\u0002\u0502", + "\u0503\u0007v\u0002\u0002\u0503\u0504\u0007g\u0002\u0002\u0504\u0505", + "\u0007u\u0002\u0002\u0505\u0506\u00075\u0002\u0002\u0506\u0516\u0007", + "2\u0002\u0002\u0507\u0508\u0007d\u0002\u0002\u0508\u0509\u0007{\u0002", + "\u0002\u0509\u050a\u0007v\u0002\u0002\u050a\u050b\u0007g\u0002\u0002", + "\u050b\u050c\u0007u\u0002\u0002\u050c\u050d\u00075\u0002\u0002\u050d", + "\u0516\u00073\u0002\u0002\u050e\u050f\u0007d\u0002\u0002\u050f\u0510", + "\u0007{\u0002\u0002\u0510\u0511\u0007v\u0002\u0002\u0511\u0512\u0007", + "g\u0002\u0002\u0512\u0513\u0007u\u0002\u0002\u0513\u0514\u00075\u0002", + "\u0002\u0514\u0516\u00074\u0002\u0002\u0515\u0439\u0003\u0002\u0002", + "\u0002\u0515\u043e\u0003\u0002\u0002\u0002\u0515\u0444\u0003\u0002\u0002", + "\u0002\u0515\u044a\u0003\u0002\u0002\u0002\u0515\u0450\u0003\u0002\u0002", + "\u0002\u0515\u0456\u0003\u0002\u0002\u0002\u0515\u045c\u0003\u0002\u0002", + "\u0002\u0515\u0462\u0003\u0002\u0002\u0002\u0515\u0468\u0003\u0002\u0002", + "\u0002\u0515\u046e\u0003\u0002\u0002\u0002\u0515\u0474\u0003\u0002\u0002", + "\u0002\u0515\u047b\u0003\u0002\u0002\u0002\u0515\u0482\u0003\u0002\u0002", + "\u0002\u0515\u0489\u0003\u0002\u0002\u0002\u0515\u0490\u0003\u0002\u0002", + "\u0002\u0515\u0497\u0003\u0002\u0002\u0002\u0515\u049e\u0003\u0002\u0002", + "\u0002\u0515\u04a5\u0003\u0002\u0002\u0002\u0515\u04ac\u0003\u0002\u0002", + "\u0002\u0515\u04b3\u0003\u0002\u0002\u0002\u0515\u04ba\u0003\u0002\u0002", + "\u0002\u0515\u04c1\u0003\u0002\u0002\u0002\u0515\u04c8\u0003\u0002\u0002", + "\u0002\u0515\u04cf\u0003\u0002\u0002\u0002\u0515\u04d6\u0003\u0002\u0002", + "\u0002\u0515\u04dd\u0003\u0002\u0002\u0002\u0515\u04e4\u0003\u0002\u0002", + "\u0002\u0515\u04eb\u0003\u0002\u0002\u0002\u0515\u04f2\u0003\u0002\u0002", + "\u0002\u0515\u04f9\u0003\u0002\u0002\u0002\u0515\u0500\u0003\u0002\u0002", + "\u0002\u0515\u0507\u0003\u0002\u0002\u0002\u0515\u050e\u0003\u0002\u0002", + "\u0002\u0516\u00c0\u0003\u0002\u0002\u0002\u0517\u0518\u0007h\u0002", + "\u0002\u0518\u0519\u0007k\u0002\u0002\u0519\u051a\u0007z\u0002\u0002", + "\u051a\u051b\u0007g\u0002\u0002\u051b\u052e\u0007f\u0002\u0002\u051c", + "\u051d\u0007h\u0002\u0002\u051d\u051e\u0007k\u0002\u0002\u051e\u051f", + "\u0007z\u0002\u0002\u051f\u0520\u0007g\u0002\u0002\u0520\u0521\u0007", + "f\u0002\u0002\u0521\u0523\u0003\u0002\u0002\u0002\u0522\u0524\t\u0003", + "\u0002\u0002\u0523\u0522\u0003\u0002\u0002\u0002\u0524\u0525\u0003\u0002", + "\u0002\u0002\u0525\u0523\u0003\u0002\u0002\u0002\u0525\u0526\u0003\u0002", + "\u0002\u0002\u0526\u0527\u0003\u0002\u0002\u0002\u0527\u0529\u0007z", + "\u0002\u0002\u0528\u052a\t\u0003\u0002\u0002\u0529\u0528\u0003\u0002", + "\u0002\u0002\u052a\u052b\u0003\u0002\u0002\u0002\u052b\u0529\u0003\u0002", + "\u0002\u0002\u052b\u052c\u0003\u0002\u0002\u0002\u052c\u052e\u0003\u0002", + "\u0002\u0002\u052d\u0517\u0003\u0002\u0002\u0002\u052d\u051c\u0003\u0002", + "\u0002\u0002\u052e\u00c2\u0003\u0002\u0002\u0002\u052f\u0530\u0007w", + "\u0002\u0002\u0530\u0531\u0007h\u0002\u0002\u0531\u0532\u0007k\u0002", + "\u0002\u0532\u0533\u0007z\u0002\u0002\u0533\u0534\u0007g\u0002\u0002", + "\u0534\u0548\u0007f\u0002\u0002\u0535\u0536\u0007w\u0002\u0002\u0536", + "\u0537\u0007h\u0002\u0002\u0537\u0538\u0007k\u0002\u0002\u0538\u0539", + "\u0007z\u0002\u0002\u0539\u053a\u0007g\u0002\u0002\u053a\u053b\u0007", + "f\u0002\u0002\u053b\u053d\u0003\u0002\u0002\u0002\u053c\u053e\t\u0003", + "\u0002\u0002\u053d\u053c\u0003\u0002\u0002\u0002\u053e\u053f\u0003\u0002", + "\u0002\u0002\u053f\u053d\u0003\u0002\u0002\u0002\u053f\u0540\u0003\u0002", + "\u0002\u0002\u0540\u0541\u0003\u0002\u0002\u0002\u0541\u0543\u0007z", + "\u0002\u0002\u0542\u0544\t\u0003\u0002\u0002\u0543\u0542\u0003\u0002", + "\u0002\u0002\u0544\u0545\u0003\u0002\u0002\u0002\u0545\u0543\u0003\u0002", + "\u0002\u0002\u0545\u0546\u0003\u0002\u0002\u0002\u0546\u0548\u0003\u0002", + "\u0002\u0002\u0547\u052f\u0003\u0002\u0002\u0002\u0547\u0535\u0003\u0002", + "\u0002\u0002\u0548\u00c4\u0003\u0002\u0002\u0002\u0549\u054b\t\u0003", + "\u0002\u0002\u054a\u0549\u0003\u0002\u0002\u0002\u054b\u054c\u0003\u0002", + "\u0002\u0002\u054c\u054a\u0003\u0002\u0002\u0002\u054c\u054d\u0003\u0002", + "\u0002\u0002\u054d\u054e\u0003\u0002\u0002\u0002\u054e\u0550\u00070", + "\u0002\u0002\u054f\u0551\t\u0003\u0002\u0002\u0550\u054f\u0003\u0002", + "\u0002\u0002\u0551\u0552\u0003\u0002\u0002\u0002\u0552\u0550\u0003\u0002", + "\u0002\u0002\u0552\u0553\u0003\u0002\u0002\u0002\u0553\u0554\u0003\u0002", + "\u0002\u0002\u0554\u0556\u00070\u0002\u0002\u0555\u0557\t\u0003\u0002", + "\u0002\u0556\u0555\u0003\u0002\u0002\u0002\u0557\u0558\u0003\u0002\u0002", + "\u0002\u0558\u0556\u0003\u0002\u0002\u0002\u0558\u0559\u0003\u0002\u0002", + "\u0002\u0559\u00c6\u0003\u0002\u0002\u0002\u055a\u055b\u0007v\u0002", + "\u0002\u055b\u055c\u0007t\u0002\u0002\u055c\u055d\u0007w\u0002\u0002", + "\u055d\u0564\u0007g\u0002\u0002\u055e\u055f\u0007h\u0002\u0002\u055f", + "\u0560\u0007c\u0002\u0002\u0560\u0561\u0007n\u0002\u0002\u0561\u0562", + "\u0007u\u0002\u0002\u0562\u0564\u0007g\u0002\u0002\u0563\u055a\u0003", + "\u0002\u0002\u0002\u0563\u055e\u0003\u0002\u0002\u0002\u0564\u00c8\u0003", + "\u0002\u0002\u0002\u0565\u056c\u0005\u00cbf\u0002\u0566\u0568\u0005", + "\u00cbf\u0002\u0567\u0566\u0003\u0002\u0002\u0002\u0567\u0568\u0003", + "\u0002\u0002\u0002\u0568\u0569\u0003\u0002\u0002\u0002\u0569\u056a\u0007", + "0\u0002\u0002\u056a\u056c\u0005\u00cbf\u0002\u056b\u0565\u0003\u0002", + "\u0002\u0002\u056b\u0567\u0003\u0002\u0002\u0002\u056c\u056f\u0003\u0002", + "\u0002\u0002\u056d\u056e\t\u0004\u0002\u0002\u056e\u0570\u0005\u00cb", + "f\u0002\u056f\u056d\u0003\u0002\u0002\u0002\u056f\u0570\u0003\u0002", + "\u0002\u0002\u0570\u00ca\u0003\u0002\u0002\u0002\u0571\u0578\t\u0003", + "\u0002\u0002\u0572\u0574\u0007a\u0002\u0002\u0573\u0572\u0003\u0002", + "\u0002\u0002\u0573\u0574\u0003\u0002\u0002\u0002\u0574\u0575\u0003\u0002", + "\u0002\u0002\u0575\u0577\t\u0003\u0002\u0002\u0576\u0573\u0003\u0002", + "\u0002\u0002\u0577\u057a\u0003\u0002\u0002\u0002\u0578\u0576\u0003\u0002", + "\u0002\u0002\u0578\u0579\u0003\u0002\u0002\u0002\u0579\u00cc\u0003\u0002", + "\u0002\u0002\u057a\u0578\u0003\u0002\u0002\u0002\u057b\u057c\u00072", + "\u0002\u0002\u057c\u057d\t\u0005\u0002\u0002\u057d\u057e\u0005\u00cf", + "h\u0002\u057e\u00ce\u0003\u0002\u0002\u0002\u057f\u0586\u0005\u00d7", + "l\u0002\u0580\u0582\u0007a\u0002\u0002\u0581\u0580\u0003\u0002\u0002", + "\u0002\u0581\u0582\u0003\u0002\u0002\u0002\u0582\u0583\u0003\u0002\u0002", + "\u0002\u0583\u0585\u0005\u00d7l\u0002\u0584\u0581\u0003\u0002\u0002", + "\u0002\u0585\u0588\u0003\u0002\u0002\u0002\u0586\u0584\u0003\u0002\u0002", + "\u0002\u0586\u0587\u0003\u0002\u0002\u0002\u0587\u00d0\u0003\u0002\u0002", + "\u0002\u0588\u0586\u0003\u0002\u0002\u0002\u0589\u058a\u0007y\u0002", + "\u0002\u058a\u058b\u0007g\u0002\u0002\u058b\u05be\u0007k\u0002\u0002", + "\u058c\u058d\u0007u\u0002\u0002\u058d\u058e\u0007|\u0002\u0002\u058e", + "\u058f\u0007c\u0002\u0002\u058f\u0590\u0007d\u0002\u0002\u0590\u05be", + "\u0007q\u0002\u0002\u0591\u0592\u0007h\u0002\u0002\u0592\u0593\u0007", + "k\u0002\u0002\u0593\u0594\u0007p\u0002\u0002\u0594\u0595\u0007p\u0002", + "\u0002\u0595\u0596\u0007g\u0002\u0002\u0596\u05be\u0007{\u0002\u0002", + "\u0597\u0598\u0007g\u0002\u0002\u0598\u0599\u0007v\u0002\u0002\u0599", + "\u059a\u0007j\u0002\u0002\u059a\u059b\u0007g\u0002\u0002\u059b\u05be", + "\u0007t\u0002\u0002\u059c\u059d\u0007u\u0002\u0002\u059d\u059e\u0007", + "g\u0002\u0002\u059e\u059f\u0007e\u0002\u0002\u059f\u05a0\u0007q\u0002", + "\u0002\u05a0\u05a1\u0007p\u0002\u0002\u05a1\u05a2\u0007f\u0002\u0002", + "\u05a2\u05be\u0007u\u0002\u0002\u05a3\u05a4\u0007o\u0002\u0002\u05a4", + "\u05a5\u0007k\u0002\u0002\u05a5\u05a6\u0007p\u0002\u0002\u05a6\u05a7", + "\u0007w\u0002\u0002\u05a7\u05a8\u0007v\u0002\u0002\u05a8\u05a9\u0007", + "g\u0002\u0002\u05a9\u05be\u0007u\u0002\u0002\u05aa\u05ab\u0007j\u0002", + "\u0002\u05ab\u05ac\u0007q\u0002\u0002\u05ac\u05ad\u0007w\u0002\u0002", + "\u05ad\u05ae\u0007t\u0002\u0002\u05ae\u05be\u0007u\u0002\u0002\u05af", + "\u05b0\u0007f\u0002\u0002\u05b0\u05b1\u0007c\u0002\u0002\u05b1\u05b2", + "\u0007{\u0002\u0002\u05b2\u05be\u0007u\u0002\u0002\u05b3\u05b4\u0007", + "y\u0002\u0002\u05b4\u05b5\u0007g\u0002\u0002\u05b5\u05b6\u0007g\u0002", + "\u0002\u05b6\u05b7\u0007m\u0002\u0002\u05b7\u05be\u0007u\u0002\u0002", + "\u05b8\u05b9\u0007{\u0002\u0002\u05b9\u05ba\u0007g\u0002\u0002\u05ba", + "\u05bb\u0007c\u0002\u0002\u05bb\u05bc\u0007t\u0002\u0002\u05bc\u05be", + "\u0007u\u0002\u0002\u05bd\u0589\u0003\u0002\u0002\u0002\u05bd\u058c", + "\u0003\u0002\u0002\u0002\u05bd\u0591\u0003\u0002\u0002\u0002\u05bd\u0597", + "\u0003\u0002\u0002\u0002\u05bd\u059c\u0003\u0002\u0002\u0002\u05bd\u05a3", + "\u0003\u0002\u0002\u0002\u05bd\u05aa\u0003\u0002\u0002\u0002\u05bd\u05af", + "\u0003\u0002\u0002\u0002\u05bd\u05b3\u0003\u0002\u0002\u0002\u05bd\u05b8", + "\u0003\u0002\u0002\u0002\u05be\u00d2\u0003\u0002\u0002\u0002\u05bf\u05c0", + "\u0007j\u0002\u0002\u05c0\u05c1\u0007g\u0002\u0002\u05c1\u05c2\u0007", + "z\u0002\u0002\u05c2\u05d3\u0003\u0002\u0002\u0002\u05c3\u05c7\u0007", + "$\u0002\u0002\u05c4\u05c6\u0005\u00d5k\u0002\u05c5\u05c4\u0003\u0002", + "\u0002\u0002\u05c6\u05c9\u0003\u0002\u0002\u0002\u05c7\u05c5\u0003\u0002", + "\u0002\u0002\u05c7\u05c8\u0003\u0002\u0002\u0002\u05c8\u05ca\u0003\u0002", + "\u0002\u0002\u05c9\u05c7\u0003\u0002\u0002\u0002\u05ca\u05d4\u0007$", + "\u0002\u0002\u05cb\u05cf\u0007)\u0002\u0002\u05cc\u05ce\u0005\u00d5", + "k\u0002\u05cd\u05cc\u0003\u0002\u0002\u0002\u05ce\u05d1\u0003\u0002", + "\u0002\u0002\u05cf\u05cd\u0003\u0002\u0002\u0002\u05cf\u05d0\u0003\u0002", + "\u0002\u0002\u05d0\u05d2\u0003\u0002\u0002\u0002\u05d1\u05cf\u0003\u0002", + "\u0002\u0002\u05d2\u05d4\u0007)\u0002\u0002\u05d3\u05c3\u0003\u0002", + "\u0002\u0002\u05d3\u05cb\u0003\u0002\u0002\u0002\u05d4\u00d4\u0003\u0002", + "\u0002\u0002\u05d5\u05d6\u0005\u00d7l\u0002\u05d6\u05d7\u0005\u00d7", + "l\u0002\u05d7\u00d6\u0003\u0002\u0002\u0002\u05d8\u05d9\t\u0006\u0002", + "\u0002\u05d9\u00d8\u0003\u0002\u0002\u0002\u05da\u05db\u0007c\u0002", + "\u0002\u05db\u05dc\u0007d\u0002\u0002\u05dc\u05dd\u0007u\u0002\u0002", + "\u05dd\u05de\u0007v\u0002\u0002\u05de\u05df\u0007t\u0002\u0002\u05df", + "\u05e0\u0007c\u0002\u0002\u05e0\u05e1\u0007e\u0002\u0002\u05e1\u0633", + "\u0007v\u0002\u0002\u05e2\u05e3\u0007c\u0002\u0002\u05e3\u05e4\u0007", + "h\u0002\u0002\u05e4\u05e5\u0007v\u0002\u0002\u05e5\u05e6\u0007g\u0002", + "\u0002\u05e6\u0633\u0007t\u0002\u0002\u05e7\u05e8\u0007e\u0002\u0002", + "\u05e8\u05e9\u0007c\u0002\u0002\u05e9\u05ea\u0007u\u0002\u0002\u05ea", + "\u0633\u0007g\u0002\u0002\u05eb\u05ec\u0007e\u0002\u0002\u05ec\u05ed", + "\u0007c\u0002\u0002\u05ed\u05ee\u0007v\u0002\u0002\u05ee\u05ef\u0007", + "e\u0002\u0002\u05ef\u0633\u0007j\u0002\u0002\u05f0\u05f1\u0007f\u0002", + "\u0002\u05f1\u05f2\u0007g\u0002\u0002\u05f2\u05f3\u0007h\u0002\u0002", + "\u05f3\u05f4\u0007c\u0002\u0002\u05f4\u05f5\u0007w\u0002\u0002\u05f5", + "\u05f6\u0007n\u0002\u0002\u05f6\u0633\u0007v\u0002\u0002\u05f7\u05f8", + "\u0007h\u0002\u0002\u05f8\u05f9\u0007k\u0002\u0002\u05f9\u05fa\u0007", + "p\u0002\u0002\u05fa\u05fb\u0007c\u0002\u0002\u05fb\u0633\u0007n\u0002", + "\u0002\u05fc\u05fd\u0007k\u0002\u0002\u05fd\u0633\u0007p\u0002\u0002", + "\u05fe\u05ff\u0007k\u0002\u0002\u05ff\u0600\u0007p\u0002\u0002\u0600", + "\u0601\u0007n\u0002\u0002\u0601\u0602\u0007k\u0002\u0002\u0602\u0603", + "\u0007p\u0002\u0002\u0603\u0633\u0007g\u0002\u0002\u0604\u0605\u0007", + "n\u0002\u0002\u0605\u0606\u0007g\u0002\u0002\u0606\u0633\u0007v\u0002", + "\u0002\u0607\u0608\u0007o\u0002\u0002\u0608\u0609\u0007c\u0002\u0002", + "\u0609\u060a\u0007v\u0002\u0002\u060a\u060b\u0007e\u0002\u0002\u060b", + "\u0633\u0007j\u0002\u0002\u060c\u060d\u0007p\u0002\u0002\u060d\u060e", + "\u0007w\u0002\u0002\u060e\u060f\u0007n\u0002\u0002\u060f\u0633\u0007", + "n\u0002\u0002\u0610\u0611\u0007q\u0002\u0002\u0611\u0633\u0007h\u0002", + "\u0002\u0612\u0613\u0007t\u0002\u0002\u0613\u0614\u0007g\u0002\u0002", + "\u0614\u0615\u0007n\u0002\u0002\u0615\u0616\u0007q\u0002\u0002\u0616", + "\u0617\u0007e\u0002\u0002\u0617\u0618\u0007c\u0002\u0002\u0618\u0619", + "\u0007v\u0002\u0002\u0619\u061a\u0007c\u0002\u0002\u061a\u061b\u0007", + "d\u0002\u0002\u061b\u061c\u0007n\u0002\u0002\u061c\u0633\u0007g\u0002", + "\u0002\u061d\u061e\u0007u\u0002\u0002\u061e\u061f\u0007v\u0002\u0002", + "\u061f\u0620\u0007c\u0002\u0002\u0620\u0621\u0007v\u0002\u0002\u0621", + "\u0622\u0007k\u0002\u0002\u0622\u0633\u0007e\u0002\u0002\u0623\u0624", + "\u0007u\u0002\u0002\u0624\u0625\u0007y\u0002\u0002\u0625\u0626\u0007", + "k\u0002\u0002\u0626\u0627\u0007v\u0002\u0002\u0627\u0628\u0007e\u0002", + "\u0002\u0628\u0633\u0007j\u0002\u0002\u0629\u062a\u0007v\u0002\u0002", + "\u062a\u062b\u0007t\u0002\u0002\u062b\u0633\u0007{\u0002\u0002\u062c", + "\u062d\u0007v\u0002\u0002\u062d\u062e\u0007{\u0002\u0002\u062e\u062f", + "\u0007r\u0002\u0002\u062f\u0630\u0007g\u0002\u0002\u0630\u0631\u0007", + "q\u0002\u0002\u0631\u0633\u0007h\u0002\u0002\u0632\u05da\u0003\u0002", + "\u0002\u0002\u0632\u05e2\u0003\u0002\u0002\u0002\u0632\u05e7\u0003\u0002", + "\u0002\u0002\u0632\u05eb\u0003\u0002\u0002\u0002\u0632\u05f0\u0003\u0002", + "\u0002\u0002\u0632\u05f7\u0003\u0002\u0002\u0002\u0632\u05fc\u0003\u0002", + "\u0002\u0002\u0632\u05fe\u0003\u0002\u0002\u0002\u0632\u0604\u0003\u0002", + "\u0002\u0002\u0632\u0607\u0003\u0002\u0002\u0002\u0632\u060c\u0003\u0002", + "\u0002\u0002\u0632\u0610\u0003\u0002\u0002\u0002\u0632\u0612\u0003\u0002", + "\u0002\u0002\u0632\u061d\u0003\u0002\u0002\u0002\u0632\u0623\u0003\u0002", + "\u0002\u0002\u0632\u0629\u0003\u0002\u0002\u0002\u0632\u062c\u0003\u0002", + "\u0002\u0002\u0633\u00da\u0003\u0002\u0002\u0002\u0634\u0635\u0007c", + "\u0002\u0002\u0635\u0636\u0007p\u0002\u0002\u0636\u0637\u0007q\u0002", + "\u0002\u0637\u0638\u0007p\u0002\u0002\u0638\u0639\u0007{\u0002\u0002", + "\u0639\u063a\u0007o\u0002\u0002\u063a\u063b\u0007q\u0002\u0002\u063b", + "\u063c\u0007w\u0002\u0002\u063c\u063d\u0007u\u0002\u0002\u063d\u00dc", + "\u0003\u0002\u0002\u0002\u063e\u063f\u0007d\u0002\u0002\u063f\u0640", + "\u0007t\u0002\u0002\u0640\u0641\u0007g\u0002\u0002\u0641\u0642\u0007", + "c\u0002\u0002\u0642\u0643\u0007m\u0002\u0002\u0643\u00de\u0003\u0002", + "\u0002\u0002\u0644\u0645\u0007e\u0002\u0002\u0645\u0646\u0007q\u0002", + "\u0002\u0646\u0647\u0007p\u0002\u0002\u0647\u0648\u0007u\u0002\u0002", + "\u0648\u0649\u0007v\u0002\u0002\u0649\u064a\u0007c\u0002\u0002\u064a", + "\u064b\u0007p\u0002\u0002\u064b\u064c\u0007v\u0002\u0002\u064c\u00e0", + "\u0003\u0002\u0002\u0002\u064d\u064e\u0007e\u0002\u0002\u064e\u064f", + "\u0007q\u0002\u0002\u064f\u0650\u0007p\u0002\u0002\u0650\u0651\u0007", + "v\u0002\u0002\u0651\u0652\u0007k\u0002\u0002\u0652\u0653\u0007p\u0002", + "\u0002\u0653\u0654\u0007w\u0002\u0002\u0654\u0655\u0007g\u0002\u0002", + "\u0655\u00e2\u0003\u0002\u0002\u0002\u0656\u0657\u0007g\u0002\u0002", + "\u0657\u0658\u0007z\u0002\u0002\u0658\u0659\u0007v\u0002\u0002\u0659", + "\u065a\u0007g\u0002\u0002\u065a\u065b\u0007t\u0002\u0002\u065b\u065c", + "\u0007p\u0002\u0002\u065c\u065d\u0007c\u0002\u0002\u065d\u065e\u0007", + "n\u0002\u0002\u065e\u00e4\u0003\u0002\u0002\u0002\u065f\u0660\u0007", + "k\u0002\u0002\u0660\u0661\u0007p\u0002\u0002\u0661\u0662\u0007f\u0002", + "\u0002\u0662\u0663\u0007g\u0002\u0002\u0663\u0664\u0007z\u0002\u0002", + "\u0664\u0665\u0007g\u0002\u0002\u0665\u0666\u0007f\u0002\u0002\u0666", + "\u00e6\u0003\u0002\u0002\u0002\u0667\u0668\u0007k\u0002\u0002\u0668", + "\u0669\u0007p\u0002\u0002\u0669\u066a\u0007v\u0002\u0002\u066a\u066b", + "\u0007g\u0002\u0002\u066b\u066c\u0007t\u0002\u0002\u066c\u066d\u0007", + "p\u0002\u0002\u066d\u066e\u0007c\u0002\u0002\u066e\u066f\u0007n\u0002", + "\u0002\u066f\u00e8\u0003\u0002\u0002\u0002\u0670\u0671\u0007r\u0002", + "\u0002\u0671\u0672\u0007c\u0002\u0002\u0672\u0673\u0007{\u0002\u0002", + "\u0673\u0674\u0007c\u0002\u0002\u0674\u0675\u0007d\u0002\u0002\u0675", + "\u0676\u0007n\u0002\u0002\u0676\u0677\u0007g\u0002\u0002\u0677\u00ea", + "\u0003\u0002\u0002\u0002\u0678\u0679\u0007r\u0002\u0002\u0679\u067a", + "\u0007t\u0002\u0002\u067a\u067b\u0007k\u0002\u0002\u067b\u067c\u0007", + "x\u0002\u0002\u067c\u067d\u0007c\u0002\u0002\u067d\u067e\u0007v\u0002", + "\u0002\u067e\u067f\u0007g\u0002\u0002\u067f\u00ec\u0003\u0002\u0002", + "\u0002\u0680\u0681\u0007r\u0002\u0002\u0681\u0682\u0007w\u0002\u0002", + "\u0682\u0683\u0007d\u0002\u0002\u0683\u0684\u0007n\u0002\u0002\u0684", + "\u0685\u0007k\u0002\u0002\u0685\u0686\u0007e\u0002\u0002\u0686\u00ee", + "\u0003\u0002\u0002\u0002\u0687\u0688\u0007r\u0002\u0002\u0688\u0689", + "\u0007w\u0002\u0002\u0689\u068a\u0007t\u0002\u0002\u068a\u068b\u0007", + "g\u0002\u0002\u068b\u00f0\u0003\u0002\u0002\u0002\u068c\u068d\u0007", + "v\u0002\u0002\u068d\u068e\u0007{\u0002\u0002\u068e\u068f\u0007r\u0002", + "\u0002\u068f\u0690\u0007g\u0002\u0002\u0690\u00f2\u0003\u0002\u0002", + "\u0002\u0691\u0692\u0007x\u0002\u0002\u0692\u0693\u0007k\u0002\u0002", + "\u0693\u0694\u0007g\u0002\u0002\u0694\u0695\u0007y\u0002\u0002\u0695", + "\u00f4\u0003\u0002\u0002\u0002\u0696\u069a\u0005\u00f7|\u0002\u0697", + "\u0699\u0005\u00f9}\u0002\u0698\u0697\u0003\u0002\u0002\u0002\u0699", + "\u069c\u0003\u0002\u0002\u0002\u069a\u0698\u0003\u0002\u0002\u0002\u069a", + "\u069b\u0003\u0002\u0002\u0002\u069b\u00f6\u0003\u0002\u0002\u0002\u069c", + "\u069a\u0003\u0002\u0002\u0002\u069d\u069e\t\u0007\u0002\u0002\u069e", + "\u00f8\u0003\u0002\u0002\u0002\u069f\u06a0\t\b\u0002\u0002\u06a0\u00fa", + "\u0003\u0002\u0002\u0002\u06a1\u06a5\u0007$\u0002\u0002\u06a2\u06a4", + "\u0005\u00fd\u007f\u0002\u06a3\u06a2\u0003\u0002\u0002\u0002\u06a4\u06a7", + "\u0003\u0002\u0002\u0002\u06a5\u06a3\u0003\u0002\u0002\u0002\u06a5\u06a6", + "\u0003\u0002\u0002\u0002\u06a6\u06a8\u0003\u0002\u0002\u0002\u06a7\u06a5", + "\u0003\u0002\u0002\u0002\u06a8\u06b2\u0007$\u0002\u0002\u06a9\u06ad", + "\u0007)\u0002\u0002\u06aa\u06ac\u0005\u00ff\u0080\u0002\u06ab\u06aa", + "\u0003\u0002\u0002\u0002\u06ac\u06af\u0003\u0002\u0002\u0002\u06ad\u06ab", + "\u0003\u0002\u0002\u0002\u06ad\u06ae\u0003\u0002\u0002\u0002\u06ae\u06b0", + "\u0003\u0002\u0002\u0002\u06af\u06ad\u0003\u0002\u0002\u0002\u06b0\u06b2", + "\u0007)\u0002\u0002\u06b1\u06a1\u0003\u0002\u0002\u0002\u06b1\u06a9", + "\u0003\u0002\u0002\u0002\u06b2\u00fc\u0003\u0002\u0002\u0002\u06b3\u06b7", + "\n\t\u0002\u0002\u06b4\u06b5\u0007^\u0002\u0002\u06b5\u06b7\u000b\u0002", + "\u0002\u0002\u06b6\u06b3\u0003\u0002\u0002\u0002\u06b6\u06b4\u0003\u0002", + "\u0002\u0002\u06b7\u00fe\u0003\u0002\u0002\u0002\u06b8\u06bc\n\n\u0002", + "\u0002\u06b9\u06ba\u0007^\u0002\u0002\u06ba\u06bc\u000b\u0002\u0002", + "\u0002\u06bb\u06b8\u0003\u0002\u0002\u0002\u06bb\u06b9\u0003\u0002\u0002", + "\u0002\u06bc\u0100\u0003\u0002\u0002\u0002\u06bd\u06bf\t\u000b\u0002", + "\u0002\u06be\u06bd\u0003\u0002\u0002\u0002\u06bf\u06c0\u0003\u0002\u0002", + "\u0002\u06c0\u06be\u0003\u0002\u0002\u0002\u06c0\u06c1\u0003\u0002\u0002", + "\u0002\u06c1\u06c2\u0003\u0002\u0002\u0002\u06c2\u06c3\b\u0081\u0002", + "\u0002\u06c3\u0102\u0003\u0002\u0002\u0002\u06c4\u06c5\u00071\u0002", + "\u0002\u06c5\u06c6\u0007,\u0002\u0002\u06c6\u06ca\u0003\u0002\u0002", + "\u0002\u06c7\u06c9\u000b\u0002\u0002\u0002\u06c8\u06c7\u0003\u0002\u0002", + "\u0002\u06c9\u06cc\u0003\u0002\u0002\u0002\u06ca\u06cb\u0003\u0002\u0002", + "\u0002\u06ca\u06c8\u0003\u0002\u0002\u0002\u06cb\u06cd\u0003\u0002\u0002", + "\u0002\u06cc\u06ca\u0003\u0002\u0002\u0002\u06cd\u06ce\u0007,\u0002", + "\u0002\u06ce\u06cf\u00071\u0002\u0002\u06cf\u06d0\u0003\u0002\u0002", + "\u0002\u06d0\u06d1\b\u0082\u0003\u0002\u06d1\u0104\u0003\u0002\u0002", + "\u0002\u06d2\u06d3\u00071\u0002\u0002\u06d3\u06d4\u00071\u0002\u0002", + "\u06d4\u06d8\u0003\u0002\u0002\u0002\u06d5\u06d7\n\u0002\u0002\u0002", + "\u06d6\u06d5\u0003\u0002\u0002\u0002\u06d7\u06da\u0003\u0002\u0002\u0002", + "\u06d8\u06d6\u0003\u0002\u0002\u0002\u06d8\u06d9\u0003\u0002\u0002\u0002", + "\u06d9\u06db\u0003\u0002\u0002\u0002\u06da\u06d8\u0003\u0002\u0002\u0002", + "\u06db\u06dc\b\u0083\u0003\u0002\u06dc\u0106\u0003\u0002\u0002\u0002", + "(\u0002\u0293\u0299\u02a2\u035e\u0437\u0515\u0525\u052b\u052d\u053f", + "\u0545\u0547\u054c\u0552\u0558\u0563\u0567\u056b\u056f\u0573\u0578\u0581", + "\u0586\u05bd\u05c7\u05cf\u05d3\u0632\u069a\u06a5\u06ad\u06b1\u06b6\u06bb", + "\u06c0\u06ca\u06d8\u0004\b\u0002\u0002\u0002\u0003\u0002"].join(""); var atn = new antlr4.atn.ATNDeserializer().deserialize(serializedATN); @@ -1196,36 +1216,38 @@ SolidityLexer.T__86 = 87; SolidityLexer.T__87 = 88; SolidityLexer.T__88 = 89; SolidityLexer.T__89 = 90; -SolidityLexer.Int = 91; -SolidityLexer.Uint = 92; -SolidityLexer.Byte = 93; -SolidityLexer.Fixed = 94; -SolidityLexer.Ufixed = 95; -SolidityLexer.VersionLiteral = 96; -SolidityLexer.BooleanLiteral = 97; -SolidityLexer.DecimalNumber = 98; -SolidityLexer.HexNumber = 99; -SolidityLexer.NumberUnit = 100; -SolidityLexer.HexLiteral = 101; -SolidityLexer.ReservedKeyword = 102; -SolidityLexer.AnonymousKeyword = 103; -SolidityLexer.BreakKeyword = 104; -SolidityLexer.ConstantKeyword = 105; -SolidityLexer.ContinueKeyword = 106; -SolidityLexer.ExternalKeyword = 107; -SolidityLexer.IndexedKeyword = 108; -SolidityLexer.InternalKeyword = 109; -SolidityLexer.PayableKeyword = 110; -SolidityLexer.PrivateKeyword = 111; -SolidityLexer.PublicKeyword = 112; -SolidityLexer.PureKeyword = 113; -SolidityLexer.TypeKeyword = 114; -SolidityLexer.ViewKeyword = 115; -SolidityLexer.Identifier = 116; -SolidityLexer.StringLiteral = 117; -SolidityLexer.WS = 118; -SolidityLexer.COMMENT = 119; -SolidityLexer.LINE_COMMENT = 120; +SolidityLexer.NatSpecSingleLine = 91; +SolidityLexer.NatSpecMultiLine = 92; +SolidityLexer.Int = 93; +SolidityLexer.Uint = 94; +SolidityLexer.Byte = 95; +SolidityLexer.Fixed = 96; +SolidityLexer.Ufixed = 97; +SolidityLexer.VersionLiteral = 98; +SolidityLexer.BooleanLiteral = 99; +SolidityLexer.DecimalNumber = 100; +SolidityLexer.HexNumber = 101; +SolidityLexer.NumberUnit = 102; +SolidityLexer.HexLiteral = 103; +SolidityLexer.ReservedKeyword = 104; +SolidityLexer.AnonymousKeyword = 105; +SolidityLexer.BreakKeyword = 106; +SolidityLexer.ConstantKeyword = 107; +SolidityLexer.ContinueKeyword = 108; +SolidityLexer.ExternalKeyword = 109; +SolidityLexer.IndexedKeyword = 110; +SolidityLexer.InternalKeyword = 111; +SolidityLexer.PayableKeyword = 112; +SolidityLexer.PrivateKeyword = 113; +SolidityLexer.PublicKeyword = 114; +SolidityLexer.PureKeyword = 115; +SolidityLexer.TypeKeyword = 116; +SolidityLexer.ViewKeyword = 117; +SolidityLexer.Identifier = 118; +SolidityLexer.StringLiteral = 119; +SolidityLexer.WS = 120; +SolidityLexer.COMMENT = 121; +SolidityLexer.LINE_COMMENT = 122; SolidityLexer.prototype.channelNames = [ "DEFAULT_TOKEN_CHANNEL", "HIDDEN" ]; @@ -1257,11 +1279,11 @@ SolidityLexer.prototype.literalNames = [ null, "'pragma'", "';'", "'^'", "'switch'", "'case'", "'default'", "'->'", null, null, null, null, null, null, null, null, null, null, - null, null, "'anonymous'", "'break'", - "'constant'", "'continue'", "'external'", - "'indexed'", "'internal'", "'payable'", - "'private'", "'public'", "'pure'", - "'type'", "'view'" ]; + null, null, null, null, "'anonymous'", + "'break'", "'constant'", "'continue'", + "'external'", "'indexed'", "'internal'", + "'payable'", "'private'", "'public'", + "'pure'", "'type'", "'view'" ]; SolidityLexer.prototype.symbolicNames = [ null, null, null, null, null, null, null, null, null, null, @@ -1281,7 +1303,8 @@ SolidityLexer.prototype.symbolicNames = [ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, "Int", "Uint", "Byte", "Fixed", + null, "NatSpecSingleLine", "NatSpecMultiLine", + "Int", "Uint", "Byte", "Fixed", "Ufixed", "VersionLiteral", "BooleanLiteral", "DecimalNumber", "HexNumber", "NumberUnit", "HexLiteral", "ReservedKeyword", @@ -1316,6 +1339,7 @@ SolidityLexer.prototype.ruleNames = [ "T__0", "T__1", "T__2", "T__3", "T__4", "T__78", "T__79", "T__80", "T__81", "T__82", "T__83", "T__84", "T__85", "T__86", "T__87", "T__88", "T__89", + "NatSpecSingleLine", "NatSpecMultiLine", "Int", "Uint", "Byte", "Fixed", "Ufixed", "VersionLiteral", "BooleanLiteral", "DecimalNumber", "DecimalDigits", diff --git a/src/lib/SolidityLexer.tokens b/src/lib/SolidityLexer.tokens index 875e228..cae3439 100644 --- a/src/lib/SolidityLexer.tokens +++ b/src/lib/SolidityLexer.tokens @@ -88,36 +88,38 @@ 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 -TypeKeyword=114 -ViewKeyword=115 -Identifier=116 -StringLiteral=117 -WS=118 -COMMENT=119 -LINE_COMMENT=120 +NatSpecSingleLine=91 +NatSpecMultiLine=92 +Int=93 +Uint=94 +Byte=95 +Fixed=96 +Ufixed=97 +VersionLiteral=98 +BooleanLiteral=99 +DecimalNumber=100 +HexNumber=101 +NumberUnit=102 +HexLiteral=103 +ReservedKeyword=104 +AnonymousKeyword=105 +BreakKeyword=106 +ConstantKeyword=107 +ContinueKeyword=108 +ExternalKeyword=109 +IndexedKeyword=110 +InternalKeyword=111 +PayableKeyword=112 +PrivateKeyword=113 +PublicKeyword=114 +PureKeyword=115 +TypeKeyword=116 +ViewKeyword=117 +Identifier=118 +StringLiteral=119 +WS=120 +COMMENT=121 +LINE_COMMENT=122 'pragma'=1 ';'=2 '^'=3 @@ -208,16 +210,16 @@ LINE_COMMENT=120 '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 -'type'=114 -'view'=115 +'anonymous'=105 +'break'=106 +'constant'=107 +'continue'=108 +'external'=109 +'indexed'=110 +'internal'=111 +'payable'=112 +'private'=113 +'public'=114 +'pure'=115 +'type'=116 +'view'=117 diff --git a/src/lib/SolidityListener.js b/src/lib/SolidityListener.js index 9e4a3bb..7799750 100644 --- a/src/lib/SolidityListener.js +++ b/src/lib/SolidityListener.js @@ -92,6 +92,15 @@ SolidityListener.prototype.exitImportDirective = function(ctx) { }; +// Enter a parse tree produced by SolidityParser#natSpec. +SolidityListener.prototype.enterNatSpec = function(ctx) { +}; + +// Exit a parse tree produced by SolidityParser#natSpec. +SolidityListener.prototype.exitNatSpec = function(ctx) { +}; + + // Enter a parse tree produced by SolidityParser#contractDefinition. SolidityListener.prototype.enterContractDefinition = function(ctx) { }; diff --git a/src/lib/SolidityParser.js b/src/lib/SolidityParser.js index 0b0a812..a009f8b 100644 --- a/src/lib/SolidityParser.js +++ b/src/lib/SolidityParser.js @@ -6,7 +6,7 @@ var grammarFileName = "Solidity.g4"; var serializedATN = ["\u0003\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964", - "\u0003z\u03c6\u0004\u0002\t\u0002\u0004\u0003\t\u0003\u0004\u0004\t", + "\u0003|\u03cd\u0004\u0002\t\u0002\u0004\u0003\t\u0003\u0004\u0004\t", "\u0004\u0004\u0005\t\u0005\u0004\u0006\t\u0006\u0004\u0007\t\u0007\u0004", "\b\t\b\u0004\t\t\t\u0004\n\t\n\u0004\u000b\t\u000b\u0004\f\t\f\u0004", "\r\t\r\u0004\u000e\t\u000e\u0004\u000f\t\u000f\u0004\u0010\t\u0010\u0004", @@ -21,630 +21,637 @@ var serializedATN = ["\u0003\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964", ":\t:\u0004;\t;\u0004<\t<\u0004=\t=\u0004>\t>\u0004?\t?\u0004@\t@\u0004", "A\tA\u0004B\tB\u0004C\tC\u0004D\tD\u0004E\tE\u0004F\tF\u0004G\tG\u0004", "H\tH\u0004I\tI\u0004J\tJ\u0004K\tK\u0004L\tL\u0004M\tM\u0004N\tN\u0004", - "O\tO\u0004P\tP\u0004Q\tQ\u0004R\tR\u0004S\tS\u0004T\tT\u0004U\tU\u0003", - "\u0002\u0003\u0002\u0003\u0002\u0007\u0002\u00ae\n\u0002\f\u0002\u000e", - "\u0002\u00b1\u000b\u0002\u0003\u0002\u0003\u0002\u0003\u0003\u0003\u0003", - "\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0004\u0003\u0004\u0003\u0005", - "\u0003\u0005\u0005\u0005\u00be\n\u0005\u0003\u0006\u0003\u0006\u0005", - "\u0006\u00c2\n\u0006\u0003\u0007\u0003\u0007\u0003\b\u0005\b\u00c7\n", - "\b\u0003\b\u0003\b\u0003\t\u0003\t\u0003\t\u0005\t\u00ce\n\t\u0003\n", - "\u0003\n\u0003\n\u0003\n\u0005\n\u00d4\n\n\u0003\n\u0003\n\u0003\n\u0003", - "\n\u0005\n\u00da\n\n\u0003\n\u0003\n\u0005\n\u00de\n\n\u0003\n\u0003", - "\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0007\n\u00e8\n\n", - "\f\n\u000e\n\u00eb\u000b\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0005", - "\n\u00f2\n\n\u0003\u000b\u0003\u000b\u0003\u000b\u0003\u000b\u0003\u000b", - "\u0003\u000b\u0007\u000b\u00fa\n\u000b\f\u000b\u000e\u000b\u00fd\u000b", - "\u000b\u0005\u000b\u00ff\n\u000b\u0003\u000b\u0003\u000b\u0007\u000b", - "\u0103\n\u000b\f\u000b\u000e\u000b\u0106\u000b\u000b\u0003\u000b\u0003", - "\u000b\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0007\f\u010f\n\f\f\f", - "\u000e\f\u0112\u000b\f\u0003\f\u0003\f\u0005\f\u0116\n\f\u0003\r\u0003", - "\r\u0003\r\u0003\r\u0003\r\u0003\r\u0003\r\u0003\r\u0005\r\u0120\n\r", - "\u0003\u000e\u0003\u000e\u0007\u000e\u0124\n\u000e\f\u000e\u000e\u000e", - "\u0127\u000b\u000e\u0003\u000e\u0003\u000e\u0003\u000e\u0005\u000e\u012c", - "\n\u000e\u0003\u000e\u0003\u000e\u0003\u000f\u0003\u000f\u0003\u000f", - "\u0003\u000f\u0003\u000f\u0005\u000f\u0135\n\u000f\u0003\u000f\u0003", - "\u000f\u0003\u0010\u0003\u0010\u0003\u0010\u0003\u0010\u0003\u0010\u0003", - "\u0010\u0003\u0010\u0003\u0010\u0007\u0010\u0141\n\u0010\f\u0010\u000e", - "\u0010\u0144\u000b\u0010\u0005\u0010\u0146\n\u0010\u0003\u0010\u0003", - "\u0010\u0003\u0011\u0003\u0011\u0003\u0011\u0003\u0011\u0003\u0011\u0003", - "\u0012\u0003\u0012\u0003\u0012\u0005\u0012\u0152\n\u0012\u0003\u0012", - "\u0003\u0012\u0003\u0013\u0003\u0013\u0003\u0013\u0005\u0013\u0159\n", - "\u0013\u0003\u0013\u0005\u0013\u015c\n\u0013\u0003\u0014\u0003\u0014", - "\u0005\u0014\u0160\n\u0014\u0003\u0014\u0003\u0014\u0003\u0014\u0005", - "\u0014\u0165\n\u0014\u0003\u0014\u0003\u0014\u0005\u0014\u0169\n\u0014", - "\u0003\u0015\u0003\u0015\u0003\u0015\u0003\u0016\u0003\u0016\u0003\u0016", - "\u0003\u0016\u0003\u0016\u0003\u0016\u0007\u0016\u0174\n\u0016\f\u0016", - "\u000e\u0016\u0177\u000b\u0016\u0003\u0017\u0003\u0017\u0003\u0017\u0003", - "\u0017\u0005\u0017\u017d\n\u0017\u0003\u0017\u0003\u0017\u0003\u0018", - "\u0003\u0018\u0003\u0019\u0003\u0019\u0003\u0019\u0003\u0019\u0005\u0019", - "\u0187\n\u0019\u0003\u0019\u0003\u0019\u0007\u0019\u018b\n\u0019\f\u0019", - "\u000e\u0019\u018e\u000b\u0019\u0003\u0019\u0003\u0019\u0003\u001a\u0003", - "\u001a\u0003\u001a\u0003\u001a\u0007\u001a\u0196\n\u001a\f\u001a\u000e", - "\u001a\u0199\u000b\u001a\u0005\u001a\u019b\n\u001a\u0003\u001a\u0003", - "\u001a\u0003\u001b\u0003\u001b\u0005\u001b\u01a1\n\u001b\u0003\u001b", - "\u0005\u001b\u01a4\n\u001b\u0003\u001c\u0003\u001c\u0003\u001c\u0003", - "\u001c\u0007\u001c\u01aa\n\u001c\f\u001c\u000e\u001c\u01ad\u000b\u001c", - "\u0005\u001c\u01af\n\u001c\u0003\u001c\u0003\u001c\u0003\u001d\u0003", - "\u001d\u0005\u001d\u01b5\n\u001d\u0003\u001d\u0005\u001d\u01b8\n\u001d", - "\u0003\u001e\u0003\u001e\u0003\u001e\u0003\u001e\u0007\u001e\u01be\n", - "\u001e\f\u001e\u000e\u001e\u01c1\u000b\u001e\u0005\u001e\u01c3\n\u001e", - "\u0003\u001e\u0003\u001e\u0003\u001f\u0003\u001f\u0005\u001f\u01c9\n", - "\u001f\u0003 \u0003 \u0005 \u01cd\n \u0003 \u0003 \u0003!\u0003!\u0003", - "!\u0003!\u0003!\u0003!\u0003!\u0005!\u01d8\n!\u0003!\u0003!\u0003!\u0005", - "!\u01dd\n!\u0003!\u0007!\u01e0\n!\f!\u000e!\u01e3\u000b!\u0003\"\u0003", - "\"\u0003\"\u0007\"\u01e8\n\"\f\"\u000e\"\u01eb\u000b\"\u0003#\u0003", - "#\u0003#\u0003#\u0003#\u0003#\u0003#\u0003$\u0003$\u0003$\u0003$\u0003", - "$\u0007$\u01f9\n$\f$\u000e$\u01fc\u000b$\u0003$\u0003$\u0005$\u0200", - "\n$\u0003%\u0003%\u0003&\u0003&\u0003\'\u0003\'\u0007\'\u0208\n\'\f", - "\'\u000e\'\u020b\u000b\'\u0003\'\u0003\'\u0003(\u0003(\u0003(\u0003", - "(\u0003(\u0003(\u0003(\u0003(\u0003(\u0003(\u0003(\u0003(\u0005(\u021b", - "\n(\u0003)\u0003)\u0003)\u0003*\u0003*\u0003*\u0003*\u0003*\u0003*\u0003", - "*\u0005*\u0227\n*\u0003+\u0003+\u0003+\u0003+\u0003+\u0003+\u0003,\u0003", - ",\u0005,\u0231\n,\u0003-\u0003-\u0003-\u0003-\u0005-\u0237\n-\u0003", - "-\u0003-\u0005-\u023b\n-\u0003-\u0005-\u023e\n-\u0003-\u0003-\u0003", - "-\u0003.\u0003.\u0005.\u0245\n.\u0003.\u0003.\u0003/\u0003/\u0003/\u0003", - "/\u0003/\u0003/\u0003/\u0003/\u00030\u00030\u00030\u00031\u00031\u0003", - "1\u00032\u00032\u00052\u0259\n2\u00032\u00032\u00033\u00033\u00033\u0003", - "4\u00034\u00034\u00034\u00035\u00035\u00035\u00035\u00035\u00035\u0003", - "5\u00055\u026b\n5\u00035\u00035\u00055\u026f\n5\u00035\u00035\u0003", - "6\u00056\u0274\n6\u00036\u00036\u00056\u0278\n6\u00076\u027a\n6\f6\u000e", - "6\u027d\u000b6\u00037\u00037\u00057\u0281\n7\u00037\u00077\u0284\n7", - "\f7\u000e7\u0287\u000b7\u00037\u00057\u028a\n7\u00037\u00037\u00038", - "\u00038\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u0003", - "9\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u0005", - "9\u02a2\n9\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u0003", - "9\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u0003", - "9\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u0003", - "9\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u0003", - "9\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u0003", - "9\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00079\u02dd", - "\n9\f9\u000e9\u02e0\u000b9\u0003:\u0003:\u0003:\u0003:\u0003:\u0003", - ":\u0003:\u0005:\u02e9\n:\u0003:\u0003:\u0003:\u0003:\u0003:\u0005:\u02f0", - "\n:\u0005:\u02f2\n:\u0003;\u0003;\u0003;\u0007;\u02f7\n;\f;\u000e;\u02fa", - "\u000b;\u0003<\u0003<\u0003<\u0007<\u02ff\n<\f<\u000e<\u0302\u000b<", - "\u0003<\u0005<\u0305\n<\u0003=\u0003=\u0003=\u0003=\u0003>\u0003>\u0005", - ">\u030d\n>\u0003>\u0003>\u0005>\u0311\n>\u0005>\u0313\n>\u0003?\u0003", - "?\u0003?\u0003?\u0003?\u0003@\u0003@\u0007@\u031c\n@\f@\u000e@\u031f", - "\u000b@\u0003@\u0003@\u0003A\u0003A\u0003A\u0003A\u0003A\u0003A\u0003", - "A\u0003A\u0003A\u0003A\u0003A\u0003A\u0003A\u0003A\u0003A\u0003A\u0003", - "A\u0005A\u0334\nA\u0003B\u0003B\u0005B\u0338\nB\u0003C\u0003C\u0003", - "C\u0003C\u0005C\u033e\nC\u0003C\u0003C\u0005C\u0342\nC\u0003C\u0003", - "C\u0007C\u0346\nC\fC\u000eC\u0349\u000bC\u0003C\u0005C\u034c\nC\u0003", - "D\u0003D\u0003D\u0003D\u0005D\u0352\nD\u0003E\u0003E\u0003E\u0003E\u0003", - "F\u0003F\u0003F\u0003F\u0003F\u0005F\u035d\nF\u0003G\u0003G\u0003G\u0007", - "G\u0362\nG\fG\u000eG\u0365\u000bG\u0003H\u0003H\u0003H\u0003I\u0003", - "I\u0003I\u0003J\u0003J\u0003J\u0007J\u0370\nJ\fJ\u000eJ\u0373\u000b", - "J\u0003K\u0003K\u0003K\u0003K\u0003K\u0003K\u0005K\u037b\nK\u0003L\u0003", - "L\u0003L\u0003L\u0005L\u0381\nL\u0003L\u0003L\u0005L\u0385\nL\u0003", - "L\u0003L\u0003M\u0003M\u0003M\u0003N\u0003N\u0003N\u0005N\u038f\nN\u0003", - "N\u0003N\u0003N\u0005N\u0394\nN\u0003N\u0003N\u0003O\u0003O\u0003O\u0003", - "O\u0003P\u0003P\u0003Q\u0003Q\u0003Q\u0003Q\u0003R\u0003R\u0005R\u03a4", - "\nR\u0003R\u0003R\u0005R\u03a8\nR\u0007R\u03aa\nR\fR\u000eR\u03ad\u000b", - "R\u0003R\u0003R\u0003R\u0003R\u0003R\u0007R\u03b4\nR\fR\u000eR\u03b7", - "\u000bR\u0005R\u03b9\nR\u0003R\u0005R\u03bc\nR\u0003S\u0003S\u0003T", - "\u0003T\u0005T\u03c2\nT\u0003U\u0003U\u0003U\u0002\u0004@pV\u0002\u0004", - "\u0006\b\n\f\u000e\u0010\u0012\u0014\u0016\u0018\u001a\u001c\u001e ", - "\"$&(*,.02468:<>@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~\u0080\u0082\u0084", - "\u0086\u0088\u008a\u008c\u008e\u0090\u0092\u0094\u0096\u0098\u009a\u009c", - "\u009e\u00a0\u00a2\u00a4\u00a6\u00a8\u0002\u0013\u0003\u0002\u0005\u000b", - "\u0003\u0002\u0013\u0015\u0005\u0002kkooqr\u0003\u0002(*\u0006\u0002", - "kkppssuu\u0005\u0002$$36]a\u0003\u000278\u0003\u0002:;\u0003\u0002<", - "=\u0004\u0002\u000e\u000e@A\u0003\u0002BC\u0003\u0002\u0007\n\u0003", - "\u0002FG\u0004\u0002\u000b\u000bLU\u0005\u0002deggww\u0003\u0002de\u0005", - "\u0002\u000f\u000f**vv\u0002\u0420\u0002\u00af\u0003\u0002\u0002\u0002", - "\u0004\u00b4\u0003\u0002\u0002\u0002\u0006\u00b9\u0003\u0002\u0002\u0002", - "\b\u00bd\u0003\u0002\u0002\u0002\n\u00bf\u0003\u0002\u0002\u0002\f\u00c3", - "\u0003\u0002\u0002\u0002\u000e\u00c6\u0003\u0002\u0002\u0002\u0010\u00ca", - "\u0003\u0002\u0002\u0002\u0012\u00f1\u0003\u0002\u0002\u0002\u0014\u00f3", - "\u0003\u0002\u0002\u0002\u0016\u0109\u0003\u0002\u0002\u0002\u0018\u011f", - "\u0003\u0002\u0002\u0002\u001a\u0121\u0003\u0002\u0002\u0002\u001c\u012f", - "\u0003\u0002\u0002\u0002\u001e\u0138\u0003\u0002\u0002\u0002 \u0149", - "\u0003\u0002\u0002\u0002\"\u014e\u0003\u0002\u0002\u0002$\u0155\u0003", - "\u0002\u0002\u0002&\u015d\u0003\u0002\u0002\u0002(\u016a\u0003\u0002", - "\u0002\u0002*\u0175\u0003\u0002\u0002\u0002,\u0178\u0003\u0002\u0002", - "\u0002.\u0180\u0003\u0002\u0002\u00020\u0182\u0003\u0002\u0002\u0002", - "2\u0191\u0003\u0002\u0002\u00024\u019e\u0003\u0002\u0002\u00026\u01a5", - "\u0003\u0002\u0002\u00028\u01b2\u0003\u0002\u0002\u0002:\u01b9\u0003", - "\u0002\u0002\u0002<\u01c6\u0003\u0002\u0002\u0002>\u01ca\u0003\u0002", - "\u0002\u0002@\u01d7\u0003\u0002\u0002\u0002B\u01e4\u0003\u0002\u0002", - "\u0002D\u01ec\u0003\u0002\u0002\u0002F\u01f3\u0003\u0002\u0002\u0002", - "H\u0201\u0003\u0002\u0002\u0002J\u0203\u0003\u0002\u0002\u0002L\u0205", - "\u0003\u0002\u0002\u0002N\u021a\u0003\u0002\u0002\u0002P\u021c\u0003", - "\u0002\u0002\u0002R\u021f\u0003\u0002\u0002\u0002T\u0228\u0003\u0002", - "\u0002\u0002V\u0230\u0003\u0002\u0002\u0002X\u0232\u0003\u0002\u0002", - "\u0002Z\u0242\u0003\u0002\u0002\u0002\\\u0248\u0003\u0002\u0002\u0002", - "^\u0250\u0003\u0002\u0002\u0002`\u0253\u0003\u0002\u0002\u0002b\u0256", - "\u0003\u0002\u0002\u0002d\u025c\u0003\u0002\u0002\u0002f\u025f\u0003", - "\u0002\u0002\u0002h\u026a\u0003\u0002\u0002\u0002j\u0273\u0003\u0002", - "\u0002\u0002l\u027e\u0003\u0002\u0002\u0002n\u028d\u0003\u0002\u0002", - "\u0002p\u02a1\u0003\u0002\u0002\u0002r\u02f1\u0003\u0002\u0002\u0002", - "t\u02f3\u0003\u0002\u0002\u0002v\u02fb\u0003\u0002\u0002\u0002x\u0306", - "\u0003\u0002\u0002\u0002z\u0312\u0003\u0002\u0002\u0002|\u0314\u0003", - "\u0002\u0002\u0002~\u0319\u0003\u0002\u0002\u0002\u0080\u0333\u0003", - "\u0002\u0002\u0002\u0082\u0337\u0003\u0002\u0002\u0002\u0084\u033d\u0003", - "\u0002\u0002\u0002\u0086\u034d\u0003\u0002\u0002\u0002\u0088\u0353\u0003", - "\u0002\u0002\u0002\u008a\u035c\u0003\u0002\u0002\u0002\u008c\u035e\u0003", - "\u0002\u0002\u0002\u008e\u0366\u0003\u0002\u0002\u0002\u0090\u0369\u0003", - "\u0002\u0002\u0002\u0092\u036c\u0003\u0002\u0002\u0002\u0094\u037a\u0003", - "\u0002\u0002\u0002\u0096\u037c\u0003\u0002\u0002\u0002\u0098\u0388\u0003", - "\u0002\u0002\u0002\u009a\u038b\u0003\u0002\u0002\u0002\u009c\u0397\u0003", - "\u0002\u0002\u0002\u009e\u039b\u0003\u0002\u0002\u0002\u00a0\u039d\u0003", - "\u0002\u0002\u0002\u00a2\u03bb\u0003\u0002\u0002\u0002\u00a4\u03bd\u0003", - "\u0002\u0002\u0002\u00a6\u03bf\u0003\u0002\u0002\u0002\u00a8\u03c3\u0003", - "\u0002\u0002\u0002\u00aa\u00ae\u0005\u0004\u0003\u0002\u00ab\u00ae\u0005", - "\u0012\n\u0002\u00ac\u00ae\u0005\u0014\u000b\u0002\u00ad\u00aa\u0003", - "\u0002\u0002\u0002\u00ad\u00ab\u0003\u0002\u0002\u0002\u00ad\u00ac\u0003", - "\u0002\u0002\u0002\u00ae\u00b1\u0003\u0002\u0002\u0002\u00af\u00ad\u0003", - "\u0002\u0002\u0002\u00af\u00b0\u0003\u0002\u0002\u0002\u00b0\u00b2\u0003", - "\u0002\u0002\u0002\u00b1\u00af\u0003\u0002\u0002\u0002\u00b2\u00b3\u0007", - "\u0002\u0002\u0003\u00b3\u0003\u0003\u0002\u0002\u0002\u00b4\u00b5\u0007", - "\u0003\u0002\u0002\u00b5\u00b6\u0005\u0006\u0004\u0002\u00b6\u00b7\u0005", - "\b\u0005\u0002\u00b7\u00b8\u0007\u0004\u0002\u0002\u00b8\u0005\u0003", - "\u0002\u0002\u0002\u00b9\u00ba\u0005\u00a8U\u0002\u00ba\u0007\u0003", - "\u0002\u0002\u0002\u00bb\u00be\u0005\n\u0006\u0002\u00bc\u00be\u0005", - "p9\u0002\u00bd\u00bb\u0003\u0002\u0002\u0002\u00bd\u00bc\u0003\u0002", - "\u0002\u0002\u00be\t\u0003\u0002\u0002\u0002\u00bf\u00c1\u0005\u000e", - "\b\u0002\u00c0\u00c2\u0005\u000e\b\u0002\u00c1\u00c0\u0003\u0002\u0002", - "\u0002\u00c1\u00c2\u0003\u0002\u0002\u0002\u00c2\u000b\u0003\u0002\u0002", - "\u0002\u00c3\u00c4\t\u0002\u0002\u0002\u00c4\r\u0003\u0002\u0002\u0002", - "\u00c5\u00c7\u0005\f\u0007\u0002\u00c6\u00c5\u0003\u0002\u0002\u0002", - "\u00c6\u00c7\u0003\u0002\u0002\u0002\u00c7\u00c8\u0003\u0002\u0002\u0002", - "\u00c8\u00c9\u0007b\u0002\u0002\u00c9\u000f\u0003\u0002\u0002\u0002", - "\u00ca\u00cd\u0005\u00a8U\u0002\u00cb\u00cc\u0007\f\u0002\u0002\u00cc", - "\u00ce\u0005\u00a8U\u0002\u00cd\u00cb\u0003\u0002\u0002\u0002\u00cd", - "\u00ce\u0003\u0002\u0002\u0002\u00ce\u0011\u0003\u0002\u0002\u0002\u00cf", - "\u00d0\u0007\r\u0002\u0002\u00d0\u00d3\u0007w\u0002\u0002\u00d1\u00d2", - "\u0007\f\u0002\u0002\u00d2\u00d4\u0005\u00a8U\u0002\u00d3\u00d1\u0003", - "\u0002\u0002\u0002\u00d3\u00d4\u0003\u0002\u0002\u0002\u00d4\u00d5\u0003", - "\u0002\u0002\u0002\u00d5\u00f2\u0007\u0004\u0002\u0002\u00d6\u00d9\u0007", - "\r\u0002\u0002\u00d7\u00da\u0007\u000e\u0002\u0002\u00d8\u00da\u0005", - "\u00a8U\u0002\u00d9\u00d7\u0003\u0002\u0002\u0002\u00d9\u00d8\u0003", - "\u0002\u0002\u0002\u00da\u00dd\u0003\u0002\u0002\u0002\u00db\u00dc\u0007", - "\f\u0002\u0002\u00dc\u00de\u0005\u00a8U\u0002\u00dd\u00db\u0003\u0002", - "\u0002\u0002\u00dd\u00de\u0003\u0002\u0002\u0002\u00de\u00df\u0003\u0002", - "\u0002\u0002\u00df\u00e0\u0007\u000f\u0002\u0002\u00e0\u00e1\u0007w", - "\u0002\u0002\u00e1\u00f2\u0007\u0004\u0002\u0002\u00e2\u00e3\u0007\r", - "\u0002\u0002\u00e3\u00e4\u0007\u0010\u0002\u0002\u00e4\u00e9\u0005\u0010", - "\t\u0002\u00e5\u00e6\u0007\u0011\u0002\u0002\u00e6\u00e8\u0005\u0010", - "\t\u0002\u00e7\u00e5\u0003\u0002\u0002\u0002\u00e8\u00eb\u0003\u0002", - "\u0002\u0002\u00e9\u00e7\u0003\u0002\u0002\u0002\u00e9\u00ea\u0003\u0002", - "\u0002\u0002\u00ea\u00ec\u0003\u0002\u0002\u0002\u00eb\u00e9\u0003\u0002", - "\u0002\u0002\u00ec\u00ed\u0007\u0012\u0002\u0002\u00ed\u00ee\u0007\u000f", - "\u0002\u0002\u00ee\u00ef\u0007w\u0002\u0002\u00ef\u00f0\u0007\u0004", - "\u0002\u0002\u00f0\u00f2\u0003\u0002\u0002\u0002\u00f1\u00cf\u0003\u0002", - "\u0002\u0002\u00f1\u00d6\u0003\u0002\u0002\u0002\u00f1\u00e2\u0003\u0002", - "\u0002\u0002\u00f2\u0013\u0003\u0002\u0002\u0002\u00f3\u00f4\t\u0003", - "\u0002\u0002\u00f4\u00fe\u0005\u00a8U\u0002\u00f5\u00f6\u0007\u0016", - "\u0002\u0002\u00f6\u00fb\u0005\u0016\f\u0002\u00f7\u00f8\u0007\u0011", - "\u0002\u0002\u00f8\u00fa\u0005\u0016\f\u0002\u00f9\u00f7\u0003\u0002", - "\u0002\u0002\u00fa\u00fd\u0003\u0002\u0002\u0002\u00fb\u00f9\u0003\u0002", - "\u0002\u0002\u00fb\u00fc\u0003\u0002\u0002\u0002\u00fc\u00ff\u0003\u0002", - "\u0002\u0002\u00fd\u00fb\u0003\u0002\u0002\u0002\u00fe\u00f5\u0003\u0002", - "\u0002\u0002\u00fe\u00ff\u0003\u0002\u0002\u0002\u00ff\u0100\u0003\u0002", - "\u0002\u0002\u0100\u0104\u0007\u0010\u0002\u0002\u0101\u0103\u0005\u0018", - "\r\u0002\u0102\u0101\u0003\u0002\u0002\u0002\u0103\u0106\u0003\u0002", - "\u0002\u0002\u0104\u0102\u0003\u0002\u0002\u0002\u0104\u0105\u0003\u0002", - "\u0002\u0002\u0105\u0107\u0003\u0002\u0002\u0002\u0106\u0104\u0003\u0002", - "\u0002\u0002\u0107\u0108\u0007\u0012\u0002\u0002\u0108\u0015\u0003\u0002", - "\u0002\u0002\u0109\u0115\u0005B\"\u0002\u010a\u010b\u0007\u0017\u0002", - "\u0002\u010b\u0110\u0005p9\u0002\u010c\u010d\u0007\u0011\u0002\u0002", - "\u010d\u010f\u0005p9\u0002\u010e\u010c\u0003\u0002\u0002\u0002\u010f", - "\u0112\u0003\u0002\u0002\u0002\u0110\u010e\u0003\u0002\u0002\u0002\u0110", - "\u0111\u0003\u0002\u0002\u0002\u0111\u0113\u0003\u0002\u0002\u0002\u0112", - "\u0110\u0003\u0002\u0002\u0002\u0113\u0114\u0007\u0018\u0002\u0002\u0114", - "\u0116\u0003\u0002\u0002\u0002\u0115\u010a\u0003\u0002\u0002\u0002\u0115", - "\u0116\u0003\u0002\u0002\u0002\u0116\u0017\u0003\u0002\u0002\u0002\u0117", - "\u0120\u0005\u001a\u000e\u0002\u0118\u0120\u0005\u001c\u000f\u0002\u0119", - "\u0120\u0005\u001e\u0010\u0002\u011a\u0120\u0005 \u0011\u0002\u011b", - "\u0120\u0005\"\u0012\u0002\u011c\u0120\u0005&\u0014\u0002\u011d\u0120", - "\u0005,\u0017\u0002\u011e\u0120\u00050\u0019\u0002\u011f\u0117\u0003", - "\u0002\u0002\u0002\u011f\u0118\u0003\u0002\u0002\u0002\u011f\u0119\u0003", - "\u0002\u0002\u0002\u011f\u011a\u0003\u0002\u0002\u0002\u011f\u011b\u0003", - "\u0002\u0002\u0002\u011f\u011c\u0003\u0002\u0002\u0002\u011f\u011d\u0003", - "\u0002\u0002\u0002\u011f\u011e\u0003\u0002\u0002\u0002\u0120\u0019\u0003", - "\u0002\u0002\u0002\u0121\u0125\u0005@!\u0002\u0122\u0124\t\u0004\u0002", - "\u0002\u0123\u0122\u0003\u0002\u0002\u0002\u0124\u0127\u0003\u0002\u0002", - "\u0002\u0125\u0123\u0003\u0002\u0002\u0002\u0125\u0126\u0003\u0002\u0002", - "\u0002\u0126\u0128\u0003\u0002\u0002\u0002\u0127\u0125\u0003\u0002\u0002", - "\u0002\u0128\u012b\u0005\u00a8U\u0002\u0129\u012a\u0007\u000b\u0002", - "\u0002\u012a\u012c\u0005p9\u0002\u012b\u0129\u0003\u0002\u0002\u0002", - "\u012b\u012c\u0003\u0002\u0002\u0002\u012c\u012d\u0003\u0002\u0002\u0002", - "\u012d\u012e\u0007\u0004\u0002\u0002\u012e\u001b\u0003\u0002\u0002\u0002", - "\u012f\u0130\u0007\u0019\u0002\u0002\u0130\u0131\u0005\u00a8U\u0002", - "\u0131\u0134\u0007\u001a\u0002\u0002\u0132\u0135\u0007\u000e\u0002\u0002", - "\u0133\u0135\u0005@!\u0002\u0134\u0132\u0003\u0002\u0002\u0002\u0134", - "\u0133\u0003\u0002\u0002\u0002\u0135\u0136\u0003\u0002\u0002\u0002\u0136", - "\u0137\u0007\u0004\u0002\u0002\u0137\u001d\u0003\u0002\u0002\u0002\u0138", - "\u0139\u0007\u001b\u0002\u0002\u0139\u013a\u0005\u00a8U\u0002\u013a", - "\u0145\u0007\u0010\u0002\u0002\u013b\u013c\u0005> \u0002\u013c\u0142", - "\u0007\u0004\u0002\u0002\u013d\u013e\u0005> \u0002\u013e\u013f\u0007", - "\u0004\u0002\u0002\u013f\u0141\u0003\u0002\u0002\u0002\u0140\u013d\u0003", - "\u0002\u0002\u0002\u0141\u0144\u0003\u0002\u0002\u0002\u0142\u0140\u0003", - "\u0002\u0002\u0002\u0142\u0143\u0003\u0002\u0002\u0002\u0143\u0146\u0003", - "\u0002\u0002\u0002\u0144\u0142\u0003\u0002\u0002\u0002\u0145\u013b\u0003", - "\u0002\u0002\u0002\u0145\u0146\u0003\u0002\u0002\u0002\u0146\u0147\u0003", - "\u0002\u0002\u0002\u0147\u0148\u0007\u0012\u0002\u0002\u0148\u001f\u0003", - "\u0002\u0002\u0002\u0149\u014a\u0007\u001c\u0002\u0002\u014a\u014b\u0005", - "2\u001a\u0002\u014b\u014c\u0005*\u0016\u0002\u014c\u014d\u0005L\'\u0002", - "\u014d!\u0003\u0002\u0002\u0002\u014e\u014f\u0007\u001d\u0002\u0002", - "\u014f\u0151\u0005\u00a8U\u0002\u0150\u0152\u00052\u001a\u0002\u0151", - "\u0150\u0003\u0002\u0002\u0002\u0151\u0152\u0003\u0002\u0002\u0002\u0152", - "\u0153\u0003\u0002\u0002\u0002\u0153\u0154\u0005L\'\u0002\u0154#\u0003", - "\u0002\u0002\u0002\u0155\u015b\u0005\u00a8U\u0002\u0156\u0158\u0007", - "\u0017\u0002\u0002\u0157\u0159\u0005t;\u0002\u0158\u0157\u0003\u0002", - "\u0002\u0002\u0158\u0159\u0003\u0002\u0002\u0002\u0159\u015a\u0003\u0002", - "\u0002\u0002\u015a\u015c\u0007\u0018\u0002\u0002\u015b\u0156\u0003\u0002", - "\u0002\u0002\u015b\u015c\u0003\u0002\u0002\u0002\u015c%\u0003\u0002", - "\u0002\u0002\u015d\u015f\u0007\u001e\u0002\u0002\u015e\u0160\u0005\u00a8", - "U\u0002\u015f\u015e\u0003\u0002\u0002\u0002\u015f\u0160\u0003\u0002", - "\u0002\u0002\u0160\u0161\u0003\u0002\u0002\u0002\u0161\u0162\u00052", - "\u001a\u0002\u0162\u0164\u0005*\u0016\u0002\u0163\u0165\u0005(\u0015", - "\u0002\u0164\u0163\u0003\u0002\u0002\u0002\u0164\u0165\u0003\u0002\u0002", - "\u0002\u0165\u0168\u0003\u0002\u0002\u0002\u0166\u0169\u0007\u0004\u0002", - "\u0002\u0167\u0169\u0005L\'\u0002\u0168\u0166\u0003\u0002\u0002\u0002", - "\u0168\u0167\u0003\u0002\u0002\u0002\u0169\'\u0003\u0002\u0002\u0002", - "\u016a\u016b\u0007\u001f\u0002\u0002\u016b\u016c\u00052\u001a\u0002", - "\u016c)\u0003\u0002\u0002\u0002\u016d\u0174\u0005$\u0013\u0002\u016e", - "\u0174\u0005J&\u0002\u016f\u0174\u0007m\u0002\u0002\u0170\u0174\u0007", - "r\u0002\u0002\u0171\u0174\u0007o\u0002\u0002\u0172\u0174\u0007q\u0002", - "\u0002\u0173\u016d\u0003\u0002\u0002\u0002\u0173\u016e\u0003\u0002\u0002", - "\u0002\u0173\u016f\u0003\u0002\u0002\u0002\u0173\u0170\u0003\u0002\u0002", - "\u0002\u0173\u0171\u0003\u0002\u0002\u0002\u0173\u0172\u0003\u0002\u0002", - "\u0002\u0174\u0177\u0003\u0002\u0002\u0002\u0175\u0173\u0003\u0002\u0002", - "\u0002\u0175\u0176\u0003\u0002\u0002\u0002\u0176+\u0003\u0002\u0002", - "\u0002\u0177\u0175\u0003\u0002\u0002\u0002\u0178\u0179\u0007 \u0002", - "\u0002\u0179\u017a\u0005\u00a8U\u0002\u017a\u017c\u00056\u001c\u0002", - "\u017b\u017d\u0007i\u0002\u0002\u017c\u017b\u0003\u0002\u0002\u0002", - "\u017c\u017d\u0003\u0002\u0002\u0002\u017d\u017e\u0003\u0002\u0002\u0002", - "\u017e\u017f\u0007\u0004\u0002\u0002\u017f-\u0003\u0002\u0002\u0002", - "\u0180\u0181\u0005\u00a8U\u0002\u0181/\u0003\u0002\u0002\u0002\u0182", - "\u0183\u0007!\u0002\u0002\u0183\u0184\u0005\u00a8U\u0002\u0184\u0186", - "\u0007\u0010\u0002\u0002\u0185\u0187\u0005.\u0018\u0002\u0186\u0185", - "\u0003\u0002\u0002\u0002\u0186\u0187\u0003\u0002\u0002\u0002\u0187\u018c", - "\u0003\u0002\u0002\u0002\u0188\u0189\u0007\u0011\u0002\u0002\u0189\u018b", - "\u0005.\u0018\u0002\u018a\u0188\u0003\u0002\u0002\u0002\u018b\u018e", - "\u0003\u0002\u0002\u0002\u018c\u018a\u0003\u0002\u0002\u0002\u018c\u018d", - "\u0003\u0002\u0002\u0002\u018d\u018f\u0003\u0002\u0002\u0002\u018e\u018c", - "\u0003\u0002\u0002\u0002\u018f\u0190\u0007\u0012\u0002\u0002\u01901", - "\u0003\u0002\u0002\u0002\u0191\u019a\u0007\u0017\u0002\u0002\u0192\u0197", - "\u00054\u001b\u0002\u0193\u0194\u0007\u0011\u0002\u0002\u0194\u0196", - "\u00054\u001b\u0002\u0195\u0193\u0003\u0002\u0002\u0002\u0196\u0199", - "\u0003\u0002\u0002\u0002\u0197\u0195\u0003\u0002\u0002\u0002\u0197\u0198", - "\u0003\u0002\u0002\u0002\u0198\u019b\u0003\u0002\u0002\u0002\u0199\u0197", - "\u0003\u0002\u0002\u0002\u019a\u0192\u0003\u0002\u0002\u0002\u019a\u019b", - "\u0003\u0002\u0002\u0002\u019b\u019c\u0003\u0002\u0002\u0002\u019c\u019d", - "\u0007\u0018\u0002\u0002\u019d3\u0003\u0002\u0002\u0002\u019e\u01a0", - "\u0005@!\u0002\u019f\u01a1\u0005H%\u0002\u01a0\u019f\u0003\u0002\u0002", - "\u0002\u01a0\u01a1\u0003\u0002\u0002\u0002\u01a1\u01a3\u0003\u0002\u0002", - "\u0002\u01a2\u01a4\u0005\u00a8U\u0002\u01a3\u01a2\u0003\u0002\u0002", - "\u0002\u01a3\u01a4\u0003\u0002\u0002\u0002\u01a45\u0003\u0002\u0002", - "\u0002\u01a5\u01ae\u0007\u0017\u0002\u0002\u01a6\u01ab\u00058\u001d", - "\u0002\u01a7\u01a8\u0007\u0011\u0002\u0002\u01a8\u01aa\u00058\u001d", - "\u0002\u01a9\u01a7\u0003\u0002\u0002\u0002\u01aa\u01ad\u0003\u0002\u0002", - "\u0002\u01ab\u01a9\u0003\u0002\u0002\u0002\u01ab\u01ac\u0003\u0002\u0002", - "\u0002\u01ac\u01af\u0003\u0002\u0002\u0002\u01ad\u01ab\u0003\u0002\u0002", - "\u0002\u01ae\u01a6\u0003\u0002\u0002\u0002\u01ae\u01af\u0003\u0002\u0002", - "\u0002\u01af\u01b0\u0003\u0002\u0002\u0002\u01b0\u01b1\u0007\u0018\u0002", - "\u0002\u01b17\u0003\u0002\u0002\u0002\u01b2\u01b4\u0005@!\u0002\u01b3", - "\u01b5\u0007n\u0002\u0002\u01b4\u01b3\u0003\u0002\u0002\u0002\u01b4", - "\u01b5\u0003\u0002\u0002\u0002\u01b5\u01b7\u0003\u0002\u0002\u0002\u01b6", - "\u01b8\u0005\u00a8U\u0002\u01b7\u01b6\u0003\u0002\u0002\u0002\u01b7", - "\u01b8\u0003\u0002\u0002\u0002\u01b89\u0003\u0002\u0002\u0002\u01b9", - "\u01c2\u0007\u0017\u0002\u0002\u01ba\u01bf\u0005<\u001f\u0002\u01bb", - "\u01bc\u0007\u0011\u0002\u0002\u01bc\u01be\u0005<\u001f\u0002\u01bd", - "\u01bb\u0003\u0002\u0002\u0002\u01be\u01c1\u0003\u0002\u0002\u0002\u01bf", - "\u01bd\u0003\u0002\u0002\u0002\u01bf\u01c0\u0003\u0002\u0002\u0002\u01c0", - "\u01c3\u0003\u0002\u0002\u0002\u01c1\u01bf\u0003\u0002\u0002\u0002\u01c2", - "\u01ba\u0003\u0002\u0002\u0002\u01c2\u01c3\u0003\u0002\u0002\u0002\u01c3", - "\u01c4\u0003\u0002\u0002\u0002\u01c4\u01c5\u0007\u0018\u0002\u0002\u01c5", - ";\u0003\u0002\u0002\u0002\u01c6\u01c8\u0005@!\u0002\u01c7\u01c9\u0005", - "H%\u0002\u01c8\u01c7\u0003\u0002\u0002\u0002\u01c8\u01c9\u0003\u0002", - "\u0002\u0002\u01c9=\u0003\u0002\u0002\u0002\u01ca\u01cc\u0005@!\u0002", - "\u01cb\u01cd\u0005H%\u0002\u01cc\u01cb\u0003\u0002\u0002\u0002\u01cc", - "\u01cd\u0003\u0002\u0002\u0002\u01cd\u01ce\u0003\u0002\u0002\u0002\u01ce", - "\u01cf\u0005\u00a8U\u0002\u01cf?\u0003\u0002\u0002\u0002\u01d0\u01d1", - "\b!\u0001\u0002\u01d1\u01d8\u0005n8\u0002\u01d2\u01d8\u0005B\"\u0002", - "\u01d3\u01d8\u0005D#\u0002\u01d4\u01d8\u0005F$\u0002\u01d5\u01d6\u0007", - "$\u0002\u0002\u01d6\u01d8\u0007p\u0002\u0002\u01d7\u01d0\u0003\u0002", - "\u0002\u0002\u01d7\u01d2\u0003\u0002\u0002\u0002\u01d7\u01d3\u0003\u0002", - "\u0002\u0002\u01d7\u01d4\u0003\u0002\u0002\u0002\u01d7\u01d5\u0003\u0002", - "\u0002\u0002\u01d8\u01e1\u0003\u0002\u0002\u0002\u01d9\u01da\f\u0005", - "\u0002\u0002\u01da\u01dc\u0007\"\u0002\u0002\u01db\u01dd\u0005p9\u0002", - "\u01dc\u01db\u0003\u0002\u0002\u0002\u01dc\u01dd\u0003\u0002\u0002\u0002", - "\u01dd\u01de\u0003\u0002\u0002\u0002\u01de\u01e0\u0007#\u0002\u0002", - "\u01df\u01d9\u0003\u0002\u0002\u0002\u01e0\u01e3\u0003\u0002\u0002\u0002", - "\u01e1\u01df\u0003\u0002\u0002\u0002\u01e1\u01e2\u0003\u0002\u0002\u0002", - "\u01e2A\u0003\u0002\u0002\u0002\u01e3\u01e1\u0003\u0002\u0002\u0002", - "\u01e4\u01e9\u0005\u00a8U\u0002\u01e5\u01e6\u0007%\u0002\u0002\u01e6", - "\u01e8\u0005\u00a8U\u0002\u01e7\u01e5\u0003\u0002\u0002\u0002\u01e8", - "\u01eb\u0003\u0002\u0002\u0002\u01e9\u01e7\u0003\u0002\u0002\u0002\u01e9", - "\u01ea\u0003\u0002\u0002\u0002\u01eaC\u0003\u0002\u0002\u0002\u01eb", - "\u01e9\u0003\u0002\u0002\u0002\u01ec\u01ed\u0007&\u0002\u0002\u01ed", - "\u01ee\u0007\u0017\u0002\u0002\u01ee\u01ef\u0005n8\u0002\u01ef\u01f0", - "\u0007\'\u0002\u0002\u01f0\u01f1\u0005@!\u0002\u01f1\u01f2\u0007\u0018", - "\u0002\u0002\u01f2E\u0003\u0002\u0002\u0002\u01f3\u01f4\u0007\u001e", - "\u0002\u0002\u01f4\u01fa\u0005:\u001e\u0002\u01f5\u01f9\u0007o\u0002", - "\u0002\u01f6\u01f9\u0007m\u0002\u0002\u01f7\u01f9\u0005J&\u0002\u01f8", - "\u01f5\u0003\u0002\u0002\u0002\u01f8\u01f6\u0003\u0002\u0002\u0002\u01f8", - "\u01f7\u0003\u0002\u0002\u0002\u01f9\u01fc\u0003\u0002\u0002\u0002\u01fa", - "\u01f8\u0003\u0002\u0002\u0002\u01fa\u01fb\u0003\u0002\u0002\u0002\u01fb", - "\u01ff\u0003\u0002\u0002\u0002\u01fc\u01fa\u0003\u0002\u0002\u0002\u01fd", - "\u01fe\u0007\u001f\u0002\u0002\u01fe\u0200\u0005:\u001e\u0002\u01ff", - "\u01fd\u0003\u0002\u0002\u0002\u01ff\u0200\u0003\u0002\u0002\u0002\u0200", - "G\u0003\u0002\u0002\u0002\u0201\u0202\t\u0005\u0002\u0002\u0202I\u0003", - "\u0002\u0002\u0002\u0203\u0204\t\u0006\u0002\u0002\u0204K\u0003\u0002", - "\u0002\u0002\u0205\u0209\u0007\u0010\u0002\u0002\u0206\u0208\u0005N", - "(\u0002\u0207\u0206\u0003\u0002\u0002\u0002\u0208\u020b\u0003\u0002", - "\u0002\u0002\u0209\u0207\u0003\u0002\u0002\u0002\u0209\u020a\u0003\u0002", - "\u0002\u0002\u020a\u020c\u0003\u0002\u0002\u0002\u020b\u0209\u0003\u0002", - "\u0002\u0002\u020c\u020d\u0007\u0012\u0002\u0002\u020dM\u0003\u0002", - "\u0002\u0002\u020e\u021b\u0005R*\u0002\u020f\u021b\u0005T+\u0002\u0210", - "\u021b\u0005X-\u0002\u0211\u021b\u0005L\'\u0002\u0212\u021b\u0005Z.", - "\u0002\u0213\u021b\u0005\\/\u0002\u0214\u021b\u0005^0\u0002\u0215\u021b", - "\u0005`1\u0002\u0216\u021b\u0005b2\u0002\u0217\u021b\u0005d3\u0002\u0218", - "\u021b\u0005f4\u0002\u0219\u021b\u0005V,\u0002\u021a\u020e\u0003\u0002", - "\u0002\u0002\u021a\u020f\u0003\u0002\u0002\u0002\u021a\u0210\u0003\u0002", - "\u0002\u0002\u021a\u0211\u0003\u0002\u0002\u0002\u021a\u0212\u0003\u0002", - "\u0002\u0002\u021a\u0213\u0003\u0002\u0002\u0002\u021a\u0214\u0003\u0002", - "\u0002\u0002\u021a\u0215\u0003\u0002\u0002\u0002\u021a\u0216\u0003\u0002", - "\u0002\u0002\u021a\u0217\u0003\u0002\u0002\u0002\u021a\u0218\u0003\u0002", - "\u0002\u0002\u021a\u0219\u0003\u0002\u0002\u0002\u021bO\u0003\u0002", - "\u0002\u0002\u021c\u021d\u0005p9\u0002\u021d\u021e\u0007\u0004\u0002", - "\u0002\u021eQ\u0003\u0002\u0002\u0002\u021f\u0220\u0007+\u0002\u0002", - "\u0220\u0221\u0007\u0017\u0002\u0002\u0221\u0222\u0005p9\u0002\u0222", - "\u0223\u0007\u0018\u0002\u0002\u0223\u0226\u0005N(\u0002\u0224\u0225", - "\u0007,\u0002\u0002\u0225\u0227\u0005N(\u0002\u0226\u0224\u0003\u0002", - "\u0002\u0002\u0226\u0227\u0003\u0002\u0002\u0002\u0227S\u0003\u0002", - "\u0002\u0002\u0228\u0229\u0007-\u0002\u0002\u0229\u022a\u0007\u0017", - "\u0002\u0002\u022a\u022b\u0005p9\u0002\u022b\u022c\u0007\u0018\u0002", - "\u0002\u022c\u022d\u0005N(\u0002\u022dU\u0003\u0002\u0002\u0002\u022e", - "\u0231\u0005h5\u0002\u022f\u0231\u0005P)\u0002\u0230\u022e\u0003\u0002", - "\u0002\u0002\u0230\u022f\u0003\u0002\u0002\u0002\u0231W\u0003\u0002", - "\u0002\u0002\u0232\u0233\u0007\u001a\u0002\u0002\u0233\u0236\u0007\u0017", - "\u0002\u0002\u0234\u0237\u0005V,\u0002\u0235\u0237\u0007\u0004\u0002", - "\u0002\u0236\u0234\u0003\u0002\u0002\u0002\u0236\u0235\u0003\u0002\u0002", - "\u0002\u0237\u023a\u0003\u0002\u0002\u0002\u0238\u023b\u0005P)\u0002", - "\u0239\u023b\u0007\u0004\u0002\u0002\u023a\u0238\u0003\u0002\u0002\u0002", - "\u023a\u0239\u0003\u0002\u0002\u0002\u023b\u023d\u0003\u0002\u0002\u0002", - "\u023c\u023e\u0005p9\u0002\u023d\u023c\u0003\u0002\u0002\u0002\u023d", - "\u023e\u0003\u0002\u0002\u0002\u023e\u023f\u0003\u0002\u0002\u0002\u023f", - "\u0240\u0007\u0018\u0002\u0002\u0240\u0241\u0005N(\u0002\u0241Y\u0003", - "\u0002\u0002\u0002\u0242\u0244\u0007.\u0002\u0002\u0243\u0245\u0007", - "w\u0002\u0002\u0244\u0243\u0003\u0002\u0002\u0002\u0244\u0245\u0003", - "\u0002\u0002\u0002\u0245\u0246\u0003\u0002\u0002\u0002\u0246\u0247\u0005", - "~@\u0002\u0247[\u0003\u0002\u0002\u0002\u0248\u0249\u0007/\u0002\u0002", - "\u0249\u024a\u0005N(\u0002\u024a\u024b\u0007-\u0002\u0002\u024b\u024c", - "\u0007\u0017\u0002\u0002\u024c\u024d\u0005p9\u0002\u024d\u024e\u0007", - "\u0018\u0002\u0002\u024e\u024f\u0007\u0004\u0002\u0002\u024f]\u0003", - "\u0002\u0002\u0002\u0250\u0251\u0007l\u0002\u0002\u0251\u0252\u0007", - "\u0004\u0002\u0002\u0252_\u0003\u0002\u0002\u0002\u0253\u0254\u0007", - "j\u0002\u0002\u0254\u0255\u0007\u0004\u0002\u0002\u0255a\u0003\u0002", - "\u0002\u0002\u0256\u0258\u00070\u0002\u0002\u0257\u0259\u0005p9\u0002", - "\u0258\u0257\u0003\u0002\u0002\u0002\u0258\u0259\u0003\u0002\u0002\u0002", - "\u0259\u025a\u0003\u0002\u0002\u0002\u025a\u025b\u0007\u0004\u0002\u0002", - "\u025bc\u0003\u0002\u0002\u0002\u025c\u025d\u00071\u0002\u0002\u025d", - "\u025e\u0007\u0004\u0002\u0002\u025ee\u0003\u0002\u0002\u0002\u025f", - "\u0260\u00072\u0002\u0002\u0260\u0261\u0005|?\u0002\u0261\u0262\u0007", - "\u0004\u0002\u0002\u0262g\u0003\u0002\u0002\u0002\u0263\u0264\u0007", - "3\u0002\u0002\u0264\u026b\u0005l7\u0002\u0265\u026b\u0005> \u0002\u0266", - "\u0267\u0007\u0017\u0002\u0002\u0267\u0268\u0005j6\u0002\u0268\u0269", - "\u0007\u0018\u0002\u0002\u0269\u026b\u0003\u0002\u0002\u0002\u026a\u0263", - "\u0003\u0002\u0002\u0002\u026a\u0265\u0003\u0002\u0002\u0002\u026a\u0266", - "\u0003\u0002\u0002\u0002\u026b\u026e\u0003\u0002\u0002\u0002\u026c\u026d", - "\u0007\u000b\u0002\u0002\u026d\u026f\u0005p9\u0002\u026e\u026c\u0003", - "\u0002\u0002\u0002\u026e\u026f\u0003\u0002\u0002\u0002\u026f\u0270\u0003", - "\u0002\u0002\u0002\u0270\u0271\u0007\u0004\u0002\u0002\u0271i\u0003", - "\u0002\u0002\u0002\u0272\u0274\u0005> \u0002\u0273\u0272\u0003\u0002", - "\u0002\u0002\u0273\u0274\u0003\u0002\u0002\u0002\u0274\u027b\u0003\u0002", - "\u0002\u0002\u0275\u0277\u0007\u0011\u0002\u0002\u0276\u0278\u0005>", - " \u0002\u0277\u0276\u0003\u0002\u0002\u0002\u0277\u0278\u0003\u0002", - "\u0002\u0002\u0278\u027a\u0003\u0002\u0002\u0002\u0279\u0275\u0003\u0002", - "\u0002\u0002\u027a\u027d\u0003\u0002\u0002\u0002\u027b\u0279\u0003\u0002", - "\u0002\u0002\u027b\u027c\u0003\u0002\u0002\u0002\u027ck\u0003\u0002", - "\u0002\u0002\u027d\u027b\u0003\u0002\u0002\u0002\u027e\u0285\u0007\u0017", - "\u0002\u0002\u027f\u0281\u0005\u00a8U\u0002\u0280\u027f\u0003\u0002", - "\u0002\u0002\u0280\u0281\u0003\u0002\u0002\u0002\u0281\u0282\u0003\u0002", - "\u0002\u0002\u0282\u0284\u0007\u0011\u0002\u0002\u0283\u0280\u0003\u0002", - "\u0002\u0002\u0284\u0287\u0003\u0002\u0002\u0002\u0285\u0283\u0003\u0002", - "\u0002\u0002\u0285\u0286\u0003\u0002\u0002\u0002\u0286\u0289\u0003\u0002", - "\u0002\u0002\u0287\u0285\u0003\u0002\u0002\u0002\u0288\u028a\u0005\u00a8", - "U\u0002\u0289\u0288\u0003\u0002\u0002\u0002\u0289\u028a\u0003\u0002", - "\u0002\u0002\u028a\u028b\u0003\u0002\u0002\u0002\u028b\u028c\u0007\u0018", - "\u0002\u0002\u028cm\u0003\u0002\u0002\u0002\u028d\u028e\t\u0007\u0002", - "\u0002\u028eo\u0003\u0002\u0002\u0002\u028f\u0290\b9\u0001\u0002\u0290", - "\u0291\u00079\u0002\u0002\u0291\u02a2\u0005@!\u0002\u0292\u0293\u0007", - "\u0017\u0002\u0002\u0293\u0294\u0005p9\u0002\u0294\u0295\u0007\u0018", - "\u0002\u0002\u0295\u02a2\u0003\u0002\u0002\u0002\u0296\u0297\t\b\u0002", - "\u0002\u0297\u02a2\u0005p9\u0015\u0298\u0299\t\t\u0002\u0002\u0299\u02a2", - "\u0005p9\u0014\u029a\u029b\t\n\u0002\u0002\u029b\u02a2\u0005p9\u0013", - "\u029c\u029d\u0007>\u0002\u0002\u029d\u02a2\u0005p9\u0012\u029e\u029f", - "\u0007\u0006\u0002\u0002\u029f\u02a2\u0005p9\u0011\u02a0\u02a2\u0005", - "r:\u0002\u02a1\u028f\u0003\u0002\u0002\u0002\u02a1\u0292\u0003\u0002", - "\u0002\u0002\u02a1\u0296\u0003\u0002\u0002\u0002\u02a1\u0298\u0003\u0002", - "\u0002\u0002\u02a1\u029a\u0003\u0002\u0002\u0002\u02a1\u029c\u0003\u0002", - "\u0002\u0002\u02a1\u029e\u0003\u0002\u0002\u0002\u02a1\u02a0\u0003\u0002", - "\u0002\u0002\u02a2\u02de\u0003\u0002\u0002\u0002\u02a3\u02a4\f\u0010", - "\u0002\u0002\u02a4\u02a5\u0007?\u0002\u0002\u02a5\u02dd\u0005p9\u0011", - "\u02a6\u02a7\f\u000f\u0002\u0002\u02a7\u02a8\t\u000b\u0002\u0002\u02a8", - "\u02dd\u0005p9\u0010\u02a9\u02aa\f\u000e\u0002\u0002\u02aa\u02ab\t\t", - "\u0002\u0002\u02ab\u02dd\u0005p9\u000f\u02ac\u02ad\f\r\u0002\u0002\u02ad", - "\u02ae\t\f\u0002\u0002\u02ae\u02dd\u0005p9\u000e\u02af\u02b0\f\f\u0002", - "\u0002\u02b0\u02b1\u0007D\u0002\u0002\u02b1\u02dd\u0005p9\r\u02b2\u02b3", - "\f\u000b\u0002\u0002\u02b3\u02b4\u0007\u0005\u0002\u0002\u02b4\u02dd", - "\u0005p9\f\u02b5\u02b6\f\n\u0002\u0002\u02b6\u02b7\u0007E\u0002\u0002", - "\u02b7\u02dd\u0005p9\u000b\u02b8\u02b9\f\t\u0002\u0002\u02b9\u02ba\t", - "\r\u0002\u0002\u02ba\u02dd\u0005p9\n\u02bb\u02bc\f\b\u0002\u0002\u02bc", - "\u02bd\t\u000e\u0002\u0002\u02bd\u02dd\u0005p9\t\u02be\u02bf\f\u0007", - "\u0002\u0002\u02bf\u02c0\u0007H\u0002\u0002\u02c0\u02dd\u0005p9\b\u02c1", - "\u02c2\f\u0006\u0002\u0002\u02c2\u02c3\u0007I\u0002\u0002\u02c3\u02dd", - "\u0005p9\u0007\u02c4\u02c5\f\u0005\u0002\u0002\u02c5\u02c6\u0007J\u0002", - "\u0002\u02c6\u02c7\u0005p9\u0002\u02c7\u02c8\u0007K\u0002\u0002\u02c8", - "\u02c9\u0005p9\u0006\u02c9\u02dd\u0003\u0002\u0002\u0002\u02ca\u02cb", - "\f\u0004\u0002\u0002\u02cb\u02cc\t\u000f\u0002\u0002\u02cc\u02dd\u0005", - "p9\u0005\u02cd\u02ce\f\u001b\u0002\u0002\u02ce\u02dd\t\b\u0002\u0002", - "\u02cf\u02d0\f\u0019\u0002\u0002\u02d0\u02d1\u0007\"\u0002\u0002\u02d1", - "\u02d2\u0005p9\u0002\u02d2\u02d3\u0007#\u0002\u0002\u02d3\u02dd\u0003", - "\u0002\u0002\u0002\u02d4\u02d5\f\u0018\u0002\u0002\u02d5\u02d6\u0007", - "\u0017\u0002\u0002\u02d6\u02d7\u0005z>\u0002\u02d7\u02d8\u0007\u0018", - "\u0002\u0002\u02d8\u02dd\u0003\u0002\u0002\u0002\u02d9\u02da\f\u0017", - "\u0002\u0002\u02da\u02db\u0007%\u0002\u0002\u02db\u02dd\u0005\u00a8", - "U\u0002\u02dc\u02a3\u0003\u0002\u0002\u0002\u02dc\u02a6\u0003\u0002", - "\u0002\u0002\u02dc\u02a9\u0003\u0002\u0002\u0002\u02dc\u02ac\u0003\u0002", - "\u0002\u0002\u02dc\u02af\u0003\u0002\u0002\u0002\u02dc\u02b2\u0003\u0002", - "\u0002\u0002\u02dc\u02b5\u0003\u0002\u0002\u0002\u02dc\u02b8\u0003\u0002", - "\u0002\u0002\u02dc\u02bb\u0003\u0002\u0002\u0002\u02dc\u02be\u0003\u0002", - "\u0002\u0002\u02dc\u02c1\u0003\u0002\u0002\u0002\u02dc\u02c4\u0003\u0002", - "\u0002\u0002\u02dc\u02ca\u0003\u0002\u0002\u0002\u02dc\u02cd\u0003\u0002", - "\u0002\u0002\u02dc\u02cf\u0003\u0002\u0002\u0002\u02dc\u02d4\u0003\u0002", - "\u0002\u0002\u02dc\u02d9\u0003\u0002\u0002\u0002\u02dd\u02e0\u0003\u0002", - "\u0002\u0002\u02de\u02dc\u0003\u0002\u0002\u0002\u02de\u02df\u0003\u0002", - "\u0002\u0002\u02dfq\u0003\u0002\u0002\u0002\u02e0\u02de\u0003\u0002", - "\u0002\u0002\u02e1\u02f2\u0007c\u0002\u0002\u02e2\u02f2\u0005\u00a6", - "T\u0002\u02e3\u02f2\u0007g\u0002\u0002\u02e4\u02f2\u0007w\u0002\u0002", - "\u02e5\u02e8\u0005\u00a8U\u0002\u02e6\u02e7\u0007\"\u0002\u0002\u02e7", - "\u02e9\u0007#\u0002\u0002\u02e8\u02e6\u0003\u0002\u0002\u0002\u02e8", - "\u02e9\u0003\u0002\u0002\u0002\u02e9\u02f2\u0003\u0002\u0002\u0002\u02ea", - "\u02f2\u0007t\u0002\u0002\u02eb\u02f2\u0005\u00a2R\u0002\u02ec\u02ef", - "\u0005\u00a4S\u0002\u02ed\u02ee\u0007\"\u0002\u0002\u02ee\u02f0\u0007", - "#\u0002\u0002\u02ef\u02ed\u0003\u0002\u0002\u0002\u02ef\u02f0\u0003", - "\u0002\u0002\u0002\u02f0\u02f2\u0003\u0002\u0002\u0002\u02f1\u02e1\u0003", - "\u0002\u0002\u0002\u02f1\u02e2\u0003\u0002\u0002\u0002\u02f1\u02e3\u0003", - "\u0002\u0002\u0002\u02f1\u02e4\u0003\u0002\u0002\u0002\u02f1\u02e5\u0003", - "\u0002\u0002\u0002\u02f1\u02ea\u0003\u0002\u0002\u0002\u02f1\u02eb\u0003", - "\u0002\u0002\u0002\u02f1\u02ec\u0003\u0002\u0002\u0002\u02f2s\u0003", - "\u0002\u0002\u0002\u02f3\u02f8\u0005p9\u0002\u02f4\u02f5\u0007\u0011", - "\u0002\u0002\u02f5\u02f7\u0005p9\u0002\u02f6\u02f4\u0003\u0002\u0002", - "\u0002\u02f7\u02fa\u0003\u0002\u0002\u0002\u02f8\u02f6\u0003\u0002\u0002", - "\u0002\u02f8\u02f9\u0003\u0002\u0002\u0002\u02f9u\u0003\u0002\u0002", - "\u0002\u02fa\u02f8\u0003\u0002\u0002\u0002\u02fb\u0300\u0005x=\u0002", - "\u02fc\u02fd\u0007\u0011\u0002\u0002\u02fd\u02ff\u0005x=\u0002\u02fe", - "\u02fc\u0003\u0002\u0002\u0002\u02ff\u0302\u0003\u0002\u0002\u0002\u0300", - "\u02fe\u0003\u0002\u0002\u0002\u0300\u0301\u0003\u0002\u0002\u0002\u0301", - "\u0304\u0003\u0002\u0002\u0002\u0302\u0300\u0003\u0002\u0002\u0002\u0303", - "\u0305\u0007\u0011\u0002\u0002\u0304\u0303\u0003\u0002\u0002\u0002\u0304", - "\u0305\u0003\u0002\u0002\u0002\u0305w\u0003\u0002\u0002\u0002\u0306", - "\u0307\u0005\u00a8U\u0002\u0307\u0308\u0007K\u0002\u0002\u0308\u0309", - "\u0005p9\u0002\u0309y\u0003\u0002\u0002\u0002\u030a\u030c\u0007\u0010", - "\u0002\u0002\u030b\u030d\u0005v<\u0002\u030c\u030b\u0003\u0002\u0002", - "\u0002\u030c\u030d\u0003\u0002\u0002\u0002\u030d\u030e\u0003\u0002\u0002", - "\u0002\u030e\u0313\u0007\u0012\u0002\u0002\u030f\u0311\u0005t;\u0002", - "\u0310\u030f\u0003\u0002\u0002\u0002\u0310\u0311\u0003\u0002\u0002\u0002", - "\u0311\u0313\u0003\u0002\u0002\u0002\u0312\u030a\u0003\u0002\u0002\u0002", - "\u0312\u0310\u0003\u0002\u0002\u0002\u0313{\u0003\u0002\u0002\u0002", - "\u0314\u0315\u0005p9\u0002\u0315\u0316\u0007\u0017\u0002\u0002\u0316", - "\u0317\u0005z>\u0002\u0317\u0318\u0007\u0018\u0002\u0002\u0318}\u0003", - "\u0002\u0002\u0002\u0319\u031d\u0007\u0010\u0002\u0002\u031a\u031c\u0005", - "\u0080A\u0002\u031b\u031a\u0003\u0002\u0002\u0002\u031c\u031f\u0003", - "\u0002\u0002\u0002\u031d\u031b\u0003\u0002\u0002\u0002\u031d\u031e\u0003", - "\u0002\u0002\u0002\u031e\u0320\u0003\u0002\u0002\u0002\u031f\u031d\u0003", - "\u0002\u0002\u0002\u0320\u0321\u0007\u0012\u0002\u0002\u0321\u007f\u0003", - "\u0002\u0002\u0002\u0322\u0334\u0005\u00a8U\u0002\u0323\u0334\u0005", - "~@\u0002\u0324\u0334\u0005\u0082B\u0002\u0325\u0334\u0005\u0086D\u0002", - "\u0326\u0334\u0005\u0088E\u0002\u0327\u0334\u0005\u008eH\u0002\u0328", - "\u0334\u0005\u0090I\u0002\u0329\u0334\u0005\u0092J\u0002\u032a\u0334", - "\u0005\u0096L\u0002\u032b\u0334\u0005\u009aN\u0002\u032c\u0334\u0005", - "\u009cO\u0002\u032d\u0334\u0007j\u0002\u0002\u032e\u0334\u0007l\u0002", - "\u0002\u032f\u0334\u0005\u00a0Q\u0002\u0330\u0334\u0005\u00a6T\u0002", - "\u0331\u0334\u0007w\u0002\u0002\u0332\u0334\u0007g\u0002\u0002\u0333", - "\u0322\u0003\u0002\u0002\u0002\u0333\u0323\u0003\u0002\u0002\u0002\u0333", - "\u0324\u0003\u0002\u0002\u0002\u0333\u0325\u0003\u0002\u0002\u0002\u0333", - "\u0326\u0003\u0002\u0002\u0002\u0333\u0327\u0003\u0002\u0002\u0002\u0333", - "\u0328\u0003\u0002\u0002\u0002\u0333\u0329\u0003\u0002\u0002\u0002\u0333", - "\u032a\u0003\u0002\u0002\u0002\u0333\u032b\u0003\u0002\u0002\u0002\u0333", - "\u032c\u0003\u0002\u0002\u0002\u0333\u032d\u0003\u0002\u0002\u0002\u0333", - "\u032e\u0003\u0002\u0002\u0002\u0333\u032f\u0003\u0002\u0002\u0002\u0333", - "\u0330\u0003\u0002\u0002\u0002\u0333\u0331\u0003\u0002\u0002\u0002\u0333", - "\u0332\u0003\u0002\u0002\u0002\u0334\u0081\u0003\u0002\u0002\u0002\u0335", - "\u0338\u0005\u0084C\u0002\u0336\u0338\u0005\u009eP\u0002\u0337\u0335", - "\u0003\u0002\u0002\u0002\u0337\u0336\u0003\u0002\u0002\u0002\u0338\u0083", - "\u0003\u0002\u0002\u0002\u0339\u033e\u00070\u0002\u0002\u033a\u033e", - "\u0007$\u0002\u0002\u033b\u033e\u00076\u0002\u0002\u033c\u033e\u0005", - "\u00a8U\u0002\u033d\u0339\u0003\u0002\u0002\u0002\u033d\u033a\u0003", - "\u0002\u0002\u0002\u033d\u033b\u0003\u0002\u0002\u0002\u033d\u033c\u0003", - "\u0002\u0002\u0002\u033e\u034b\u0003\u0002\u0002\u0002\u033f\u0341\u0007", - "\u0017\u0002\u0002\u0340\u0342\u0005\u0082B\u0002\u0341\u0340\u0003", - "\u0002\u0002\u0002\u0341\u0342\u0003\u0002\u0002\u0002\u0342\u0347\u0003", - "\u0002\u0002\u0002\u0343\u0344\u0007\u0011\u0002\u0002\u0344\u0346\u0005", - "\u0082B\u0002\u0345\u0343\u0003\u0002\u0002\u0002\u0346\u0349\u0003", - "\u0002\u0002\u0002\u0347\u0345\u0003\u0002\u0002\u0002\u0347\u0348\u0003", - "\u0002\u0002\u0002\u0348\u034a\u0003\u0002\u0002\u0002\u0349\u0347\u0003", - "\u0002\u0002\u0002\u034a\u034c\u0007\u0018\u0002\u0002\u034b\u033f\u0003", - "\u0002\u0002\u0002\u034b\u034c\u0003\u0002\u0002\u0002\u034c\u0085\u0003", - "\u0002\u0002\u0002\u034d\u034e\u0007V\u0002\u0002\u034e\u0351\u0005", - "\u008aF\u0002\u034f\u0350\u0007W\u0002\u0002\u0350\u0352\u0005\u0082", - "B\u0002\u0351\u034f\u0003\u0002\u0002\u0002\u0351\u0352\u0003\u0002", - "\u0002\u0002\u0352\u0087\u0003\u0002\u0002\u0002\u0353\u0354\u0005\u008a", - "F\u0002\u0354\u0355\u0007W\u0002\u0002\u0355\u0356\u0005\u0082B\u0002", - "\u0356\u0089\u0003\u0002\u0002\u0002\u0357\u035d\u0005\u00a8U\u0002", - "\u0358\u0359\u0007\u0017\u0002\u0002\u0359\u035a\u0005\u008cG\u0002", - "\u035a\u035b\u0007\u0018\u0002\u0002\u035b\u035d\u0003\u0002\u0002\u0002", - "\u035c\u0357\u0003\u0002\u0002\u0002\u035c\u0358\u0003\u0002\u0002\u0002", - "\u035d\u008b\u0003\u0002\u0002\u0002\u035e\u0363\u0005\u00a8U\u0002", - "\u035f\u0360\u0007\u0011\u0002\u0002\u0360\u0362\u0005\u00a8U\u0002", - "\u0361\u035f\u0003\u0002\u0002\u0002\u0362\u0365\u0003\u0002\u0002\u0002", - "\u0363\u0361\u0003\u0002\u0002\u0002\u0363\u0364\u0003\u0002\u0002\u0002", - "\u0364\u008d\u0003\u0002\u0002\u0002\u0365\u0363\u0003\u0002\u0002\u0002", - "\u0366\u0367\u0007X\u0002\u0002\u0367\u0368\u0005\u00a8U\u0002\u0368", - "\u008f\u0003\u0002\u0002\u0002\u0369\u036a\u0005\u00a8U\u0002\u036a", - "\u036b\u0007K\u0002\u0002\u036b\u0091\u0003\u0002\u0002\u0002\u036c", - "\u036d\u0007Y\u0002\u0002\u036d\u0371\u0005\u0082B\u0002\u036e\u0370", - "\u0005\u0094K\u0002\u036f\u036e\u0003\u0002\u0002\u0002\u0370\u0373", - "\u0003\u0002\u0002\u0002\u0371\u036f\u0003\u0002\u0002\u0002\u0371\u0372", - "\u0003\u0002\u0002\u0002\u0372\u0093\u0003\u0002\u0002\u0002\u0373\u0371", - "\u0003\u0002\u0002\u0002\u0374\u0375\u0007Z\u0002\u0002\u0375\u0376", - "\u0005\u009eP\u0002\u0376\u0377\u0005~@\u0002\u0377\u037b\u0003\u0002", - "\u0002\u0002\u0378\u0379\u0007[\u0002\u0002\u0379\u037b\u0005~@\u0002", - "\u037a\u0374\u0003\u0002\u0002\u0002\u037a\u0378\u0003\u0002\u0002\u0002", - "\u037b\u0095\u0003\u0002\u0002\u0002\u037c\u037d\u0007\u001e\u0002\u0002", - "\u037d\u037e\u0005\u00a8U\u0002\u037e\u0380\u0007\u0017\u0002\u0002", - "\u037f\u0381\u0005\u008cG\u0002\u0380\u037f\u0003\u0002\u0002\u0002", - "\u0380\u0381\u0003\u0002\u0002\u0002\u0381\u0382\u0003\u0002\u0002\u0002", - "\u0382\u0384\u0007\u0018\u0002\u0002\u0383\u0385\u0005\u0098M\u0002", - "\u0384\u0383\u0003\u0002\u0002\u0002\u0384\u0385\u0003\u0002\u0002\u0002", - "\u0385\u0386\u0003\u0002\u0002\u0002\u0386\u0387\u0005~@\u0002\u0387", - "\u0097\u0003\u0002\u0002\u0002\u0388\u0389\u0007\\\u0002\u0002\u0389", - "\u038a\u0005\u008cG\u0002\u038a\u0099\u0003\u0002\u0002\u0002\u038b", - "\u038e\u0007\u001a\u0002\u0002\u038c\u038f\u0005~@\u0002\u038d\u038f", - "\u0005\u0082B\u0002\u038e\u038c\u0003\u0002\u0002\u0002\u038e\u038d", - "\u0003\u0002\u0002\u0002\u038f\u0390\u0003\u0002\u0002\u0002\u0390\u0393", - "\u0005\u0082B\u0002\u0391\u0394\u0005~@\u0002\u0392\u0394\u0005\u0082", - "B\u0002\u0393\u0391\u0003\u0002\u0002\u0002\u0393\u0392\u0003\u0002", - "\u0002\u0002\u0394\u0395\u0003\u0002\u0002\u0002\u0395\u0396\u0005~", - "@\u0002\u0396\u009b\u0003\u0002\u0002\u0002\u0397\u0398\u0007+\u0002", - "\u0002\u0398\u0399\u0005\u0082B\u0002\u0399\u039a\u0005~@\u0002\u039a", - "\u009d\u0003\u0002\u0002\u0002\u039b\u039c\t\u0010\u0002\u0002\u039c", - "\u009f\u0003\u0002\u0002\u0002\u039d\u039e\u0007.\u0002\u0002\u039e", - "\u039f\u0005\u00a8U\u0002\u039f\u03a0\u0005~@\u0002\u03a0\u00a1\u0003", - "\u0002\u0002\u0002\u03a1\u03a3\u0007\u0017\u0002\u0002\u03a2\u03a4\u0005", - "p9\u0002\u03a3\u03a2\u0003\u0002\u0002\u0002\u03a3\u03a4\u0003\u0002", - "\u0002\u0002\u03a4\u03ab\u0003\u0002\u0002\u0002\u03a5\u03a7\u0007\u0011", - "\u0002\u0002\u03a6\u03a8\u0005p9\u0002\u03a7\u03a6\u0003\u0002\u0002", - "\u0002\u03a7\u03a8\u0003\u0002\u0002\u0002\u03a8\u03aa\u0003\u0002\u0002", - "\u0002\u03a9\u03a5\u0003\u0002\u0002\u0002\u03aa\u03ad\u0003\u0002\u0002", - "\u0002\u03ab\u03a9\u0003\u0002\u0002\u0002\u03ab\u03ac\u0003\u0002\u0002", - "\u0002\u03ac\u03ae\u0003\u0002\u0002\u0002\u03ad\u03ab\u0003\u0002\u0002", - "\u0002\u03ae\u03bc\u0007\u0018\u0002\u0002\u03af\u03b8\u0007\"\u0002", - "\u0002\u03b0\u03b5\u0005p9\u0002\u03b1\u03b2\u0007\u0011\u0002\u0002", - "\u03b2\u03b4\u0005p9\u0002\u03b3\u03b1\u0003\u0002\u0002\u0002\u03b4", - "\u03b7\u0003\u0002\u0002\u0002\u03b5\u03b3\u0003\u0002\u0002\u0002\u03b5", - "\u03b6\u0003\u0002\u0002\u0002\u03b6\u03b9\u0003\u0002\u0002\u0002\u03b7", - "\u03b5\u0003\u0002\u0002\u0002\u03b8\u03b0\u0003\u0002\u0002\u0002\u03b8", - "\u03b9\u0003\u0002\u0002\u0002\u03b9\u03ba\u0003\u0002\u0002\u0002\u03ba", - "\u03bc\u0007#\u0002\u0002\u03bb\u03a1\u0003\u0002\u0002\u0002\u03bb", - "\u03af\u0003\u0002\u0002\u0002\u03bc\u00a3\u0003\u0002\u0002\u0002\u03bd", - "\u03be\u0005n8\u0002\u03be\u00a5\u0003\u0002\u0002\u0002\u03bf\u03c1", - "\t\u0011\u0002\u0002\u03c0\u03c2\u0007f\u0002\u0002\u03c1\u03c0\u0003", - "\u0002\u0002\u0002\u03c1\u03c2\u0003\u0002\u0002\u0002\u03c2\u00a7\u0003", - "\u0002\u0002\u0002\u03c3\u03c4\t\u0012\u0002\u0002\u03c4\u00a9\u0003", - "\u0002\u0002\u0002j\u00ad\u00af\u00bd\u00c1\u00c6\u00cd\u00d3\u00d9", - "\u00dd\u00e9\u00f1\u00fb\u00fe\u0104\u0110\u0115\u011f\u0125\u012b\u0134", - "\u0142\u0145\u0151\u0158\u015b\u015f\u0164\u0168\u0173\u0175\u017c\u0186", - "\u018c\u0197\u019a\u01a0\u01a3\u01ab\u01ae\u01b4\u01b7\u01bf\u01c2\u01c8", - "\u01cc\u01d7\u01dc\u01e1\u01e9\u01f8\u01fa\u01ff\u0209\u021a\u0226\u0230", - "\u0236\u023a\u023d\u0244\u0258\u026a\u026e\u0273\u0277\u027b\u0280\u0285", - "\u0289\u02a1\u02dc\u02de\u02e8\u02ef\u02f1\u02f8\u0300\u0304\u030c\u0310", - "\u0312\u031d\u0333\u0337\u033d\u0341\u0347\u034b\u0351\u035c\u0363\u0371", - "\u037a\u0380\u0384\u038e\u0393\u03a3\u03a7\u03ab\u03b5\u03b8\u03bb\u03c1"].join(""); + "O\tO\u0004P\tP\u0004Q\tQ\u0004R\tR\u0004S\tS\u0004T\tT\u0004U\tU\u0004", + "V\tV\u0003\u0002\u0003\u0002\u0003\u0002\u0007\u0002\u00b0\n\u0002\f", + "\u0002\u000e\u0002\u00b3\u000b\u0002\u0003\u0002\u0003\u0002\u0003\u0003", + "\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0004\u0003\u0004", + "\u0003\u0005\u0003\u0005\u0005\u0005\u00c0\n\u0005\u0003\u0006\u0003", + "\u0006\u0005\u0006\u00c4\n\u0006\u0003\u0007\u0003\u0007\u0003\b\u0005", + "\b\u00c9\n\b\u0003\b\u0003\b\u0003\t\u0003\t\u0003\t\u0005\t\u00d0\n", + "\t\u0003\n\u0003\n\u0003\n\u0003\n\u0005\n\u00d6\n\n\u0003\n\u0003\n", + "\u0003\n\u0003\n\u0005\n\u00dc\n\n\u0003\n\u0003\n\u0005\n\u00e0\n\n", + "\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0007", + "\n\u00ea\n\n\f\n\u000e\n\u00ed\u000b\n\u0003\n\u0003\n\u0003\n\u0003", + "\n\u0003\n\u0005\n\u00f4\n\n\u0003\u000b\u0003\u000b\u0003\f\u0005\f", + "\u00f9\n\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0007\f\u0101", + "\n\f\f\f\u000e\f\u0104\u000b\f\u0005\f\u0106\n\f\u0003\f\u0003\f\u0007", + "\f\u010a\n\f\f\f\u000e\f\u010d\u000b\f\u0003\f\u0003\f\u0003\r\u0003", + "\r\u0003\r\u0005\r\u0114\n\r\u0003\r\u0005\r\u0117\n\r\u0003\u000e\u0003", + "\u000e\u0003\u000e\u0003\u000e\u0003\u000e\u0003\u000e\u0003\u000e\u0003", + "\u000e\u0005\u000e\u0121\n\u000e\u0003\u000f\u0003\u000f\u0007\u000f", + "\u0125\n\u000f\f\u000f\u000e\u000f\u0128\u000b\u000f\u0003\u000f\u0003", + "\u000f\u0003\u000f\u0005\u000f\u012d\n\u000f\u0003\u000f\u0003\u000f", + "\u0003\u0010\u0003\u0010\u0003\u0010\u0003\u0010\u0003\u0010\u0005\u0010", + "\u0136\n\u0010\u0003\u0010\u0003\u0010\u0003\u0011\u0003\u0011\u0003", + "\u0011\u0003\u0011\u0003\u0011\u0003\u0011\u0003\u0011\u0003\u0011\u0007", + "\u0011\u0142\n\u0011\f\u0011\u000e\u0011\u0145\u000b\u0011\u0005\u0011", + "\u0147\n\u0011\u0003\u0011\u0003\u0011\u0003\u0012\u0003\u0012\u0003", + "\u0012\u0003\u0012\u0003\u0012\u0003\u0013\u0003\u0013\u0003\u0013\u0005", + "\u0013\u0153\n\u0013\u0003\u0013\u0003\u0013\u0003\u0014\u0003\u0014", + "\u0003\u0014\u0005\u0014\u015a\n\u0014\u0003\u0014\u0005\u0014\u015d", + "\n\u0014\u0003\u0015\u0005\u0015\u0160\n\u0015\u0003\u0015\u0003\u0015", + "\u0005\u0015\u0164\n\u0015\u0003\u0015\u0003\u0015\u0003\u0015\u0005", + "\u0015\u0169\n\u0015\u0003\u0015\u0003\u0015\u0005\u0015\u016d\n\u0015", + "\u0003\u0016\u0003\u0016\u0003\u0016\u0003\u0017\u0003\u0017\u0003\u0017", + "\u0003\u0017\u0003\u0017\u0003\u0017\u0007\u0017\u0178\n\u0017\f\u0017", + "\u000e\u0017\u017b\u000b\u0017\u0003\u0018\u0005\u0018\u017e\n\u0018", + "\u0003\u0018\u0003\u0018\u0003\u0018\u0003\u0018\u0005\u0018\u0184\n", + "\u0018\u0003\u0018\u0003\u0018\u0003\u0019\u0003\u0019\u0003\u001a\u0003", + "\u001a\u0003\u001a\u0003\u001a\u0005\u001a\u018e\n\u001a\u0003\u001a", + "\u0003\u001a\u0007\u001a\u0192\n\u001a\f\u001a\u000e\u001a\u0195\u000b", + "\u001a\u0003\u001a\u0003\u001a\u0003\u001b\u0003\u001b\u0003\u001b\u0003", + "\u001b\u0007\u001b\u019d\n\u001b\f\u001b\u000e\u001b\u01a0\u000b\u001b", + "\u0005\u001b\u01a2\n\u001b\u0003\u001b\u0003\u001b\u0003\u001c\u0003", + "\u001c\u0005\u001c\u01a8\n\u001c\u0003\u001c\u0005\u001c\u01ab\n\u001c", + "\u0003\u001d\u0003\u001d\u0003\u001d\u0003\u001d\u0007\u001d\u01b1\n", + "\u001d\f\u001d\u000e\u001d\u01b4\u000b\u001d\u0005\u001d\u01b6\n\u001d", + "\u0003\u001d\u0003\u001d\u0003\u001e\u0003\u001e\u0005\u001e\u01bc\n", + "\u001e\u0003\u001e\u0005\u001e\u01bf\n\u001e\u0003\u001f\u0003\u001f", + "\u0003\u001f\u0003\u001f\u0007\u001f\u01c5\n\u001f\f\u001f\u000e\u001f", + "\u01c8\u000b\u001f\u0005\u001f\u01ca\n\u001f\u0003\u001f\u0003\u001f", + "\u0003 \u0003 \u0005 \u01d0\n \u0003!\u0003!\u0005!\u01d4\n!\u0003!", + "\u0003!\u0003\"\u0003\"\u0003\"\u0003\"\u0003\"\u0003\"\u0003\"\u0005", + "\"\u01df\n\"\u0003\"\u0003\"\u0003\"\u0005\"\u01e4\n\"\u0003\"\u0007", + "\"\u01e7\n\"\f\"\u000e\"\u01ea\u000b\"\u0003#\u0003#\u0003#\u0007#\u01ef", + "\n#\f#\u000e#\u01f2\u000b#\u0003$\u0003$\u0003$\u0003$\u0003$\u0003", + "$\u0003$\u0003%\u0003%\u0003%\u0003%\u0003%\u0007%\u0200\n%\f%\u000e", + "%\u0203\u000b%\u0003%\u0003%\u0005%\u0207\n%\u0003&\u0003&\u0003\'\u0003", + "\'\u0003(\u0003(\u0007(\u020f\n(\f(\u000e(\u0212\u000b(\u0003(\u0003", + "(\u0003)\u0003)\u0003)\u0003)\u0003)\u0003)\u0003)\u0003)\u0003)\u0003", + ")\u0003)\u0003)\u0005)\u0222\n)\u0003*\u0003*\u0003*\u0003+\u0003+\u0003", + "+\u0003+\u0003+\u0003+\u0003+\u0005+\u022e\n+\u0003,\u0003,\u0003,\u0003", + ",\u0003,\u0003,\u0003-\u0003-\u0005-\u0238\n-\u0003.\u0003.\u0003.\u0003", + ".\u0005.\u023e\n.\u0003.\u0003.\u0005.\u0242\n.\u0003.\u0005.\u0245", + "\n.\u0003.\u0003.\u0003.\u0003/\u0003/\u0005/\u024c\n/\u0003/\u0003", + "/\u00030\u00030\u00030\u00030\u00030\u00030\u00030\u00030\u00031\u0003", + "1\u00031\u00032\u00032\u00032\u00033\u00033\u00053\u0260\n3\u00033\u0003", + "3\u00034\u00034\u00034\u00035\u00035\u00035\u00035\u00036\u00036\u0003", + "6\u00036\u00036\u00036\u00036\u00056\u0272\n6\u00036\u00036\u00056\u0276", + "\n6\u00036\u00036\u00037\u00057\u027b\n7\u00037\u00037\u00057\u027f", + "\n7\u00077\u0281\n7\f7\u000e7\u0284\u000b7\u00038\u00038\u00058\u0288", + "\n8\u00038\u00078\u028b\n8\f8\u000e8\u028e\u000b8\u00038\u00058\u0291", + "\n8\u00038\u00038\u00039\u00039\u0003:\u0003:\u0003:\u0003:\u0003:\u0003", + ":\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003", + ":\u0003:\u0003:\u0005:\u02a9\n:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003", + ":\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003", + ":\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003", + ":\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003", + ":\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003", + ":\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003", + ":\u0003:\u0007:\u02e4\n:\f:\u000e:\u02e7\u000b:\u0003;\u0003;\u0003", + ";\u0003;\u0003;\u0003;\u0003;\u0005;\u02f0\n;\u0003;\u0003;\u0003;\u0003", + ";\u0003;\u0005;\u02f7\n;\u0005;\u02f9\n;\u0003<\u0003<\u0003<\u0007", + "<\u02fe\n<\f<\u000e<\u0301\u000b<\u0003=\u0003=\u0003=\u0007=\u0306", + "\n=\f=\u000e=\u0309\u000b=\u0003=\u0005=\u030c\n=\u0003>\u0003>\u0003", + ">\u0003>\u0003?\u0003?\u0005?\u0314\n?\u0003?\u0003?\u0005?\u0318\n", + "?\u0005?\u031a\n?\u0003@\u0003@\u0003@\u0003@\u0003@\u0003A\u0003A\u0007", + "A\u0323\nA\fA\u000eA\u0326\u000bA\u0003A\u0003A\u0003B\u0003B\u0003", + "B\u0003B\u0003B\u0003B\u0003B\u0003B\u0003B\u0003B\u0003B\u0003B\u0003", + "B\u0003B\u0003B\u0003B\u0003B\u0005B\u033b\nB\u0003C\u0003C\u0005C\u033f", + "\nC\u0003D\u0003D\u0003D\u0003D\u0005D\u0345\nD\u0003D\u0003D\u0005", + "D\u0349\nD\u0003D\u0003D\u0007D\u034d\nD\fD\u000eD\u0350\u000bD\u0003", + "D\u0005D\u0353\nD\u0003E\u0003E\u0003E\u0003E\u0005E\u0359\nE\u0003", + "F\u0003F\u0003F\u0003F\u0003G\u0003G\u0003G\u0003G\u0003G\u0005G\u0364", + "\nG\u0003H\u0003H\u0003H\u0007H\u0369\nH\fH\u000eH\u036c\u000bH\u0003", + "I\u0003I\u0003I\u0003J\u0003J\u0003J\u0003K\u0003K\u0003K\u0007K\u0377", + "\nK\fK\u000eK\u037a\u000bK\u0003L\u0003L\u0003L\u0003L\u0003L\u0003", + "L\u0005L\u0382\nL\u0003M\u0003M\u0003M\u0003M\u0005M\u0388\nM\u0003", + "M\u0003M\u0005M\u038c\nM\u0003M\u0003M\u0003N\u0003N\u0003N\u0003O\u0003", + "O\u0003O\u0005O\u0396\nO\u0003O\u0003O\u0003O\u0005O\u039b\nO\u0003", + "O\u0003O\u0003P\u0003P\u0003P\u0003P\u0003Q\u0003Q\u0003R\u0003R\u0003", + "R\u0003R\u0003S\u0003S\u0005S\u03ab\nS\u0003S\u0003S\u0005S\u03af\n", + "S\u0007S\u03b1\nS\fS\u000eS\u03b4\u000bS\u0003S\u0003S\u0003S\u0003", + "S\u0003S\u0007S\u03bb\nS\fS\u000eS\u03be\u000bS\u0005S\u03c0\nS\u0003", + "S\u0005S\u03c3\nS\u0003T\u0003T\u0003U\u0003U\u0005U\u03c9\nU\u0003", + "V\u0003V\u0003V\u0002\u0004BrW\u0002\u0004\u0006\b\n\f\u000e\u0010\u0012", + "\u0014\u0016\u0018\u001a\u001c\u001e \"$&(*,.02468:<>@BDFHJLNPRTVXZ", + "\\^`bdfhjlnprtvxz|~\u0080\u0082\u0084\u0086\u0088\u008a\u008c\u008e", + "\u0090\u0092\u0094\u0096\u0098\u009a\u009c\u009e\u00a0\u00a2\u00a4\u00a6", + "\u00a8\u00aa\u0002\u0014\u0003\u0002\u0005\u000b\u0003\u0002]^\u0003", + "\u0002\u0013\u0015\u0005\u0002mmqqst\u0003\u0002(*\u0006\u0002mmrru", + "uww\u0005\u0002$$36_c\u0003\u000278\u0003\u0002:;\u0003\u0002<=\u0004", + "\u0002\u000e\u000e@A\u0003\u0002BC\u0003\u0002\u0007\n\u0003\u0002F", + "G\u0004\u0002\u000b\u000bLU\u0005\u0002fgiiyy\u0003\u0002fg\u0005\u0002", + "\u000f\u000f**xx\u0002\u0429\u0002\u00b1\u0003\u0002\u0002\u0002\u0004", + "\u00b6\u0003\u0002\u0002\u0002\u0006\u00bb\u0003\u0002\u0002\u0002\b", + "\u00bf\u0003\u0002\u0002\u0002\n\u00c1\u0003\u0002\u0002\u0002\f\u00c5", + "\u0003\u0002\u0002\u0002\u000e\u00c8\u0003\u0002\u0002\u0002\u0010\u00cc", + "\u0003\u0002\u0002\u0002\u0012\u00f3\u0003\u0002\u0002\u0002\u0014\u00f5", + "\u0003\u0002\u0002\u0002\u0016\u00f8\u0003\u0002\u0002\u0002\u0018\u0110", + "\u0003\u0002\u0002\u0002\u001a\u0120\u0003\u0002\u0002\u0002\u001c\u0122", + "\u0003\u0002\u0002\u0002\u001e\u0130\u0003\u0002\u0002\u0002 \u0139", + "\u0003\u0002\u0002\u0002\"\u014a\u0003\u0002\u0002\u0002$\u014f\u0003", + "\u0002\u0002\u0002&\u0156\u0003\u0002\u0002\u0002(\u015f\u0003\u0002", + "\u0002\u0002*\u016e\u0003\u0002\u0002\u0002,\u0179\u0003\u0002\u0002", + "\u0002.\u017d\u0003\u0002\u0002\u00020\u0187\u0003\u0002\u0002\u0002", + "2\u0189\u0003\u0002\u0002\u00024\u0198\u0003\u0002\u0002\u00026\u01a5", + "\u0003\u0002\u0002\u00028\u01ac\u0003\u0002\u0002\u0002:\u01b9\u0003", + "\u0002\u0002\u0002<\u01c0\u0003\u0002\u0002\u0002>\u01cd\u0003\u0002", + "\u0002\u0002@\u01d1\u0003\u0002\u0002\u0002B\u01de\u0003\u0002\u0002", + "\u0002D\u01eb\u0003\u0002\u0002\u0002F\u01f3\u0003\u0002\u0002\u0002", + "H\u01fa\u0003\u0002\u0002\u0002J\u0208\u0003\u0002\u0002\u0002L\u020a", + "\u0003\u0002\u0002\u0002N\u020c\u0003\u0002\u0002\u0002P\u0221\u0003", + "\u0002\u0002\u0002R\u0223\u0003\u0002\u0002\u0002T\u0226\u0003\u0002", + "\u0002\u0002V\u022f\u0003\u0002\u0002\u0002X\u0237\u0003\u0002\u0002", + "\u0002Z\u0239\u0003\u0002\u0002\u0002\\\u0249\u0003\u0002\u0002\u0002", + "^\u024f\u0003\u0002\u0002\u0002`\u0257\u0003\u0002\u0002\u0002b\u025a", + "\u0003\u0002\u0002\u0002d\u025d\u0003\u0002\u0002\u0002f\u0263\u0003", + "\u0002\u0002\u0002h\u0266\u0003\u0002\u0002\u0002j\u0271\u0003\u0002", + "\u0002\u0002l\u027a\u0003\u0002\u0002\u0002n\u0285\u0003\u0002\u0002", + "\u0002p\u0294\u0003\u0002\u0002\u0002r\u02a8\u0003\u0002\u0002\u0002", + "t\u02f8\u0003\u0002\u0002\u0002v\u02fa\u0003\u0002\u0002\u0002x\u0302", + "\u0003\u0002\u0002\u0002z\u030d\u0003\u0002\u0002\u0002|\u0319\u0003", + "\u0002\u0002\u0002~\u031b\u0003\u0002\u0002\u0002\u0080\u0320\u0003", + "\u0002\u0002\u0002\u0082\u033a\u0003\u0002\u0002\u0002\u0084\u033e\u0003", + "\u0002\u0002\u0002\u0086\u0344\u0003\u0002\u0002\u0002\u0088\u0354\u0003", + "\u0002\u0002\u0002\u008a\u035a\u0003\u0002\u0002\u0002\u008c\u0363\u0003", + "\u0002\u0002\u0002\u008e\u0365\u0003\u0002\u0002\u0002\u0090\u036d\u0003", + "\u0002\u0002\u0002\u0092\u0370\u0003\u0002\u0002\u0002\u0094\u0373\u0003", + "\u0002\u0002\u0002\u0096\u0381\u0003\u0002\u0002\u0002\u0098\u0383\u0003", + "\u0002\u0002\u0002\u009a\u038f\u0003\u0002\u0002\u0002\u009c\u0392\u0003", + "\u0002\u0002\u0002\u009e\u039e\u0003\u0002\u0002\u0002\u00a0\u03a2\u0003", + "\u0002\u0002\u0002\u00a2\u03a4\u0003\u0002\u0002\u0002\u00a4\u03c2\u0003", + "\u0002\u0002\u0002\u00a6\u03c4\u0003\u0002\u0002\u0002\u00a8\u03c6\u0003", + "\u0002\u0002\u0002\u00aa\u03ca\u0003\u0002\u0002\u0002\u00ac\u00b0\u0005", + "\u0004\u0003\u0002\u00ad\u00b0\u0005\u0012\n\u0002\u00ae\u00b0\u0005", + "\u0016\f\u0002\u00af\u00ac\u0003\u0002\u0002\u0002\u00af\u00ad\u0003", + "\u0002\u0002\u0002\u00af\u00ae\u0003\u0002\u0002\u0002\u00b0\u00b3\u0003", + "\u0002\u0002\u0002\u00b1\u00af\u0003\u0002\u0002\u0002\u00b1\u00b2\u0003", + "\u0002\u0002\u0002\u00b2\u00b4\u0003\u0002\u0002\u0002\u00b3\u00b1\u0003", + "\u0002\u0002\u0002\u00b4\u00b5\u0007\u0002\u0002\u0003\u00b5\u0003\u0003", + "\u0002\u0002\u0002\u00b6\u00b7\u0007\u0003\u0002\u0002\u00b7\u00b8\u0005", + "\u0006\u0004\u0002\u00b8\u00b9\u0005\b\u0005\u0002\u00b9\u00ba\u0007", + "\u0004\u0002\u0002\u00ba\u0005\u0003\u0002\u0002\u0002\u00bb\u00bc\u0005", + "\u00aaV\u0002\u00bc\u0007\u0003\u0002\u0002\u0002\u00bd\u00c0\u0005", + "\n\u0006\u0002\u00be\u00c0\u0005r:\u0002\u00bf\u00bd\u0003\u0002\u0002", + "\u0002\u00bf\u00be\u0003\u0002\u0002\u0002\u00c0\t\u0003\u0002\u0002", + "\u0002\u00c1\u00c3\u0005\u000e\b\u0002\u00c2\u00c4\u0005\u000e\b\u0002", + "\u00c3\u00c2\u0003\u0002\u0002\u0002\u00c3\u00c4\u0003\u0002\u0002\u0002", + "\u00c4\u000b\u0003\u0002\u0002\u0002\u00c5\u00c6\t\u0002\u0002\u0002", + "\u00c6\r\u0003\u0002\u0002\u0002\u00c7\u00c9\u0005\f\u0007\u0002\u00c8", + "\u00c7\u0003\u0002\u0002\u0002\u00c8\u00c9\u0003\u0002\u0002\u0002\u00c9", + "\u00ca\u0003\u0002\u0002\u0002\u00ca\u00cb\u0007d\u0002\u0002\u00cb", + "\u000f\u0003\u0002\u0002\u0002\u00cc\u00cf\u0005\u00aaV\u0002\u00cd", + "\u00ce\u0007\f\u0002\u0002\u00ce\u00d0\u0005\u00aaV\u0002\u00cf\u00cd", + "\u0003\u0002\u0002\u0002\u00cf\u00d0\u0003\u0002\u0002\u0002\u00d0\u0011", + "\u0003\u0002\u0002\u0002\u00d1\u00d2\u0007\r\u0002\u0002\u00d2\u00d5", + "\u0007y\u0002\u0002\u00d3\u00d4\u0007\f\u0002\u0002\u00d4\u00d6\u0005", + "\u00aaV\u0002\u00d5\u00d3\u0003\u0002\u0002\u0002\u00d5\u00d6\u0003", + "\u0002\u0002\u0002\u00d6\u00d7\u0003\u0002\u0002\u0002\u00d7\u00f4\u0007", + "\u0004\u0002\u0002\u00d8\u00db\u0007\r\u0002\u0002\u00d9\u00dc\u0007", + "\u000e\u0002\u0002\u00da\u00dc\u0005\u00aaV\u0002\u00db\u00d9\u0003", + "\u0002\u0002\u0002\u00db\u00da\u0003\u0002\u0002\u0002\u00dc\u00df\u0003", + "\u0002\u0002\u0002\u00dd\u00de\u0007\f\u0002\u0002\u00de\u00e0\u0005", + "\u00aaV\u0002\u00df\u00dd\u0003\u0002\u0002\u0002\u00df\u00e0\u0003", + "\u0002\u0002\u0002\u00e0\u00e1\u0003\u0002\u0002\u0002\u00e1\u00e2\u0007", + "\u000f\u0002\u0002\u00e2\u00e3\u0007y\u0002\u0002\u00e3\u00f4\u0007", + "\u0004\u0002\u0002\u00e4\u00e5\u0007\r\u0002\u0002\u00e5\u00e6\u0007", + "\u0010\u0002\u0002\u00e6\u00eb\u0005\u0010\t\u0002\u00e7\u00e8\u0007", + "\u0011\u0002\u0002\u00e8\u00ea\u0005\u0010\t\u0002\u00e9\u00e7\u0003", + "\u0002\u0002\u0002\u00ea\u00ed\u0003\u0002\u0002\u0002\u00eb\u00e9\u0003", + "\u0002\u0002\u0002\u00eb\u00ec\u0003\u0002\u0002\u0002\u00ec\u00ee\u0003", + "\u0002\u0002\u0002\u00ed\u00eb\u0003\u0002\u0002\u0002\u00ee\u00ef\u0007", + "\u0012\u0002\u0002\u00ef\u00f0\u0007\u000f\u0002\u0002\u00f0\u00f1\u0007", + "y\u0002\u0002\u00f1\u00f2\u0007\u0004\u0002\u0002\u00f2\u00f4\u0003", + "\u0002\u0002\u0002\u00f3\u00d1\u0003\u0002\u0002\u0002\u00f3\u00d8\u0003", + "\u0002\u0002\u0002\u00f3\u00e4\u0003\u0002\u0002\u0002\u00f4\u0013\u0003", + "\u0002\u0002\u0002\u00f5\u00f6\t\u0003\u0002\u0002\u00f6\u0015\u0003", + "\u0002\u0002\u0002\u00f7\u00f9\u0005\u0014\u000b\u0002\u00f8\u00f7\u0003", + "\u0002\u0002\u0002\u00f8\u00f9\u0003\u0002\u0002\u0002\u00f9\u00fa\u0003", + "\u0002\u0002\u0002\u00fa\u00fb\t\u0004\u0002\u0002\u00fb\u0105\u0005", + "\u00aaV\u0002\u00fc\u00fd\u0007\u0016\u0002\u0002\u00fd\u0102\u0005", + "\u0018\r\u0002\u00fe\u00ff\u0007\u0011\u0002\u0002\u00ff\u0101\u0005", + "\u0018\r\u0002\u0100\u00fe\u0003\u0002\u0002\u0002\u0101\u0104\u0003", + "\u0002\u0002\u0002\u0102\u0100\u0003\u0002\u0002\u0002\u0102\u0103\u0003", + "\u0002\u0002\u0002\u0103\u0106\u0003\u0002\u0002\u0002\u0104\u0102\u0003", + "\u0002\u0002\u0002\u0105\u00fc\u0003\u0002\u0002\u0002\u0105\u0106\u0003", + "\u0002\u0002\u0002\u0106\u0107\u0003\u0002\u0002\u0002\u0107\u010b\u0007", + "\u0010\u0002\u0002\u0108\u010a\u0005\u001a\u000e\u0002\u0109\u0108\u0003", + "\u0002\u0002\u0002\u010a\u010d\u0003\u0002\u0002\u0002\u010b\u0109\u0003", + "\u0002\u0002\u0002\u010b\u010c\u0003\u0002\u0002\u0002\u010c\u010e\u0003", + "\u0002\u0002\u0002\u010d\u010b\u0003\u0002\u0002\u0002\u010e\u010f\u0007", + "\u0012\u0002\u0002\u010f\u0017\u0003\u0002\u0002\u0002\u0110\u0116\u0005", + "D#\u0002\u0111\u0113\u0007\u0017\u0002\u0002\u0112\u0114\u0005v<\u0002", + "\u0113\u0112\u0003\u0002\u0002\u0002\u0113\u0114\u0003\u0002\u0002\u0002", + "\u0114\u0115\u0003\u0002\u0002\u0002\u0115\u0117\u0007\u0018\u0002\u0002", + "\u0116\u0111\u0003\u0002\u0002\u0002\u0116\u0117\u0003\u0002\u0002\u0002", + "\u0117\u0019\u0003\u0002\u0002\u0002\u0118\u0121\u0005\u001c\u000f\u0002", + "\u0119\u0121\u0005\u001e\u0010\u0002\u011a\u0121\u0005 \u0011\u0002", + "\u011b\u0121\u0005\"\u0012\u0002\u011c\u0121\u0005$\u0013\u0002\u011d", + "\u0121\u0005(\u0015\u0002\u011e\u0121\u0005.\u0018\u0002\u011f\u0121", + "\u00052\u001a\u0002\u0120\u0118\u0003\u0002\u0002\u0002\u0120\u0119", + "\u0003\u0002\u0002\u0002\u0120\u011a\u0003\u0002\u0002\u0002\u0120\u011b", + "\u0003\u0002\u0002\u0002\u0120\u011c\u0003\u0002\u0002\u0002\u0120\u011d", + "\u0003\u0002\u0002\u0002\u0120\u011e\u0003\u0002\u0002\u0002\u0120\u011f", + "\u0003\u0002\u0002\u0002\u0121\u001b\u0003\u0002\u0002\u0002\u0122\u0126", + "\u0005B\"\u0002\u0123\u0125\t\u0005\u0002\u0002\u0124\u0123\u0003\u0002", + "\u0002\u0002\u0125\u0128\u0003\u0002\u0002\u0002\u0126\u0124\u0003\u0002", + "\u0002\u0002\u0126\u0127\u0003\u0002\u0002\u0002\u0127\u0129\u0003\u0002", + "\u0002\u0002\u0128\u0126\u0003\u0002\u0002\u0002\u0129\u012c\u0005\u00aa", + "V\u0002\u012a\u012b\u0007\u000b\u0002\u0002\u012b\u012d\u0005r:\u0002", + "\u012c\u012a\u0003\u0002\u0002\u0002\u012c\u012d\u0003\u0002\u0002\u0002", + "\u012d\u012e\u0003\u0002\u0002\u0002\u012e\u012f\u0007\u0004\u0002\u0002", + "\u012f\u001d\u0003\u0002\u0002\u0002\u0130\u0131\u0007\u0019\u0002\u0002", + "\u0131\u0132\u0005\u00aaV\u0002\u0132\u0135\u0007\u001a\u0002\u0002", + "\u0133\u0136\u0007\u000e\u0002\u0002\u0134\u0136\u0005B\"\u0002\u0135", + "\u0133\u0003\u0002\u0002\u0002\u0135\u0134\u0003\u0002\u0002\u0002\u0136", + "\u0137\u0003\u0002\u0002\u0002\u0137\u0138\u0007\u0004\u0002\u0002\u0138", + "\u001f\u0003\u0002\u0002\u0002\u0139\u013a\u0007\u001b\u0002\u0002\u013a", + "\u013b\u0005\u00aaV\u0002\u013b\u0146\u0007\u0010\u0002\u0002\u013c", + "\u013d\u0005@!\u0002\u013d\u0143\u0007\u0004\u0002\u0002\u013e\u013f", + "\u0005@!\u0002\u013f\u0140\u0007\u0004\u0002\u0002\u0140\u0142\u0003", + "\u0002\u0002\u0002\u0141\u013e\u0003\u0002\u0002\u0002\u0142\u0145\u0003", + "\u0002\u0002\u0002\u0143\u0141\u0003\u0002\u0002\u0002\u0143\u0144\u0003", + "\u0002\u0002\u0002\u0144\u0147\u0003\u0002\u0002\u0002\u0145\u0143\u0003", + "\u0002\u0002\u0002\u0146\u013c\u0003\u0002\u0002\u0002\u0146\u0147\u0003", + "\u0002\u0002\u0002\u0147\u0148\u0003\u0002\u0002\u0002\u0148\u0149\u0007", + "\u0012\u0002\u0002\u0149!\u0003\u0002\u0002\u0002\u014a\u014b\u0007", + "\u001c\u0002\u0002\u014b\u014c\u00054\u001b\u0002\u014c\u014d\u0005", + ",\u0017\u0002\u014d\u014e\u0005N(\u0002\u014e#\u0003\u0002\u0002\u0002", + "\u014f\u0150\u0007\u001d\u0002\u0002\u0150\u0152\u0005\u00aaV\u0002", + "\u0151\u0153\u00054\u001b\u0002\u0152\u0151\u0003\u0002\u0002\u0002", + "\u0152\u0153\u0003\u0002\u0002\u0002\u0153\u0154\u0003\u0002\u0002\u0002", + "\u0154\u0155\u0005N(\u0002\u0155%\u0003\u0002\u0002\u0002\u0156\u015c", + "\u0005\u00aaV\u0002\u0157\u0159\u0007\u0017\u0002\u0002\u0158\u015a", + "\u0005v<\u0002\u0159\u0158\u0003\u0002\u0002\u0002\u0159\u015a\u0003", + "\u0002\u0002\u0002\u015a\u015b\u0003\u0002\u0002\u0002\u015b\u015d\u0007", + "\u0018\u0002\u0002\u015c\u0157\u0003\u0002\u0002\u0002\u015c\u015d\u0003", + "\u0002\u0002\u0002\u015d\'\u0003\u0002\u0002\u0002\u015e\u0160\u0005", + "\u0014\u000b\u0002\u015f\u015e\u0003\u0002\u0002\u0002\u015f\u0160\u0003", + "\u0002\u0002\u0002\u0160\u0161\u0003\u0002\u0002\u0002\u0161\u0163\u0007", + "\u001e\u0002\u0002\u0162\u0164\u0005\u00aaV\u0002\u0163\u0162\u0003", + "\u0002\u0002\u0002\u0163\u0164\u0003\u0002\u0002\u0002\u0164\u0165\u0003", + "\u0002\u0002\u0002\u0165\u0166\u00054\u001b\u0002\u0166\u0168\u0005", + ",\u0017\u0002\u0167\u0169\u0005*\u0016\u0002\u0168\u0167\u0003\u0002", + "\u0002\u0002\u0168\u0169\u0003\u0002\u0002\u0002\u0169\u016c\u0003\u0002", + "\u0002\u0002\u016a\u016d\u0007\u0004\u0002\u0002\u016b\u016d\u0005N", + "(\u0002\u016c\u016a\u0003\u0002\u0002\u0002\u016c\u016b\u0003\u0002", + "\u0002\u0002\u016d)\u0003\u0002\u0002\u0002\u016e\u016f\u0007\u001f", + "\u0002\u0002\u016f\u0170\u00054\u001b\u0002\u0170+\u0003\u0002\u0002", + "\u0002\u0171\u0178\u0005&\u0014\u0002\u0172\u0178\u0005L\'\u0002\u0173", + "\u0178\u0007o\u0002\u0002\u0174\u0178\u0007t\u0002\u0002\u0175\u0178", + "\u0007q\u0002\u0002\u0176\u0178\u0007s\u0002\u0002\u0177\u0171\u0003", + "\u0002\u0002\u0002\u0177\u0172\u0003\u0002\u0002\u0002\u0177\u0173\u0003", + "\u0002\u0002\u0002\u0177\u0174\u0003\u0002\u0002\u0002\u0177\u0175\u0003", + "\u0002\u0002\u0002\u0177\u0176\u0003\u0002\u0002\u0002\u0178\u017b\u0003", + "\u0002\u0002\u0002\u0179\u0177\u0003\u0002\u0002\u0002\u0179\u017a\u0003", + "\u0002\u0002\u0002\u017a-\u0003\u0002\u0002\u0002\u017b\u0179\u0003", + "\u0002\u0002\u0002\u017c\u017e\u0005\u0014\u000b\u0002\u017d\u017c\u0003", + "\u0002\u0002\u0002\u017d\u017e\u0003\u0002\u0002\u0002\u017e\u017f\u0003", + "\u0002\u0002\u0002\u017f\u0180\u0007 \u0002\u0002\u0180\u0181\u0005", + "\u00aaV\u0002\u0181\u0183\u00058\u001d\u0002\u0182\u0184\u0007k\u0002", + "\u0002\u0183\u0182\u0003\u0002\u0002\u0002\u0183\u0184\u0003\u0002\u0002", + "\u0002\u0184\u0185\u0003\u0002\u0002\u0002\u0185\u0186\u0007\u0004\u0002", + "\u0002\u0186/\u0003\u0002\u0002\u0002\u0187\u0188\u0005\u00aaV\u0002", + "\u01881\u0003\u0002\u0002\u0002\u0189\u018a\u0007!\u0002\u0002\u018a", + "\u018b\u0005\u00aaV\u0002\u018b\u018d\u0007\u0010\u0002\u0002\u018c", + "\u018e\u00050\u0019\u0002\u018d\u018c\u0003\u0002\u0002\u0002\u018d", + "\u018e\u0003\u0002\u0002\u0002\u018e\u0193\u0003\u0002\u0002\u0002\u018f", + "\u0190\u0007\u0011\u0002\u0002\u0190\u0192\u00050\u0019\u0002\u0191", + "\u018f\u0003\u0002\u0002\u0002\u0192\u0195\u0003\u0002\u0002\u0002\u0193", + "\u0191\u0003\u0002\u0002\u0002\u0193\u0194\u0003\u0002\u0002\u0002\u0194", + "\u0196\u0003\u0002\u0002\u0002\u0195\u0193\u0003\u0002\u0002\u0002\u0196", + "\u0197\u0007\u0012\u0002\u0002\u01973\u0003\u0002\u0002\u0002\u0198", + "\u01a1\u0007\u0017\u0002\u0002\u0199\u019e\u00056\u001c\u0002\u019a", + "\u019b\u0007\u0011\u0002\u0002\u019b\u019d\u00056\u001c\u0002\u019c", + "\u019a\u0003\u0002\u0002\u0002\u019d\u01a0\u0003\u0002\u0002\u0002\u019e", + "\u019c\u0003\u0002\u0002\u0002\u019e\u019f\u0003\u0002\u0002\u0002\u019f", + "\u01a2\u0003\u0002\u0002\u0002\u01a0\u019e\u0003\u0002\u0002\u0002\u01a1", + "\u0199\u0003\u0002\u0002\u0002\u01a1\u01a2\u0003\u0002\u0002\u0002\u01a2", + "\u01a3\u0003\u0002\u0002\u0002\u01a3\u01a4\u0007\u0018\u0002\u0002\u01a4", + "5\u0003\u0002\u0002\u0002\u01a5\u01a7\u0005B\"\u0002\u01a6\u01a8\u0005", + "J&\u0002\u01a7\u01a6\u0003\u0002\u0002\u0002\u01a7\u01a8\u0003\u0002", + "\u0002\u0002\u01a8\u01aa\u0003\u0002\u0002\u0002\u01a9\u01ab\u0005\u00aa", + "V\u0002\u01aa\u01a9\u0003\u0002\u0002\u0002\u01aa\u01ab\u0003\u0002", + "\u0002\u0002\u01ab7\u0003\u0002\u0002\u0002\u01ac\u01b5\u0007\u0017", + "\u0002\u0002\u01ad\u01b2\u0005:\u001e\u0002\u01ae\u01af\u0007\u0011", + "\u0002\u0002\u01af\u01b1\u0005:\u001e\u0002\u01b0\u01ae\u0003\u0002", + "\u0002\u0002\u01b1\u01b4\u0003\u0002\u0002\u0002\u01b2\u01b0\u0003\u0002", + "\u0002\u0002\u01b2\u01b3\u0003\u0002\u0002\u0002\u01b3\u01b6\u0003\u0002", + "\u0002\u0002\u01b4\u01b2\u0003\u0002\u0002\u0002\u01b5\u01ad\u0003\u0002", + "\u0002\u0002\u01b5\u01b6\u0003\u0002\u0002\u0002\u01b6\u01b7\u0003\u0002", + "\u0002\u0002\u01b7\u01b8\u0007\u0018\u0002\u0002\u01b89\u0003\u0002", + "\u0002\u0002\u01b9\u01bb\u0005B\"\u0002\u01ba\u01bc\u0007p\u0002\u0002", + "\u01bb\u01ba\u0003\u0002\u0002\u0002\u01bb\u01bc\u0003\u0002\u0002\u0002", + "\u01bc\u01be\u0003\u0002\u0002\u0002\u01bd\u01bf\u0005\u00aaV\u0002", + "\u01be\u01bd\u0003\u0002\u0002\u0002\u01be\u01bf\u0003\u0002\u0002\u0002", + "\u01bf;\u0003\u0002\u0002\u0002\u01c0\u01c9\u0007\u0017\u0002\u0002", + "\u01c1\u01c6\u0005> \u0002\u01c2\u01c3\u0007\u0011\u0002\u0002\u01c3", + "\u01c5\u0005> \u0002\u01c4\u01c2\u0003\u0002\u0002\u0002\u01c5\u01c8", + "\u0003\u0002\u0002\u0002\u01c6\u01c4\u0003\u0002\u0002\u0002\u01c6\u01c7", + "\u0003\u0002\u0002\u0002\u01c7\u01ca\u0003\u0002\u0002\u0002\u01c8\u01c6", + "\u0003\u0002\u0002\u0002\u01c9\u01c1\u0003\u0002\u0002\u0002\u01c9\u01ca", + "\u0003\u0002\u0002\u0002\u01ca\u01cb\u0003\u0002\u0002\u0002\u01cb\u01cc", + "\u0007\u0018\u0002\u0002\u01cc=\u0003\u0002\u0002\u0002\u01cd\u01cf", + "\u0005B\"\u0002\u01ce\u01d0\u0005J&\u0002\u01cf\u01ce\u0003\u0002\u0002", + "\u0002\u01cf\u01d0\u0003\u0002\u0002\u0002\u01d0?\u0003\u0002\u0002", + "\u0002\u01d1\u01d3\u0005B\"\u0002\u01d2\u01d4\u0005J&\u0002\u01d3\u01d2", + "\u0003\u0002\u0002\u0002\u01d3\u01d4\u0003\u0002\u0002\u0002\u01d4\u01d5", + "\u0003\u0002\u0002\u0002\u01d5\u01d6\u0005\u00aaV\u0002\u01d6A\u0003", + "\u0002\u0002\u0002\u01d7\u01d8\b\"\u0001\u0002\u01d8\u01df\u0005p9\u0002", + "\u01d9\u01df\u0005D#\u0002\u01da\u01df\u0005F$\u0002\u01db\u01df\u0005", + "H%\u0002\u01dc\u01dd\u0007$\u0002\u0002\u01dd\u01df\u0007r\u0002\u0002", + "\u01de\u01d7\u0003\u0002\u0002\u0002\u01de\u01d9\u0003\u0002\u0002\u0002", + "\u01de\u01da\u0003\u0002\u0002\u0002\u01de\u01db\u0003\u0002\u0002\u0002", + "\u01de\u01dc\u0003\u0002\u0002\u0002\u01df\u01e8\u0003\u0002\u0002\u0002", + "\u01e0\u01e1\f\u0005\u0002\u0002\u01e1\u01e3\u0007\"\u0002\u0002\u01e2", + "\u01e4\u0005r:\u0002\u01e3\u01e2\u0003\u0002\u0002\u0002\u01e3\u01e4", + "\u0003\u0002\u0002\u0002\u01e4\u01e5\u0003\u0002\u0002\u0002\u01e5\u01e7", + "\u0007#\u0002\u0002\u01e6\u01e0\u0003\u0002\u0002\u0002\u01e7\u01ea", + "\u0003\u0002\u0002\u0002\u01e8\u01e6\u0003\u0002\u0002\u0002\u01e8\u01e9", + "\u0003\u0002\u0002\u0002\u01e9C\u0003\u0002\u0002\u0002\u01ea\u01e8", + "\u0003\u0002\u0002\u0002\u01eb\u01f0\u0005\u00aaV\u0002\u01ec\u01ed", + "\u0007%\u0002\u0002\u01ed\u01ef\u0005\u00aaV\u0002\u01ee\u01ec\u0003", + "\u0002\u0002\u0002\u01ef\u01f2\u0003\u0002\u0002\u0002\u01f0\u01ee\u0003", + "\u0002\u0002\u0002\u01f0\u01f1\u0003\u0002\u0002\u0002\u01f1E\u0003", + "\u0002\u0002\u0002\u01f2\u01f0\u0003\u0002\u0002\u0002\u01f3\u01f4\u0007", + "&\u0002\u0002\u01f4\u01f5\u0007\u0017\u0002\u0002\u01f5\u01f6\u0005", + "p9\u0002\u01f6\u01f7\u0007\'\u0002\u0002\u01f7\u01f8\u0005B\"\u0002", + "\u01f8\u01f9\u0007\u0018\u0002\u0002\u01f9G\u0003\u0002\u0002\u0002", + "\u01fa\u01fb\u0007\u001e\u0002\u0002\u01fb\u0201\u0005<\u001f\u0002", + "\u01fc\u0200\u0007q\u0002\u0002\u01fd\u0200\u0007o\u0002\u0002\u01fe", + "\u0200\u0005L\'\u0002\u01ff\u01fc\u0003\u0002\u0002\u0002\u01ff\u01fd", + "\u0003\u0002\u0002\u0002\u01ff\u01fe\u0003\u0002\u0002\u0002\u0200\u0203", + "\u0003\u0002\u0002\u0002\u0201\u01ff\u0003\u0002\u0002\u0002\u0201\u0202", + "\u0003\u0002\u0002\u0002\u0202\u0206\u0003\u0002\u0002\u0002\u0203\u0201", + "\u0003\u0002\u0002\u0002\u0204\u0205\u0007\u001f\u0002\u0002\u0205\u0207", + "\u0005<\u001f\u0002\u0206\u0204\u0003\u0002\u0002\u0002\u0206\u0207", + "\u0003\u0002\u0002\u0002\u0207I\u0003\u0002\u0002\u0002\u0208\u0209", + "\t\u0006\u0002\u0002\u0209K\u0003\u0002\u0002\u0002\u020a\u020b\t\u0007", + "\u0002\u0002\u020bM\u0003\u0002\u0002\u0002\u020c\u0210\u0007\u0010", + "\u0002\u0002\u020d\u020f\u0005P)\u0002\u020e\u020d\u0003\u0002\u0002", + "\u0002\u020f\u0212\u0003\u0002\u0002\u0002\u0210\u020e\u0003\u0002\u0002", + "\u0002\u0210\u0211\u0003\u0002\u0002\u0002\u0211\u0213\u0003\u0002\u0002", + "\u0002\u0212\u0210\u0003\u0002\u0002\u0002\u0213\u0214\u0007\u0012\u0002", + "\u0002\u0214O\u0003\u0002\u0002\u0002\u0215\u0222\u0005T+\u0002\u0216", + "\u0222\u0005V,\u0002\u0217\u0222\u0005Z.\u0002\u0218\u0222\u0005N(\u0002", + "\u0219\u0222\u0005\\/\u0002\u021a\u0222\u0005^0\u0002\u021b\u0222\u0005", + "`1\u0002\u021c\u0222\u0005b2\u0002\u021d\u0222\u0005d3\u0002\u021e\u0222", + "\u0005f4\u0002\u021f\u0222\u0005h5\u0002\u0220\u0222\u0005X-\u0002\u0221", + "\u0215\u0003\u0002\u0002\u0002\u0221\u0216\u0003\u0002\u0002\u0002\u0221", + "\u0217\u0003\u0002\u0002\u0002\u0221\u0218\u0003\u0002\u0002\u0002\u0221", + "\u0219\u0003\u0002\u0002\u0002\u0221\u021a\u0003\u0002\u0002\u0002\u0221", + "\u021b\u0003\u0002\u0002\u0002\u0221\u021c\u0003\u0002\u0002\u0002\u0221", + "\u021d\u0003\u0002\u0002\u0002\u0221\u021e\u0003\u0002\u0002\u0002\u0221", + "\u021f\u0003\u0002\u0002\u0002\u0221\u0220\u0003\u0002\u0002\u0002\u0222", + "Q\u0003\u0002\u0002\u0002\u0223\u0224\u0005r:\u0002\u0224\u0225\u0007", + "\u0004\u0002\u0002\u0225S\u0003\u0002\u0002\u0002\u0226\u0227\u0007", + "+\u0002\u0002\u0227\u0228\u0007\u0017\u0002\u0002\u0228\u0229\u0005", + "r:\u0002\u0229\u022a\u0007\u0018\u0002\u0002\u022a\u022d\u0005P)\u0002", + "\u022b\u022c\u0007,\u0002\u0002\u022c\u022e\u0005P)\u0002\u022d\u022b", + "\u0003\u0002\u0002\u0002\u022d\u022e\u0003\u0002\u0002\u0002\u022eU", + "\u0003\u0002\u0002\u0002\u022f\u0230\u0007-\u0002\u0002\u0230\u0231", + "\u0007\u0017\u0002\u0002\u0231\u0232\u0005r:\u0002\u0232\u0233\u0007", + "\u0018\u0002\u0002\u0233\u0234\u0005P)\u0002\u0234W\u0003\u0002\u0002", + "\u0002\u0235\u0238\u0005j6\u0002\u0236\u0238\u0005R*\u0002\u0237\u0235", + "\u0003\u0002\u0002\u0002\u0237\u0236\u0003\u0002\u0002\u0002\u0238Y", + "\u0003\u0002\u0002\u0002\u0239\u023a\u0007\u001a\u0002\u0002\u023a\u023d", + "\u0007\u0017\u0002\u0002\u023b\u023e\u0005X-\u0002\u023c\u023e\u0007", + "\u0004\u0002\u0002\u023d\u023b\u0003\u0002\u0002\u0002\u023d\u023c\u0003", + "\u0002\u0002\u0002\u023e\u0241\u0003\u0002\u0002\u0002\u023f\u0242\u0005", + "R*\u0002\u0240\u0242\u0007\u0004\u0002\u0002\u0241\u023f\u0003\u0002", + "\u0002\u0002\u0241\u0240\u0003\u0002\u0002\u0002\u0242\u0244\u0003\u0002", + "\u0002\u0002\u0243\u0245\u0005r:\u0002\u0244\u0243\u0003\u0002\u0002", + "\u0002\u0244\u0245\u0003\u0002\u0002\u0002\u0245\u0246\u0003\u0002\u0002", + "\u0002\u0246\u0247\u0007\u0018\u0002\u0002\u0247\u0248\u0005P)\u0002", + "\u0248[\u0003\u0002\u0002\u0002\u0249\u024b\u0007.\u0002\u0002\u024a", + "\u024c\u0007y\u0002\u0002\u024b\u024a\u0003\u0002\u0002\u0002\u024b", + "\u024c\u0003\u0002\u0002\u0002\u024c\u024d\u0003\u0002\u0002\u0002\u024d", + "\u024e\u0005\u0080A\u0002\u024e]\u0003\u0002\u0002\u0002\u024f\u0250", + "\u0007/\u0002\u0002\u0250\u0251\u0005P)\u0002\u0251\u0252\u0007-\u0002", + "\u0002\u0252\u0253\u0007\u0017\u0002\u0002\u0253\u0254\u0005r:\u0002", + "\u0254\u0255\u0007\u0018\u0002\u0002\u0255\u0256\u0007\u0004\u0002\u0002", + "\u0256_\u0003\u0002\u0002\u0002\u0257\u0258\u0007n\u0002\u0002\u0258", + "\u0259\u0007\u0004\u0002\u0002\u0259a\u0003\u0002\u0002\u0002\u025a", + "\u025b\u0007l\u0002\u0002\u025b\u025c\u0007\u0004\u0002\u0002\u025c", + "c\u0003\u0002\u0002\u0002\u025d\u025f\u00070\u0002\u0002\u025e\u0260", + "\u0005r:\u0002\u025f\u025e\u0003\u0002\u0002\u0002\u025f\u0260\u0003", + "\u0002\u0002\u0002\u0260\u0261\u0003\u0002\u0002\u0002\u0261\u0262\u0007", + "\u0004\u0002\u0002\u0262e\u0003\u0002\u0002\u0002\u0263\u0264\u0007", + "1\u0002\u0002\u0264\u0265\u0007\u0004\u0002\u0002\u0265g\u0003\u0002", + "\u0002\u0002\u0266\u0267\u00072\u0002\u0002\u0267\u0268\u0005~@\u0002", + "\u0268\u0269\u0007\u0004\u0002\u0002\u0269i\u0003\u0002\u0002\u0002", + "\u026a\u026b\u00073\u0002\u0002\u026b\u0272\u0005n8\u0002\u026c\u0272", + "\u0005@!\u0002\u026d\u026e\u0007\u0017\u0002\u0002\u026e\u026f\u0005", + "l7\u0002\u026f\u0270\u0007\u0018\u0002\u0002\u0270\u0272\u0003\u0002", + "\u0002\u0002\u0271\u026a\u0003\u0002\u0002\u0002\u0271\u026c\u0003\u0002", + "\u0002\u0002\u0271\u026d\u0003\u0002\u0002\u0002\u0272\u0275\u0003\u0002", + "\u0002\u0002\u0273\u0274\u0007\u000b\u0002\u0002\u0274\u0276\u0005r", + ":\u0002\u0275\u0273\u0003\u0002\u0002\u0002\u0275\u0276\u0003\u0002", + "\u0002\u0002\u0276\u0277\u0003\u0002\u0002\u0002\u0277\u0278\u0007\u0004", + "\u0002\u0002\u0278k\u0003\u0002\u0002\u0002\u0279\u027b\u0005@!\u0002", + "\u027a\u0279\u0003\u0002\u0002\u0002\u027a\u027b\u0003\u0002\u0002\u0002", + "\u027b\u0282\u0003\u0002\u0002\u0002\u027c\u027e\u0007\u0011\u0002\u0002", + "\u027d\u027f\u0005@!\u0002\u027e\u027d\u0003\u0002\u0002\u0002\u027e", + "\u027f\u0003\u0002\u0002\u0002\u027f\u0281\u0003\u0002\u0002\u0002\u0280", + "\u027c\u0003\u0002\u0002\u0002\u0281\u0284\u0003\u0002\u0002\u0002\u0282", + "\u0280\u0003\u0002\u0002\u0002\u0282\u0283\u0003\u0002\u0002\u0002\u0283", + "m\u0003\u0002\u0002\u0002\u0284\u0282\u0003\u0002\u0002\u0002\u0285", + "\u028c\u0007\u0017\u0002\u0002\u0286\u0288\u0005\u00aaV\u0002\u0287", + "\u0286\u0003\u0002\u0002\u0002\u0287\u0288\u0003\u0002\u0002\u0002\u0288", + "\u0289\u0003\u0002\u0002\u0002\u0289\u028b\u0007\u0011\u0002\u0002\u028a", + "\u0287\u0003\u0002\u0002\u0002\u028b\u028e\u0003\u0002\u0002\u0002\u028c", + "\u028a\u0003\u0002\u0002\u0002\u028c\u028d\u0003\u0002\u0002\u0002\u028d", + "\u0290\u0003\u0002\u0002\u0002\u028e\u028c\u0003\u0002\u0002\u0002\u028f", + "\u0291\u0005\u00aaV\u0002\u0290\u028f\u0003\u0002\u0002\u0002\u0290", + "\u0291\u0003\u0002\u0002\u0002\u0291\u0292\u0003\u0002\u0002\u0002\u0292", + "\u0293\u0007\u0018\u0002\u0002\u0293o\u0003\u0002\u0002\u0002\u0294", + "\u0295\t\b\u0002\u0002\u0295q\u0003\u0002\u0002\u0002\u0296\u0297\b", + ":\u0001\u0002\u0297\u0298\u00079\u0002\u0002\u0298\u02a9\u0005B\"\u0002", + "\u0299\u029a\u0007\u0017\u0002\u0002\u029a\u029b\u0005r:\u0002\u029b", + "\u029c\u0007\u0018\u0002\u0002\u029c\u02a9\u0003\u0002\u0002\u0002\u029d", + "\u029e\t\t\u0002\u0002\u029e\u02a9\u0005r:\u0015\u029f\u02a0\t\n\u0002", + "\u0002\u02a0\u02a9\u0005r:\u0014\u02a1\u02a2\t\u000b\u0002\u0002\u02a2", + "\u02a9\u0005r:\u0013\u02a3\u02a4\u0007>\u0002\u0002\u02a4\u02a9\u0005", + "r:\u0012\u02a5\u02a6\u0007\u0006\u0002\u0002\u02a6\u02a9\u0005r:\u0011", + "\u02a7\u02a9\u0005t;\u0002\u02a8\u0296\u0003\u0002\u0002\u0002\u02a8", + "\u0299\u0003\u0002\u0002\u0002\u02a8\u029d\u0003\u0002\u0002\u0002\u02a8", + "\u029f\u0003\u0002\u0002\u0002\u02a8\u02a1\u0003\u0002\u0002\u0002\u02a8", + "\u02a3\u0003\u0002\u0002\u0002\u02a8\u02a5\u0003\u0002\u0002\u0002\u02a8", + "\u02a7\u0003\u0002\u0002\u0002\u02a9\u02e5\u0003\u0002\u0002\u0002\u02aa", + "\u02ab\f\u0010\u0002\u0002\u02ab\u02ac\u0007?\u0002\u0002\u02ac\u02e4", + "\u0005r:\u0011\u02ad\u02ae\f\u000f\u0002\u0002\u02ae\u02af\t\f\u0002", + "\u0002\u02af\u02e4\u0005r:\u0010\u02b0\u02b1\f\u000e\u0002\u0002\u02b1", + "\u02b2\t\n\u0002\u0002\u02b2\u02e4\u0005r:\u000f\u02b3\u02b4\f\r\u0002", + "\u0002\u02b4\u02b5\t\r\u0002\u0002\u02b5\u02e4\u0005r:\u000e\u02b6\u02b7", + "\f\f\u0002\u0002\u02b7\u02b8\u0007D\u0002\u0002\u02b8\u02e4\u0005r:", + "\r\u02b9\u02ba\f\u000b\u0002\u0002\u02ba\u02bb\u0007\u0005\u0002\u0002", + "\u02bb\u02e4\u0005r:\f\u02bc\u02bd\f\n\u0002\u0002\u02bd\u02be\u0007", + "E\u0002\u0002\u02be\u02e4\u0005r:\u000b\u02bf\u02c0\f\t\u0002\u0002", + "\u02c0\u02c1\t\u000e\u0002\u0002\u02c1\u02e4\u0005r:\n\u02c2\u02c3\f", + "\b\u0002\u0002\u02c3\u02c4\t\u000f\u0002\u0002\u02c4\u02e4\u0005r:\t", + "\u02c5\u02c6\f\u0007\u0002\u0002\u02c6\u02c7\u0007H\u0002\u0002\u02c7", + "\u02e4\u0005r:\b\u02c8\u02c9\f\u0006\u0002\u0002\u02c9\u02ca\u0007I", + "\u0002\u0002\u02ca\u02e4\u0005r:\u0007\u02cb\u02cc\f\u0005\u0002\u0002", + "\u02cc\u02cd\u0007J\u0002\u0002\u02cd\u02ce\u0005r:\u0002\u02ce\u02cf", + "\u0007K\u0002\u0002\u02cf\u02d0\u0005r:\u0006\u02d0\u02e4\u0003\u0002", + "\u0002\u0002\u02d1\u02d2\f\u0004\u0002\u0002\u02d2\u02d3\t\u0010\u0002", + "\u0002\u02d3\u02e4\u0005r:\u0005\u02d4\u02d5\f\u001b\u0002\u0002\u02d5", + "\u02e4\t\t\u0002\u0002\u02d6\u02d7\f\u0019\u0002\u0002\u02d7\u02d8\u0007", + "\"\u0002\u0002\u02d8\u02d9\u0005r:\u0002\u02d9\u02da\u0007#\u0002\u0002", + "\u02da\u02e4\u0003\u0002\u0002\u0002\u02db\u02dc\f\u0018\u0002\u0002", + "\u02dc\u02dd\u0007\u0017\u0002\u0002\u02dd\u02de\u0005|?\u0002\u02de", + "\u02df\u0007\u0018\u0002\u0002\u02df\u02e4\u0003\u0002\u0002\u0002\u02e0", + "\u02e1\f\u0017\u0002\u0002\u02e1\u02e2\u0007%\u0002\u0002\u02e2\u02e4", + "\u0005\u00aaV\u0002\u02e3\u02aa\u0003\u0002\u0002\u0002\u02e3\u02ad", + "\u0003\u0002\u0002\u0002\u02e3\u02b0\u0003\u0002\u0002\u0002\u02e3\u02b3", + "\u0003\u0002\u0002\u0002\u02e3\u02b6\u0003\u0002\u0002\u0002\u02e3\u02b9", + "\u0003\u0002\u0002\u0002\u02e3\u02bc\u0003\u0002\u0002\u0002\u02e3\u02bf", + "\u0003\u0002\u0002\u0002\u02e3\u02c2\u0003\u0002\u0002\u0002\u02e3\u02c5", + "\u0003\u0002\u0002\u0002\u02e3\u02c8\u0003\u0002\u0002\u0002\u02e3\u02cb", + "\u0003\u0002\u0002\u0002\u02e3\u02d1\u0003\u0002\u0002\u0002\u02e3\u02d4", + "\u0003\u0002\u0002\u0002\u02e3\u02d6\u0003\u0002\u0002\u0002\u02e3\u02db", + "\u0003\u0002\u0002\u0002\u02e3\u02e0\u0003\u0002\u0002\u0002\u02e4\u02e7", + "\u0003\u0002\u0002\u0002\u02e5\u02e3\u0003\u0002\u0002\u0002\u02e5\u02e6", + "\u0003\u0002\u0002\u0002\u02e6s\u0003\u0002\u0002\u0002\u02e7\u02e5", + "\u0003\u0002\u0002\u0002\u02e8\u02f9\u0007e\u0002\u0002\u02e9\u02f9", + "\u0005\u00a8U\u0002\u02ea\u02f9\u0007i\u0002\u0002\u02eb\u02f9\u0007", + "y\u0002\u0002\u02ec\u02ef\u0005\u00aaV\u0002\u02ed\u02ee\u0007\"\u0002", + "\u0002\u02ee\u02f0\u0007#\u0002\u0002\u02ef\u02ed\u0003\u0002\u0002", + "\u0002\u02ef\u02f0\u0003\u0002\u0002\u0002\u02f0\u02f9\u0003\u0002\u0002", + "\u0002\u02f1\u02f9\u0007v\u0002\u0002\u02f2\u02f9\u0005\u00a4S\u0002", + "\u02f3\u02f6\u0005\u00a6T\u0002\u02f4\u02f5\u0007\"\u0002\u0002\u02f5", + "\u02f7\u0007#\u0002\u0002\u02f6\u02f4\u0003\u0002\u0002\u0002\u02f6", + "\u02f7\u0003\u0002\u0002\u0002\u02f7\u02f9\u0003\u0002\u0002\u0002\u02f8", + "\u02e8\u0003\u0002\u0002\u0002\u02f8\u02e9\u0003\u0002\u0002\u0002\u02f8", + "\u02ea\u0003\u0002\u0002\u0002\u02f8\u02eb\u0003\u0002\u0002\u0002\u02f8", + "\u02ec\u0003\u0002\u0002\u0002\u02f8\u02f1\u0003\u0002\u0002\u0002\u02f8", + "\u02f2\u0003\u0002\u0002\u0002\u02f8\u02f3\u0003\u0002\u0002\u0002\u02f9", + "u\u0003\u0002\u0002\u0002\u02fa\u02ff\u0005r:\u0002\u02fb\u02fc\u0007", + "\u0011\u0002\u0002\u02fc\u02fe\u0005r:\u0002\u02fd\u02fb\u0003\u0002", + "\u0002\u0002\u02fe\u0301\u0003\u0002\u0002\u0002\u02ff\u02fd\u0003\u0002", + "\u0002\u0002\u02ff\u0300\u0003\u0002\u0002\u0002\u0300w\u0003\u0002", + "\u0002\u0002\u0301\u02ff\u0003\u0002\u0002\u0002\u0302\u0307\u0005z", + ">\u0002\u0303\u0304\u0007\u0011\u0002\u0002\u0304\u0306\u0005z>\u0002", + "\u0305\u0303\u0003\u0002\u0002\u0002\u0306\u0309\u0003\u0002\u0002\u0002", + "\u0307\u0305\u0003\u0002\u0002\u0002\u0307\u0308\u0003\u0002\u0002\u0002", + "\u0308\u030b\u0003\u0002\u0002\u0002\u0309\u0307\u0003\u0002\u0002\u0002", + "\u030a\u030c\u0007\u0011\u0002\u0002\u030b\u030a\u0003\u0002\u0002\u0002", + "\u030b\u030c\u0003\u0002\u0002\u0002\u030cy\u0003\u0002\u0002\u0002", + "\u030d\u030e\u0005\u00aaV\u0002\u030e\u030f\u0007K\u0002\u0002\u030f", + "\u0310\u0005r:\u0002\u0310{\u0003\u0002\u0002\u0002\u0311\u0313\u0007", + "\u0010\u0002\u0002\u0312\u0314\u0005x=\u0002\u0313\u0312\u0003\u0002", + "\u0002\u0002\u0313\u0314\u0003\u0002\u0002\u0002\u0314\u0315\u0003\u0002", + "\u0002\u0002\u0315\u031a\u0007\u0012\u0002\u0002\u0316\u0318\u0005v", + "<\u0002\u0317\u0316\u0003\u0002\u0002\u0002\u0317\u0318\u0003\u0002", + "\u0002\u0002\u0318\u031a\u0003\u0002\u0002\u0002\u0319\u0311\u0003\u0002", + "\u0002\u0002\u0319\u0317\u0003\u0002\u0002\u0002\u031a}\u0003\u0002", + "\u0002\u0002\u031b\u031c\u0005r:\u0002\u031c\u031d\u0007\u0017\u0002", + "\u0002\u031d\u031e\u0005|?\u0002\u031e\u031f\u0007\u0018\u0002\u0002", + "\u031f\u007f\u0003\u0002\u0002\u0002\u0320\u0324\u0007\u0010\u0002\u0002", + "\u0321\u0323\u0005\u0082B\u0002\u0322\u0321\u0003\u0002\u0002\u0002", + "\u0323\u0326\u0003\u0002\u0002\u0002\u0324\u0322\u0003\u0002\u0002\u0002", + "\u0324\u0325\u0003\u0002\u0002\u0002\u0325\u0327\u0003\u0002\u0002\u0002", + "\u0326\u0324\u0003\u0002\u0002\u0002\u0327\u0328\u0007\u0012\u0002\u0002", + "\u0328\u0081\u0003\u0002\u0002\u0002\u0329\u033b\u0005\u00aaV\u0002", + "\u032a\u033b\u0005\u0080A\u0002\u032b\u033b\u0005\u0084C\u0002\u032c", + "\u033b\u0005\u0088E\u0002\u032d\u033b\u0005\u008aF\u0002\u032e\u033b", + "\u0005\u0090I\u0002\u032f\u033b\u0005\u0092J\u0002\u0330\u033b\u0005", + "\u0094K\u0002\u0331\u033b\u0005\u0098M\u0002\u0332\u033b\u0005\u009c", + "O\u0002\u0333\u033b\u0005\u009eP\u0002\u0334\u033b\u0007l\u0002\u0002", + "\u0335\u033b\u0007n\u0002\u0002\u0336\u033b\u0005\u00a2R\u0002\u0337", + "\u033b\u0005\u00a8U\u0002\u0338\u033b\u0007y\u0002\u0002\u0339\u033b", + "\u0007i\u0002\u0002\u033a\u0329\u0003\u0002\u0002\u0002\u033a\u032a", + "\u0003\u0002\u0002\u0002\u033a\u032b\u0003\u0002\u0002\u0002\u033a\u032c", + "\u0003\u0002\u0002\u0002\u033a\u032d\u0003\u0002\u0002\u0002\u033a\u032e", + "\u0003\u0002\u0002\u0002\u033a\u032f\u0003\u0002\u0002\u0002\u033a\u0330", + "\u0003\u0002\u0002\u0002\u033a\u0331\u0003\u0002\u0002\u0002\u033a\u0332", + "\u0003\u0002\u0002\u0002\u033a\u0333\u0003\u0002\u0002\u0002\u033a\u0334", + "\u0003\u0002\u0002\u0002\u033a\u0335\u0003\u0002\u0002\u0002\u033a\u0336", + "\u0003\u0002\u0002\u0002\u033a\u0337\u0003\u0002\u0002\u0002\u033a\u0338", + "\u0003\u0002\u0002\u0002\u033a\u0339\u0003\u0002\u0002\u0002\u033b\u0083", + "\u0003\u0002\u0002\u0002\u033c\u033f\u0005\u0086D\u0002\u033d\u033f", + "\u0005\u00a0Q\u0002\u033e\u033c\u0003\u0002\u0002\u0002\u033e\u033d", + "\u0003\u0002\u0002\u0002\u033f\u0085\u0003\u0002\u0002\u0002\u0340\u0345", + "\u00070\u0002\u0002\u0341\u0345\u0007$\u0002\u0002\u0342\u0345\u0007", + "6\u0002\u0002\u0343\u0345\u0005\u00aaV\u0002\u0344\u0340\u0003\u0002", + "\u0002\u0002\u0344\u0341\u0003\u0002\u0002\u0002\u0344\u0342\u0003\u0002", + "\u0002\u0002\u0344\u0343\u0003\u0002\u0002\u0002\u0345\u0352\u0003\u0002", + "\u0002\u0002\u0346\u0348\u0007\u0017\u0002\u0002\u0347\u0349\u0005\u0084", + "C\u0002\u0348\u0347\u0003\u0002\u0002\u0002\u0348\u0349\u0003\u0002", + "\u0002\u0002\u0349\u034e\u0003\u0002\u0002\u0002\u034a\u034b\u0007\u0011", + "\u0002\u0002\u034b\u034d\u0005\u0084C\u0002\u034c\u034a\u0003\u0002", + "\u0002\u0002\u034d\u0350\u0003\u0002\u0002\u0002\u034e\u034c\u0003\u0002", + "\u0002\u0002\u034e\u034f\u0003\u0002\u0002\u0002\u034f\u0351\u0003\u0002", + "\u0002\u0002\u0350\u034e\u0003\u0002\u0002\u0002\u0351\u0353\u0007\u0018", + "\u0002\u0002\u0352\u0346\u0003\u0002\u0002\u0002\u0352\u0353\u0003\u0002", + "\u0002\u0002\u0353\u0087\u0003\u0002\u0002\u0002\u0354\u0355\u0007V", + "\u0002\u0002\u0355\u0358\u0005\u008cG\u0002\u0356\u0357\u0007W\u0002", + "\u0002\u0357\u0359\u0005\u0084C\u0002\u0358\u0356\u0003\u0002\u0002", + "\u0002\u0358\u0359\u0003\u0002\u0002\u0002\u0359\u0089\u0003\u0002\u0002", + "\u0002\u035a\u035b\u0005\u008cG\u0002\u035b\u035c\u0007W\u0002\u0002", + "\u035c\u035d\u0005\u0084C\u0002\u035d\u008b\u0003\u0002\u0002\u0002", + "\u035e\u0364\u0005\u00aaV\u0002\u035f\u0360\u0007\u0017\u0002\u0002", + "\u0360\u0361\u0005\u008eH\u0002\u0361\u0362\u0007\u0018\u0002\u0002", + "\u0362\u0364\u0003\u0002\u0002\u0002\u0363\u035e\u0003\u0002\u0002\u0002", + "\u0363\u035f\u0003\u0002\u0002\u0002\u0364\u008d\u0003\u0002\u0002\u0002", + "\u0365\u036a\u0005\u00aaV\u0002\u0366\u0367\u0007\u0011\u0002\u0002", + "\u0367\u0369\u0005\u00aaV\u0002\u0368\u0366\u0003\u0002\u0002\u0002", + "\u0369\u036c\u0003\u0002\u0002\u0002\u036a\u0368\u0003\u0002\u0002\u0002", + "\u036a\u036b\u0003\u0002\u0002\u0002\u036b\u008f\u0003\u0002\u0002\u0002", + "\u036c\u036a\u0003\u0002\u0002\u0002\u036d\u036e\u0007X\u0002\u0002", + "\u036e\u036f\u0005\u00aaV\u0002\u036f\u0091\u0003\u0002\u0002\u0002", + "\u0370\u0371\u0005\u00aaV\u0002\u0371\u0372\u0007K\u0002\u0002\u0372", + "\u0093\u0003\u0002\u0002\u0002\u0373\u0374\u0007Y\u0002\u0002\u0374", + "\u0378\u0005\u0084C\u0002\u0375\u0377\u0005\u0096L\u0002\u0376\u0375", + "\u0003\u0002\u0002\u0002\u0377\u037a\u0003\u0002\u0002\u0002\u0378\u0376", + "\u0003\u0002\u0002\u0002\u0378\u0379\u0003\u0002\u0002\u0002\u0379\u0095", + "\u0003\u0002\u0002\u0002\u037a\u0378\u0003\u0002\u0002\u0002\u037b\u037c", + "\u0007Z\u0002\u0002\u037c\u037d\u0005\u00a0Q\u0002\u037d\u037e\u0005", + "\u0080A\u0002\u037e\u0382\u0003\u0002\u0002\u0002\u037f\u0380\u0007", + "[\u0002\u0002\u0380\u0382\u0005\u0080A\u0002\u0381\u037b\u0003\u0002", + "\u0002\u0002\u0381\u037f\u0003\u0002\u0002\u0002\u0382\u0097\u0003\u0002", + "\u0002\u0002\u0383\u0384\u0007\u001e\u0002\u0002\u0384\u0385\u0005\u00aa", + "V\u0002\u0385\u0387\u0007\u0017\u0002\u0002\u0386\u0388\u0005\u008e", + "H\u0002\u0387\u0386\u0003\u0002\u0002\u0002\u0387\u0388\u0003\u0002", + "\u0002\u0002\u0388\u0389\u0003\u0002\u0002\u0002\u0389\u038b\u0007\u0018", + "\u0002\u0002\u038a\u038c\u0005\u009aN\u0002\u038b\u038a\u0003\u0002", + "\u0002\u0002\u038b\u038c\u0003\u0002\u0002\u0002\u038c\u038d\u0003\u0002", + "\u0002\u0002\u038d\u038e\u0005\u0080A\u0002\u038e\u0099\u0003\u0002", + "\u0002\u0002\u038f\u0390\u0007\\\u0002\u0002\u0390\u0391\u0005\u008e", + "H\u0002\u0391\u009b\u0003\u0002\u0002\u0002\u0392\u0395\u0007\u001a", + "\u0002\u0002\u0393\u0396\u0005\u0080A\u0002\u0394\u0396\u0005\u0084", + "C\u0002\u0395\u0393\u0003\u0002\u0002\u0002\u0395\u0394\u0003\u0002", + "\u0002\u0002\u0396\u0397\u0003\u0002\u0002\u0002\u0397\u039a\u0005\u0084", + "C\u0002\u0398\u039b\u0005\u0080A\u0002\u0399\u039b\u0005\u0084C\u0002", + "\u039a\u0398\u0003\u0002\u0002\u0002\u039a\u0399\u0003\u0002\u0002\u0002", + "\u039b\u039c\u0003\u0002\u0002\u0002\u039c\u039d\u0005\u0080A\u0002", + "\u039d\u009d\u0003\u0002\u0002\u0002\u039e\u039f\u0007+\u0002\u0002", + "\u039f\u03a0\u0005\u0084C\u0002\u03a0\u03a1\u0005\u0080A\u0002\u03a1", + "\u009f\u0003\u0002\u0002\u0002\u03a2\u03a3\t\u0011\u0002\u0002\u03a3", + "\u00a1\u0003\u0002\u0002\u0002\u03a4\u03a5\u0007.\u0002\u0002\u03a5", + "\u03a6\u0005\u00aaV\u0002\u03a6\u03a7\u0005\u0080A\u0002\u03a7\u00a3", + "\u0003\u0002\u0002\u0002\u03a8\u03aa\u0007\u0017\u0002\u0002\u03a9\u03ab", + "\u0005r:\u0002\u03aa\u03a9\u0003\u0002\u0002\u0002\u03aa\u03ab\u0003", + "\u0002\u0002\u0002\u03ab\u03b2\u0003\u0002\u0002\u0002\u03ac\u03ae\u0007", + "\u0011\u0002\u0002\u03ad\u03af\u0005r:\u0002\u03ae\u03ad\u0003\u0002", + "\u0002\u0002\u03ae\u03af\u0003\u0002\u0002\u0002\u03af\u03b1\u0003\u0002", + "\u0002\u0002\u03b0\u03ac\u0003\u0002\u0002\u0002\u03b1\u03b4\u0003\u0002", + "\u0002\u0002\u03b2\u03b0\u0003\u0002\u0002\u0002\u03b2\u03b3\u0003\u0002", + "\u0002\u0002\u03b3\u03b5\u0003\u0002\u0002\u0002\u03b4\u03b2\u0003\u0002", + "\u0002\u0002\u03b5\u03c3\u0007\u0018\u0002\u0002\u03b6\u03bf\u0007\"", + "\u0002\u0002\u03b7\u03bc\u0005r:\u0002\u03b8\u03b9\u0007\u0011\u0002", + "\u0002\u03b9\u03bb\u0005r:\u0002\u03ba\u03b8\u0003\u0002\u0002\u0002", + "\u03bb\u03be\u0003\u0002\u0002\u0002\u03bc\u03ba\u0003\u0002\u0002\u0002", + "\u03bc\u03bd\u0003\u0002\u0002\u0002\u03bd\u03c0\u0003\u0002\u0002\u0002", + "\u03be\u03bc\u0003\u0002\u0002\u0002\u03bf\u03b7\u0003\u0002\u0002\u0002", + "\u03bf\u03c0\u0003\u0002\u0002\u0002\u03c0\u03c1\u0003\u0002\u0002\u0002", + "\u03c1\u03c3\u0007#\u0002\u0002\u03c2\u03a8\u0003\u0002\u0002\u0002", + "\u03c2\u03b6\u0003\u0002\u0002\u0002\u03c3\u00a5\u0003\u0002\u0002\u0002", + "\u03c4\u03c5\u0005p9\u0002\u03c5\u00a7\u0003\u0002\u0002\u0002\u03c6", + "\u03c8\t\u0012\u0002\u0002\u03c7\u03c9\u0007h\u0002\u0002\u03c8\u03c7", + "\u0003\u0002\u0002\u0002\u03c8\u03c9\u0003\u0002\u0002\u0002\u03c9\u00a9", + "\u0003\u0002\u0002\u0002\u03ca\u03cb\t\u0013\u0002\u0002\u03cb\u00ab", + "\u0003\u0002\u0002\u0002m\u00af\u00b1\u00bf\u00c3\u00c8\u00cf\u00d5", + "\u00db\u00df\u00eb\u00f3\u00f8\u0102\u0105\u010b\u0113\u0116\u0120\u0126", + "\u012c\u0135\u0143\u0146\u0152\u0159\u015c\u015f\u0163\u0168\u016c\u0177", + "\u0179\u017d\u0183\u018d\u0193\u019e\u01a1\u01a7\u01aa\u01b2\u01b5\u01bb", + "\u01be\u01c6\u01c9\u01cf\u01d3\u01de\u01e3\u01e8\u01f0\u01ff\u0201\u0206", + "\u0210\u0221\u022d\u0237\u023d\u0241\u0244\u024b\u025f\u0271\u0275\u027a", + "\u027e\u0282\u0287\u028c\u0290\u02a8\u02e3\u02e5\u02ef\u02f6\u02f8\u02ff", + "\u0307\u030b\u0313\u0317\u0319\u0324\u033a\u033e\u0344\u0348\u034e\u0352", + "\u0358\u0363\u036a\u0378\u0381\u0387\u038b\u0395\u039a\u03aa\u03ae\u03b2", + "\u03bc\u03bf\u03c2\u03c8"].join(""); var atn = new antlr4.atn.ATNDeserializer().deserialize(serializedATN); @@ -669,10 +676,10 @@ var literalNames = [ null, "'pragma'", "';'", "'^'", "'~'", "'>='", "'>'", "'<<='", "'>>='", "'+='", "'-='", "'*='", "'/='", "'%='", "'let'", "':='", "'=:'", "'switch'", "'case'", "'default'", "'->'", null, null, null, null, null, null, null, null, - null, null, null, null, "'anonymous'", "'break'", "'constant'", - "'continue'", "'external'", "'indexed'", "'internal'", - "'payable'", "'private'", "'public'", "'pure'", "'type'", - "'view'" ]; + null, null, null, null, null, null, "'anonymous'", + "'break'", "'constant'", "'continue'", "'external'", + "'indexed'", "'internal'", "'payable'", "'private'", + "'public'", "'pure'", "'type'", "'view'" ]; var symbolicNames = [ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, @@ -684,7 +691,8 @@ var symbolicNames = [ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, "Int", "Uint", "Byte", "Fixed", "Ufixed", "VersionLiteral", + null, "NatSpecSingleLine", "NatSpecMultiLine", "Int", + "Uint", "Byte", "Fixed", "Ufixed", "VersionLiteral", "BooleanLiteral", "DecimalNumber", "HexNumber", "NumberUnit", "HexLiteral", "ReservedKeyword", "AnonymousKeyword", "BreakKeyword", "ConstantKeyword", "ContinueKeyword", @@ -695,7 +703,7 @@ var symbolicNames = [ null, null, null, null, null, null, null, null, null, var ruleNames = [ "sourceUnit", "pragmaDirective", "pragmaName", "pragmaValue", "version", "versionOperator", "versionConstraint", "importDeclaration", - "importDirective", "contractDefinition", "inheritanceSpecifier", + "importDirective", "natSpec", "contractDefinition", "inheritanceSpecifier", "contractPart", "stateVariableDeclaration", "usingForDeclaration", "structDefinition", "constructorDefinition", "modifierDefinition", "modifierInvocation", "functionDefinition", "returnParameters", @@ -830,36 +838,38 @@ SolidityParser.T__86 = 87; SolidityParser.T__87 = 88; SolidityParser.T__88 = 89; SolidityParser.T__89 = 90; -SolidityParser.Int = 91; -SolidityParser.Uint = 92; -SolidityParser.Byte = 93; -SolidityParser.Fixed = 94; -SolidityParser.Ufixed = 95; -SolidityParser.VersionLiteral = 96; -SolidityParser.BooleanLiteral = 97; -SolidityParser.DecimalNumber = 98; -SolidityParser.HexNumber = 99; -SolidityParser.NumberUnit = 100; -SolidityParser.HexLiteral = 101; -SolidityParser.ReservedKeyword = 102; -SolidityParser.AnonymousKeyword = 103; -SolidityParser.BreakKeyword = 104; -SolidityParser.ConstantKeyword = 105; -SolidityParser.ContinueKeyword = 106; -SolidityParser.ExternalKeyword = 107; -SolidityParser.IndexedKeyword = 108; -SolidityParser.InternalKeyword = 109; -SolidityParser.PayableKeyword = 110; -SolidityParser.PrivateKeyword = 111; -SolidityParser.PublicKeyword = 112; -SolidityParser.PureKeyword = 113; -SolidityParser.TypeKeyword = 114; -SolidityParser.ViewKeyword = 115; -SolidityParser.Identifier = 116; -SolidityParser.StringLiteral = 117; -SolidityParser.WS = 118; -SolidityParser.COMMENT = 119; -SolidityParser.LINE_COMMENT = 120; +SolidityParser.NatSpecSingleLine = 91; +SolidityParser.NatSpecMultiLine = 92; +SolidityParser.Int = 93; +SolidityParser.Uint = 94; +SolidityParser.Byte = 95; +SolidityParser.Fixed = 96; +SolidityParser.Ufixed = 97; +SolidityParser.VersionLiteral = 98; +SolidityParser.BooleanLiteral = 99; +SolidityParser.DecimalNumber = 100; +SolidityParser.HexNumber = 101; +SolidityParser.NumberUnit = 102; +SolidityParser.HexLiteral = 103; +SolidityParser.ReservedKeyword = 104; +SolidityParser.AnonymousKeyword = 105; +SolidityParser.BreakKeyword = 106; +SolidityParser.ConstantKeyword = 107; +SolidityParser.ContinueKeyword = 108; +SolidityParser.ExternalKeyword = 109; +SolidityParser.IndexedKeyword = 110; +SolidityParser.InternalKeyword = 111; +SolidityParser.PayableKeyword = 112; +SolidityParser.PrivateKeyword = 113; +SolidityParser.PublicKeyword = 114; +SolidityParser.PureKeyword = 115; +SolidityParser.TypeKeyword = 116; +SolidityParser.ViewKeyword = 117; +SolidityParser.Identifier = 118; +SolidityParser.StringLiteral = 119; +SolidityParser.WS = 120; +SolidityParser.COMMENT = 121; +SolidityParser.LINE_COMMENT = 122; SolidityParser.RULE_sourceUnit = 0; SolidityParser.RULE_pragmaDirective = 1; @@ -870,81 +880,82 @@ SolidityParser.RULE_versionOperator = 5; SolidityParser.RULE_versionConstraint = 6; SolidityParser.RULE_importDeclaration = 7; SolidityParser.RULE_importDirective = 8; -SolidityParser.RULE_contractDefinition = 9; -SolidityParser.RULE_inheritanceSpecifier = 10; -SolidityParser.RULE_contractPart = 11; -SolidityParser.RULE_stateVariableDeclaration = 12; -SolidityParser.RULE_usingForDeclaration = 13; -SolidityParser.RULE_structDefinition = 14; -SolidityParser.RULE_constructorDefinition = 15; -SolidityParser.RULE_modifierDefinition = 16; -SolidityParser.RULE_modifierInvocation = 17; -SolidityParser.RULE_functionDefinition = 18; -SolidityParser.RULE_returnParameters = 19; -SolidityParser.RULE_modifierList = 20; -SolidityParser.RULE_eventDefinition = 21; -SolidityParser.RULE_enumValue = 22; -SolidityParser.RULE_enumDefinition = 23; -SolidityParser.RULE_parameterList = 24; -SolidityParser.RULE_parameter = 25; -SolidityParser.RULE_eventParameterList = 26; -SolidityParser.RULE_eventParameter = 27; -SolidityParser.RULE_functionTypeParameterList = 28; -SolidityParser.RULE_functionTypeParameter = 29; -SolidityParser.RULE_variableDeclaration = 30; -SolidityParser.RULE_typeName = 31; -SolidityParser.RULE_userDefinedTypeName = 32; -SolidityParser.RULE_mapping = 33; -SolidityParser.RULE_functionTypeName = 34; -SolidityParser.RULE_storageLocation = 35; -SolidityParser.RULE_stateMutability = 36; -SolidityParser.RULE_block = 37; -SolidityParser.RULE_statement = 38; -SolidityParser.RULE_expressionStatement = 39; -SolidityParser.RULE_ifStatement = 40; -SolidityParser.RULE_whileStatement = 41; -SolidityParser.RULE_simpleStatement = 42; -SolidityParser.RULE_forStatement = 43; -SolidityParser.RULE_inlineAssemblyStatement = 44; -SolidityParser.RULE_doWhileStatement = 45; -SolidityParser.RULE_continueStatement = 46; -SolidityParser.RULE_breakStatement = 47; -SolidityParser.RULE_returnStatement = 48; -SolidityParser.RULE_throwStatement = 49; -SolidityParser.RULE_emitStatement = 50; -SolidityParser.RULE_variableDeclarationStatement = 51; -SolidityParser.RULE_variableDeclarationList = 52; -SolidityParser.RULE_identifierList = 53; -SolidityParser.RULE_elementaryTypeName = 54; -SolidityParser.RULE_expression = 55; -SolidityParser.RULE_primaryExpression = 56; -SolidityParser.RULE_expressionList = 57; -SolidityParser.RULE_nameValueList = 58; -SolidityParser.RULE_nameValue = 59; -SolidityParser.RULE_functionCallArguments = 60; -SolidityParser.RULE_functionCall = 61; -SolidityParser.RULE_assemblyBlock = 62; -SolidityParser.RULE_assemblyItem = 63; -SolidityParser.RULE_assemblyExpression = 64; -SolidityParser.RULE_assemblyCall = 65; -SolidityParser.RULE_assemblyLocalDefinition = 66; -SolidityParser.RULE_assemblyAssignment = 67; -SolidityParser.RULE_assemblyIdentifierOrList = 68; -SolidityParser.RULE_assemblyIdentifierList = 69; -SolidityParser.RULE_assemblyStackAssignment = 70; -SolidityParser.RULE_labelDefinition = 71; -SolidityParser.RULE_assemblySwitch = 72; -SolidityParser.RULE_assemblyCase = 73; -SolidityParser.RULE_assemblyFunctionDefinition = 74; -SolidityParser.RULE_assemblyFunctionReturns = 75; -SolidityParser.RULE_assemblyFor = 76; -SolidityParser.RULE_assemblyIf = 77; -SolidityParser.RULE_assemblyLiteral = 78; -SolidityParser.RULE_subAssembly = 79; -SolidityParser.RULE_tupleExpression = 80; -SolidityParser.RULE_elementaryTypeNameExpression = 81; -SolidityParser.RULE_numberLiteral = 82; -SolidityParser.RULE_identifier = 83; +SolidityParser.RULE_natSpec = 9; +SolidityParser.RULE_contractDefinition = 10; +SolidityParser.RULE_inheritanceSpecifier = 11; +SolidityParser.RULE_contractPart = 12; +SolidityParser.RULE_stateVariableDeclaration = 13; +SolidityParser.RULE_usingForDeclaration = 14; +SolidityParser.RULE_structDefinition = 15; +SolidityParser.RULE_constructorDefinition = 16; +SolidityParser.RULE_modifierDefinition = 17; +SolidityParser.RULE_modifierInvocation = 18; +SolidityParser.RULE_functionDefinition = 19; +SolidityParser.RULE_returnParameters = 20; +SolidityParser.RULE_modifierList = 21; +SolidityParser.RULE_eventDefinition = 22; +SolidityParser.RULE_enumValue = 23; +SolidityParser.RULE_enumDefinition = 24; +SolidityParser.RULE_parameterList = 25; +SolidityParser.RULE_parameter = 26; +SolidityParser.RULE_eventParameterList = 27; +SolidityParser.RULE_eventParameter = 28; +SolidityParser.RULE_functionTypeParameterList = 29; +SolidityParser.RULE_functionTypeParameter = 30; +SolidityParser.RULE_variableDeclaration = 31; +SolidityParser.RULE_typeName = 32; +SolidityParser.RULE_userDefinedTypeName = 33; +SolidityParser.RULE_mapping = 34; +SolidityParser.RULE_functionTypeName = 35; +SolidityParser.RULE_storageLocation = 36; +SolidityParser.RULE_stateMutability = 37; +SolidityParser.RULE_block = 38; +SolidityParser.RULE_statement = 39; +SolidityParser.RULE_expressionStatement = 40; +SolidityParser.RULE_ifStatement = 41; +SolidityParser.RULE_whileStatement = 42; +SolidityParser.RULE_simpleStatement = 43; +SolidityParser.RULE_forStatement = 44; +SolidityParser.RULE_inlineAssemblyStatement = 45; +SolidityParser.RULE_doWhileStatement = 46; +SolidityParser.RULE_continueStatement = 47; +SolidityParser.RULE_breakStatement = 48; +SolidityParser.RULE_returnStatement = 49; +SolidityParser.RULE_throwStatement = 50; +SolidityParser.RULE_emitStatement = 51; +SolidityParser.RULE_variableDeclarationStatement = 52; +SolidityParser.RULE_variableDeclarationList = 53; +SolidityParser.RULE_identifierList = 54; +SolidityParser.RULE_elementaryTypeName = 55; +SolidityParser.RULE_expression = 56; +SolidityParser.RULE_primaryExpression = 57; +SolidityParser.RULE_expressionList = 58; +SolidityParser.RULE_nameValueList = 59; +SolidityParser.RULE_nameValue = 60; +SolidityParser.RULE_functionCallArguments = 61; +SolidityParser.RULE_functionCall = 62; +SolidityParser.RULE_assemblyBlock = 63; +SolidityParser.RULE_assemblyItem = 64; +SolidityParser.RULE_assemblyExpression = 65; +SolidityParser.RULE_assemblyCall = 66; +SolidityParser.RULE_assemblyLocalDefinition = 67; +SolidityParser.RULE_assemblyAssignment = 68; +SolidityParser.RULE_assemblyIdentifierOrList = 69; +SolidityParser.RULE_assemblyIdentifierList = 70; +SolidityParser.RULE_assemblyStackAssignment = 71; +SolidityParser.RULE_labelDefinition = 72; +SolidityParser.RULE_assemblySwitch = 73; +SolidityParser.RULE_assemblyCase = 74; +SolidityParser.RULE_assemblyFunctionDefinition = 75; +SolidityParser.RULE_assemblyFunctionReturns = 76; +SolidityParser.RULE_assemblyFor = 77; +SolidityParser.RULE_assemblyIf = 78; +SolidityParser.RULE_assemblyLiteral = 79; +SolidityParser.RULE_subAssembly = 80; +SolidityParser.RULE_tupleExpression = 81; +SolidityParser.RULE_elementaryTypeNameExpression = 82; +SolidityParser.RULE_numberLiteral = 83; +SolidityParser.RULE_identifier = 84; function SourceUnitContext(parser, parent, invokingState) { @@ -1024,35 +1035,37 @@ SolidityParser.prototype.sourceUnit = function() { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 173; + this.state = 175; this._errHandler.sync(this); _la = this._input.LA(1); - while((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__0) | (1 << SolidityParser.T__10) | (1 << SolidityParser.T__16) | (1 << SolidityParser.T__17) | (1 << SolidityParser.T__18))) !== 0)) { - this.state = 171; + while((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__0) | (1 << SolidityParser.T__10) | (1 << SolidityParser.T__16) | (1 << SolidityParser.T__17) | (1 << SolidityParser.T__18))) !== 0) || _la===SolidityParser.NatSpecSingleLine || _la===SolidityParser.NatSpecMultiLine) { + this.state = 173; this._errHandler.sync(this); switch(this._input.LA(1)) { case SolidityParser.T__0: - this.state = 168; + this.state = 170; this.pragmaDirective(); break; case SolidityParser.T__10: - this.state = 169; + this.state = 171; this.importDirective(); break; case SolidityParser.T__16: case SolidityParser.T__17: case SolidityParser.T__18: - this.state = 170; + case SolidityParser.NatSpecSingleLine: + case SolidityParser.NatSpecMultiLine: + this.state = 172; this.contractDefinition(); break; default: throw new antlr4.error.NoViableAltException(this); } - this.state = 175; + this.state = 177; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 176; + this.state = 178; this.match(SolidityParser.EOF); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -1116,13 +1129,13 @@ SolidityParser.prototype.pragmaDirective = function() { this.enterRule(localctx, 2, SolidityParser.RULE_pragmaDirective); try { this.enterOuterAlt(localctx, 1); - this.state = 178; + this.state = 180; this.match(SolidityParser.T__0); - this.state = 179; + this.state = 181; this.pragmaName(); - this.state = 180; + this.state = 182; this.pragmaValue(); - this.state = 181; + this.state = 183; this.match(SolidityParser.T__1); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -1182,7 +1195,7 @@ SolidityParser.prototype.pragmaName = function() { this.enterRule(localctx, 4, SolidityParser.RULE_pragmaName); try { this.enterOuterAlt(localctx, 1); - this.state = 183; + this.state = 185; this.identifier(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -1245,19 +1258,19 @@ SolidityParser.prototype.pragmaValue = function() { var localctx = new PragmaValueContext(this, this._ctx, this.state); this.enterRule(localctx, 6, SolidityParser.RULE_pragmaValue); try { - this.state = 187; + this.state = 189; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,2,this._ctx); switch(la_) { case 1: this.enterOuterAlt(localctx, 1); - this.state = 185; + this.state = 187; this.version(); break; case 2: this.enterOuterAlt(localctx, 2); - this.state = 186; + this.state = 188; this.expression(0); break; @@ -1328,13 +1341,13 @@ SolidityParser.prototype.version = function() { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 189; - this.versionConstraint(); this.state = 191; + this.versionConstraint(); + this.state = 193; this._errHandler.sync(this); _la = this._input.LA(1); if((((_la) & ~0x1f) == 0 && ((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) || _la===SolidityParser.VersionLiteral) { - this.state = 190; + this.state = 192; this.versionConstraint(); } @@ -1394,7 +1407,7 @@ SolidityParser.prototype.versionOperator = function() { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 193; + this.state = 195; _la = this._input.LA(1); if(!((((_la) & ~0x1f) == 0 && ((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))) { this._errHandler.recoverInline(this); @@ -1466,15 +1479,15 @@ SolidityParser.prototype.versionConstraint = function() { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 196; + this.state = 198; this._errHandler.sync(this); _la = this._input.LA(1); if((((_la) & ~0x1f) == 0 && ((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)) { - this.state = 195; + this.state = 197; this.versionOperator(); } - this.state = 198; + this.state = 200; this.match(SolidityParser.VersionLiteral); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -1542,15 +1555,15 @@ SolidityParser.prototype.importDeclaration = function() { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 200; + this.state = 202; this.identifier(); - this.state = 203; + this.state = 205; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===SolidityParser.T__9) { - this.state = 201; + this.state = 203; this.match(SolidityParser.T__9); - this.state = 202; + this.state = 204; this.identifier(); } @@ -1634,95 +1647,95 @@ SolidityParser.prototype.importDirective = function() { this.enterRule(localctx, 16, SolidityParser.RULE_importDirective); var _la = 0; // Token type try { - this.state = 239; + this.state = 241; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,10,this._ctx); switch(la_) { case 1: this.enterOuterAlt(localctx, 1); - this.state = 205; + this.state = 207; this.match(SolidityParser.T__10); - this.state = 206; + this.state = 208; this.match(SolidityParser.StringLiteral); - this.state = 209; + this.state = 211; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===SolidityParser.T__9) { - this.state = 207; + this.state = 209; this.match(SolidityParser.T__9); - this.state = 208; + this.state = 210; this.identifier(); } - this.state = 211; + this.state = 213; this.match(SolidityParser.T__1); break; case 2: this.enterOuterAlt(localctx, 2); - this.state = 212; + this.state = 214; this.match(SolidityParser.T__10); - this.state = 215; + this.state = 217; this._errHandler.sync(this); switch(this._input.LA(1)) { case SolidityParser.T__11: - this.state = 213; + this.state = 215; this.match(SolidityParser.T__11); break; case SolidityParser.T__12: case SolidityParser.T__39: case SolidityParser.Identifier: - this.state = 214; + this.state = 216; this.identifier(); break; default: throw new antlr4.error.NoViableAltException(this); } - this.state = 219; + this.state = 221; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===SolidityParser.T__9) { - this.state = 217; + this.state = 219; this.match(SolidityParser.T__9); - this.state = 218; + this.state = 220; this.identifier(); } - this.state = 221; + this.state = 223; this.match(SolidityParser.T__12); - this.state = 222; + this.state = 224; this.match(SolidityParser.StringLiteral); - this.state = 223; + this.state = 225; this.match(SolidityParser.T__1); break; case 3: this.enterOuterAlt(localctx, 3); - this.state = 224; + this.state = 226; this.match(SolidityParser.T__10); - this.state = 225; + this.state = 227; this.match(SolidityParser.T__13); - this.state = 226; + this.state = 228; this.importDeclaration(); - this.state = 231; + this.state = 233; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===SolidityParser.T__14) { - this.state = 227; + this.state = 229; this.match(SolidityParser.T__14); - this.state = 228; + this.state = 230; this.importDeclaration(); - this.state = 233; + this.state = 235; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 234; + this.state = 236; this.match(SolidityParser.T__15); - this.state = 235; + this.state = 237; this.match(SolidityParser.T__12); - this.state = 236; + this.state = 238; this.match(SolidityParser.StringLiteral); - this.state = 237; + this.state = 239; this.match(SolidityParser.T__1); break; @@ -1742,6 +1755,78 @@ SolidityParser.prototype.importDirective = function() { }; +function NatSpecContext(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + antlr4.ParserRuleContext.call(this, parent, invokingState); + this.parser = parser; + this.ruleIndex = SolidityParser.RULE_natSpec; + return this; +} + +NatSpecContext.prototype = Object.create(antlr4.ParserRuleContext.prototype); +NatSpecContext.prototype.constructor = NatSpecContext; + +NatSpecContext.prototype.NatSpecSingleLine = function() { + return this.getToken(SolidityParser.NatSpecSingleLine, 0); +}; + +NatSpecContext.prototype.NatSpecMultiLine = function() { + return this.getToken(SolidityParser.NatSpecMultiLine, 0); +}; + +NatSpecContext.prototype.enterRule = function(listener) { + if(listener instanceof SolidityListener ) { + listener.enterNatSpec(this); + } +}; + +NatSpecContext.prototype.exitRule = function(listener) { + if(listener instanceof SolidityListener ) { + listener.exitNatSpec(this); + } +}; + + + + +SolidityParser.NatSpecContext = NatSpecContext; + +SolidityParser.prototype.natSpec = function() { + + var localctx = new NatSpecContext(this, this._ctx, this.state); + this.enterRule(localctx, 18, SolidityParser.RULE_natSpec); + var _la = 0; // Token type + try { + this.enterOuterAlt(localctx, 1); + this.state = 243; + _la = this._input.LA(1); + if(!(_la===SolidityParser.NatSpecSingleLine || _la===SolidityParser.NatSpecMultiLine)) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; +}; + + function ContractDefinitionContext(parser, parent, invokingState) { if(parent===undefined) { parent = null; @@ -1762,6 +1847,10 @@ ContractDefinitionContext.prototype.identifier = function() { return this.getTypedRuleContext(IdentifierContext,0); }; +ContractDefinitionContext.prototype.natSpec = function() { + return this.getTypedRuleContext(NatSpecContext,0); +}; + ContractDefinitionContext.prototype.inheritanceSpecifier = function(i) { if(i===undefined) { i = null; @@ -1804,11 +1893,19 @@ SolidityParser.ContractDefinitionContext = ContractDefinitionContext; SolidityParser.prototype.contractDefinition = function() { var localctx = new ContractDefinitionContext(this, this._ctx, this.state); - this.enterRule(localctx, 18, SolidityParser.RULE_contractDefinition); + this.enterRule(localctx, 20, SolidityParser.RULE_contractDefinition); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 241; + this.state = 246; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===SolidityParser.NatSpecSingleLine || _la===SolidityParser.NatSpecMultiLine) { + this.state = 245; + this.natSpec(); + } + + this.state = 248; _la = this._input.LA(1); if(!((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__16) | (1 << SolidityParser.T__17) | (1 << SolidityParser.T__18))) !== 0))) { this._errHandler.recoverInline(this); @@ -1817,43 +1914,43 @@ SolidityParser.prototype.contractDefinition = function() { this._errHandler.reportMatch(this); this.consume(); } - this.state = 242; + this.state = 249; this.identifier(); - this.state = 252; + this.state = 259; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===SolidityParser.T__19) { - this.state = 243; + this.state = 250; this.match(SolidityParser.T__19); - this.state = 244; + this.state = 251; this.inheritanceSpecifier(); - this.state = 249; + this.state = 256; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===SolidityParser.T__14) { - this.state = 245; + this.state = 252; this.match(SolidityParser.T__14); - this.state = 246; + this.state = 253; this.inheritanceSpecifier(); - this.state = 251; + this.state = 258; this._errHandler.sync(this); _la = this._input.LA(1); } } - this.state = 254; + this.state = 261; this.match(SolidityParser.T__13); - this.state = 258; + this.state = 265; this._errHandler.sync(this); _la = this._input.LA(1); - while((((_la) & ~0x1f) == 0 && ((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))) !== 0) || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__35 - 34)) | (1 << (SolidityParser.T__39 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((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)) { - this.state = 255; + while((((_la) & ~0x1f) == 0 && ((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))) !== 0) || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__35 - 34)) | (1 << (SolidityParser.T__39 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.NatSpecSingleLine - 91)) | (1 << (SolidityParser.NatSpecMultiLine - 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)) { + this.state = 262; this.contractPart(); - this.state = 260; + this.state = 267; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 261; + this.state = 268; this.match(SolidityParser.T__15); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -1890,15 +1987,8 @@ InheritanceSpecifierContext.prototype.userDefinedTypeName = function() { return this.getTypedRuleContext(UserDefinedTypeNameContext,0); }; -InheritanceSpecifierContext.prototype.expression = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(ExpressionContext); - } else { - return this.getTypedRuleContext(ExpressionContext,i); - } +InheritanceSpecifierContext.prototype.expressionList = function() { + return this.getTypedRuleContext(ExpressionListContext,0); }; InheritanceSpecifierContext.prototype.enterRule = function(listener) { @@ -1921,33 +2011,27 @@ SolidityParser.InheritanceSpecifierContext = InheritanceSpecifierContext; SolidityParser.prototype.inheritanceSpecifier = function() { var localctx = new InheritanceSpecifierContext(this, this._ctx, this.state); - this.enterRule(localctx, 20, SolidityParser.RULE_inheritanceSpecifier); + this.enterRule(localctx, 22, SolidityParser.RULE_inheritanceSpecifier); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 263; + this.state = 270; this.userDefinedTypeName(); - this.state = 275; + this.state = 276; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===SolidityParser.T__20) { - this.state = 264; + this.state = 271; this.match(SolidityParser.T__20); - this.state = 265; - this.expression(0); - this.state = 270; + this.state = 273; this._errHandler.sync(this); _la = this._input.LA(1); - while(_la===SolidityParser.T__14) { - this.state = 266; - this.match(SolidityParser.T__14); - this.state = 267; - this.expression(0); + if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__39 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 93)) & ~0x1f) == 0 && ((1 << (_la - 93)) & ((1 << (SolidityParser.Int - 93)) | (1 << (SolidityParser.Uint - 93)) | (1 << (SolidityParser.Byte - 93)) | (1 << (SolidityParser.Fixed - 93)) | (1 << (SolidityParser.Ufixed - 93)) | (1 << (SolidityParser.BooleanLiteral - 93)) | (1 << (SolidityParser.DecimalNumber - 93)) | (1 << (SolidityParser.HexNumber - 93)) | (1 << (SolidityParser.HexLiteral - 93)) | (1 << (SolidityParser.TypeKeyword - 93)) | (1 << (SolidityParser.Identifier - 93)) | (1 << (SolidityParser.StringLiteral - 93)))) !== 0)) { this.state = 272; - this._errHandler.sync(this); - _la = this._input.LA(1); + this.expressionList(); } - this.state = 273; + + this.state = 275; this.match(SolidityParser.T__21); } @@ -2034,57 +2118,57 @@ SolidityParser.ContractPartContext = ContractPartContext; SolidityParser.prototype.contractPart = function() { var localctx = new ContractPartContext(this, this._ctx, this.state); - this.enterRule(localctx, 22, SolidityParser.RULE_contractPart); + this.enterRule(localctx, 24, SolidityParser.RULE_contractPart); try { - this.state = 285; + this.state = 286; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,16,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,17,this._ctx); switch(la_) { case 1: this.enterOuterAlt(localctx, 1); - this.state = 277; + this.state = 278; this.stateVariableDeclaration(); break; case 2: this.enterOuterAlt(localctx, 2); - this.state = 278; + this.state = 279; this.usingForDeclaration(); break; case 3: this.enterOuterAlt(localctx, 3); - this.state = 279; + this.state = 280; this.structDefinition(); break; case 4: this.enterOuterAlt(localctx, 4); - this.state = 280; + this.state = 281; this.constructorDefinition(); break; case 5: this.enterOuterAlt(localctx, 5); - this.state = 281; + this.state = 282; this.modifierDefinition(); break; case 6: this.enterOuterAlt(localctx, 6); - this.state = 282; + this.state = 283; this.functionDefinition(); break; case 7: this.enterOuterAlt(localctx, 7); - this.state = 283; + this.state = 284; this.eventDefinition(); break; case 8: this.enterOuterAlt(localctx, 8); - this.state = 284; + this.state = 285; this.enumDefinition(); break; @@ -2200,42 +2284,42 @@ SolidityParser.StateVariableDeclarationContext = StateVariableDeclarationContext SolidityParser.prototype.stateVariableDeclaration = function() { var localctx = new StateVariableDeclarationContext(this, this._ctx, this.state); - this.enterRule(localctx, 24, SolidityParser.RULE_stateVariableDeclaration); + this.enterRule(localctx, 26, SolidityParser.RULE_stateVariableDeclaration); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 287; + this.state = 288; this.typeName(0); - this.state = 291; + this.state = 292; this._errHandler.sync(this); _la = this._input.LA(1); - while(((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (SolidityParser.ConstantKeyword - 105)) | (1 << (SolidityParser.InternalKeyword - 105)) | (1 << (SolidityParser.PrivateKeyword - 105)) | (1 << (SolidityParser.PublicKeyword - 105)))) !== 0)) { - this.state = 288; + while(((((_la - 107)) & ~0x1f) == 0 && ((1 << (_la - 107)) & ((1 << (SolidityParser.ConstantKeyword - 107)) | (1 << (SolidityParser.InternalKeyword - 107)) | (1 << (SolidityParser.PrivateKeyword - 107)) | (1 << (SolidityParser.PublicKeyword - 107)))) !== 0)) { + this.state = 289; _la = this._input.LA(1); - if(!(((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (SolidityParser.ConstantKeyword - 105)) | (1 << (SolidityParser.InternalKeyword - 105)) | (1 << (SolidityParser.PrivateKeyword - 105)) | (1 << (SolidityParser.PublicKeyword - 105)))) !== 0))) { + if(!(((((_la - 107)) & ~0x1f) == 0 && ((1 << (_la - 107)) & ((1 << (SolidityParser.ConstantKeyword - 107)) | (1 << (SolidityParser.InternalKeyword - 107)) | (1 << (SolidityParser.PrivateKeyword - 107)) | (1 << (SolidityParser.PublicKeyword - 107)))) !== 0))) { this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 293; + this.state = 294; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 294; + this.state = 295; this.identifier(); - this.state = 297; + this.state = 298; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===SolidityParser.T__8) { - this.state = 295; - this.match(SolidityParser.T__8); this.state = 296; + this.match(SolidityParser.T__8); + this.state = 297; this.expression(0); } - this.state = 299; + this.state = 300; this.match(SolidityParser.T__1); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -2296,20 +2380,20 @@ SolidityParser.UsingForDeclarationContext = UsingForDeclarationContext; SolidityParser.prototype.usingForDeclaration = function() { var localctx = new UsingForDeclarationContext(this, this._ctx, this.state); - this.enterRule(localctx, 26, SolidityParser.RULE_usingForDeclaration); + this.enterRule(localctx, 28, SolidityParser.RULE_usingForDeclaration); try { this.enterOuterAlt(localctx, 1); - this.state = 301; - this.match(SolidityParser.T__22); this.state = 302; - this.identifier(); + this.match(SolidityParser.T__22); this.state = 303; + this.identifier(); + this.state = 304; this.match(SolidityParser.T__23); - this.state = 306; + this.state = 307; this._errHandler.sync(this); switch(this._input.LA(1)) { case SolidityParser.T__11: - this.state = 304; + this.state = 305; this.match(SolidityParser.T__11); break; case SolidityParser.T__12: @@ -2327,13 +2411,13 @@ SolidityParser.prototype.usingForDeclaration = function() { case SolidityParser.Fixed: case SolidityParser.Ufixed: case SolidityParser.Identifier: - this.state = 305; + this.state = 306; this.typeName(0); break; default: throw new antlr4.error.NoViableAltException(this); } - this.state = 308; + this.state = 309; this.match(SolidityParser.T__1); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -2401,39 +2485,39 @@ SolidityParser.StructDefinitionContext = StructDefinitionContext; SolidityParser.prototype.structDefinition = function() { var localctx = new StructDefinitionContext(this, this._ctx, this.state); - this.enterRule(localctx, 28, SolidityParser.RULE_structDefinition); + this.enterRule(localctx, 30, SolidityParser.RULE_structDefinition); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 310; - this.match(SolidityParser.T__24); this.state = 311; - this.identifier(); + this.match(SolidityParser.T__24); this.state = 312; + this.identifier(); + this.state = 313; this.match(SolidityParser.T__13); - this.state = 323; + this.state = 324; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__35 - 34)) | (1 << (SolidityParser.T__39 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((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)) { - this.state = 313; - this.variableDeclaration(); + if(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__35 - 34)) | (1 << (SolidityParser.T__39 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 93)) & ~0x1f) == 0 && ((1 << (_la - 93)) & ((1 << (SolidityParser.Int - 93)) | (1 << (SolidityParser.Uint - 93)) | (1 << (SolidityParser.Byte - 93)) | (1 << (SolidityParser.Fixed - 93)) | (1 << (SolidityParser.Ufixed - 93)) | (1 << (SolidityParser.Identifier - 93)))) !== 0)) { this.state = 314; + this.variableDeclaration(); + this.state = 315; this.match(SolidityParser.T__1); - this.state = 320; + this.state = 321; this._errHandler.sync(this); _la = this._input.LA(1); - while(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__35 - 34)) | (1 << (SolidityParser.T__39 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((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)) { - this.state = 315; - this.variableDeclaration(); + while(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__35 - 34)) | (1 << (SolidityParser.T__39 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 93)) & ~0x1f) == 0 && ((1 << (_la - 93)) & ((1 << (SolidityParser.Int - 93)) | (1 << (SolidityParser.Uint - 93)) | (1 << (SolidityParser.Byte - 93)) | (1 << (SolidityParser.Fixed - 93)) | (1 << (SolidityParser.Ufixed - 93)) | (1 << (SolidityParser.Identifier - 93)))) !== 0)) { this.state = 316; + this.variableDeclaration(); + this.state = 317; this.match(SolidityParser.T__1); - this.state = 322; + this.state = 323; this._errHandler.sync(this); _la = this._input.LA(1); } } - this.state = 325; + this.state = 326; this.match(SolidityParser.T__15); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -2498,16 +2582,16 @@ SolidityParser.ConstructorDefinitionContext = ConstructorDefinitionContext; SolidityParser.prototype.constructorDefinition = function() { var localctx = new ConstructorDefinitionContext(this, this._ctx, this.state); - this.enterRule(localctx, 30, SolidityParser.RULE_constructorDefinition); + this.enterRule(localctx, 32, SolidityParser.RULE_constructorDefinition); try { this.enterOuterAlt(localctx, 1); - this.state = 327; - this.match(SolidityParser.T__25); this.state = 328; - this.parameterList(); + this.match(SolidityParser.T__25); this.state = 329; - this.modifierList(); + this.parameterList(); this.state = 330; + this.modifierList(); + this.state = 331; this.block(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -2572,23 +2656,23 @@ SolidityParser.ModifierDefinitionContext = ModifierDefinitionContext; SolidityParser.prototype.modifierDefinition = function() { var localctx = new ModifierDefinitionContext(this, this._ctx, this.state); - this.enterRule(localctx, 32, SolidityParser.RULE_modifierDefinition); + this.enterRule(localctx, 34, SolidityParser.RULE_modifierDefinition); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 332; - this.match(SolidityParser.T__26); this.state = 333; + this.match(SolidityParser.T__26); + this.state = 334; this.identifier(); - this.state = 335; + this.state = 336; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===SolidityParser.T__20) { - this.state = 334; + this.state = 335; this.parameterList(); } - this.state = 337; + this.state = 338; this.block(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -2649,27 +2733,27 @@ SolidityParser.ModifierInvocationContext = ModifierInvocationContext; SolidityParser.prototype.modifierInvocation = function() { var localctx = new ModifierInvocationContext(this, this._ctx, this.state); - this.enterRule(localctx, 34, SolidityParser.RULE_modifierInvocation); + this.enterRule(localctx, 36, SolidityParser.RULE_modifierInvocation); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 339; + this.state = 340; this.identifier(); - this.state = 345; + this.state = 346; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===SolidityParser.T__20) { - this.state = 340; + this.state = 341; this.match(SolidityParser.T__20); - this.state = 342; + this.state = 343; this._errHandler.sync(this); _la = this._input.LA(1); - if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__39 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((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.TypeKeyword - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) { - this.state = 341; + if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__39 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 93)) & ~0x1f) == 0 && ((1 << (_la - 93)) & ((1 << (SolidityParser.Int - 93)) | (1 << (SolidityParser.Uint - 93)) | (1 << (SolidityParser.Byte - 93)) | (1 << (SolidityParser.Fixed - 93)) | (1 << (SolidityParser.Ufixed - 93)) | (1 << (SolidityParser.BooleanLiteral - 93)) | (1 << (SolidityParser.DecimalNumber - 93)) | (1 << (SolidityParser.HexNumber - 93)) | (1 << (SolidityParser.HexLiteral - 93)) | (1 << (SolidityParser.TypeKeyword - 93)) | (1 << (SolidityParser.Identifier - 93)) | (1 << (SolidityParser.StringLiteral - 93)))) !== 0)) { + this.state = 342; this.expressionList(); } - this.state = 344; + this.state = 345; this.match(SolidityParser.T__21); } @@ -2716,6 +2800,10 @@ FunctionDefinitionContext.prototype.block = function() { return this.getTypedRuleContext(BlockContext,0); }; +FunctionDefinitionContext.prototype.natSpec = function() { + return this.getTypedRuleContext(NatSpecContext,0); +}; + FunctionDefinitionContext.prototype.identifier = function() { return this.getTypedRuleContext(IdentifierContext,0); }; @@ -2744,41 +2832,49 @@ SolidityParser.FunctionDefinitionContext = FunctionDefinitionContext; SolidityParser.prototype.functionDefinition = function() { var localctx = new FunctionDefinitionContext(this, this._ctx, this.state); - this.enterRule(localctx, 36, SolidityParser.RULE_functionDefinition); + this.enterRule(localctx, 38, SolidityParser.RULE_functionDefinition); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 347; - this.match(SolidityParser.T__27); this.state = 349; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===SolidityParser.T__12 || _la===SolidityParser.T__39 || _la===SolidityParser.Identifier) { + if(_la===SolidityParser.NatSpecSingleLine || _la===SolidityParser.NatSpecMultiLine) { this.state = 348; - this.identifier(); + this.natSpec(); } this.state = 351; + this.match(SolidityParser.T__27); + this.state = 353; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===SolidityParser.T__12 || _la===SolidityParser.T__39 || _la===SolidityParser.Identifier) { + this.state = 352; + this.identifier(); + } + + this.state = 355; this.parameterList(); - this.state = 352; + this.state = 356; this.modifierList(); - this.state = 354; + this.state = 358; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===SolidityParser.T__28) { - this.state = 353; + this.state = 357; this.returnParameters(); } - this.state = 358; + this.state = 362; this._errHandler.sync(this); switch(this._input.LA(1)) { case SolidityParser.T__1: - this.state = 356; + this.state = 360; this.match(SolidityParser.T__1); break; case SolidityParser.T__13: - this.state = 357; + this.state = 361; this.block(); break; default: @@ -2839,12 +2935,12 @@ SolidityParser.ReturnParametersContext = ReturnParametersContext; SolidityParser.prototype.returnParameters = function() { var localctx = new ReturnParametersContext(this, this._ctx, this.state); - this.enterRule(localctx, 38, SolidityParser.RULE_returnParameters); + this.enterRule(localctx, 40, SolidityParser.RULE_returnParameters); try { this.enterOuterAlt(localctx, 1); - this.state = 360; + this.state = 364; this.match(SolidityParser.T__28); - this.state = 361; + this.state = 365; this.parameterList(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -2967,50 +3063,50 @@ SolidityParser.ModifierListContext = ModifierListContext; SolidityParser.prototype.modifierList = function() { var localctx = new ModifierListContext(this, this._ctx, this.state); - this.enterRule(localctx, 40, SolidityParser.RULE_modifierList); + this.enterRule(localctx, 42, SolidityParser.RULE_modifierList); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 371; + this.state = 375; this._errHandler.sync(this); _la = this._input.LA(1); - while(_la===SolidityParser.T__12 || _la===SolidityParser.T__39 || ((((_la - 105)) & ~0x1f) == 0 && ((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)) { - this.state = 369; + while(_la===SolidityParser.T__12 || _la===SolidityParser.T__39 || ((((_la - 107)) & ~0x1f) == 0 && ((1 << (_la - 107)) & ((1 << (SolidityParser.ConstantKeyword - 107)) | (1 << (SolidityParser.ExternalKeyword - 107)) | (1 << (SolidityParser.InternalKeyword - 107)) | (1 << (SolidityParser.PayableKeyword - 107)) | (1 << (SolidityParser.PrivateKeyword - 107)) | (1 << (SolidityParser.PublicKeyword - 107)) | (1 << (SolidityParser.PureKeyword - 107)) | (1 << (SolidityParser.ViewKeyword - 107)) | (1 << (SolidityParser.Identifier - 107)))) !== 0)) { + this.state = 373; this._errHandler.sync(this); switch(this._input.LA(1)) { case SolidityParser.T__12: case SolidityParser.T__39: case SolidityParser.Identifier: - this.state = 363; + this.state = 367; this.modifierInvocation(); break; case SolidityParser.ConstantKeyword: case SolidityParser.PayableKeyword: case SolidityParser.PureKeyword: case SolidityParser.ViewKeyword: - this.state = 364; + this.state = 368; this.stateMutability(); break; case SolidityParser.ExternalKeyword: - this.state = 365; + this.state = 369; this.match(SolidityParser.ExternalKeyword); break; case SolidityParser.PublicKeyword: - this.state = 366; + this.state = 370; this.match(SolidityParser.PublicKeyword); break; case SolidityParser.InternalKeyword: - this.state = 367; + this.state = 371; this.match(SolidityParser.InternalKeyword); break; case SolidityParser.PrivateKeyword: - this.state = 368; + this.state = 372; this.match(SolidityParser.PrivateKeyword); break; default: throw new antlr4.error.NoViableAltException(this); } - this.state = 373; + this.state = 377; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -3053,6 +3149,10 @@ EventDefinitionContext.prototype.eventParameterList = function() { return this.getTypedRuleContext(EventParameterListContext,0); }; +EventDefinitionContext.prototype.natSpec = function() { + return this.getTypedRuleContext(NatSpecContext,0); +}; + EventDefinitionContext.prototype.AnonymousKeyword = function() { return this.getToken(SolidityParser.AnonymousKeyword, 0); }; @@ -3077,25 +3177,33 @@ SolidityParser.EventDefinitionContext = EventDefinitionContext; SolidityParser.prototype.eventDefinition = function() { var localctx = new EventDefinitionContext(this, this._ctx, this.state); - this.enterRule(localctx, 42, SolidityParser.RULE_eventDefinition); + this.enterRule(localctx, 44, SolidityParser.RULE_eventDefinition); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 374; + this.state = 379; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===SolidityParser.NatSpecSingleLine || _la===SolidityParser.NatSpecMultiLine) { + this.state = 378; + this.natSpec(); + } + + this.state = 381; this.match(SolidityParser.T__29); - this.state = 375; + this.state = 382; this.identifier(); - this.state = 376; + this.state = 383; this.eventParameterList(); - this.state = 378; + this.state = 385; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===SolidityParser.AnonymousKeyword) { - this.state = 377; + this.state = 384; this.match(SolidityParser.AnonymousKeyword); } - this.state = 380; + this.state = 387; this.match(SolidityParser.T__1); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -3152,10 +3260,10 @@ SolidityParser.EnumValueContext = EnumValueContext; SolidityParser.prototype.enumValue = function() { var localctx = new EnumValueContext(this, this._ctx, this.state); - this.enterRule(localctx, 44, SolidityParser.RULE_enumValue); + this.enterRule(localctx, 46, SolidityParser.RULE_enumValue); try { this.enterOuterAlt(localctx, 1); - this.state = 382; + this.state = 389; this.identifier(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -3223,37 +3331,37 @@ SolidityParser.EnumDefinitionContext = EnumDefinitionContext; SolidityParser.prototype.enumDefinition = function() { var localctx = new EnumDefinitionContext(this, this._ctx, this.state); - this.enterRule(localctx, 46, SolidityParser.RULE_enumDefinition); + this.enterRule(localctx, 48, SolidityParser.RULE_enumDefinition); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 384; + this.state = 391; this.match(SolidityParser.T__30); - this.state = 385; + this.state = 392; this.identifier(); - this.state = 386; + this.state = 393; this.match(SolidityParser.T__13); - this.state = 388; + this.state = 395; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===SolidityParser.T__12 || _la===SolidityParser.T__39 || _la===SolidityParser.Identifier) { - this.state = 387; + this.state = 394; this.enumValue(); } - this.state = 394; + this.state = 401; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===SolidityParser.T__14) { - this.state = 390; + this.state = 397; this.match(SolidityParser.T__14); - this.state = 391; + this.state = 398; this.enumValue(); - this.state = 396; + this.state = 403; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 397; + this.state = 404; this.match(SolidityParser.T__15); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -3317,33 +3425,33 @@ SolidityParser.ParameterListContext = ParameterListContext; SolidityParser.prototype.parameterList = function() { var localctx = new ParameterListContext(this, this._ctx, this.state); - this.enterRule(localctx, 48, SolidityParser.RULE_parameterList); + this.enterRule(localctx, 50, SolidityParser.RULE_parameterList); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 399; + this.state = 406; this.match(SolidityParser.T__20); - this.state = 408; + this.state = 415; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__35 - 34)) | (1 << (SolidityParser.T__39 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((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)) { - this.state = 400; + if(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__35 - 34)) | (1 << (SolidityParser.T__39 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 93)) & ~0x1f) == 0 && ((1 << (_la - 93)) & ((1 << (SolidityParser.Int - 93)) | (1 << (SolidityParser.Uint - 93)) | (1 << (SolidityParser.Byte - 93)) | (1 << (SolidityParser.Fixed - 93)) | (1 << (SolidityParser.Ufixed - 93)) | (1 << (SolidityParser.Identifier - 93)))) !== 0)) { + this.state = 407; this.parameter(); - this.state = 405; + this.state = 412; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===SolidityParser.T__14) { - this.state = 401; + this.state = 408; this.match(SolidityParser.T__14); - this.state = 402; + this.state = 409; this.parameter(); - this.state = 407; + this.state = 414; this._errHandler.sync(this); _la = this._input.LA(1); } } - this.state = 410; + this.state = 417; this.match(SolidityParser.T__21); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -3408,25 +3516,25 @@ SolidityParser.ParameterContext = ParameterContext; SolidityParser.prototype.parameter = function() { var localctx = new ParameterContext(this, this._ctx, this.state); - this.enterRule(localctx, 50, SolidityParser.RULE_parameter); + this.enterRule(localctx, 52, SolidityParser.RULE_parameter); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 412; + this.state = 419; this.typeName(0); - this.state = 414; + this.state = 421; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,35,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,38,this._ctx); if(la_===1) { - this.state = 413; + this.state = 420; this.storageLocation(); } - this.state = 417; + this.state = 424; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===SolidityParser.T__12 || _la===SolidityParser.T__39 || _la===SolidityParser.Identifier) { - this.state = 416; + this.state = 423; this.identifier(); } @@ -3492,33 +3600,33 @@ SolidityParser.EventParameterListContext = EventParameterListContext; SolidityParser.prototype.eventParameterList = function() { var localctx = new EventParameterListContext(this, this._ctx, this.state); - this.enterRule(localctx, 52, SolidityParser.RULE_eventParameterList); + this.enterRule(localctx, 54, SolidityParser.RULE_eventParameterList); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 419; + this.state = 426; this.match(SolidityParser.T__20); - this.state = 428; + this.state = 435; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__35 - 34)) | (1 << (SolidityParser.T__39 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((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)) { - this.state = 420; + if(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__35 - 34)) | (1 << (SolidityParser.T__39 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 93)) & ~0x1f) == 0 && ((1 << (_la - 93)) & ((1 << (SolidityParser.Int - 93)) | (1 << (SolidityParser.Uint - 93)) | (1 << (SolidityParser.Byte - 93)) | (1 << (SolidityParser.Fixed - 93)) | (1 << (SolidityParser.Ufixed - 93)) | (1 << (SolidityParser.Identifier - 93)))) !== 0)) { + this.state = 427; this.eventParameter(); - this.state = 425; + this.state = 432; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===SolidityParser.T__14) { - this.state = 421; + this.state = 428; this.match(SolidityParser.T__14); - this.state = 422; + this.state = 429; this.eventParameter(); - this.state = 427; + this.state = 434; this._errHandler.sync(this); _la = this._input.LA(1); } } - this.state = 430; + this.state = 437; this.match(SolidityParser.T__21); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -3583,25 +3691,25 @@ SolidityParser.EventParameterContext = EventParameterContext; SolidityParser.prototype.eventParameter = function() { var localctx = new EventParameterContext(this, this._ctx, this.state); - this.enterRule(localctx, 54, SolidityParser.RULE_eventParameter); + this.enterRule(localctx, 56, SolidityParser.RULE_eventParameter); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 432; + this.state = 439; this.typeName(0); - this.state = 434; + this.state = 441; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===SolidityParser.IndexedKeyword) { - this.state = 433; + this.state = 440; this.match(SolidityParser.IndexedKeyword); } - this.state = 437; + this.state = 444; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===SolidityParser.T__12 || _la===SolidityParser.T__39 || _la===SolidityParser.Identifier) { - this.state = 436; + this.state = 443; this.identifier(); } @@ -3667,33 +3775,33 @@ SolidityParser.FunctionTypeParameterListContext = FunctionTypeParameterListConte SolidityParser.prototype.functionTypeParameterList = function() { var localctx = new FunctionTypeParameterListContext(this, this._ctx, this.state); - this.enterRule(localctx, 56, SolidityParser.RULE_functionTypeParameterList); + this.enterRule(localctx, 58, SolidityParser.RULE_functionTypeParameterList); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 439; + this.state = 446; this.match(SolidityParser.T__20); - this.state = 448; + this.state = 455; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__35 - 34)) | (1 << (SolidityParser.T__39 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((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)) { - this.state = 440; + if(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__35 - 34)) | (1 << (SolidityParser.T__39 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 93)) & ~0x1f) == 0 && ((1 << (_la - 93)) & ((1 << (SolidityParser.Int - 93)) | (1 << (SolidityParser.Uint - 93)) | (1 << (SolidityParser.Byte - 93)) | (1 << (SolidityParser.Fixed - 93)) | (1 << (SolidityParser.Ufixed - 93)) | (1 << (SolidityParser.Identifier - 93)))) !== 0)) { + this.state = 447; this.functionTypeParameter(); - this.state = 445; + this.state = 452; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===SolidityParser.T__14) { - this.state = 441; + this.state = 448; this.match(SolidityParser.T__14); - this.state = 442; + this.state = 449; this.functionTypeParameter(); - this.state = 447; + this.state = 454; this._errHandler.sync(this); _la = this._input.LA(1); } } - this.state = 450; + this.state = 457; this.match(SolidityParser.T__21); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -3754,17 +3862,17 @@ SolidityParser.FunctionTypeParameterContext = FunctionTypeParameterContext; SolidityParser.prototype.functionTypeParameter = function() { var localctx = new FunctionTypeParameterContext(this, this._ctx, this.state); - this.enterRule(localctx, 58, SolidityParser.RULE_functionTypeParameter); + this.enterRule(localctx, 60, SolidityParser.RULE_functionTypeParameter); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 452; + this.state = 459; this.typeName(0); - this.state = 454; + this.state = 461; this._errHandler.sync(this); _la = this._input.LA(1); if(((((_la - 38)) & ~0x1f) == 0 && ((1 << (_la - 38)) & ((1 << (SolidityParser.T__37 - 38)) | (1 << (SolidityParser.T__38 - 38)) | (1 << (SolidityParser.T__39 - 38)))) !== 0)) { - this.state = 453; + this.state = 460; this.storageLocation(); } @@ -3831,20 +3939,20 @@ SolidityParser.VariableDeclarationContext = VariableDeclarationContext; SolidityParser.prototype.variableDeclaration = function() { var localctx = new VariableDeclarationContext(this, this._ctx, this.state); - this.enterRule(localctx, 60, SolidityParser.RULE_variableDeclaration); + this.enterRule(localctx, 62, SolidityParser.RULE_variableDeclaration); try { this.enterOuterAlt(localctx, 1); - this.state = 456; + this.state = 463; this.typeName(0); - this.state = 458; + this.state = 465; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,44,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,47,this._ctx); if(la_===1) { - this.state = 457; + this.state = 464; this.storageLocation(); } - this.state = 460; + this.state = 467; this.identifier(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -3927,47 +4035,47 @@ SolidityParser.prototype.typeName = function(_p) { var _parentState = this.state; var localctx = new TypeNameContext(this, this._ctx, _parentState); var _prevctx = localctx; - var _startState = 62; - this.enterRecursionRule(localctx, 62, SolidityParser.RULE_typeName, _p); + var _startState = 64; + this.enterRecursionRule(localctx, 64, SolidityParser.RULE_typeName, _p); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 469; + this.state = 476; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,45,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,48,this._ctx); switch(la_) { case 1: - this.state = 463; + this.state = 470; this.elementaryTypeName(); break; case 2: - this.state = 464; + this.state = 471; this.userDefinedTypeName(); break; case 3: - this.state = 465; + this.state = 472; this.mapping(); break; case 4: - this.state = 466; + this.state = 473; this.functionTypeName(); break; case 5: - this.state = 467; + this.state = 474; this.match(SolidityParser.T__33); - this.state = 468; + this.state = 475; this.match(SolidityParser.PayableKeyword); break; } this._ctx.stop = this._input.LT(-1); - this.state = 479; + this.state = 486; this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,47,this._ctx) + var _alt = this._interp.adaptivePredict(this._input,50,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { if(_alt===1) { if(this._parseListeners!==null) { @@ -3976,26 +4084,26 @@ SolidityParser.prototype.typeName = function(_p) { _prevctx = localctx; localctx = new TypeNameContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_typeName); - this.state = 471; + this.state = 478; if (!( this.precpred(this._ctx, 3))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)"); } - this.state = 472; + this.state = 479; this.match(SolidityParser.T__31); - this.state = 474; + this.state = 481; this._errHandler.sync(this); _la = this._input.LA(1); - if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__39 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((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.TypeKeyword - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) { - this.state = 473; + if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__39 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 93)) & ~0x1f) == 0 && ((1 << (_la - 93)) & ((1 << (SolidityParser.Int - 93)) | (1 << (SolidityParser.Uint - 93)) | (1 << (SolidityParser.Byte - 93)) | (1 << (SolidityParser.Fixed - 93)) | (1 << (SolidityParser.Ufixed - 93)) | (1 << (SolidityParser.BooleanLiteral - 93)) | (1 << (SolidityParser.DecimalNumber - 93)) | (1 << (SolidityParser.HexNumber - 93)) | (1 << (SolidityParser.HexLiteral - 93)) | (1 << (SolidityParser.TypeKeyword - 93)) | (1 << (SolidityParser.Identifier - 93)) | (1 << (SolidityParser.StringLiteral - 93)))) !== 0)) { + this.state = 480; this.expression(0); } - this.state = 476; + this.state = 483; this.match(SolidityParser.T__32); } - this.state = 481; + this.state = 488; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,47,this._ctx); + _alt = this._interp.adaptivePredict(this._input,50,this._ctx); } } catch( error) { @@ -4060,24 +4168,24 @@ SolidityParser.UserDefinedTypeNameContext = UserDefinedTypeNameContext; SolidityParser.prototype.userDefinedTypeName = function() { var localctx = new UserDefinedTypeNameContext(this, this._ctx, this.state); - this.enterRule(localctx, 64, SolidityParser.RULE_userDefinedTypeName); + this.enterRule(localctx, 66, SolidityParser.RULE_userDefinedTypeName); try { this.enterOuterAlt(localctx, 1); - this.state = 482; + this.state = 489; this.identifier(); - this.state = 487; + this.state = 494; this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,48,this._ctx) + var _alt = this._interp.adaptivePredict(this._input,51,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { if(_alt===1) { - this.state = 483; + this.state = 490; this.match(SolidityParser.T__34); - this.state = 484; + this.state = 491; this.identifier(); } - this.state = 489; + this.state = 496; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,48,this._ctx); + _alt = this._interp.adaptivePredict(this._input,51,this._ctx); } } catch (re) { @@ -4139,20 +4247,20 @@ SolidityParser.MappingContext = MappingContext; SolidityParser.prototype.mapping = function() { var localctx = new MappingContext(this, this._ctx, this.state); - this.enterRule(localctx, 66, SolidityParser.RULE_mapping); + this.enterRule(localctx, 68, SolidityParser.RULE_mapping); try { this.enterOuterAlt(localctx, 1); - this.state = 490; + this.state = 497; this.match(SolidityParser.T__35); - this.state = 491; + this.state = 498; this.match(SolidityParser.T__20); - this.state = 492; + this.state = 499; this.elementaryTypeName(); - this.state = 493; + this.state = 500; this.match(SolidityParser.T__36); - this.state = 494; + this.state = 501; this.typeName(0); - this.state = 495; + this.state = 502; this.match(SolidityParser.T__21); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -4251,52 +4359,52 @@ SolidityParser.FunctionTypeNameContext = FunctionTypeNameContext; SolidityParser.prototype.functionTypeName = function() { var localctx = new FunctionTypeNameContext(this, this._ctx, this.state); - this.enterRule(localctx, 68, SolidityParser.RULE_functionTypeName); + this.enterRule(localctx, 70, SolidityParser.RULE_functionTypeName); try { this.enterOuterAlt(localctx, 1); - this.state = 497; + this.state = 504; this.match(SolidityParser.T__27); - this.state = 498; + this.state = 505; this.functionTypeParameterList(); - this.state = 504; + this.state = 511; this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,50,this._ctx) + var _alt = this._interp.adaptivePredict(this._input,53,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { if(_alt===1) { - this.state = 502; + this.state = 509; this._errHandler.sync(this); switch(this._input.LA(1)) { case SolidityParser.InternalKeyword: - this.state = 499; + this.state = 506; this.match(SolidityParser.InternalKeyword); break; case SolidityParser.ExternalKeyword: - this.state = 500; + this.state = 507; this.match(SolidityParser.ExternalKeyword); break; case SolidityParser.ConstantKeyword: case SolidityParser.PayableKeyword: case SolidityParser.PureKeyword: case SolidityParser.ViewKeyword: - this.state = 501; + this.state = 508; this.stateMutability(); break; default: throw new antlr4.error.NoViableAltException(this); } } - this.state = 506; + this.state = 513; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,50,this._ctx); + _alt = this._interp.adaptivePredict(this._input,53,this._ctx); } - this.state = 509; + this.state = 516; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,51,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,54,this._ctx); if(la_===1) { - this.state = 507; + this.state = 514; this.match(SolidityParser.T__28); - this.state = 508; + this.state = 515; this.functionTypeParameterList(); } @@ -4352,11 +4460,11 @@ SolidityParser.StorageLocationContext = StorageLocationContext; SolidityParser.prototype.storageLocation = function() { var localctx = new StorageLocationContext(this, this._ctx, this.state); - this.enterRule(localctx, 70, SolidityParser.RULE_storageLocation); + this.enterRule(localctx, 72, SolidityParser.RULE_storageLocation); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 511; + this.state = 518; _la = this._input.LA(1); if(!(((((_la - 38)) & ~0x1f) == 0 && ((1 << (_la - 38)) & ((1 << (SolidityParser.T__37 - 38)) | (1 << (SolidityParser.T__38 - 38)) | (1 << (SolidityParser.T__39 - 38)))) !== 0))) { this._errHandler.recoverInline(this); @@ -4432,13 +4540,13 @@ SolidityParser.StateMutabilityContext = StateMutabilityContext; SolidityParser.prototype.stateMutability = function() { var localctx = new StateMutabilityContext(this, this._ctx, this.state); - this.enterRule(localctx, 72, SolidityParser.RULE_stateMutability); + this.enterRule(localctx, 74, SolidityParser.RULE_stateMutability); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 513; + this.state = 520; _la = this._input.LA(1); - if(!(((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (SolidityParser.ConstantKeyword - 105)) | (1 << (SolidityParser.PayableKeyword - 105)) | (1 << (SolidityParser.PureKeyword - 105)) | (1 << (SolidityParser.ViewKeyword - 105)))) !== 0))) { + if(!(((((_la - 107)) & ~0x1f) == 0 && ((1 << (_la - 107)) & ((1 << (SolidityParser.ConstantKeyword - 107)) | (1 << (SolidityParser.PayableKeyword - 107)) | (1 << (SolidityParser.PureKeyword - 107)) | (1 << (SolidityParser.ViewKeyword - 107)))) !== 0))) { this._errHandler.recoverInline(this); } else { @@ -4507,23 +4615,23 @@ SolidityParser.BlockContext = BlockContext; SolidityParser.prototype.block = function() { var localctx = new BlockContext(this, this._ctx, this.state); - this.enterRule(localctx, 74, SolidityParser.RULE_block); + this.enterRule(localctx, 76, SolidityParser.RULE_block); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 515; + this.state = 522; this.match(SolidityParser.T__13); - this.state = 519; + this.state = 526; this._errHandler.sync(this); _la = this._input.LA(1); - while((((_la) & ~0x1f) == 0 && ((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))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__35 - 32)) | (1 << (SolidityParser.T__39 - 32)) | (1 << (SolidityParser.T__40 - 32)) | (1 << (SolidityParser.T__42 - 32)) | (1 << (SolidityParser.T__43 - 32)) | (1 << (SolidityParser.T__44 - 32)) | (1 << (SolidityParser.T__45 - 32)) | (1 << (SolidityParser.T__46 - 32)) | (1 << (SolidityParser.T__47 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((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.TypeKeyword - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) { - this.state = 516; + while((((_la) & ~0x1f) == 0 && ((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))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__35 - 32)) | (1 << (SolidityParser.T__39 - 32)) | (1 << (SolidityParser.T__40 - 32)) | (1 << (SolidityParser.T__42 - 32)) | (1 << (SolidityParser.T__43 - 32)) | (1 << (SolidityParser.T__44 - 32)) | (1 << (SolidityParser.T__45 - 32)) | (1 << (SolidityParser.T__46 - 32)) | (1 << (SolidityParser.T__47 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 93)) & ~0x1f) == 0 && ((1 << (_la - 93)) & ((1 << (SolidityParser.Int - 93)) | (1 << (SolidityParser.Uint - 93)) | (1 << (SolidityParser.Byte - 93)) | (1 << (SolidityParser.Fixed - 93)) | (1 << (SolidityParser.Ufixed - 93)) | (1 << (SolidityParser.BooleanLiteral - 93)) | (1 << (SolidityParser.DecimalNumber - 93)) | (1 << (SolidityParser.HexNumber - 93)) | (1 << (SolidityParser.HexLiteral - 93)) | (1 << (SolidityParser.BreakKeyword - 93)) | (1 << (SolidityParser.ContinueKeyword - 93)) | (1 << (SolidityParser.TypeKeyword - 93)) | (1 << (SolidityParser.Identifier - 93)) | (1 << (SolidityParser.StringLiteral - 93)))) !== 0)) { + this.state = 523; this.statement(); - this.state = 521; + this.state = 528; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 522; + this.state = 529; this.match(SolidityParser.T__15); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -4624,64 +4732,64 @@ SolidityParser.StatementContext = StatementContext; SolidityParser.prototype.statement = function() { var localctx = new StatementContext(this, this._ctx, this.state); - this.enterRule(localctx, 76, SolidityParser.RULE_statement); + this.enterRule(localctx, 78, SolidityParser.RULE_statement); try { - this.state = 536; + this.state = 543; this._errHandler.sync(this); switch(this._input.LA(1)) { case SolidityParser.T__40: this.enterOuterAlt(localctx, 1); - this.state = 524; + this.state = 531; this.ifStatement(); break; case SolidityParser.T__42: this.enterOuterAlt(localctx, 2); - this.state = 525; + this.state = 532; this.whileStatement(); break; case SolidityParser.T__23: this.enterOuterAlt(localctx, 3); - this.state = 526; + this.state = 533; this.forStatement(); break; case SolidityParser.T__13: this.enterOuterAlt(localctx, 4); - this.state = 527; + this.state = 534; this.block(); break; case SolidityParser.T__43: this.enterOuterAlt(localctx, 5); - this.state = 528; + this.state = 535; this.inlineAssemblyStatement(); break; case SolidityParser.T__44: this.enterOuterAlt(localctx, 6); - this.state = 529; + this.state = 536; this.doWhileStatement(); break; case SolidityParser.ContinueKeyword: this.enterOuterAlt(localctx, 7); - this.state = 530; + this.state = 537; this.continueStatement(); break; case SolidityParser.BreakKeyword: this.enterOuterAlt(localctx, 8); - this.state = 531; + this.state = 538; this.breakStatement(); break; case SolidityParser.T__45: this.enterOuterAlt(localctx, 9); - this.state = 532; + this.state = 539; this.returnStatement(); break; case SolidityParser.T__46: this.enterOuterAlt(localctx, 10); - this.state = 533; + this.state = 540; this.throwStatement(); break; case SolidityParser.T__47: this.enterOuterAlt(localctx, 11); - this.state = 534; + this.state = 541; this.emitStatement(); break; case SolidityParser.T__3: @@ -4717,7 +4825,7 @@ SolidityParser.prototype.statement = function() { case SolidityParser.Identifier: case SolidityParser.StringLiteral: this.enterOuterAlt(localctx, 12); - this.state = 535; + this.state = 542; this.simpleStatement(); break; default: @@ -4778,12 +4886,12 @@ SolidityParser.ExpressionStatementContext = ExpressionStatementContext; SolidityParser.prototype.expressionStatement = function() { var localctx = new ExpressionStatementContext(this, this._ctx, this.state); - this.enterRule(localctx, 78, SolidityParser.RULE_expressionStatement); + this.enterRule(localctx, 80, SolidityParser.RULE_expressionStatement); try { this.enterOuterAlt(localctx, 1); - this.state = 538; + this.state = 545; this.expression(0); - this.state = 539; + this.state = 546; this.match(SolidityParser.T__1); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -4851,26 +4959,26 @@ SolidityParser.IfStatementContext = IfStatementContext; SolidityParser.prototype.ifStatement = function() { var localctx = new IfStatementContext(this, this._ctx, this.state); - this.enterRule(localctx, 80, SolidityParser.RULE_ifStatement); + this.enterRule(localctx, 82, SolidityParser.RULE_ifStatement); try { this.enterOuterAlt(localctx, 1); - this.state = 541; + this.state = 548; this.match(SolidityParser.T__40); - this.state = 542; + this.state = 549; this.match(SolidityParser.T__20); - this.state = 543; + this.state = 550; this.expression(0); - this.state = 544; + this.state = 551; this.match(SolidityParser.T__21); - this.state = 545; + this.state = 552; this.statement(); - this.state = 548; + this.state = 555; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,54,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,57,this._ctx); if(la_===1) { - this.state = 546; + this.state = 553; this.match(SolidityParser.T__41); - this.state = 547; + this.state = 554; this.statement(); } @@ -4933,18 +5041,18 @@ SolidityParser.WhileStatementContext = WhileStatementContext; SolidityParser.prototype.whileStatement = function() { var localctx = new WhileStatementContext(this, this._ctx, this.state); - this.enterRule(localctx, 82, SolidityParser.RULE_whileStatement); + this.enterRule(localctx, 84, SolidityParser.RULE_whileStatement); try { this.enterOuterAlt(localctx, 1); - this.state = 550; + this.state = 557; this.match(SolidityParser.T__42); - this.state = 551; + this.state = 558; this.match(SolidityParser.T__20); - this.state = 552; + this.state = 559; this.expression(0); - this.state = 553; + this.state = 560; this.match(SolidityParser.T__21); - this.state = 554; + this.state = 561; this.statement(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -5005,20 +5113,20 @@ SolidityParser.SimpleStatementContext = SimpleStatementContext; SolidityParser.prototype.simpleStatement = function() { var localctx = new SimpleStatementContext(this, this._ctx, this.state); - this.enterRule(localctx, 84, SolidityParser.RULE_simpleStatement); + this.enterRule(localctx, 86, SolidityParser.RULE_simpleStatement); try { this.enterOuterAlt(localctx, 1); - this.state = 558; + this.state = 565; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,55,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,58,this._ctx); switch(la_) { case 1: - this.state = 556; + this.state = 563; this.variableDeclarationStatement(); break; case 2: - this.state = 557; + this.state = 564; this.expressionStatement(); break; @@ -5090,15 +5198,15 @@ SolidityParser.ForStatementContext = ForStatementContext; SolidityParser.prototype.forStatement = function() { var localctx = new ForStatementContext(this, this._ctx, this.state); - this.enterRule(localctx, 86, SolidityParser.RULE_forStatement); + this.enterRule(localctx, 88, SolidityParser.RULE_forStatement); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 560; + this.state = 567; this.match(SolidityParser.T__23); - this.state = 561; + this.state = 568; this.match(SolidityParser.T__20); - this.state = 564; + this.state = 571; this._errHandler.sync(this); switch(this._input.LA(1)) { case SolidityParser.T__3: @@ -5133,17 +5241,17 @@ SolidityParser.prototype.forStatement = function() { case SolidityParser.TypeKeyword: case SolidityParser.Identifier: case SolidityParser.StringLiteral: - this.state = 562; + this.state = 569; this.simpleStatement(); break; case SolidityParser.T__1: - this.state = 563; + this.state = 570; this.match(SolidityParser.T__1); break; default: throw new antlr4.error.NoViableAltException(this); } - this.state = 568; + this.state = 575; this._errHandler.sync(this); switch(this._input.LA(1)) { case SolidityParser.T__3: @@ -5176,27 +5284,27 @@ SolidityParser.prototype.forStatement = function() { case SolidityParser.TypeKeyword: case SolidityParser.Identifier: case SolidityParser.StringLiteral: - this.state = 566; + this.state = 573; this.expressionStatement(); break; case SolidityParser.T__1: - this.state = 567; + this.state = 574; this.match(SolidityParser.T__1); break; default: throw new antlr4.error.NoViableAltException(this); } - this.state = 571; + this.state = 578; this._errHandler.sync(this); _la = this._input.LA(1); - if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__39 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((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.TypeKeyword - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) { - this.state = 570; + if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__39 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 93)) & ~0x1f) == 0 && ((1 << (_la - 93)) & ((1 << (SolidityParser.Int - 93)) | (1 << (SolidityParser.Uint - 93)) | (1 << (SolidityParser.Byte - 93)) | (1 << (SolidityParser.Fixed - 93)) | (1 << (SolidityParser.Ufixed - 93)) | (1 << (SolidityParser.BooleanLiteral - 93)) | (1 << (SolidityParser.DecimalNumber - 93)) | (1 << (SolidityParser.HexNumber - 93)) | (1 << (SolidityParser.HexLiteral - 93)) | (1 << (SolidityParser.TypeKeyword - 93)) | (1 << (SolidityParser.Identifier - 93)) | (1 << (SolidityParser.StringLiteral - 93)))) !== 0)) { + this.state = 577; this.expression(0); } - this.state = 573; + this.state = 580; this.match(SolidityParser.T__21); - this.state = 574; + this.state = 581; this.statement(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -5257,21 +5365,21 @@ SolidityParser.InlineAssemblyStatementContext = InlineAssemblyStatementContext; SolidityParser.prototype.inlineAssemblyStatement = function() { var localctx = new InlineAssemblyStatementContext(this, this._ctx, this.state); - this.enterRule(localctx, 88, SolidityParser.RULE_inlineAssemblyStatement); + this.enterRule(localctx, 90, SolidityParser.RULE_inlineAssemblyStatement); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 576; + this.state = 583; this.match(SolidityParser.T__43); - this.state = 578; + this.state = 585; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===SolidityParser.StringLiteral) { - this.state = 577; + this.state = 584; this.match(SolidityParser.StringLiteral); } - this.state = 580; + this.state = 587; this.assemblyBlock(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -5332,22 +5440,22 @@ SolidityParser.DoWhileStatementContext = DoWhileStatementContext; SolidityParser.prototype.doWhileStatement = function() { var localctx = new DoWhileStatementContext(this, this._ctx, this.state); - this.enterRule(localctx, 90, SolidityParser.RULE_doWhileStatement); + this.enterRule(localctx, 92, SolidityParser.RULE_doWhileStatement); try { this.enterOuterAlt(localctx, 1); - this.state = 582; + this.state = 589; this.match(SolidityParser.T__44); - this.state = 583; + this.state = 590; this.statement(); - this.state = 584; + this.state = 591; this.match(SolidityParser.T__42); - this.state = 585; + this.state = 592; this.match(SolidityParser.T__20); - this.state = 586; + this.state = 593; this.expression(0); - this.state = 587; + this.state = 594; this.match(SolidityParser.T__21); - this.state = 588; + this.state = 595; this.match(SolidityParser.T__1); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -5404,12 +5512,12 @@ SolidityParser.ContinueStatementContext = ContinueStatementContext; SolidityParser.prototype.continueStatement = function() { var localctx = new ContinueStatementContext(this, this._ctx, this.state); - this.enterRule(localctx, 92, SolidityParser.RULE_continueStatement); + this.enterRule(localctx, 94, SolidityParser.RULE_continueStatement); try { this.enterOuterAlt(localctx, 1); - this.state = 590; + this.state = 597; this.match(SolidityParser.ContinueKeyword); - this.state = 591; + this.state = 598; this.match(SolidityParser.T__1); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -5466,12 +5574,12 @@ SolidityParser.BreakStatementContext = BreakStatementContext; SolidityParser.prototype.breakStatement = function() { var localctx = new BreakStatementContext(this, this._ctx, this.state); - this.enterRule(localctx, 94, SolidityParser.RULE_breakStatement); + this.enterRule(localctx, 96, SolidityParser.RULE_breakStatement); try { this.enterOuterAlt(localctx, 1); - this.state = 593; + this.state = 600; this.match(SolidityParser.BreakKeyword); - this.state = 594; + this.state = 601; this.match(SolidityParser.T__1); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -5528,21 +5636,21 @@ SolidityParser.ReturnStatementContext = ReturnStatementContext; SolidityParser.prototype.returnStatement = function() { var localctx = new ReturnStatementContext(this, this._ctx, this.state); - this.enterRule(localctx, 96, SolidityParser.RULE_returnStatement); + this.enterRule(localctx, 98, SolidityParser.RULE_returnStatement); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 596; + this.state = 603; this.match(SolidityParser.T__45); - this.state = 598; + this.state = 605; this._errHandler.sync(this); _la = this._input.LA(1); - if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__39 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((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.TypeKeyword - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) { - this.state = 597; + if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__39 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 93)) & ~0x1f) == 0 && ((1 << (_la - 93)) & ((1 << (SolidityParser.Int - 93)) | (1 << (SolidityParser.Uint - 93)) | (1 << (SolidityParser.Byte - 93)) | (1 << (SolidityParser.Fixed - 93)) | (1 << (SolidityParser.Ufixed - 93)) | (1 << (SolidityParser.BooleanLiteral - 93)) | (1 << (SolidityParser.DecimalNumber - 93)) | (1 << (SolidityParser.HexNumber - 93)) | (1 << (SolidityParser.HexLiteral - 93)) | (1 << (SolidityParser.TypeKeyword - 93)) | (1 << (SolidityParser.Identifier - 93)) | (1 << (SolidityParser.StringLiteral - 93)))) !== 0)) { + this.state = 604; this.expression(0); } - this.state = 600; + this.state = 607; this.match(SolidityParser.T__1); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -5596,12 +5704,12 @@ SolidityParser.ThrowStatementContext = ThrowStatementContext; SolidityParser.prototype.throwStatement = function() { var localctx = new ThrowStatementContext(this, this._ctx, this.state); - this.enterRule(localctx, 98, SolidityParser.RULE_throwStatement); + this.enterRule(localctx, 100, SolidityParser.RULE_throwStatement); try { this.enterOuterAlt(localctx, 1); - this.state = 602; + this.state = 609; this.match(SolidityParser.T__46); - this.state = 603; + this.state = 610; this.match(SolidityParser.T__1); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -5658,14 +5766,14 @@ SolidityParser.EmitStatementContext = EmitStatementContext; SolidityParser.prototype.emitStatement = function() { var localctx = new EmitStatementContext(this, this._ctx, this.state); - this.enterRule(localctx, 100, SolidityParser.RULE_emitStatement); + this.enterRule(localctx, 102, SolidityParser.RULE_emitStatement); try { this.enterOuterAlt(localctx, 1); - this.state = 605; + this.state = 612; this.match(SolidityParser.T__47); - this.state = 606; + this.state = 613; this.functionCall(); - this.state = 607; + this.state = 614; this.match(SolidityParser.T__1); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -5734,47 +5842,47 @@ SolidityParser.VariableDeclarationStatementContext = VariableDeclarationStatemen SolidityParser.prototype.variableDeclarationStatement = function() { var localctx = new VariableDeclarationStatementContext(this, this._ctx, this.state); - this.enterRule(localctx, 102, SolidityParser.RULE_variableDeclarationStatement); + this.enterRule(localctx, 104, SolidityParser.RULE_variableDeclarationStatement); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 616; + this.state = 623; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,61,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,64,this._ctx); switch(la_) { case 1: - this.state = 609; + this.state = 616; this.match(SolidityParser.T__48); - this.state = 610; + this.state = 617; this.identifierList(); break; case 2: - this.state = 611; + this.state = 618; this.variableDeclaration(); break; case 3: - this.state = 612; + this.state = 619; this.match(SolidityParser.T__20); - this.state = 613; + this.state = 620; this.variableDeclarationList(); - this.state = 614; + this.state = 621; this.match(SolidityParser.T__21); break; } - this.state = 620; + this.state = 627; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===SolidityParser.T__8) { - this.state = 618; + this.state = 625; this.match(SolidityParser.T__8); - this.state = 619; + this.state = 626; this.expression(0); } - this.state = 622; + this.state = 629; this.match(SolidityParser.T__1); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -5838,33 +5946,33 @@ SolidityParser.VariableDeclarationListContext = VariableDeclarationListContext; SolidityParser.prototype.variableDeclarationList = function() { var localctx = new VariableDeclarationListContext(this, this._ctx, this.state); - this.enterRule(localctx, 104, SolidityParser.RULE_variableDeclarationList); + this.enterRule(localctx, 106, SolidityParser.RULE_variableDeclarationList); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 625; + this.state = 632; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__35 - 34)) | (1 << (SolidityParser.T__39 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((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)) { - this.state = 624; + if(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__35 - 34)) | (1 << (SolidityParser.T__39 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 93)) & ~0x1f) == 0 && ((1 << (_la - 93)) & ((1 << (SolidityParser.Int - 93)) | (1 << (SolidityParser.Uint - 93)) | (1 << (SolidityParser.Byte - 93)) | (1 << (SolidityParser.Fixed - 93)) | (1 << (SolidityParser.Ufixed - 93)) | (1 << (SolidityParser.Identifier - 93)))) !== 0)) { + this.state = 631; this.variableDeclaration(); } - this.state = 633; + this.state = 640; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===SolidityParser.T__14) { - this.state = 627; + this.state = 634; this.match(SolidityParser.T__14); - this.state = 629; + this.state = 636; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__35 - 34)) | (1 << (SolidityParser.T__39 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((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)) { - this.state = 628; + if(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__35 - 34)) | (1 << (SolidityParser.T__39 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 93)) & ~0x1f) == 0 && ((1 << (_la - 93)) & ((1 << (SolidityParser.Int - 93)) | (1 << (SolidityParser.Uint - 93)) | (1 << (SolidityParser.Byte - 93)) | (1 << (SolidityParser.Fixed - 93)) | (1 << (SolidityParser.Ufixed - 93)) | (1 << (SolidityParser.Identifier - 93)))) !== 0)) { + this.state = 635; this.variableDeclaration(); } - this.state = 635; + this.state = 642; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -5930,42 +6038,42 @@ SolidityParser.IdentifierListContext = IdentifierListContext; SolidityParser.prototype.identifierList = function() { var localctx = new IdentifierListContext(this, this._ctx, this.state); - this.enterRule(localctx, 106, SolidityParser.RULE_identifierList); + this.enterRule(localctx, 108, SolidityParser.RULE_identifierList); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 636; - this.match(SolidityParser.T__20); this.state = 643; + this.match(SolidityParser.T__20); + this.state = 650; this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,67,this._ctx) + var _alt = this._interp.adaptivePredict(this._input,70,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { if(_alt===1) { - this.state = 638; + this.state = 645; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===SolidityParser.T__12 || _la===SolidityParser.T__39 || _la===SolidityParser.Identifier) { - this.state = 637; + this.state = 644; this.identifier(); } - this.state = 640; + this.state = 647; this.match(SolidityParser.T__14); } - this.state = 645; + this.state = 652; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,67,this._ctx); + _alt = this._interp.adaptivePredict(this._input,70,this._ctx); } - this.state = 647; + this.state = 654; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===SolidityParser.T__12 || _la===SolidityParser.T__39 || _la===SolidityParser.Identifier) { - this.state = 646; + this.state = 653; this.identifier(); } - this.state = 649; + this.state = 656; this.match(SolidityParser.T__21); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -6038,13 +6146,13 @@ SolidityParser.ElementaryTypeNameContext = ElementaryTypeNameContext; SolidityParser.prototype.elementaryTypeName = function() { var localctx = new ElementaryTypeNameContext(this, this._ctx, this.state); - this.enterRule(localctx, 108, SolidityParser.RULE_elementaryTypeName); + this.enterRule(localctx, 110, SolidityParser.RULE_elementaryTypeName); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 651; + this.state = 658; _la = this._input.LA(1); - if(!(((((_la - 34)) & ~0x1f) == 0 && ((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)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)))) !== 0))) { + if(!(((((_la - 34)) & ~0x1f) == 0 && ((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)))) !== 0) || ((((_la - 93)) & ~0x1f) == 0 && ((1 << (_la - 93)) & ((1 << (SolidityParser.Int - 93)) | (1 << (SolidityParser.Uint - 93)) | (1 << (SolidityParser.Byte - 93)) | (1 << (SolidityParser.Fixed - 93)) | (1 << (SolidityParser.Ufixed - 93)))) !== 0))) { this._errHandler.recoverInline(this); } else { @@ -6131,33 +6239,33 @@ SolidityParser.prototype.expression = function(_p) { var _parentState = this.state; var localctx = new ExpressionContext(this, this._ctx, _parentState); var _prevctx = localctx; - var _startState = 110; - this.enterRecursionRule(localctx, 110, SolidityParser.RULE_expression, _p); + var _startState = 112; + this.enterRecursionRule(localctx, 112, SolidityParser.RULE_expression, _p); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 671; + this.state = 678; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,69,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,72,this._ctx); switch(la_) { case 1: - this.state = 654; + this.state = 661; this.match(SolidityParser.T__54); - this.state = 655; + this.state = 662; this.typeName(0); break; case 2: - this.state = 656; + this.state = 663; this.match(SolidityParser.T__20); - this.state = 657; + this.state = 664; this.expression(0); - this.state = 658; + this.state = 665; this.match(SolidityParser.T__21); break; case 3: - this.state = 660; + this.state = 667; _la = this._input.LA(1); if(!(_la===SolidityParser.T__52 || _la===SolidityParser.T__53)) { this._errHandler.recoverInline(this); @@ -6166,12 +6274,12 @@ SolidityParser.prototype.expression = function(_p) { this._errHandler.reportMatch(this); this.consume(); } - this.state = 661; + this.state = 668; this.expression(19); break; case 4: - this.state = 662; + this.state = 669; _la = this._input.LA(1); if(!(_la===SolidityParser.T__55 || _la===SolidityParser.T__56)) { this._errHandler.recoverInline(this); @@ -6180,12 +6288,12 @@ SolidityParser.prototype.expression = function(_p) { this._errHandler.reportMatch(this); this.consume(); } - this.state = 663; + this.state = 670; this.expression(18); break; case 5: - this.state = 664; + this.state = 671; _la = this._input.LA(1); if(!(_la===SolidityParser.T__57 || _la===SolidityParser.T__58)) { this._errHandler.recoverInline(this); @@ -6194,65 +6302,65 @@ SolidityParser.prototype.expression = function(_p) { this._errHandler.reportMatch(this); this.consume(); } - this.state = 665; + this.state = 672; this.expression(17); break; case 6: - this.state = 666; + this.state = 673; this.match(SolidityParser.T__59); - this.state = 667; + this.state = 674; this.expression(16); break; case 7: - this.state = 668; + this.state = 675; this.match(SolidityParser.T__3); - this.state = 669; + this.state = 676; this.expression(15); break; case 8: - this.state = 670; + this.state = 677; this.primaryExpression(); break; } this._ctx.stop = this._input.LT(-1); - this.state = 732; + this.state = 739; this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,71,this._ctx) + var _alt = this._interp.adaptivePredict(this._input,74,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { if(_alt===1) { if(this._parseListeners!==null) { this.triggerExitRuleEvent(); } _prevctx = localctx; - this.state = 730; + this.state = 737; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,70,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,73,this._ctx); switch(la_) { case 1: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 673; + this.state = 680; if (!( this.precpred(this._ctx, 14))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 14)"); } - this.state = 674; + this.state = 681; this.match(SolidityParser.T__60); - this.state = 675; + this.state = 682; this.expression(15); break; case 2: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 676; + this.state = 683; if (!( this.precpred(this._ctx, 13))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 13)"); } - this.state = 677; + this.state = 684; _la = this._input.LA(1); if(!(_la===SolidityParser.T__11 || _la===SolidityParser.T__61 || _la===SolidityParser.T__62)) { this._errHandler.recoverInline(this); @@ -6261,18 +6369,18 @@ SolidityParser.prototype.expression = function(_p) { this._errHandler.reportMatch(this); this.consume(); } - this.state = 678; + this.state = 685; this.expression(14); break; case 3: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 679; + this.state = 686; if (!( this.precpred(this._ctx, 12))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 12)"); } - this.state = 680; + this.state = 687; _la = this._input.LA(1); if(!(_la===SolidityParser.T__55 || _la===SolidityParser.T__56)) { this._errHandler.recoverInline(this); @@ -6281,18 +6389,18 @@ SolidityParser.prototype.expression = function(_p) { this._errHandler.reportMatch(this); this.consume(); } - this.state = 681; + this.state = 688; this.expression(13); break; case 4: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 682; + this.state = 689; if (!( this.precpred(this._ctx, 11))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 11)"); } - this.state = 683; + this.state = 690; _la = this._input.LA(1); if(!(_la===SolidityParser.T__63 || _la===SolidityParser.T__64)) { this._errHandler.recoverInline(this); @@ -6301,57 +6409,57 @@ SolidityParser.prototype.expression = function(_p) { this._errHandler.reportMatch(this); this.consume(); } - this.state = 684; + this.state = 691; this.expression(12); break; case 5: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 685; + this.state = 692; if (!( this.precpred(this._ctx, 10))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 10)"); } - this.state = 686; + this.state = 693; this.match(SolidityParser.T__65); - this.state = 687; + this.state = 694; this.expression(11); break; case 6: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 688; + this.state = 695; if (!( this.precpred(this._ctx, 9))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 9)"); } - this.state = 689; + this.state = 696; this.match(SolidityParser.T__2); - this.state = 690; + this.state = 697; this.expression(10); break; case 7: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 691; + this.state = 698; if (!( this.precpred(this._ctx, 8))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 8)"); } - this.state = 692; + this.state = 699; this.match(SolidityParser.T__66); - this.state = 693; + this.state = 700; this.expression(9); break; case 8: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 694; + this.state = 701; if (!( this.precpred(this._ctx, 7))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 7)"); } - this.state = 695; + this.state = 702; _la = this._input.LA(1); if(!((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__4) | (1 << SolidityParser.T__5) | (1 << SolidityParser.T__6) | (1 << SolidityParser.T__7))) !== 0))) { this._errHandler.recoverInline(this); @@ -6360,18 +6468,18 @@ SolidityParser.prototype.expression = function(_p) { this._errHandler.reportMatch(this); this.consume(); } - this.state = 696; + this.state = 703; this.expression(8); break; case 9: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 697; + this.state = 704; if (!( this.precpred(this._ctx, 6))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 6)"); } - this.state = 698; + this.state = 705; _la = this._input.LA(1); if(!(_la===SolidityParser.T__67 || _la===SolidityParser.T__68)) { this._errHandler.recoverInline(this); @@ -6380,61 +6488,61 @@ SolidityParser.prototype.expression = function(_p) { this._errHandler.reportMatch(this); this.consume(); } - this.state = 699; + this.state = 706; this.expression(7); break; case 10: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 700; + this.state = 707; if (!( this.precpred(this._ctx, 5))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 5)"); } - this.state = 701; + this.state = 708; this.match(SolidityParser.T__69); - this.state = 702; + this.state = 709; this.expression(6); break; case 11: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 703; + this.state = 710; if (!( this.precpred(this._ctx, 4))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 4)"); } - this.state = 704; + this.state = 711; this.match(SolidityParser.T__70); - this.state = 705; + this.state = 712; this.expression(5); break; case 12: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 706; + this.state = 713; if (!( this.precpred(this._ctx, 3))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)"); } - this.state = 707; + this.state = 714; this.match(SolidityParser.T__71); - this.state = 708; + this.state = 715; this.expression(0); - this.state = 709; + this.state = 716; this.match(SolidityParser.T__72); - this.state = 710; + this.state = 717; this.expression(4); break; case 13: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 712; + this.state = 719; if (!( this.precpred(this._ctx, 2))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)"); } - this.state = 713; + this.state = 720; _la = this._input.LA(1); if(!(_la===SolidityParser.T__8 || ((((_la - 74)) & ~0x1f) == 0 && ((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))) { this._errHandler.recoverInline(this); @@ -6443,18 +6551,18 @@ SolidityParser.prototype.expression = function(_p) { this._errHandler.reportMatch(this); this.consume(); } - this.state = 714; + this.state = 721; this.expression(3); break; case 14: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 715; + this.state = 722; if (!( this.precpred(this._ctx, 25))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 25)"); } - this.state = 716; + this.state = 723; _la = this._input.LA(1); if(!(_la===SolidityParser.T__52 || _la===SolidityParser.T__53)) { this._errHandler.recoverInline(this); @@ -6468,51 +6576,51 @@ SolidityParser.prototype.expression = function(_p) { case 15: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 717; + this.state = 724; if (!( this.precpred(this._ctx, 23))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 23)"); } - this.state = 718; + this.state = 725; this.match(SolidityParser.T__31); - this.state = 719; + this.state = 726; this.expression(0); - this.state = 720; + this.state = 727; this.match(SolidityParser.T__32); break; case 16: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 722; + this.state = 729; if (!( this.precpred(this._ctx, 22))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 22)"); } - this.state = 723; + this.state = 730; this.match(SolidityParser.T__20); - this.state = 724; + this.state = 731; this.functionCallArguments(); - this.state = 725; + this.state = 732; this.match(SolidityParser.T__21); break; case 17: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 727; + this.state = 734; if (!( this.precpred(this._ctx, 21))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 21)"); } - this.state = 728; + this.state = 735; this.match(SolidityParser.T__34); - this.state = 729; + this.state = 736; this.identifier(); break; } } - this.state = 734; + this.state = 741; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,71,this._ctx); + _alt = this._interp.adaptivePredict(this._input,74,this._ctx); } } catch( error) { @@ -6598,58 +6706,58 @@ SolidityParser.PrimaryExpressionContext = PrimaryExpressionContext; SolidityParser.prototype.primaryExpression = function() { var localctx = new PrimaryExpressionContext(this, this._ctx, this.state); - this.enterRule(localctx, 112, SolidityParser.RULE_primaryExpression); + this.enterRule(localctx, 114, SolidityParser.RULE_primaryExpression); try { - this.state = 751; + this.state = 758; this._errHandler.sync(this); switch(this._input.LA(1)) { case SolidityParser.BooleanLiteral: this.enterOuterAlt(localctx, 1); - this.state = 735; + this.state = 742; this.match(SolidityParser.BooleanLiteral); break; case SolidityParser.DecimalNumber: case SolidityParser.HexNumber: this.enterOuterAlt(localctx, 2); - this.state = 736; + this.state = 743; this.numberLiteral(); break; case SolidityParser.HexLiteral: this.enterOuterAlt(localctx, 3); - this.state = 737; + this.state = 744; this.match(SolidityParser.HexLiteral); break; case SolidityParser.StringLiteral: this.enterOuterAlt(localctx, 4); - this.state = 738; + this.state = 745; this.match(SolidityParser.StringLiteral); break; case SolidityParser.T__12: case SolidityParser.T__39: case SolidityParser.Identifier: this.enterOuterAlt(localctx, 5); - this.state = 739; + this.state = 746; this.identifier(); - this.state = 742; + this.state = 749; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,72,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,75,this._ctx); if(la_===1) { - this.state = 740; + this.state = 747; this.match(SolidityParser.T__31); - this.state = 741; + this.state = 748; this.match(SolidityParser.T__32); } break; case SolidityParser.TypeKeyword: this.enterOuterAlt(localctx, 6); - this.state = 744; + this.state = 751; this.match(SolidityParser.TypeKeyword); break; case SolidityParser.T__20: case SolidityParser.T__31: this.enterOuterAlt(localctx, 7); - this.state = 745; + this.state = 752; this.tupleExpression(); break; case SolidityParser.T__33: @@ -6663,15 +6771,15 @@ SolidityParser.prototype.primaryExpression = function() { case SolidityParser.Fixed: case SolidityParser.Ufixed: this.enterOuterAlt(localctx, 8); - this.state = 746; + this.state = 753; this.elementaryTypeNameExpression(); - this.state = 749; + this.state = 756; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,73,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,76,this._ctx); if(la_===1) { - this.state = 747; + this.state = 754; this.match(SolidityParser.T__31); - this.state = 748; + this.state = 755; this.match(SolidityParser.T__32); } @@ -6741,21 +6849,21 @@ SolidityParser.ExpressionListContext = ExpressionListContext; SolidityParser.prototype.expressionList = function() { var localctx = new ExpressionListContext(this, this._ctx, this.state); - this.enterRule(localctx, 114, SolidityParser.RULE_expressionList); + this.enterRule(localctx, 116, SolidityParser.RULE_expressionList); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 753; + this.state = 760; this.expression(0); - this.state = 758; + this.state = 765; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===SolidityParser.T__14) { - this.state = 754; + this.state = 761; this.match(SolidityParser.T__14); - this.state = 755; + this.state = 762; this.expression(0); - this.state = 760; + this.state = 767; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -6821,32 +6929,32 @@ SolidityParser.NameValueListContext = NameValueListContext; SolidityParser.prototype.nameValueList = function() { var localctx = new NameValueListContext(this, this._ctx, this.state); - this.enterRule(localctx, 116, SolidityParser.RULE_nameValueList); + this.enterRule(localctx, 118, SolidityParser.RULE_nameValueList); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 761; + this.state = 768; this.nameValue(); - this.state = 766; + this.state = 773; this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,76,this._ctx) + var _alt = this._interp.adaptivePredict(this._input,79,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { if(_alt===1) { - this.state = 762; + this.state = 769; this.match(SolidityParser.T__14); - this.state = 763; + this.state = 770; this.nameValue(); } - this.state = 768; + this.state = 775; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,76,this._ctx); + _alt = this._interp.adaptivePredict(this._input,79,this._ctx); } - this.state = 770; + this.state = 777; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===SolidityParser.T__14) { - this.state = 769; + this.state = 776; this.match(SolidityParser.T__14); } @@ -6909,14 +7017,14 @@ SolidityParser.NameValueContext = NameValueContext; SolidityParser.prototype.nameValue = function() { var localctx = new NameValueContext(this, this._ctx, this.state); - this.enterRule(localctx, 118, SolidityParser.RULE_nameValue); + this.enterRule(localctx, 120, SolidityParser.RULE_nameValue); try { this.enterOuterAlt(localctx, 1); - this.state = 772; + this.state = 779; this.identifier(); - this.state = 773; + this.state = 780; this.match(SolidityParser.T__72); - this.state = 774; + this.state = 781; this.expression(0); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -6977,25 +7085,25 @@ SolidityParser.FunctionCallArgumentsContext = FunctionCallArgumentsContext; SolidityParser.prototype.functionCallArguments = function() { var localctx = new FunctionCallArgumentsContext(this, this._ctx, this.state); - this.enterRule(localctx, 120, SolidityParser.RULE_functionCallArguments); + this.enterRule(localctx, 122, SolidityParser.RULE_functionCallArguments); var _la = 0; // Token type try { - this.state = 784; + this.state = 791; this._errHandler.sync(this); switch(this._input.LA(1)) { case SolidityParser.T__13: this.enterOuterAlt(localctx, 1); - this.state = 776; + this.state = 783; this.match(SolidityParser.T__13); - this.state = 778; + this.state = 785; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===SolidityParser.T__12 || _la===SolidityParser.T__39 || _la===SolidityParser.Identifier) { - this.state = 777; + this.state = 784; this.nameValueList(); } - this.state = 780; + this.state = 787; this.match(SolidityParser.T__15); break; case SolidityParser.T__3: @@ -7030,11 +7138,11 @@ SolidityParser.prototype.functionCallArguments = function() { case SolidityParser.Identifier: case SolidityParser.StringLiteral: this.enterOuterAlt(localctx, 2); - this.state = 782; + this.state = 789; this._errHandler.sync(this); _la = this._input.LA(1); - if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__39 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((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.TypeKeyword - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) { - this.state = 781; + if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__39 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 93)) & ~0x1f) == 0 && ((1 << (_la - 93)) & ((1 << (SolidityParser.Int - 93)) | (1 << (SolidityParser.Uint - 93)) | (1 << (SolidityParser.Byte - 93)) | (1 << (SolidityParser.Fixed - 93)) | (1 << (SolidityParser.Ufixed - 93)) | (1 << (SolidityParser.BooleanLiteral - 93)) | (1 << (SolidityParser.DecimalNumber - 93)) | (1 << (SolidityParser.HexNumber - 93)) | (1 << (SolidityParser.HexLiteral - 93)) | (1 << (SolidityParser.TypeKeyword - 93)) | (1 << (SolidityParser.Identifier - 93)) | (1 << (SolidityParser.StringLiteral - 93)))) !== 0)) { + this.state = 788; this.expressionList(); } @@ -7101,16 +7209,16 @@ SolidityParser.FunctionCallContext = FunctionCallContext; SolidityParser.prototype.functionCall = function() { var localctx = new FunctionCallContext(this, this._ctx, this.state); - this.enterRule(localctx, 122, SolidityParser.RULE_functionCall); + this.enterRule(localctx, 124, SolidityParser.RULE_functionCall); try { this.enterOuterAlt(localctx, 1); - this.state = 786; + this.state = 793; this.expression(0); - this.state = 787; + this.state = 794; this.match(SolidityParser.T__20); - this.state = 788; + this.state = 795; this.functionCallArguments(); - this.state = 789; + this.state = 796; this.match(SolidityParser.T__21); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -7174,23 +7282,23 @@ SolidityParser.AssemblyBlockContext = AssemblyBlockContext; SolidityParser.prototype.assemblyBlock = function() { var localctx = new AssemblyBlockContext(this, this._ctx, this.state); - this.enterRule(localctx, 124, SolidityParser.RULE_assemblyBlock); + this.enterRule(localctx, 126, SolidityParser.RULE_assemblyBlock); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 791; + this.state = 798; this.match(SolidityParser.T__13); - this.state = 795; + this.state = 802; this._errHandler.sync(this); _la = this._input.LA(1); while((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__12) | (1 << SolidityParser.T__13) | (1 << SolidityParser.T__20) | (1 << SolidityParser.T__23) | (1 << SolidityParser.T__27))) !== 0) || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__39 - 34)) | (1 << (SolidityParser.T__40 - 34)) | (1 << (SolidityParser.T__43 - 34)) | (1 << (SolidityParser.T__45 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 84)) & ~0x1f) == 0 && ((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)))) !== 0) || _la===SolidityParser.Identifier || _la===SolidityParser.StringLiteral) { - this.state = 792; + this.state = 799; this.assemblyItem(); - this.state = 797; + this.state = 804; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 798; + this.state = 805; this.match(SolidityParser.T__15); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -7311,111 +7419,111 @@ SolidityParser.AssemblyItemContext = AssemblyItemContext; SolidityParser.prototype.assemblyItem = function() { var localctx = new AssemblyItemContext(this, this._ctx, this.state); - this.enterRule(localctx, 126, SolidityParser.RULE_assemblyItem); + this.enterRule(localctx, 128, SolidityParser.RULE_assemblyItem); try { - this.state = 817; + this.state = 824; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,82,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,85,this._ctx); switch(la_) { case 1: this.enterOuterAlt(localctx, 1); - this.state = 800; + this.state = 807; this.identifier(); break; case 2: this.enterOuterAlt(localctx, 2); - this.state = 801; + this.state = 808; this.assemblyBlock(); break; case 3: this.enterOuterAlt(localctx, 3); - this.state = 802; + this.state = 809; this.assemblyExpression(); break; case 4: this.enterOuterAlt(localctx, 4); - this.state = 803; + this.state = 810; this.assemblyLocalDefinition(); break; case 5: this.enterOuterAlt(localctx, 5); - this.state = 804; + this.state = 811; this.assemblyAssignment(); break; case 6: this.enterOuterAlt(localctx, 6); - this.state = 805; + this.state = 812; this.assemblyStackAssignment(); break; case 7: this.enterOuterAlt(localctx, 7); - this.state = 806; + this.state = 813; this.labelDefinition(); break; case 8: this.enterOuterAlt(localctx, 8); - this.state = 807; + this.state = 814; this.assemblySwitch(); break; case 9: this.enterOuterAlt(localctx, 9); - this.state = 808; + this.state = 815; this.assemblyFunctionDefinition(); break; case 10: this.enterOuterAlt(localctx, 10); - this.state = 809; + this.state = 816; this.assemblyFor(); break; case 11: this.enterOuterAlt(localctx, 11); - this.state = 810; + this.state = 817; this.assemblyIf(); break; case 12: this.enterOuterAlt(localctx, 12); - this.state = 811; + this.state = 818; this.match(SolidityParser.BreakKeyword); break; case 13: this.enterOuterAlt(localctx, 13); - this.state = 812; + this.state = 819; this.match(SolidityParser.ContinueKeyword); break; case 14: this.enterOuterAlt(localctx, 14); - this.state = 813; + this.state = 820; this.subAssembly(); break; case 15: this.enterOuterAlt(localctx, 15); - this.state = 814; + this.state = 821; this.numberLiteral(); break; case 16: this.enterOuterAlt(localctx, 16); - this.state = 815; + this.state = 822; this.match(SolidityParser.StringLiteral); break; case 17: this.enterOuterAlt(localctx, 17); - this.state = 816; + this.state = 823; this.match(SolidityParser.HexLiteral); break; @@ -7479,9 +7587,9 @@ SolidityParser.AssemblyExpressionContext = AssemblyExpressionContext; SolidityParser.prototype.assemblyExpression = function() { var localctx = new AssemblyExpressionContext(this, this._ctx, this.state); - this.enterRule(localctx, 128, SolidityParser.RULE_assemblyExpression); + this.enterRule(localctx, 130, SolidityParser.RULE_assemblyExpression); try { - this.state = 821; + this.state = 828; this._errHandler.sync(this); switch(this._input.LA(1)) { case SolidityParser.T__12: @@ -7491,7 +7599,7 @@ SolidityParser.prototype.assemblyExpression = function() { case SolidityParser.T__51: case SolidityParser.Identifier: this.enterOuterAlt(localctx, 1); - this.state = 819; + this.state = 826; this.assemblyCall(); break; case SolidityParser.DecimalNumber: @@ -7499,7 +7607,7 @@ SolidityParser.prototype.assemblyExpression = function() { case SolidityParser.HexLiteral: case SolidityParser.StringLiteral: this.enterOuterAlt(localctx, 2); - this.state = 820; + this.state = 827; this.assemblyLiteral(); break; default: @@ -7571,61 +7679,61 @@ SolidityParser.AssemblyCallContext = AssemblyCallContext; SolidityParser.prototype.assemblyCall = function() { var localctx = new AssemblyCallContext(this, this._ctx, this.state); - this.enterRule(localctx, 130, SolidityParser.RULE_assemblyCall); + this.enterRule(localctx, 132, SolidityParser.RULE_assemblyCall); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 827; + this.state = 834; this._errHandler.sync(this); switch(this._input.LA(1)) { case SolidityParser.T__45: - this.state = 823; + this.state = 830; this.match(SolidityParser.T__45); break; case SolidityParser.T__33: - this.state = 824; + this.state = 831; this.match(SolidityParser.T__33); break; case SolidityParser.T__51: - this.state = 825; + this.state = 832; this.match(SolidityParser.T__51); break; case SolidityParser.T__12: case SolidityParser.T__39: case SolidityParser.Identifier: - this.state = 826; + this.state = 833; this.identifier(); break; default: throw new antlr4.error.NoViableAltException(this); } - this.state = 841; + this.state = 848; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,87,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,90,this._ctx); if(la_===1) { - this.state = 829; + this.state = 836; this.match(SolidityParser.T__20); - this.state = 831; + this.state = 838; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===SolidityParser.T__12 || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__39 - 34)) | (1 << (SolidityParser.T__45 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 98)) & ~0x1f) == 0 && ((1 << (_la - 98)) & ((1 << (SolidityParser.DecimalNumber - 98)) | (1 << (SolidityParser.HexNumber - 98)) | (1 << (SolidityParser.HexLiteral - 98)) | (1 << (SolidityParser.Identifier - 98)) | (1 << (SolidityParser.StringLiteral - 98)))) !== 0)) { - this.state = 830; + if(_la===SolidityParser.T__12 || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__39 - 34)) | (1 << (SolidityParser.T__45 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 100)) & ~0x1f) == 0 && ((1 << (_la - 100)) & ((1 << (SolidityParser.DecimalNumber - 100)) | (1 << (SolidityParser.HexNumber - 100)) | (1 << (SolidityParser.HexLiteral - 100)) | (1 << (SolidityParser.Identifier - 100)) | (1 << (SolidityParser.StringLiteral - 100)))) !== 0)) { + this.state = 837; this.assemblyExpression(); } - this.state = 837; + this.state = 844; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===SolidityParser.T__14) { - this.state = 833; + this.state = 840; this.match(SolidityParser.T__14); - this.state = 834; + this.state = 841; this.assemblyExpression(); - this.state = 839; + this.state = 846; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 840; + this.state = 847; this.match(SolidityParser.T__21); } @@ -7688,21 +7796,21 @@ SolidityParser.AssemblyLocalDefinitionContext = AssemblyLocalDefinitionContext; SolidityParser.prototype.assemblyLocalDefinition = function() { var localctx = new AssemblyLocalDefinitionContext(this, this._ctx, this.state); - this.enterRule(localctx, 132, SolidityParser.RULE_assemblyLocalDefinition); + this.enterRule(localctx, 134, SolidityParser.RULE_assemblyLocalDefinition); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 843; + this.state = 850; this.match(SolidityParser.T__83); - this.state = 844; + this.state = 851; this.assemblyIdentifierOrList(); - this.state = 847; + this.state = 854; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===SolidityParser.T__84) { - this.state = 845; + this.state = 852; this.match(SolidityParser.T__84); - this.state = 846; + this.state = 853; this.assemblyExpression(); } @@ -7765,14 +7873,14 @@ SolidityParser.AssemblyAssignmentContext = AssemblyAssignmentContext; SolidityParser.prototype.assemblyAssignment = function() { var localctx = new AssemblyAssignmentContext(this, this._ctx, this.state); - this.enterRule(localctx, 134, SolidityParser.RULE_assemblyAssignment); + this.enterRule(localctx, 136, SolidityParser.RULE_assemblyAssignment); try { this.enterOuterAlt(localctx, 1); - this.state = 849; + this.state = 856; this.assemblyIdentifierOrList(); - this.state = 850; + this.state = 857; this.match(SolidityParser.T__84); - this.state = 851; + this.state = 858; this.assemblyExpression(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -7833,25 +7941,25 @@ SolidityParser.AssemblyIdentifierOrListContext = AssemblyIdentifierOrListContext SolidityParser.prototype.assemblyIdentifierOrList = function() { var localctx = new AssemblyIdentifierOrListContext(this, this._ctx, this.state); - this.enterRule(localctx, 136, SolidityParser.RULE_assemblyIdentifierOrList); + this.enterRule(localctx, 138, SolidityParser.RULE_assemblyIdentifierOrList); try { - this.state = 858; + this.state = 865; this._errHandler.sync(this); switch(this._input.LA(1)) { case SolidityParser.T__12: case SolidityParser.T__39: case SolidityParser.Identifier: this.enterOuterAlt(localctx, 1); - this.state = 853; + this.state = 860; this.identifier(); break; case SolidityParser.T__20: this.enterOuterAlt(localctx, 2); - this.state = 854; + this.state = 861; this.match(SolidityParser.T__20); - this.state = 855; + this.state = 862; this.assemblyIdentifierList(); - this.state = 856; + this.state = 863; this.match(SolidityParser.T__21); break; default: @@ -7919,21 +8027,21 @@ SolidityParser.AssemblyIdentifierListContext = AssemblyIdentifierListContext; SolidityParser.prototype.assemblyIdentifierList = function() { var localctx = new AssemblyIdentifierListContext(this, this._ctx, this.state); - this.enterRule(localctx, 138, SolidityParser.RULE_assemblyIdentifierList); + this.enterRule(localctx, 140, SolidityParser.RULE_assemblyIdentifierList); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 860; + this.state = 867; this.identifier(); - this.state = 865; + this.state = 872; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===SolidityParser.T__14) { - this.state = 861; + this.state = 868; this.match(SolidityParser.T__14); - this.state = 862; + this.state = 869; this.identifier(); - this.state = 867; + this.state = 874; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -7992,12 +8100,12 @@ SolidityParser.AssemblyStackAssignmentContext = AssemblyStackAssignmentContext; SolidityParser.prototype.assemblyStackAssignment = function() { var localctx = new AssemblyStackAssignmentContext(this, this._ctx, this.state); - this.enterRule(localctx, 140, SolidityParser.RULE_assemblyStackAssignment); + this.enterRule(localctx, 142, SolidityParser.RULE_assemblyStackAssignment); try { this.enterOuterAlt(localctx, 1); - this.state = 868; + this.state = 875; this.match(SolidityParser.T__85); - this.state = 869; + this.state = 876; this.identifier(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -8054,12 +8162,12 @@ SolidityParser.LabelDefinitionContext = LabelDefinitionContext; SolidityParser.prototype.labelDefinition = function() { var localctx = new LabelDefinitionContext(this, this._ctx, this.state); - this.enterRule(localctx, 142, SolidityParser.RULE_labelDefinition); + this.enterRule(localctx, 144, SolidityParser.RULE_labelDefinition); try { this.enterOuterAlt(localctx, 1); - this.state = 871; + this.state = 878; this.identifier(); - this.state = 872; + this.state = 879; this.match(SolidityParser.T__72); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -8127,21 +8235,21 @@ SolidityParser.AssemblySwitchContext = AssemblySwitchContext; SolidityParser.prototype.assemblySwitch = function() { var localctx = new AssemblySwitchContext(this, this._ctx, this.state); - this.enterRule(localctx, 144, SolidityParser.RULE_assemblySwitch); + this.enterRule(localctx, 146, SolidityParser.RULE_assemblySwitch); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 874; + this.state = 881; this.match(SolidityParser.T__86); - this.state = 875; + this.state = 882; this.assemblyExpression(); - this.state = 879; + this.state = 886; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===SolidityParser.T__87 || _la===SolidityParser.T__88) { - this.state = 876; + this.state = 883; this.assemblyCase(); - this.state = 881; + this.state = 888; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -8204,25 +8312,25 @@ SolidityParser.AssemblyCaseContext = AssemblyCaseContext; SolidityParser.prototype.assemblyCase = function() { var localctx = new AssemblyCaseContext(this, this._ctx, this.state); - this.enterRule(localctx, 146, SolidityParser.RULE_assemblyCase); + this.enterRule(localctx, 148, SolidityParser.RULE_assemblyCase); try { - this.state = 888; + this.state = 895; this._errHandler.sync(this); switch(this._input.LA(1)) { case SolidityParser.T__87: this.enterOuterAlt(localctx, 1); - this.state = 882; + this.state = 889; this.match(SolidityParser.T__87); - this.state = 883; + this.state = 890; this.assemblyLiteral(); - this.state = 884; + this.state = 891; this.assemblyBlock(); break; case SolidityParser.T__88: this.enterOuterAlt(localctx, 2); - this.state = 886; + this.state = 893; this.match(SolidityParser.T__88); - this.state = 887; + this.state = 894; this.assemblyBlock(); break; default: @@ -8295,35 +8403,35 @@ SolidityParser.AssemblyFunctionDefinitionContext = AssemblyFunctionDefinitionCon SolidityParser.prototype.assemblyFunctionDefinition = function() { var localctx = new AssemblyFunctionDefinitionContext(this, this._ctx, this.state); - this.enterRule(localctx, 148, SolidityParser.RULE_assemblyFunctionDefinition); + this.enterRule(localctx, 150, SolidityParser.RULE_assemblyFunctionDefinition); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 890; + this.state = 897; this.match(SolidityParser.T__27); - this.state = 891; + this.state = 898; this.identifier(); - this.state = 892; + this.state = 899; this.match(SolidityParser.T__20); - this.state = 894; + this.state = 901; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===SolidityParser.T__12 || _la===SolidityParser.T__39 || _la===SolidityParser.Identifier) { - this.state = 893; + this.state = 900; this.assemblyIdentifierList(); } - this.state = 896; + this.state = 903; this.match(SolidityParser.T__21); - this.state = 898; + this.state = 905; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===SolidityParser.T__89) { - this.state = 897; + this.state = 904; this.assemblyFunctionReturns(); } - this.state = 900; + this.state = 907; this.assemblyBlock(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -8380,12 +8488,12 @@ SolidityParser.AssemblyFunctionReturnsContext = AssemblyFunctionReturnsContext; SolidityParser.prototype.assemblyFunctionReturns = function() { var localctx = new AssemblyFunctionReturnsContext(this, this._ctx, this.state); - this.enterRule(localctx, 150, SolidityParser.RULE_assemblyFunctionReturns); + this.enterRule(localctx, 152, SolidityParser.RULE_assemblyFunctionReturns); try { this.enterOuterAlt(localctx, 1); - this.state = 902; + this.state = 909; this.match(SolidityParser.T__89); - this.state = 903; + this.state = 910; this.assemblyIdentifierList(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -8460,16 +8568,16 @@ SolidityParser.AssemblyForContext = AssemblyForContext; SolidityParser.prototype.assemblyFor = function() { var localctx = new AssemblyForContext(this, this._ctx, this.state); - this.enterRule(localctx, 152, SolidityParser.RULE_assemblyFor); + this.enterRule(localctx, 154, SolidityParser.RULE_assemblyFor); try { this.enterOuterAlt(localctx, 1); - this.state = 905; + this.state = 912; this.match(SolidityParser.T__23); - this.state = 908; + this.state = 915; this._errHandler.sync(this); switch(this._input.LA(1)) { case SolidityParser.T__13: - this.state = 906; + this.state = 913; this.assemblyBlock(); break; case SolidityParser.T__12: @@ -8482,19 +8590,19 @@ SolidityParser.prototype.assemblyFor = function() { case SolidityParser.HexLiteral: case SolidityParser.Identifier: case SolidityParser.StringLiteral: - this.state = 907; + this.state = 914; this.assemblyExpression(); break; default: throw new antlr4.error.NoViableAltException(this); } - this.state = 910; + this.state = 917; this.assemblyExpression(); - this.state = 913; + this.state = 920; this._errHandler.sync(this); switch(this._input.LA(1)) { case SolidityParser.T__13: - this.state = 911; + this.state = 918; this.assemblyBlock(); break; case SolidityParser.T__12: @@ -8507,13 +8615,13 @@ SolidityParser.prototype.assemblyFor = function() { case SolidityParser.HexLiteral: case SolidityParser.Identifier: case SolidityParser.StringLiteral: - this.state = 912; + this.state = 919; this.assemblyExpression(); break; default: throw new antlr4.error.NoViableAltException(this); } - this.state = 915; + this.state = 922; this.assemblyBlock(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -8574,14 +8682,14 @@ SolidityParser.AssemblyIfContext = AssemblyIfContext; SolidityParser.prototype.assemblyIf = function() { var localctx = new AssemblyIfContext(this, this._ctx, this.state); - this.enterRule(localctx, 154, SolidityParser.RULE_assemblyIf); + this.enterRule(localctx, 156, SolidityParser.RULE_assemblyIf); try { this.enterOuterAlt(localctx, 1); - this.state = 917; + this.state = 924; this.match(SolidityParser.T__40); - this.state = 918; + this.state = 925; this.assemblyExpression(); - this.state = 919; + this.state = 926; this.assemblyBlock(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -8650,13 +8758,13 @@ SolidityParser.AssemblyLiteralContext = AssemblyLiteralContext; SolidityParser.prototype.assemblyLiteral = function() { var localctx = new AssemblyLiteralContext(this, this._ctx, this.state); - this.enterRule(localctx, 156, SolidityParser.RULE_assemblyLiteral); + this.enterRule(localctx, 158, SolidityParser.RULE_assemblyLiteral); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 921; + this.state = 928; _la = this._input.LA(1); - if(!(((((_la - 98)) & ~0x1f) == 0 && ((1 << (_la - 98)) & ((1 << (SolidityParser.DecimalNumber - 98)) | (1 << (SolidityParser.HexNumber - 98)) | (1 << (SolidityParser.HexLiteral - 98)) | (1 << (SolidityParser.StringLiteral - 98)))) !== 0))) { + if(!(((((_la - 100)) & ~0x1f) == 0 && ((1 << (_la - 100)) & ((1 << (SolidityParser.DecimalNumber - 100)) | (1 << (SolidityParser.HexNumber - 100)) | (1 << (SolidityParser.HexLiteral - 100)) | (1 << (SolidityParser.StringLiteral - 100)))) !== 0))) { this._errHandler.recoverInline(this); } else { @@ -8722,14 +8830,14 @@ SolidityParser.SubAssemblyContext = SubAssemblyContext; SolidityParser.prototype.subAssembly = function() { var localctx = new SubAssemblyContext(this, this._ctx, this.state); - this.enterRule(localctx, 158, SolidityParser.RULE_subAssembly); + this.enterRule(localctx, 160, SolidityParser.RULE_subAssembly); try { this.enterOuterAlt(localctx, 1); - this.state = 923; + this.state = 930; this.match(SolidityParser.T__43); - this.state = 924; + this.state = 931; this.identifier(); - this.state = 925; + this.state = 932; this.assemblyBlock(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -8793,71 +8901,71 @@ SolidityParser.TupleExpressionContext = TupleExpressionContext; SolidityParser.prototype.tupleExpression = function() { var localctx = new TupleExpressionContext(this, this._ctx, this.state); - this.enterRule(localctx, 160, SolidityParser.RULE_tupleExpression); + this.enterRule(localctx, 162, SolidityParser.RULE_tupleExpression); var _la = 0; // Token type try { - this.state = 953; + this.state = 960; this._errHandler.sync(this); switch(this._input.LA(1)) { case SolidityParser.T__20: this.enterOuterAlt(localctx, 1); - this.state = 927; + this.state = 934; this.match(SolidityParser.T__20); - this.state = 929; + this.state = 936; this._errHandler.sync(this); _la = this._input.LA(1); - if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__39 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((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.TypeKeyword - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) { - this.state = 928; + if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__39 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 93)) & ~0x1f) == 0 && ((1 << (_la - 93)) & ((1 << (SolidityParser.Int - 93)) | (1 << (SolidityParser.Uint - 93)) | (1 << (SolidityParser.Byte - 93)) | (1 << (SolidityParser.Fixed - 93)) | (1 << (SolidityParser.Ufixed - 93)) | (1 << (SolidityParser.BooleanLiteral - 93)) | (1 << (SolidityParser.DecimalNumber - 93)) | (1 << (SolidityParser.HexNumber - 93)) | (1 << (SolidityParser.HexLiteral - 93)) | (1 << (SolidityParser.TypeKeyword - 93)) | (1 << (SolidityParser.Identifier - 93)) | (1 << (SolidityParser.StringLiteral - 93)))) !== 0)) { + this.state = 935; this.expression(0); } - this.state = 937; + this.state = 944; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===SolidityParser.T__14) { - this.state = 931; + this.state = 938; this.match(SolidityParser.T__14); - this.state = 933; + this.state = 940; this._errHandler.sync(this); _la = this._input.LA(1); - if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__39 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((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.TypeKeyword - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) { - this.state = 932; + if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__39 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 93)) & ~0x1f) == 0 && ((1 << (_la - 93)) & ((1 << (SolidityParser.Int - 93)) | (1 << (SolidityParser.Uint - 93)) | (1 << (SolidityParser.Byte - 93)) | (1 << (SolidityParser.Fixed - 93)) | (1 << (SolidityParser.Ufixed - 93)) | (1 << (SolidityParser.BooleanLiteral - 93)) | (1 << (SolidityParser.DecimalNumber - 93)) | (1 << (SolidityParser.HexNumber - 93)) | (1 << (SolidityParser.HexLiteral - 93)) | (1 << (SolidityParser.TypeKeyword - 93)) | (1 << (SolidityParser.Identifier - 93)) | (1 << (SolidityParser.StringLiteral - 93)))) !== 0)) { + this.state = 939; this.expression(0); } - this.state = 939; + this.state = 946; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 940; + this.state = 947; this.match(SolidityParser.T__21); break; case SolidityParser.T__31: this.enterOuterAlt(localctx, 2); - this.state = 941; + this.state = 948; this.match(SolidityParser.T__31); - this.state = 950; + this.state = 957; this._errHandler.sync(this); _la = this._input.LA(1); - if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__39 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((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.TypeKeyword - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) { - this.state = 942; + if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__39 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 93)) & ~0x1f) == 0 && ((1 << (_la - 93)) & ((1 << (SolidityParser.Int - 93)) | (1 << (SolidityParser.Uint - 93)) | (1 << (SolidityParser.Byte - 93)) | (1 << (SolidityParser.Fixed - 93)) | (1 << (SolidityParser.Ufixed - 93)) | (1 << (SolidityParser.BooleanLiteral - 93)) | (1 << (SolidityParser.DecimalNumber - 93)) | (1 << (SolidityParser.HexNumber - 93)) | (1 << (SolidityParser.HexLiteral - 93)) | (1 << (SolidityParser.TypeKeyword - 93)) | (1 << (SolidityParser.Identifier - 93)) | (1 << (SolidityParser.StringLiteral - 93)))) !== 0)) { + this.state = 949; this.expression(0); - this.state = 947; + this.state = 954; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===SolidityParser.T__14) { - this.state = 943; + this.state = 950; this.match(SolidityParser.T__14); - this.state = 944; + this.state = 951; this.expression(0); - this.state = 949; + this.state = 956; this._errHandler.sync(this); _la = this._input.LA(1); } } - this.state = 952; + this.state = 959; this.match(SolidityParser.T__32); break; default: @@ -8918,10 +9026,10 @@ SolidityParser.ElementaryTypeNameExpressionContext = ElementaryTypeNameExpressio SolidityParser.prototype.elementaryTypeNameExpression = function() { var localctx = new ElementaryTypeNameExpressionContext(this, this._ctx, this.state); - this.enterRule(localctx, 162, SolidityParser.RULE_elementaryTypeNameExpression); + this.enterRule(localctx, 164, SolidityParser.RULE_elementaryTypeNameExpression); try { this.enterOuterAlt(localctx, 1); - this.state = 955; + this.state = 962; this.elementaryTypeName(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -8986,11 +9094,11 @@ SolidityParser.NumberLiteralContext = NumberLiteralContext; SolidityParser.prototype.numberLiteral = function() { var localctx = new NumberLiteralContext(this, this._ctx, this.state); - this.enterRule(localctx, 164, SolidityParser.RULE_numberLiteral); + this.enterRule(localctx, 166, SolidityParser.RULE_numberLiteral); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 957; + this.state = 964; _la = this._input.LA(1); if(!(_la===SolidityParser.DecimalNumber || _la===SolidityParser.HexNumber)) { this._errHandler.recoverInline(this); @@ -8999,11 +9107,11 @@ SolidityParser.prototype.numberLiteral = function() { this._errHandler.reportMatch(this); this.consume(); } - this.state = 959; + this.state = 966; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,103,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,106,this._ctx); if(la_===1) { - this.state = 958; + this.state = 965; this.match(SolidityParser.NumberUnit); } @@ -9062,11 +9170,11 @@ SolidityParser.IdentifierContext = IdentifierContext; SolidityParser.prototype.identifier = function() { var localctx = new IdentifierContext(this, this._ctx, this.state); - this.enterRule(localctx, 166, SolidityParser.RULE_identifier); + this.enterRule(localctx, 168, SolidityParser.RULE_identifier); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 961; + this.state = 968; _la = this._input.LA(1); if(!(_la===SolidityParser.T__12 || _la===SolidityParser.T__39 || _la===SolidityParser.Identifier)) { this._errHandler.recoverInline(this); @@ -9092,9 +9200,9 @@ SolidityParser.prototype.identifier = function() { SolidityParser.prototype.sempred = function(localctx, ruleIndex, predIndex) { switch(ruleIndex) { - case 31: + case 32: return this.typeName_sempred(localctx, predIndex); - case 55: + case 56: return this.expression_sempred(localctx, predIndex); default: throw "No predicate with index:" + ruleIndex; diff --git a/src/natspec.js b/src/natspec.js new file mode 100644 index 0000000..a094895 --- /dev/null +++ b/src/natspec.js @@ -0,0 +1,51 @@ +/** + * Parse a full text comment to an object that can be easly consumed + * @param comment full text comment + */ +module.exports = function(comment) { + // remove comments definers + // the comments can be multiline of single line + if (comment.substring(0, 3) === '/**') { + // if it is a multiline, remove line breaks, "/**"" (the comment begin) + // "*/"" (the comment end), and "* @" at the begining of each comment + comment = comment.replace(/(\r|\n|\/\*\*|\*\/|\*(?=[ ]?@))/g, '') + } else if (comment.substring(0, 3) === '///') { + // if it is a single line, + // remove just line breakers and "///" (the comment begin) + comment = comment.replace(/(\r|\n|\/\/\/)/g, '') + } + + // split text by comment type + const splitComments = comment.split( + /@(title|author|notice|dev|param|return)/g + ) + // let's start a map + const resultComments = {} + + // iterate through all the split comments + // start in the second result (because the first one is usually nothing) + // then iterate each two elements, because since the split is done using + // the natspec type + for (let x = 1; x < splitComments.length; x += 2) { + const key = splitComments[x] + const value = splitComments[x + 1].trim() + + // if the comment if type 'param' we need to extract the first word + // which is the variable name + if (key === 'param') { + const sep = value.indexOf(' ') + const paramName = value.substring(0, sep) + const paramValue = value.substring(sep + 1) + + if (resultComments['params'] == null) { + resultComments['params'] = {} + } + + resultComments['params'][paramName] = paramValue + } else { + // finally, if the value was found, update it + resultComments[key] = value + } + } + return resultComments +} diff --git a/test/ast.js b/test/ast.js index 3dcd00a..87323ea 100644 --- a/test/ast.js +++ b/test/ast.js @@ -84,6 +84,7 @@ describe('AST', () => { var ast = parseContract("contract test {}") assert.deepEqual(ast, { "type": "ContractDefinition", + "natspec": null, "name": "test", "baseContracts": [], "subNodes": [], @@ -94,6 +95,7 @@ describe('AST', () => { ast = parseContract("contract test is foo, bar {}") assert.deepEqual(ast, { "type": "ContractDefinition", + "natspec": null, "name": "test", "baseContracts": [ { @@ -121,6 +123,7 @@ describe('AST', () => { ast = parseContract("library test {}") assert.deepEqual(ast, { "type": "ContractDefinition", + "natspec": null, "name": "test", "baseContracts": [], "subNodes": [], @@ -131,6 +134,7 @@ describe('AST', () => { ast = parseContract("interface test {}") assert.deepEqual(ast, { "type": "ContractDefinition", + "natspec": null, "name": "test", "baseContracts": [], "subNodes": [], @@ -171,6 +175,7 @@ describe('AST', () => { var ast = parseNode("function foo(uint a) pure {}") assert.deepEqual(ast, { "type": "FunctionDefinition", + "natspec": null, "name": "foo", "parameters": [ { @@ -200,6 +205,7 @@ describe('AST', () => { ast = parseNode("function foo(uint a) pure returns (uint256) {}") assert.deepEqual(ast, { "type": "FunctionDefinition", + "natspec": null, "name": "foo", "parameters": [ { @@ -1073,6 +1079,7 @@ describe('AST', () => { assert.deepEqual(ast, { "type": "EventDefinition", "name": "Foo", + "natspec": null, "parameters": [ { "type": "VariableDeclaration", @@ -1472,4 +1479,121 @@ describe('AST', () => { "type": "AssemblyIf" }) }) + + it("NatSpec multi line", function () { + const ast = parser.parse( +`/** + * @dev This is the Sum contract. + * @title Sum Contract + * @author username + */ +contract Sum { }` + ); + assert.deepEqual(ast.children[0], { + type: "ContractDefinition", + natspec: { + dev: "This is the Sum contract.", + title: "Sum Contract", + author: "username", + }, + name: "Sum", + baseContracts: [], + subNodes: [], + kind: "contract", + }) + }) + + it("NatSpec single line", function () { + const ast = parser.parse( +`/// @dev This is the Sum contract. +/// @title Sum Contract +/// @author username +contract Sum { }` + ); + assert.deepEqual(ast.children[0], { + type: "ContractDefinition", + natspec: { + dev: "This is the Sum contract.", + title: "Sum Contract", + author: "username", + }, + name: "Sum", + baseContracts: [], + subNodes: [], + kind: "contract", + }) + }) + + it("NatSpec multi line event", function () { + const ast = parseNode( +`/** + * @dev This method says hello + * @param user the user address + */ + event sayHello(address user);` + ); + assert.deepEqual(ast.natspec, { + dev: "This method says hello", + params: { + user: "the user address" + }, + }) + }) + + it("NatSpec multi line function", function () { + const ast = parseNode( +`/** + * @dev This method transfer fund to other user + * @param from the address extract funds + * @param to the user address to give funds + * @param amount the amount to transfer + */ + function transfer(address from, address to, uint256 amount) public {}`); + + assert.deepEqual(ast.natspec, { + dev: "This method transfer fund to other user", + params: { + from: "the address extract funds", + to: "the user address to give funds", + amount: "the amount to transfer", + }, + }) + }) + it("NatSpec multi line multiple functions in contract", function () { + const ast = parser.parse( +`/** + * @dev The ERC20 contract + */ + contract ERC20 { + /** + * @dev This method transfer fund to other user + * @param from the address extract funds + * @param to the user address to give funds + * @param amount the amount to transfer + */ + function transfer(address from, address to, uint256 amount) public {} + /** + * @dev This method gets the approved amount + * @param user the user address to verify + * @return the approved amount + */ + function approved(address user) public view returns(uint256) {} + }`); + const methods = ast.children[0].subNodes; + assert.deepEqual(methods[0].natspec, { + dev: 'This method transfer fund to other user', + params: { + from: 'the address extract funds', + to: 'the user address to give funds', + amount: 'the amount to transfer', + }, + }); + assert.deepEqual(methods[1].natspec, { + dev: 'This method gets the approved amount', + params: { + user: 'the user address to verify', + }, + return: 'the approved amount', + }); + }) }) diff --git a/test/index.js b/test/index.js index 521039d..cef237e 100644 --- a/test/index.js +++ b/test/index.js @@ -66,7 +66,125 @@ describe("#parse", function() { var ast = parseNode("event Foo(address bar);", { loc: true }) assert.isOk(ast.parameters[0].loc) }) + }) +}) + +function checkFieldsEqShallow(got, expected) { + for (const field of Object.keys(expected)) { + //console.log("field: ", field, "got: |", got[field], "|expected: |", expected[field], "|") + if (got[field] != expected[field]) { + //console.log("|", got[field], "|!=|", expected[field], "|") + return false + } + } + + return true +} + +describe("#parseType", function() { + it(`parses simple typename `, function() { + function assertElementaryTypename(obj, typeName) { + assert.isTrue(checkFieldsEqShallow(obj, { type: "ElementaryTypeName", name: typeName }), true) + } + + function assertArrayTypename(obj, baseType, length) { + assert.equal(obj.type, "ArrayTypeName") + assert.isTrue(checkFieldsEqShallow(obj.baseTypeName, baseType)) + if (length !== undefined && length !== null) { + assert.isTrue(checkFieldsEqShallow(obj.length, length)) + } else { + assert.equal(obj.length, null) + } + } + function assertMapTypename(obj, keyType, valueType) { + assert.equal(obj.type, "Mapping") + assert.isTrue(checkFieldsEqShallow(obj.keyType, keyType)) + assert.isTrue(checkFieldsEqShallow(obj.valueType, valueType)) + } + + // Simple types + const tests = ["uint", "int", "bool", "string", "bytes", "address"] + for (const typeName of tests) { + var parsedT = parser.parseType(typeName, { strict: true }) + assertElementaryTypename(parsedT, typeName) + } + + // (u)?int[0-9]* and byte[0-9]* + for (let i = 1; i < 32; i++) { + const nbits = i * 8 + var parsedT = parser.parseType("uint" + nbits, { strict: true }) + assertElementaryTypename(parsedT, "uint" + nbits) + var parsedT = parser.parseType("int" + nbits, { strict: true }) + assertElementaryTypename(parsedT, "int" + nbits) + var parsedT = parser.parseType("bytes" + i, { strict: true }) + assertElementaryTypename(parsedT, "bytes" + i) + } + + // Address payable + var addrPayableT = parser.parseType("address payable", { strict: true }) + assert.isTrue(checkFieldsEqShallow(addrPayableT, { type: "ElementaryTypeName", name: "address", stateMutability: "payable" })) + + // User-define typename + var uTypename1 = parser.parseType("foo", { strict: true }) + assert.isTrue(checkFieldsEqShallow(uTypename1, { type: "UserDefinedTypeName", namePath: "foo" })) + var uTypename2 = parser.parseType("Foo", { strict: true }) + assert.isTrue(checkFieldsEqShallow(uTypename2, { type: "UserDefinedTypeName", namePath: "Foo" })) + var uTypename3 = parser.parseType("Contract.Foo", { strict: true }) + assert.isTrue(checkFieldsEqShallow(uTypename3, { type: "UserDefinedTypeName", namePath: "Contract.Foo" })) + + // Array names + var arr1 = parser.parseType("uint[]", { strict: true }) + assertArrayTypename(arr1, { type: "ElementaryTypeName", name: "uint" }) + // Fixed array names + var arr2 = parser.parseType("bytes4[3]", { strict: true }) + assertArrayTypename( + arr2, + { type: "ElementaryTypeName", name: "bytes4" }, + { type: "NumberLiteral", number: "3", subdenomination: null } + ) + // 2D array names + var arr3 = parser.parseType("string[][]", { strict: true }) + assertArrayTypename(arr3, { type: "ArrayTypeName" }) + assertArrayTypename(arr3.baseTypeName, { type: "ElementaryTypeName", name: "string" }) + + // Mapping names + var map1 = parser.parseType("mapping (uint=>uint)", { strict: true }) + assertMapTypename(map1, {type: "ElementaryTypeName", name: "uint"}, {type: "ElementaryTypeName", name: "uint"}) + var map2 = parser.parseType("mapping (address=>Foo)", { strict: true }) + assertMapTypename(map2, {type: "ElementaryTypeName", name: "address"}, {type: "UserDefinedTypeName", namePath: "Foo"}) + + var map3 = parser.parseType("mapping (string=>uint[])", { strict: true }) + assertMapTypename(map3, {type: "ElementaryTypeName", name: "string"}, {type: "ArrayTypeName"}) + assertArrayTypename(map3.valueType, {type: "ElementaryTypeName", name: "uint"}) + + var map4 = parser.parseType("mapping (string=>mapping(uint=>uint[]))", { strict: true }) + assertMapTypename(map4, {type: "ElementaryTypeName", name: "string"}, {type: "Mapping"}) + assertMapTypename(map4.valueType, {type: "ElementaryTypeName", name: "uint"}, {type: "ArrayTypeName"}) + assertArrayTypename(map4.valueType.valueType, {type: "ElementaryTypeName", name: "uint"}) + }) +}) + +describe("#parseExpression", function() { + it(`parses an expression`, function() { + const exprs = [ + ["1", "NumberLiteral"], + ["a","Identifier"], + ["this.foo","MemberAccess"], + ["1+3","BinaryOperation"], + ["1+4*5","BinaryOperation"], + ["(1+3)*5","BinaryOperation"], + ["foo[4]", "IndexAccess"], + ["this.bar[a]", "IndexAccess"], + ["this.bar[a](1,2+3,c[5])", "FunctionCall"] + ] + + for (let i=0; i