diff --git a/.eslintignore b/.eslintignore index 1ee328705..a7e56e6ed 100644 --- a/.eslintignore +++ b/.eslintignore @@ -2,11 +2,11 @@ node_modules/ dist/ coverage/ **/output/ -src/test/**/output/ -src/func/funcfiftlib.js +test/**/output/ +**/*.js **/grammar.ohm*.ts **/grammar.ohm*.js -src/grammar/next/grammar.ts +src/050-grammar/next/grammar.ts jest.setup.js jest.teardown.js /docs diff --git a/.gitignore b/.gitignore index 3152343ad..607ecdfc2 100644 --- a/.gitignore +++ b/.gitignore @@ -8,5 +8,4 @@ dist output/ **/grammar.ohm-bundle.js **/grammar.ohm-bundle.d.ts -src/func/funcfiftlib.wasm.js -src/test/contracts/pretty-printer-output +test/contracts/pretty-printer-output diff --git a/.prettierignore b/.prettierignore index 7c95c4b4c..0403df17c 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,9 +1,8 @@ /dist -/src/func/funcfiftlib.js -/src/func/funcfiftlib.wasm.js -/src/grammar/prev/grammar.ohm-bundle.d.ts -/src/grammar/prev/grammar.ohm-bundle.js -src/grammar/next/grammar.ts +**/*.js +/src/050-grammar/prev/grammar.ohm-bundle.d.ts +/src/050-grammar/prev/grammar.ohm-bundle.js +src/050-grammar/next/grammar.ts /src/imports/stdlib.ts /grammar /docs diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 257c6cf74..5df7f550e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -30,9 +30,9 @@ The rest of the build and development dependencies are specified, as usual, in t Tact's pipeline uses a patched version of the FunC compiler vendored as a WASM binary with some JS wrappers, see the following files: -- [src/func/funcfiftlib.js](./src/func/funcfiftlib.js) -- [src/func/funcfiftlib.wasm](./src/func/funcfiftlib.wasm) -- [src/func/funcfiftlib.wasm.js](./src/func/funcfiftlib.wasm.js) +- [src/func/funcfiftlib.js](src/090-func/funcfiftlib.js) +- [src/func/funcfiftlib.wasm](src/090-func/funcfiftlib.wasm) +- [src/func/funcfiftlib.wasm.js](src/090-func/funcfiftlib.wasm.js) The message of the commit [`f777da3213e3b064a7f407b2569cfd546cca277e`](https://github.com/tact-lang/tact/commit/f777da3213e3b064a7f407b2569cfd546cca277e) explains how the patched version was obtained. We had to patch the FunC compiler because the corresponding [FunC compiler issue](https://github.com/ton-blockchain/ton/issues/971) is unresolved at the time of writing. @@ -105,11 +105,11 @@ yarn knip Tact's command-line interface (CLI) is located in [bin/tact.js](./bin/tact.js). Tact uses the [meow](https://github.com/sindresorhus/meow) CLI arguments parser. -The main entry point for the Tact CLI is [src/node.ts](./src/node.ts) and [src/pipeline/build.ts](./src/pipeline/build.ts) is the platform-independent compiler driver which contains the high-level compiler pipeline logic described above. +The main entry point for the Tact CLI is [src/node.ts](./src/node.ts) and [src/pipeline/build.ts](src/010-pipeline/build.ts) is the platform-independent compiler driver which contains the high-level compiler pipeline logic described above. -The Tact CLI gets Tact settings from a `tact.config.json` file or creates a default config for a single-file compilation mode. The format of `tact.config.json` files is specified in [schemas/configSchema.json](./schemas/configSchema.json). +The Tact CLI gets Tact settings from a `tact.config.json` file or creates a default config for a single-file compilation mode. The format of `tact.config.json` files is specified in [schemas/configSchema.json](src/000-config/configSchema.json). -The so-called "pre-compilation" steps that include imports resolution, type-checking, building schemas for high-level Tact data structures to be serialized/deserialized as cells (this step is dubbed "allocation") are located in [src/pipeline/precompile.ts](src/pipeline/precompile.ts). +The so-called "pre-compilation" steps that include imports resolution, type-checking, building schemas for high-level Tact data structures to be serialized/deserialized as cells (this step is dubbed "allocation") are located in [src/pipeline/precompile.ts](src/010-pipeline/precompile.ts). Besides the terminal, the Tact compiler is supposed to work in browser environments as well. @@ -117,29 +117,29 @@ Some CLI tests can be found in [.github/workflows/tact.yml](./.github/workflows/ ### Parser -The [src/grammar/grammar.ohm](./src/grammar/grammar.ohm) file contains the Tact grammar expressed in the PEG-like language of the [Ohm.js](https://ohmjs.org) parser generator. +The [src/grammar/grammar.ohm](src/050-grammar/grammar.ohm) file contains the Tact grammar expressed in the PEG-like language of the [Ohm.js](https://ohmjs.org) parser generator. -The helper file [src/grammar/grammar.ts](./src/grammar/grammar.ts) contains the logic that transforms concrete syntax trees produced with the help of the Ohm.js-generated parser into abstract syntax trees (ASTs) defined in [src/grammar/ast.ts](./src/grammar/ast.ts). The grammar.ts file also does a bit of grammar validation, like checking that function or constant attributes are not duplicated or that user identifiers do not start with certain reserved prefixes. +The helper file [src/grammar/grammar.ts](src/050-grammar/grammar.ts) contains the logic that transforms concrete syntax trees produced with the help of the Ohm.js-generated parser into abstract syntax trees (ASTs) defined in [src/grammar/ast.ts](src/050-grammar/ast.ts). The grammar.ts file also does a bit of grammar validation, like checking that function or constant attributes are not duplicated or that user identifiers do not start with certain reserved prefixes. -The [src/grammar/test](./src/grammar/test) folder contains Tact files that are supposed to be parsed without any issues, and the [src/grammar/test-failed](./src/grammar/test-failed) folder contains grammatically incorrect test files which should result in parser errors. The parser error messages and the locations they point to are fixed in the [src/grammar/**snapshots**/grammar.spec.ts.snap](./src/grammar/__snapshots__/grammar.spec.ts.snap) Jest snapshot file. +The [src/grammar/test](src/050-grammar/test) folder contains Tact files that are supposed to be parsed without any issues, and the [src/grammar/test-failed](src/050-grammar/test-failed) folder contains grammatically incorrect test files which should result in parser errors. The parser error messages and the locations they point to are fixed in the [src/grammar/**snapshots**/grammar.spec.ts.snap](src/050-grammar/__snapshots__/grammar.spec.ts.snap) Jest snapshot file. ### Typechecker The Tact type-checker's implementation can be found mostly in the following files: -- [src/types/resolveDescriptors.ts](./src/types/resolveDescriptors.ts) takes care of checking at the level of module-items, data type definitions, function signatures, etc. and it does not deal with statements (so does not traverse function bodies); -- [src/types/resolveStatements.ts](./src/types/resolveStatements.ts) checks statements and statements blocks; -- [src/types/resolveExpression.ts](./src/types/resolveExpression.ts) type-checks the Tact expressions. +- [src/types/resolveDescriptors.ts](src/060-types/resolveDescriptors.ts) takes care of checking at the level of module-items, data type definitions, function signatures, etc. and it does not deal with statements (so does not traverse function bodies); +- [src/types/resolveStatements.ts](src/060-types/resolveStatements.ts) checks statements and statements blocks; +- [src/types/resolveExpression.ts](src/060-types/resolveExpression.ts) type-checks the Tact expressions. The current implementation of the typechecker is going to be significantly refactored, as per [issue #458](https://github.com/tact-lang/tact/issues/458). The corresponding pull request will have formally specified the Tact typing rules. Until we have the Tact type system specified, the only source of information about it would be the aforementioned Tact docs and the tests in the following locations: -- [src/types/test](./src/types/test): positive well-formedness tests at the level of data types, contracts, traits and function signatures; -- [src/types/test-failed](./src/types/test-failed): negative well-formedness tests at the level of data types, contracts, traits and function signatures; -- [src/types/stmts](./src/types/stmts): positive type-checking tests at the level of function bodies; -- [src/types/stmts-failed](./src/types/stmts-failed): negative type-checking tests at the level of function bodies; -- [src/test/compilation-failed](./src/test/compilation-failed): negative type-checking tests that require full environment, for instance, the standard library (the other tests in `src/types` don't have access to the full environment). +- [src/types/test](src/060-types/test): positive well-formedness tests at the level of data types, contracts, traits and function signatures; +- [src/types/test-failed](src/060-types/test-failed): negative well-formedness tests at the level of data types, contracts, traits and function signatures; +- [src/types/stmts](src/060-types/stmts): positive type-checking tests at the level of function bodies; +- [src/types/stmts-failed](src/060-types/stmts-failed): negative type-checking tests at the level of function bodies; +- [src/test/compilation-failed](test/compilation-failed): negative type-checking tests that require full environment, for instance, the standard library (the other tests in `src/types` don't have access to the full environment). ### Constant evaluator @@ -147,22 +147,22 @@ The constant evaluator is used as an optimizer to prevent some statically known The constant evaluator supports a large subset of Tact and handles, for instance, constants defined in terms of other constants, built-in and user-defined functions, logical and arithmetic operations. -The main logic of the constant evaluator can be found in the file [src/interpreter.ts](./src/interpreter.ts). +The main logic of the constant evaluator can be found in the file [src/interpreter.ts](src/070-optimizer/interpreter.ts). -You can find the relevant tests in [src/test/e2e-emulated/contracts/constants.tact](./src/test/e2e-emulated/contracts/constants.tact) and the corresponding spec-file: [](./src/test/e2e-emulated/constants.spec.ts). +You can find the relevant tests in [src/test/e2e-emulated/contracts/constants.tact](test/e2e-emulated/contracts/constants.tact) and the corresponding spec-file: [](test/e2e-emulated/constants.spec.ts). -The negative tests for constant evaluation are contained in the Tact files prefixed with `const-eval` in the [src/test/compilation-failed/contracts](./src/test/compilation-failed/contracts) folder. +The negative tests for constant evaluation are contained in the Tact files prefixed with `const-eval` in the [src/test/compilation-failed/contracts](test/compilation-failed/contracts) folder. ### Code generator Some general information on how Tact code maps to FunC is described in the Tact docs: . -The code generator lives in the [src/generator](./src/generator) sub-folder with the entry point in [src/generator/writeProgram.ts](./src/generator/writeProgram.ts). +The code generator lives in the [src/generator](./src/080-generator) sub-folder with the entry point in [src/generator/writeProgram.ts](src/080-generator/writeProgram.ts). The implementation that we have right now is being refactored to produce FunC ASTs and then pretty-print those ASTs as strings instead of producing source FunC code in one step. Here is the relevant pull request: . -One can find the end-to-end codegen test spec files in the [src/test/e2e-emulated](./src/test/e2e-emulated/) folder. The test contracts are located in [src/test/e2e-emulated/contracts](./src/test/e2e-emulated/contracts) subfolder. Many of those spec files test various language features in relative isolation. -An important spec file that tests argument passing semantics for functions and assignment semantics for variables is here: [src/test/e2e-emulated/semantics.spec.ts](./src/test/e2e-emulated/semantics.spec.ts). +One can find the end-to-end codegen test spec files in the [src/test/e2e-emulated](test/e2e-emulated/) folder. The test contracts are located in [src/test/e2e-emulated/contracts](test/e2e-emulated/contracts) subfolder. Many of those spec files test various language features in relative isolation. +An important spec file that tests argument passing semantics for functions and assignment semantics for variables is here: [src/test/e2e-emulated/semantics.spec.ts](test/e2e-emulated/semantics.spec.ts). Note: If you add an end-to-end test contract, you also need to include it into [tact.config.json](./tact.config.json) and run `yarn gen` to compile it and create TypeScript wrappers. @@ -170,13 +170,13 @@ Note: If you add an end-to-end test contract, you also need to include it into [ Some other codegen tests are as follows: -- [src/test/exit-codes](./src/test/exit-codes): test that certain actions produce the expected exit codes; -- [src/test/codegen](./src/test/codegen/): test that these contracts compile just fine without running any dynamic tests: bug fixes for FunC code generation often add tests into this folder. +- [src/test/exit-codes](test/exit-codes): test that certain actions produce the expected exit codes; +- [src/test/codegen](test/codegen/): test that these contracts compile just fine without running any dynamic tests: bug fixes for FunC code generation often add tests into this folder. ### Pretty-printer and AST comparators -The entry point to the Tact AST pretty-printer is [src/prettyPrinter.ts](./src/prettyPrinter.ts). It is going to be used for the Tact source code formatter once the parser keeps comments and other relevant information. +The entry point to the Tact AST pretty-printer is [src/prettyPrinter.ts](src/prettyPrinter/index.ts). It is going to be used for the Tact source code formatter once the parser keeps comments and other relevant information. -The AST comparator is defined in [src/grammar/compare.ts](./src/grammar/compare.ts). This is useful, for instance, for static analysis tools which can re-use the Tact TypeScript API. +The AST comparator is defined in [src/grammar/compare.ts](src/050-grammar/compare.ts). This is useful, for instance, for static analysis tools which can re-use the Tact TypeScript API. -The corresponding test spec files can be found in [src/test](./src/test/) folder with the test contracts in [src/test/contracts](./src/test/contracts/) folder. +The corresponding test spec files can be found in [src/test](./src/test/) folder with the test contracts in [src/test/contracts](test/contracts/) folder. diff --git a/STYLEGUIDE.md b/STYLEGUIDE.md index aff09e7ee..2a99dc9af 100644 --- a/STYLEGUIDE.md +++ b/STYLEGUIDE.md @@ -116,7 +116,7 @@ export const includes = ( - **Avoid unnecessary bigint**. We have to work with `bigint`, because TVM supports ints of 257 bit length, but in rest of the code `bigint` would only cause issues with debugging it. - **Beware of `${}`** in template strings. Any inlining succeeds, and there won't be any compile-time errors even if it's a function `${(x: number) => x}`. - **Avoid `null`**. `typeof null === 'object'`, and there is `undefined` anyway. -- **Avoid exceptions**. Exceptions are untyped. Pass error continuations explicitly `(onFooError: () => T) => T`. Example can be found in `src/grammar/parser-error.ts`. +- **Avoid exceptions**. Exceptions are untyped. Pass error continuations explicitly `(onFooError: () => T) => T`. Example can be found in `src/050-grammar/parser-error.ts`. - **Avoid tuples**. TS gives them minimal distinction from arrays, and type system is broken around them. Occasionally for performance reasons tuples might be a better option than objects. - **Avoid `enum`**. It's equivalent to unions since 5.0, except generates boilerplate JS code. A version that doesn't generate extraneous code, `const enum`, is not properly supported by `babel`. - **Avoid iterators**. They're untypable unless fixed in JS standard. Prefer generators. Prefer iterating with `for (... of ...)`. diff --git a/cspell.json b/cspell.json index 233921bb1..60e4d36e9 100644 --- a/cspell.json +++ b/cspell.json @@ -150,28 +150,28 @@ "node_modules", "dist", "func", - "grammar/sample.json", - "src/generator/writers/writeStdlib.ts", - "src/grammar/grammar.ohm-bundle.d.ts", - "src/grammar/test/items-native-fun-funcid.tact", - "src/grammar/test/items-asm-funs.tact", - "src/grammar/test-asm/*.tact", - "src/grammar/test-failed/funcid-*.tact", - "src/grammar/next/grammar.gg", - "src/grammar/next/grammar.ts", - "src/imports/stdlib.ts", - "/src/test/compilation-failed/const-eval-failed.spec.ts", - "src/test/e2e-emulated/address.spec.ts", - "src/test/e2e-emulated/intrinsics.spec.ts", - "src/test/e2e-emulated/optionals.spec.ts", - "src/test/e2e-emulated/strings.spec.ts", - "src/test/e2e-emulated/contracts/intrinsics.tact", - "src/test/e2e-emulated/contracts/strings.tact", - "src/test/e2e-emulated/contracts/dns.tact", - "src/test/compilation-fail/fail-const-eval.spec.ts", - "src/test/e2e-emulated/getter-names-conflict.spec.ts", - "src/test/exit-codes/contracts/compute-phase-errors.tact", - "stdlib/stdlib.fc", + "src/040-imports/stdlib.ts", + "src/040-imports/stdlib/stdlib.fc", + "src/050-grammar/grammar.ohm-bundle.d.ts", + "src/050-grammar/test/items-native-fun-funcid.tact", + "src/050-grammar/test/items-asm-funs.tact", + "src/050-grammar/test-asm/*.tact", + "src/050-grammar/test-failed/funcid-*.tact", + "src/050-grammar/next/grammar.gg", + "src/050-grammar/next/grammar.ts", + "src/080-generator/writers/writeStdlib.ts", + "src/090-func/funcfiftlib.js", + "src/090-func/funcCompile.ts", + "test/e2e-emulated/address.spec.ts", + "test/e2e-emulated/intrinsics.spec.ts", + "test/e2e-emulated/optionals.spec.ts", + "test/e2e-emulated/strings.spec.ts", + "test/e2e-emulated/contracts/intrinsics.tact", + "test/e2e-emulated/contracts/strings.tact", + "test/e2e-emulated/contracts/dns.tact", + "test/e2e-emulated/getter-names-conflict.spec.ts", + "test/compilation-failed/const-eval-failed.spec.ts", + "test/exit-codes/contracts/compute-phase-errors.tact", "/docs" ] } diff --git a/examples/examples.build.ts b/examples/examples.build.ts new file mode 100644 index 000000000..52b678287 --- /dev/null +++ b/examples/examples.build.ts @@ -0,0 +1,41 @@ +import fs from "fs"; +import { run } from "../src/node"; +import path from "path"; +import { glob } from "glob"; +import { verify } from "./verify"; +import { Logger } from "../src/010-pipeline/logger"; +import { __DANGER__disableVersionNumber } from "../src/010-pipeline/version"; + +const configPath = path.join(__dirname, "tact.config.json"); +const packagePath = path.resolve(__dirname, "output", "*.pkg"); + +// Read cases +void (async () => { + // Disable version number in packages + __DANGER__disableVersionNumber(); + + const logger = new Logger(); + + try { + // Compile projects + const compileResult = await run({ + configPath, + }); + if (!compileResult.ok) { + throw new Error("Tact projects compilation failed"); + } + + // Verify projects + for (const pkgPath of glob.sync(path.normalize(packagePath))) { + const res = await verify({ + pkg: fs.readFileSync(pkgPath, "utf-8"), + }); + if (!res.ok) { + throw new Error(`Failed to verify ${pkgPath}: ${res.error}`); + } + } + } catch (error) { + logger.error(error as Error); + process.exit(1); + } +})(); diff --git a/examples/tact.config.json b/examples/tact.config.json new file mode 100644 index 000000000..44b92c0b2 --- /dev/null +++ b/examples/tact.config.json @@ -0,0 +1,83 @@ +{ + "$schema": "http://raw.githubusercontent.com/tact-lang/tact/main/schemas/configSchema.json", + "projects": [ + { + "name": "echo", + "path": "./echo.tact", + "output": "./output" + }, + { + "name": "inheritance", + "path": "./inheritance.tact", + "output": "./output" + }, + { + "name": "large", + "path": "./large.tact", + "output": "./output" + }, + { + "name": "native", + "path": "./native.tact", + "output": "./output" + }, + { + "name": "maps", + "path": "./maps.tact", + "output": "./output" + }, + { + "name": "payouts", + "path": "./payouts.tact", + "output": "./output" + }, + { + "name": "external", + "path": "./external.tact", + "output": "./output", + "options": { + "external": true + } + }, + { + "name": "wallet", + "path": "./wallet.tact", + "output": "./output" + }, + { + "name": "wallet-opt", + "path": "./wallet-opt.tact", + "output": "./output", + "options": { + "experimental": { + "inline": true + } + } + }, + { + "name": "treasure", + "path": "./treasure.tact", + "output": "./output" + }, + { + "name": "multisig", + "path": "./multisig.tact", + "output": "./output" + }, + { + "name": "multisig-3", + "path": "./multisig-3.tact", + "output": "./output" + }, + { + "name": "increment", + "path": "./increment.tact", + "output": "./output" + }, + { + "name": "rugpull", + "path": "./rugpull.tact", + "output": "./output" + } + ] +} diff --git a/src/verify.ts b/examples/verify.ts similarity index 90% rename from src/verify.ts rename to examples/verify.ts index 7ea3d8054..9ef4a9e6e 100644 --- a/src/verify.ts +++ b/examples/verify.ts @@ -1,10 +1,10 @@ import normalize from "path-normalize"; import { Cell } from "@ton/core"; -import { Config, Options } from "./config/parseConfig"; -import { ILogger, Logger } from "./logger"; -import { PackageFileFormat, run } from "./main"; -import { fileFormat } from "./packaging/fileFormat"; -import { getCompilerVersion } from "./pipeline/version"; +import { Config, Options } from "../src/000-config/parseConfig"; +import { ILogger, Logger } from "../src/010-pipeline/logger"; +import { PackageFileFormat, run } from "../src"; +import { fileFormat } from "../src/110-packaging/fileFormat"; +import { getCompilerVersion } from "../src/010-pipeline/version"; export type VerifyResult = | { diff --git a/func/func.build.ts b/func/func.build.ts new file mode 100644 index 000000000..ef731f18f --- /dev/null +++ b/func/func.build.ts @@ -0,0 +1,72 @@ +import fs from "fs"; +import { decompileAll } from "@tact-lang/opcode"; +import { + FuncCompilationResult, + funcCompile, +} from "../src/090-func/funcCompile"; +import path from "path"; +import { Logger } from "../src/010-pipeline/logger"; +import { __DANGER__disableVersionNumber } from "../src/010-pipeline/version"; +import { stdlibPath } from "../src/040-imports/path"; + +const funcPath = path.join(__dirname, "..", "func"); + +// Read cases +void (async () => { + // Disable version number in packages + __DANGER__disableVersionNumber(); + + const logger = new Logger(); + + try { + // Compile func files + for (const file of fs.readdirSync(funcPath)) { + if (!file.endsWith(".fc")) { + continue; + } + + // Precompile + const funcFileFullPath = path.join(funcPath, file); + logger.info(`Processing ${funcFileFullPath}`); + let c: FuncCompilationResult; + try { + const stdlibFuncPath = path.resolve(stdlibPath, "stdlib.fc"); + const stdlib = fs.readFileSync(stdlibFuncPath, "utf-8"); + const code = fs.readFileSync(funcFileFullPath, "utf-8"); + c = await funcCompile({ + entries: [stdlibFuncPath, funcFileFullPath], + sources: [ + { + path: stdlibFuncPath, + content: stdlib, + }, + { + path: funcFileFullPath, + content: code, + }, + ], + logger, + }); + if (!c.ok) { + logger.error(c.log); + throw new Error( + `FunC compilation failed for ${funcFileFullPath}`, + ); + } + } catch (e) { + logger.error(e as Error); + logger.error(`Failed for ${funcFileFullPath}`); + throw e; + } + fs.writeFileSync(funcFileFullPath + ".fift", c.fift!); + fs.writeFileSync(funcFileFullPath + ".cell", c.output!); + + // Cell -> Fift decompiler + const source = decompileAll({ src: c.output! }); + fs.writeFileSync(funcFileFullPath + ".rev.fift", source); + } + } catch (error) { + logger.error(error as Error); + process.exit(1); + } +})(); diff --git a/jest.teardown.js b/jest.teardown.js index 6e3c204bf..78e6bc45e 100644 --- a/jest.teardown.js +++ b/jest.teardown.js @@ -7,7 +7,6 @@ module.exports = async () => { path.resolve(__dirname, "examples", "output", "*.boc"), path.resolve( __dirname, - "src", "test", "codegen", "output", @@ -15,7 +14,6 @@ module.exports = async () => { ), path.resolve( __dirname, - "src", "test", "e2e-emulated", "output", @@ -23,7 +21,6 @@ module.exports = async () => { ), path.resolve( __dirname, - "src", "benchmarks", "contracts", "output", diff --git a/knip.json b/knip.json index 34a0b0e6b..fc200651e 100644 --- a/knip.json +++ b/knip.json @@ -9,11 +9,12 @@ ], "project": ["src/**/*.ts", "bin/tact.js", "bin/unboc.js"], "ignore": [ - "src/grammar/ast.ts", - "src/prettyPrinter.ts", - "src/error/display-to-json.ts", - "src/grammar/src-info.ts", - "src/grammar/next/grammar.ts", + "src/prettyPrinter/index.ts", + "src/000-config/parseConfig.ts", + "src/030-error/display-to-json.ts", + "src/050-grammar/ast.ts", + "src/050-grammar/src-info.ts", + "src/050-grammar/next/grammar.ts", ".github/workflows/tact*.yml" ], "ignoreDependencies": ["@tact-lang/ton-abi"] diff --git a/package.json b/package.json index 02265830b..2c73e257b 100644 --- a/package.json +++ b/package.json @@ -10,21 +10,28 @@ "author": "Steve Korshakov ", "license": "MIT", "scripts": { - "gen:grammar:old": "ohm generateBundles --withTypes src/grammar/prev/*.ohm", - "gen:grammar:new": "pgen src/grammar/next/grammar.gg -o src/grammar/next/grammar.ts", + "gen:grammar:old": "ohm generateBundles --withTypes src/050-grammar/prev/*.ohm", + "gen:grammar:new": "pgen src/050-grammar/next/grammar.gg -o src/050-grammar/next/grammar.ts", "gen:grammar": "yarn gen:grammar:old && yarn gen:grammar:new", - "gen:pack": "ts-node ./scripts/pack.ts", - "gen:compiler": "ts-node ./scripts/prepare.ts", - "gen": "yarn gen:grammar && yarn gen:pack && yarn gen:compiler", + "gen:stdlib": "ts-node ./src/040-imports/stdlib.build.ts", + "gen:func-js": "ts-node ./src/090-func/bin.build.ts", + "gen:examples": "ts-node ./examples/examples.build.ts", + "gen:func": "ts-node ./func/func.build.ts", + "gen:projects": "ts-node ./test/contracts.build.ts", + "gen": "yarn gen:grammar && yarn gen:stdlib && yarn gen:func-js && yarn gen:examples && yarn gen:func && yarn gen:projects", "clean": "rm -fr dist", "cleanall": "rm -fr dist node_modules", - "build": "tsc && node --no-warnings=ExperimentalWarning -r ts-node/register ./scripts/copy-files", + "build:stdlib": "ts-node ./src/040-imports/copy.build.ts", + "build:func": "ts-node ./src/090-func/copy.build.ts", + "build:grammar": "ts-node ./src/050-grammar/prev/copy.build.ts", + "build": "tsc && yarn build:stdlib && yarn build:func && yarn build:grammar", "test": "yarn gen:grammar && jest", "coverage": "cross-env COVERAGE=true jest", "release": "yarn clean && yarn build && yarn coverage && yarn release-it --npm.yarn1", "type": "tsc --noEmit", "lint": "yarn eslint .", - "lint:schema": "ajv validate -s schemas/configSchema.json -d tact.config.json", + "check-config": "ajv validate -s src/000-config/configSchema.json -d", + "lint:schema": "yarn check-config test/tact.config.json && yarn check-config test/compilation-failed/tact.config.json && yarn check-config examples/tact.config.json", "fmt": "yarn prettier -l -w .", "fmt:check": "yarn prettier --check .", "spell": "yarn cspell --no-progress \"**\"", @@ -36,14 +43,16 @@ "postpack": "pinst --enable" }, "files": [ + "!**/*", "dist/**/*", - "src/**/*", + "src/040-imports/stdlib/**/*", "bin/**/*", - "stdlib/**/*", + "!**/*.build.js*", + "!**/*.build.d.ts*", "!**/test", "!/docs" ], - "main": "./dist/main.js", + "main": "./dist/index.js", "bin": { "tact": "bin/tact.js", "unboc": "bin/unboc.js" diff --git a/scripts/func b/scripts/func deleted file mode 100755 index d7cef24aa..000000000 Binary files a/scripts/func and /dev/null differ diff --git a/scripts/pack.ts b/scripts/pack.ts deleted file mode 100644 index a98072c20..000000000 --- a/scripts/pack.ts +++ /dev/null @@ -1,47 +0,0 @@ -import fs from "fs"; -import path from "path"; -import glob from "glob"; -import { posixNormalize } from "../src/utils/filePath"; - -// Pack func -const wasmBase64 = fs - .readFileSync( - path.resolve(__dirname, "..", "src", "func", "funcfiftlib.wasm"), - ) - .toString("base64"); -const wasmBase64js = `module.exports = { FuncFiftLibWasm: '${wasmBase64}' };`; -fs.writeFileSync( - path.resolve(__dirname, "..", "src", "func", "funcfiftlib.wasm.js"), - wasmBase64js, -); - -// Pack stdlib -const stdlibFiles = glob.sync( - path.resolve(__dirname, "..", "stdlib", "**", "*.@(tact|fc)"), - { windowsPathsNoEscape: true }, -); -const dirPrefixToRemove = - posixNormalize(path.resolve(__dirname, "..", "stdlib")) + "/"; // Remove also the leading slash -let output: string = ""; -output = "const files: Record = {};\n"; -for (const f of stdlibFiles) { - let code = fs.readFileSync(f).toString("base64"); - const name = f.replace(dirPrefixToRemove, ""); - output += `files['${name}'] =\n`; - let first = true; - while (code.length > 0) { - if (first) { - first = false; - } else { - output += " +\n"; - } - output += ` '${code.slice(0, 128)}'`; - code = code.slice(128); - } - output += `;\n`; -} -output += "export default files;"; -fs.writeFileSync( - path.resolve(__dirname, "..", "src", "imports", "stdlib.ts"), - output, -); diff --git a/scripts/prepare.ts b/scripts/prepare.ts deleted file mode 100644 index f9009db52..000000000 --- a/scripts/prepare.ts +++ /dev/null @@ -1,99 +0,0 @@ -import fs from "fs"; -import { decompileAll } from "@tact-lang/opcode"; -import { run } from "../src/node"; -import { FuncCompilationResult, funcCompile } from "../src/func/funcCompile"; -import path from "path"; -import { glob } from "glob"; -import { verify } from "../src/verify"; -import { Logger } from "../src/logger"; -import { __DANGER__disableVersionNumber } from "../src/pipeline/version"; - -// Read cases -void (async () => { - // Disable version number in packages - __DANGER__disableVersionNumber(); - - const logger = new Logger(); - - try { - // Compile projects - const compileResult = await run({ - configPath: path.join(__dirname, "..", "tact.config.json"), - }); - if (!compileResult.ok) { - throw new Error("Tact projects compilation failed"); - } - - // Verify projects - for (const pkgPath of glob.sync( - path.normalize( - path.resolve(__dirname, "..", "examples", "output", "*.pkg"), - ), - )) { - const res = await verify({ - pkg: fs.readFileSync(pkgPath, "utf-8"), - }); - if (!res.ok) { - throw new Error(`Failed to verify ${pkgPath}: ${res.error}`); - } - } - - // Compile func files - for (const p of [{ path: path.join(__dirname, "..", "func") }]) { - const files = fs.readdirSync(p.path); - for (const file of files) { - if (!file.endsWith(".fc")) { - continue; - } - - // Precompile - const funcFileFullPath = path.join(p.path, file); - logger.info(`Processing ${funcFileFullPath}`); - let c: FuncCompilationResult; - try { - const stdlibPath = path.resolve( - __dirname, - "..", - "stdlib", - "stdlib.fc", - ); - const stdlib = fs.readFileSync(stdlibPath, "utf-8"); - const code = fs.readFileSync(funcFileFullPath, "utf-8"); - c = await funcCompile({ - entries: [stdlibPath, funcFileFullPath], - sources: [ - { - path: stdlibPath, - content: stdlib, - }, - { - path: funcFileFullPath, - content: code, - }, - ], - logger, - }); - if (!c.ok) { - logger.error(c.log); - throw new Error( - `FunC compilation failed for ${funcFileFullPath}`, - ); - } - } catch (e) { - logger.error(e as Error); - logger.error(`Failed for ${funcFileFullPath}`); - throw e; - } - fs.writeFileSync(funcFileFullPath + ".fift", c.fift!); - fs.writeFileSync(funcFileFullPath + ".cell", c.output!); - - // Cell -> Fift decompiler - const source = decompileAll({ src: c.output! }); - fs.writeFileSync(funcFileFullPath + ".rev.fift", source); - } - } - } catch (error) { - logger.error(error as Error); - process.exit(1); - } -})(); diff --git a/schemas/configSchema.json b/src/000-config/configSchema.json similarity index 100% rename from schemas/configSchema.json rename to src/000-config/configSchema.json diff --git a/src/config/features.ts b/src/000-config/features.ts similarity index 91% rename from src/config/features.ts rename to src/000-config/features.ts index 1b9cc5a14..4832493b8 100644 --- a/src/config/features.ts +++ b/src/000-config/features.ts @@ -1,4 +1,4 @@ -import { CompilerContext, createContextStore } from "../context"; +import { CompilerContext, createContextStore } from "../010-pipeline/context"; const featureStore = createContextStore(); diff --git a/src/config/parseConfig.ts b/src/000-config/parseConfig.ts similarity index 100% rename from src/config/parseConfig.ts rename to src/000-config/parseConfig.ts diff --git a/bin/test/fail.config.json b/src/000-config/test/fail.config.json similarity index 75% rename from bin/test/fail.config.json rename to src/000-config/test/fail.config.json index 78579f791..1c0702197 100644 --- a/bin/test/fail.config.json +++ b/src/000-config/test/fail.config.json @@ -1,5 +1,5 @@ { - "$schema": "../../schemas/configSchema.json", + "$schema": "../configSchema.json", "projects": [ { "name": "fail", diff --git a/bin/test/fail.tact b/src/000-config/test/fail.tact similarity index 100% rename from bin/test/fail.tact rename to src/000-config/test/fail.tact diff --git a/bin/test/success.config.json b/src/000-config/test/success.config.json similarity index 79% rename from bin/test/success.config.json rename to src/000-config/test/success.config.json index 26d3ab935..805e329ae 100644 --- a/bin/test/success.config.json +++ b/src/000-config/test/success.config.json @@ -1,5 +1,5 @@ { - "$schema": "../../schemas/configSchema.json", + "$schema": "../configSchema.json", "projects": [ { "name": "success", diff --git a/bin/test/success.config.with.decompilation.json b/src/000-config/test/success.config.with.decompilation.json similarity index 81% rename from bin/test/success.config.with.decompilation.json rename to src/000-config/test/success.config.with.decompilation.json index 53d3ca3ac..2ffa1be35 100644 --- a/bin/test/success.config.with.decompilation.json +++ b/src/000-config/test/success.config.with.decompilation.json @@ -1,5 +1,5 @@ { - "$schema": "../../schemas/configSchema.json", + "$schema": "../configSchema.json", "projects": [ { "name": "success", diff --git a/bin/test/success.tact b/src/000-config/test/success.tact similarity index 100% rename from bin/test/success.tact rename to src/000-config/test/success.tact diff --git a/src/pipeline/build.ts b/src/010-pipeline/build.ts similarity index 91% rename from src/pipeline/build.ts rename to src/010-pipeline/build.ts index d13216484..5347c3e92 100644 --- a/src/pipeline/build.ts +++ b/src/010-pipeline/build.ts @@ -1,28 +1,28 @@ import { beginCell, Cell, Dictionary } from "@ton/core"; import { decompileAll } from "@tact-lang/opcode"; -import { writeTypescript } from "../bindings/writeTypescript"; -import { featureEnable } from "../config/features"; -import { ConfigProject } from "../config/parseConfig"; -import { CompilerContext } from "../context"; -import { funcCompile } from "../func/funcCompile"; -import { writeReport } from "../generator/writeReport"; -import { getRawAST } from "../grammar/store"; -import files from "../imports/stdlib"; -import { ILogger, Logger } from "../logger"; -import { PackageFileFormat } from "../packaging/fileFormat"; -import { packageCode } from "../packaging/packageCode"; -import { createABITypeRefFromTypeRef } from "../types/resolveABITypeRef"; -import { getContracts, getType } from "../types/resolveDescriptors"; +import { writeTypescript } from "../100-bindings/writeTypescript"; +import { featureEnable } from "../000-config/features"; +import { ConfigProject } from "../000-config/parseConfig"; +import { CompilerContext } from "./context"; +import { funcCompile } from "../090-func/funcCompile"; +import { writeReport } from "../080-generator/writeReport"; +import { getRawAST } from "../050-grammar/store"; +import files from "../040-imports/stdlib"; +import { ILogger, Logger } from "./logger"; +import { PackageFileFormat } from "../110-packaging/fileFormat"; +import { packageCode } from "../110-packaging/packageCode"; +import { createABITypeRefFromTypeRef } from "../060-types/resolveABITypeRef"; +import { getContracts, getType } from "../060-types/resolveDescriptors"; import { posixNormalize } from "../utils/filePath"; -import { createVirtualFileSystem } from "../vfs/createVirtualFileSystem"; -import { VirtualFileSystem } from "../vfs/VirtualFileSystem"; +import { createVirtualFileSystem } from "../020-vfs/createVirtualFileSystem"; +import { VirtualFileSystem } from "../020-vfs/VirtualFileSystem"; import { compile } from "./compile"; import { precompile } from "./precompile"; import { getCompilerVersion } from "./version"; -import { FactoryAst, getAstFactory, idText } from "../grammar/ast"; -import { TactErrorCollection } from "../errors"; -import { getParser, Parser } from "../grammar"; -import { defaultParser } from "../grammar/grammar"; +import { FactoryAst, getAstFactory, idText } from "../050-grammar/ast"; +import { TactErrorCollection } from "../030-error/errors"; +import { getParser, Parser } from "../050-grammar"; +import { defaultParser } from "../050-grammar/grammar"; export function enableFeatures( ctx: CompilerContext, diff --git a/src/pipeline/compile.ts b/src/010-pipeline/compile.ts similarity index 62% rename from src/pipeline/compile.ts rename to src/010-pipeline/compile.ts index 84fde8302..234a24262 100644 --- a/src/pipeline/compile.ts +++ b/src/010-pipeline/compile.ts @@ -1,6 +1,6 @@ -import { CompilerContext } from "../context"; -import { createABI } from "../generator/createABI"; -import { writeProgram } from "../generator/writeProgram"; +import { CompilerContext } from "./context"; +import { createABI } from "../080-generator/createABI"; +import { writeProgram } from "../080-generator/writeProgram"; export async function compile( ctx: CompilerContext, diff --git a/src/context.ts b/src/010-pipeline/context.ts similarity index 100% rename from src/context.ts rename to src/010-pipeline/context.ts diff --git a/src/logger.ts b/src/010-pipeline/logger.ts similarity index 100% rename from src/logger.ts rename to src/010-pipeline/logger.ts diff --git a/src/pipeline/precompile.ts b/src/010-pipeline/precompile.ts similarity index 59% rename from src/pipeline/precompile.ts rename to src/010-pipeline/precompile.ts index 8695f5c14..74c619830 100644 --- a/src/pipeline/precompile.ts +++ b/src/010-pipeline/precompile.ts @@ -1,14 +1,14 @@ -import { CompilerContext } from "../context"; -import { resolveDescriptors } from "../types/resolveDescriptors"; -import { resolveAllocations } from "../storage/resolveAllocation"; -import { openContext } from "../grammar/store"; -import { resolveStatements } from "../types/resolveStatements"; -import { resolveErrors } from "../types/resolveErrors"; -import { resolveSignatures } from "../types/resolveSignatures"; -import { resolveImports } from "../imports/resolveImports"; -import { VirtualFileSystem } from "../vfs/VirtualFileSystem"; -import { AstModule, FactoryAst } from "../grammar/ast"; -import { Parser } from "../grammar"; +import { CompilerContext } from "./context"; +import { resolveDescriptors } from "../060-types/resolveDescriptors"; +import { resolveAllocations } from "../060-types/resolveAllocation"; +import { openContext } from "../050-grammar/store"; +import { resolveStatements } from "../060-types/resolveStatements"; +import { resolveErrors } from "../060-types/resolveErrors"; +import { resolveSignatures } from "../060-types/resolveSignatures"; +import { resolveImports } from "../040-imports/resolveImports"; +import { VirtualFileSystem } from "../020-vfs/VirtualFileSystem"; +import { AstModule, FactoryAst } from "../050-grammar/ast"; +import { Parser } from "../050-grammar"; export function precompile( ctx: CompilerContext, diff --git a/src/pipeline/version.ts b/src/010-pipeline/version.ts similarity index 100% rename from src/pipeline/version.ts rename to src/010-pipeline/version.ts diff --git a/src/vfs/VirtualFileSystem.ts b/src/020-vfs/VirtualFileSystem.ts similarity index 100% rename from src/vfs/VirtualFileSystem.ts rename to src/020-vfs/VirtualFileSystem.ts diff --git a/src/vfs/__testdata/.keep b/src/020-vfs/__testdata/.keep similarity index 100% rename from src/vfs/__testdata/.keep rename to src/020-vfs/__testdata/.keep diff --git a/src/vfs/createNodeFileSystem.spec.ts b/src/020-vfs/createNodeFileSystem.spec.ts similarity index 100% rename from src/vfs/createNodeFileSystem.spec.ts rename to src/020-vfs/createNodeFileSystem.spec.ts diff --git a/src/vfs/createNodeFileSystem.ts b/src/020-vfs/createNodeFileSystem.ts similarity index 100% rename from src/vfs/createNodeFileSystem.ts rename to src/020-vfs/createNodeFileSystem.ts diff --git a/src/vfs/createVirtualFileSystem.spec.ts b/src/020-vfs/createVirtualFileSystem.spec.ts similarity index 100% rename from src/vfs/createVirtualFileSystem.spec.ts rename to src/020-vfs/createVirtualFileSystem.spec.ts diff --git a/src/vfs/createVirtualFileSystem.ts b/src/020-vfs/createVirtualFileSystem.ts similarity index 100% rename from src/vfs/createVirtualFileSystem.ts rename to src/020-vfs/createVirtualFileSystem.ts diff --git a/src/error/display-to-json.ts b/src/030-error/display-to-json.ts similarity index 93% rename from src/error/display-to-json.ts rename to src/030-error/display-to-json.ts index 6c7e55daa..a081a3c89 100644 --- a/src/error/display-to-json.ts +++ b/src/030-error/display-to-json.ts @@ -2,9 +2,9 @@ * Render error message to JSON for tests */ -import { throwInternalCompilerError } from "../errors"; -import { SrcInfo } from "../grammar"; -import { srcInfoEqual } from "../grammar/src-info"; +import { throwInternalCompilerError } from "./errors"; +import { SrcInfo } from "../050-grammar"; +import { srcInfoEqual } from "../050-grammar/src-info"; import { ErrorDisplay } from "./display"; export type ErrorJson = ErrorSub | ErrorText | ErrorLink | ErrorAt; diff --git a/src/error/display-to-string.ts b/src/030-error/display-to-string.ts similarity index 93% rename from src/error/display-to-string.ts rename to src/030-error/display-to-string.ts index e93d1a06a..f0d406cb7 100644 --- a/src/error/display-to-string.ts +++ b/src/030-error/display-to-string.ts @@ -3,7 +3,7 @@ */ import { ErrorDisplay } from "./display"; -import { locationStr } from "../errors"; +import { locationStr } from "./errors"; export const displayToString: ErrorDisplay = { text: (text) => text, diff --git a/src/error/display.ts b/src/030-error/display.ts similarity index 90% rename from src/error/display.ts rename to src/030-error/display.ts index 6f7cbf473..f0c15a3c8 100644 --- a/src/error/display.ts +++ b/src/030-error/display.ts @@ -2,7 +2,7 @@ * Describes DSL for displaying errors */ -import { SrcInfo } from "../grammar"; +import { SrcInfo } from "../050-grammar"; export interface ErrorDisplay { // Specify main error location diff --git a/src/errors.ts b/src/030-error/errors.ts similarity index 95% rename from src/errors.ts rename to src/030-error/errors.ts index 0b2cac041..675723f68 100644 --- a/src/errors.ts +++ b/src/030-error/errors.ts @@ -1,7 +1,7 @@ import path from "path"; import { cwd } from "process"; -import { AstFuncId, AstId, AstTypeId } from "./grammar/ast"; -import { SrcInfo } from "./grammar"; +import { AstFuncId, AstId, AstTypeId } from "../050-grammar/ast"; +import { SrcInfo } from "../050-grammar"; export class TactError extends Error { readonly loc?: SrcInfo; diff --git a/src/imports/__testdata/project/imported.tact b/src/040-imports/__testdata/project/imported.tact similarity index 100% rename from src/imports/__testdata/project/imported.tact rename to src/040-imports/__testdata/project/imported.tact diff --git a/src/imports/__testdata/project/imported_from_subfolder.tact b/src/040-imports/__testdata/project/imported_from_subfolder.tact similarity index 100% rename from src/imports/__testdata/project/imported_from_subfolder.tact rename to src/040-imports/__testdata/project/imported_from_subfolder.tact diff --git a/src/imports/__testdata/project/main.tact b/src/040-imports/__testdata/project/main.tact similarity index 100% rename from src/imports/__testdata/project/main.tact rename to src/040-imports/__testdata/project/main.tact diff --git a/src/imports/__testdata/project/subfolder/import_from_parent.tact b/src/040-imports/__testdata/project/subfolder/import_from_parent.tact similarity index 100% rename from src/imports/__testdata/project/subfolder/import_from_parent.tact rename to src/040-imports/__testdata/project/subfolder/import_from_parent.tact diff --git a/src/imports/__testdata/stdlib/lib/config.tact b/src/040-imports/__testdata/stdlib/lib/config.tact similarity index 100% rename from src/imports/__testdata/stdlib/lib/config.tact rename to src/040-imports/__testdata/stdlib/lib/config.tact diff --git a/src/imports/__testdata/stdlib/lib/config/import2.tact b/src/040-imports/__testdata/stdlib/lib/config/import2.tact similarity index 100% rename from src/imports/__testdata/stdlib/lib/config/import2.tact rename to src/040-imports/__testdata/stdlib/lib/config/import2.tact diff --git a/src/imports/__testdata/stdlib/stdlib.fc b/src/040-imports/__testdata/stdlib/stdlib.fc similarity index 100% rename from src/imports/__testdata/stdlib/stdlib.fc rename to src/040-imports/__testdata/stdlib/stdlib.fc diff --git a/src/imports/__testdata/stdlib/stdlib.tact b/src/040-imports/__testdata/stdlib/stdlib.tact similarity index 100% rename from src/imports/__testdata/stdlib/stdlib.tact rename to src/040-imports/__testdata/stdlib/stdlib.tact diff --git a/src/imports/__testdata/stdlib/stdlib2.fc b/src/040-imports/__testdata/stdlib/stdlib2.fc similarity index 100% rename from src/imports/__testdata/stdlib/stdlib2.fc rename to src/040-imports/__testdata/stdlib/stdlib2.fc diff --git a/src/040-imports/copy.build.ts b/src/040-imports/copy.build.ts new file mode 100644 index 000000000..62d2c1b63 --- /dev/null +++ b/src/040-imports/copy.build.ts @@ -0,0 +1,28 @@ +import * as fs from "fs/promises"; +import * as path from "path"; +import * as glob from "glob"; + +const cp = async (fromGlob: string, toPath: string) => { + for (const file of glob.sync(path.join(fromGlob, "**/*"))) { + const relPath = path.relative(fromGlob, file); + const pathTo = path.join(toPath, relPath); + const stat = await fs.stat(file); + if (stat.isDirectory()) { + await fs.mkdir(pathTo, { recursive: true }); + } else { + await fs.mkdir(path.dirname(pathTo), { recursive: true }); + await fs.copyFile(file, pathTo); + } + } +}; + +const main = async () => { + try { + await cp("./src/040-imports/stdlib/", "./dist/040-imports/stdlib/"); + } catch (e) { + console.error(e); + process.exit(1); + } +}; + +void main(); diff --git a/src/imports/parseImportPath.spec.ts b/src/040-imports/parseImportPath.spec.ts similarity index 100% rename from src/imports/parseImportPath.spec.ts rename to src/040-imports/parseImportPath.spec.ts diff --git a/src/imports/parseImportPath.ts b/src/040-imports/parseImportPath.ts similarity index 100% rename from src/imports/parseImportPath.ts rename to src/040-imports/parseImportPath.ts diff --git a/src/040-imports/path.ts b/src/040-imports/path.ts new file mode 100644 index 000000000..cf4666899 --- /dev/null +++ b/src/040-imports/path.ts @@ -0,0 +1,3 @@ +import path from "path"; + +export const stdlibPath = path.resolve(__dirname, "stdlib"); diff --git a/src/imports/resolveImports.spec.ts b/src/040-imports/resolveImports.spec.ts similarity index 92% rename from src/imports/resolveImports.spec.ts rename to src/040-imports/resolveImports.spec.ts index c67bdaa80..4a2f16897 100644 --- a/src/imports/resolveImports.spec.ts +++ b/src/040-imports/resolveImports.spec.ts @@ -1,9 +1,9 @@ import { resolveImports } from "./resolveImports"; -import { createNodeFileSystem } from "../vfs/createNodeFileSystem"; +import { createNodeFileSystem } from "../020-vfs/createNodeFileSystem"; import path from "path"; -import { getParser } from "../grammar"; -import { getAstFactory } from "../grammar/ast"; -import { defaultParser } from "../grammar/grammar"; +import { getParser } from "../050-grammar"; +import { getAstFactory } from "../050-grammar/ast"; +import { defaultParser } from "../050-grammar/grammar"; describe("resolveImports", () => { it("should resolve imports", () => { diff --git a/src/imports/resolveImports.ts b/src/040-imports/resolveImports.ts similarity index 95% rename from src/imports/resolveImports.ts rename to src/040-imports/resolveImports.ts index b88c066cf..a7cc0d52c 100644 --- a/src/imports/resolveImports.ts +++ b/src/040-imports/resolveImports.ts @@ -1,6 +1,6 @@ -import { ItemOrigin, Parser } from "../grammar"; -import { VirtualFileSystem } from "../vfs/VirtualFileSystem"; -import { throwCompilationError } from "../errors"; +import { ItemOrigin, Parser } from "../050-grammar"; +import { VirtualFileSystem } from "../020-vfs/VirtualFileSystem"; +import { throwCompilationError } from "../030-error/errors"; import { resolveLibrary } from "./resolveLibrary"; export function resolveImports(args: { diff --git a/src/imports/resolveLibrary.spec.ts b/src/040-imports/resolveLibrary.spec.ts similarity index 97% rename from src/imports/resolveLibrary.spec.ts rename to src/040-imports/resolveLibrary.spec.ts index e28868b8b..9f653c79f 100644 --- a/src/imports/resolveLibrary.spec.ts +++ b/src/040-imports/resolveLibrary.spec.ts @@ -1,4 +1,4 @@ -import { createVirtualFileSystem } from "../vfs/createVirtualFileSystem"; +import { createVirtualFileSystem } from "../020-vfs/createVirtualFileSystem"; import { resolveLibrary } from "./resolveLibrary"; describe("resolveLibrary", () => { diff --git a/src/imports/resolveLibrary.ts b/src/040-imports/resolveLibrary.ts similarity index 97% rename from src/imports/resolveLibrary.ts rename to src/040-imports/resolveLibrary.ts index dbd5cf400..7a605449b 100644 --- a/src/imports/resolveLibrary.ts +++ b/src/040-imports/resolveLibrary.ts @@ -1,4 +1,4 @@ -import { VirtualFileSystem } from "../vfs/VirtualFileSystem"; +import { VirtualFileSystem } from "../020-vfs/VirtualFileSystem"; import { parseImportPath } from "./parseImportPath"; type ResolveLibraryArgs = { diff --git a/src/040-imports/stdlib.build.ts b/src/040-imports/stdlib.build.ts new file mode 100644 index 000000000..8ec0c34c9 --- /dev/null +++ b/src/040-imports/stdlib.build.ts @@ -0,0 +1,31 @@ +import fs from "fs"; +import path from "path"; +import glob from "glob"; +import { posixNormalize } from "../utils/filePath"; +import { stdlibPath } from "./path"; + +const fromPath = path.resolve(stdlibPath, "**", "*.@(tact|fc)"); +const toPath = path.resolve(__dirname, "stdlib.ts"); + +const stdlibFiles = glob.sync(fromPath, { windowsPathsNoEscape: true }); +const dirPrefixToRemove = posixNormalize(stdlibPath) + "/"; // Remove also the leading slash +let output: string = ""; +output = "const files: Record = {};\n"; +for (const f of stdlibFiles) { + let code = fs.readFileSync(f).toString("base64"); + const name = f.replace(dirPrefixToRemove, ""); + output += `files['${name}'] =\n`; + let first = true; + while (code.length > 0) { + if (first) { + first = false; + } else { + output += " +\n"; + } + output += ` '${code.slice(0, 128)}'`; + code = code.slice(128); + } + output += `;\n`; +} +output += "export default files;"; +fs.writeFileSync(toPath, output); diff --git a/src/040-imports/stdlib.ts b/src/040-imports/stdlib.ts new file mode 100644 index 000000000..fecc9feb3 --- /dev/null +++ b/src/040-imports/stdlib.ts @@ -0,0 +1,853 @@ +const files: Record = {}; +files["libs/config.tact"] = + "ZnVuIGdldENvbmZpZ0FkZHJlc3MoKTogQWRkcmVzcyB7CiAgICBsZXQgY2VsbDogQ2VsbCA9IGdldENvbmZpZ1BhcmFtKDApISE7CiAgICBsZXQgc2M6IFNsaWNlID0g" + + "Y2VsbC5iZWdpblBhcnNlKCk7CiAgICByZXR1cm4gbmV3QWRkcmVzcygtMSwgc2MubG9hZFVpbnQoMjU2KSk7Cn0KCmZ1biBnZXRFbGVjdG9yQWRkcmVzcygpOiBBZGRy" + + "ZXNzIHsKICAgIGxldCBjZWxsOiBDZWxsID0gZ2V0Q29uZmlnUGFyYW0oMSkhITsKICAgIGxldCBzYzogU2xpY2UgPSBjZWxsLmJlZ2luUGFyc2UoKTsKICAgIHJldHVy" + + "biBuZXdBZGRyZXNzKC0xLCBzYy5sb2FkVWludCgyNTYpKTsKfQ=="; +files["libs/content.tact"] = + "ZnVuIGNyZWF0ZU9mZmNoYWluQ29udGVudChsaW5rOiBTdHJpbmcpOiBDZWxsIHsKICAgIGxldCBidWlsZGVyOiBTdHJpbmdCdWlsZGVyID0gYmVnaW5TdHJpbmdGcm9t" + + "QnVpbGRlcihiZWdpbkNlbGwoKS5zdG9yZVVpbnQoMHgwMSwgOCkpOwogICAgYnVpbGRlci5hcHBlbmQobGluayk7CiAgICByZXR1cm4gYnVpbGRlci50b0NlbGwoKTsK" + + "fQ=="; +files["libs/deploy.tact"] = + "Cm1lc3NhZ2UgRGVwbG95IHsKICAgIHF1ZXJ5SWQ6IEludCBhcyB1aW50NjQ7Cn0KCm1lc3NhZ2UgRGVwbG95T2sgewogICAgcXVlcnlJZDogSW50IGFzIHVpbnQ2NDsK" + + "fQoKdHJhaXQgRGVwbG95YWJsZSB7CiAgICByZWNlaXZlKGRlcGxveTogRGVwbG95KSB7CiAgICAgICAgc2VsZi5ub3RpZnkoRGVwbG95T2t7cXVlcnlJZDogZGVwbG95" + + "LnF1ZXJ5SWR9LnRvQ2VsbCgpKTsKICAgIH0KfQoKbWVzc2FnZSBGYWN0b3J5RGVwbG95IHsKICAgIHF1ZXJ5SWQ6IEludCBhcyB1aW50NjQ7CiAgICBjYXNoYmFjazog" + + "QWRkcmVzczsKfQoKdHJhaXQgRmFjdG9yeURlcGxveWFibGUgIHsKICAgIHJlY2VpdmUoZGVwbG95OiBGYWN0b3J5RGVwbG95KSB7CiAgICAgICAgc2VsZi5mb3J3YXJk" + + "KGRlcGxveS5jYXNoYmFjaywgRGVwbG95T2t7cXVlcnlJZDogZGVwbG95LnF1ZXJ5SWR9LnRvQ2VsbCgpLCBmYWxzZSwgbnVsbCk7CiAgICB9Cn0="; +files["libs/dns.fc"] = + "c2xpY2UgZG5zX3N0cmluZ190b19pbnRlcm5hbChzbGljZSBkb21haW4pIGlubGluZV9yZWYgewoKICAgIDs7IFNwZWNpYWwgY2FzZSBmb3Igcm9vdCBkb21haW4KICAg" + + "IGlmICgoZG9tYWluLnNsaWNlX2JpdHMoKSA9PSA4KSAmIChkb21haW4uc2xpY2VfcmVmcygpID09IDApKSB7CiAgICAgICAgaWYgKGRvbWFpbi5wcmVsb2FkX3VpbnQo" + + "OCkgPT0gNDYpIHsKICAgICAgICAgICAgcmV0dXJuIGJlZ2luX2NlbGwoKS5zdG9yZV91aW50KDAsIDgpLmVuZF9jZWxsKCkuYmVnaW5fcGFyc2UoKTsKICAgICAgICB9" + + "CiAgICB9CiAgICAKICAgIDs7IFNwbGl0IGRvbWFpbiBpbnRvIHNlZ21lbnRzCiAgICB0dXBsZSBzZWdtZW50cyA9IG51bGwoKTsKICAgIGJ1aWxkZXIgY3VycmVudCA9" + + "IGJlZ2luX2NlbGwoKTsKICAgIGludCBpc0N1cnJlbnRFbXB0eSA9IHRydWU7CiAgICBpbnQgaXNGaXJzdCA9IHRydWU7CiAgICBpbnQgaXNIeXBoZW4gPSBmYWxzZTsK" + + "ICAgIHNsaWNlIGNzID0gZG9tYWluOwogICAgaW50IGNvbnRpbnVlID0gdHJ1ZTsKICAgIGRvIHsKCiAgICAgICAgOzsgUHJlcGFyZSBmb3IgbG9hZGluZyBuZXh0IGNo" + + "YXJhY3RlcgogICAgICAgIGlmIChjcy5zbGljZV9iaXRzKCkgPT0gMCkgewogICAgICAgICAgICBpbnQgcmVmcyA9IGNzLnNsaWNlX3JlZnMoKTsKICAgICAgICAgICAg" + + "aWYgKHJlZnMgPT0gMSkgewogICAgICAgICAgICAgICAgY3MgPSBjc35sb2FkX3JlZigpLmJlZ2luX3BhcnNlKCk7CiAgICAgICAgICAgIH0gZWxzZWlmIChyZWZzID4g" + + "MSkgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGwoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlID0gZmFsc2U7CiAgICAg" + + "ICAgICAgIH0KICAgICAgICAgICAgY29udGludWUgPSBmYWxzZTsKICAgICAgICB9CgogICAgICAgIDs7IENvbnRpbnVlIGxvYWRpbmcgbmV4dCBjaGFyYWN0ZXIKICAg" + + "ICAgICBpZiAoY29udGludWUpIHsKICAgICAgICAgICAgaW50IGNoYXIgPSBjc35sb2FkX3VpbnQoOCk7CiAgICAgICAgICAgIDs7IHdlIGNhbiBkbyBpdCBiZWNhdXNl" + + "IGFkZGl0aW9uYWwgVVRGLTggY2hhcmFjdGVyJ3Mgb2N0ZXRzID49IDEyOCAtLSBodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMzYyOS50eHQKICAgICAgICAgICAg" + + "aW50IGlzX2h5cGhlbiA9IChjaGFyID09IDQ1KTsKICAgICAgICAgICAgaW50IGlzX2RvdCAgPSAoY2hhciA9PSA0Nik7CiAgICAgICAgICAgIGludCB2YWxpZF9jaGFy" + + "ID0gaXNfaHlwaGVuIHwgaXNfZG90IHwgKChjaGFyID49IDQ4KSAmIChjaGFyIDw9IDU3KSkgfCAoKGNoYXIgPj0gOTcpICYgKGNoYXIgPD0gMTIyKSk7IDs7ICctJyBv" + + "ciAwLTkgb3IgYS16CiAgICAgICAgICAgIGlmICh+IHZhbGlkX2NoYXIgfCAoaXNGaXJzdCAmIGlzX2h5cGhlbikpIHsKICAgICAgICAgICAgICAgIHJldHVybiBudWxs" + + "KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaXNIeXBoZW4gPSBpc19oeXBoZW47CiAgICAgICAgICAgIGlmIChpc19kb3QpIHsKICAgICAgICAgICAgICAgIGlm" + + "IChpc0ZpcnN0IHwgaXNIeXBoZW4pIHsgOzsgRW1wdHkgb3IgZW5kcyB3aXRoIGh5cGhlbgogICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsKCk7CiAgICAgICAg" + + "ICAgICAgICB9CiAgICAgICAgICAgICAgICBzZWdtZW50cyA9IGNvbnMoY3VycmVudCwgc2VnbWVudHMpOwogICAgICAgICAgICAgICAgY3VycmVudCA9IGJlZ2luX2Nl" + + "bGwoKTsKICAgICAgICAgICAgICAgIGlzSHlwaGVuID0gZmFsc2U7CiAgICAgICAgICAgICAgICBpc0ZpcnN0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGlzQ3VycmVu" + + "dEVtcHR5ID0gdHJ1ZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlzRmlyc3QgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGlzQ3VycmVudEVt" + + "cHR5ID0gZmFsc2U7CiAgICAgICAgICAgICAgICBjdXJyZW50fnN0b3JlX3VpbnQoY2hhciwgOCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgfSB1bnRpbCAo" + + "fiBjb250aW51ZSk7CiAgICBpZiAoaXNIeXBoZW4pIHsgOzsgZW5kcyB3aXRoIGh5cGhlbgogICAgICAgIHJldHVybiBudWxsKCk7CiAgICB9CiAgICBpZiAofiBpc0N1" + + "cnJlbnRFbXB0eSkgewogICAgICAgIHNlZ21lbnRzID0gY29ucyhjdXJyZW50LCBzZWdtZW50cyk7CiAgICB9CgogICAgOzsgQ29uY2F0ZW5hdGUgc2VnbWVudHMKICAg" + + "IGJ1aWxkZXIgcmVzID0gYmVnaW5fY2VsbCgpOwogICAgKGJ1aWxkZXIgYiwgdHVwbGUgdGFpbCkgPSB1bmNvbnMoc2VnbWVudHMpOwogICAgcmVzID0gcmVzLnN0b3Jl" + + "X2J1aWxkZXIoYik7CiAgICB3aGlsZSh+IG51bGw/KHRhaWwpKSB7CiAgICAgICAgKGIsIHRhaWwpID0gdW5jb25zKHRhaWwpOwogICAgICAgIHJlcyA9IHJlcy5zdG9y" + + "ZV91aW50KDAsIDgpOyA7OyBBZGQgXDAgc2VwYXJhdG9yCiAgICAgICAgcmVzID0gcmVzLnN0b3JlX2J1aWxkZXIoYik7CiAgICB9CiAgICByZXMgPSByZXMuc3RvcmVf" + + "dWludCgwLCA4KTsgOzsgQWRkIFwwIHNlcGFyYXRvcgogICAgcmV0dXJuIHJlcy5lbmRfY2VsbCgpLmJlZ2luX3BhcnNlKCk7Cn0KCmludCBkbnNfaW50ZXJuYWxfdmVy" + + "aWZ5KHNsaWNlIHNjKSBpbmxpbmVfcmVmIHsKICAgIGlmIChzYy5zbGljZV9yZWZzKCkgIT0gMCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGludCBi" + + "aXRzID0gc2Muc2xpY2VfYml0cygpOwogICAgaWYgKGJpdHMgJSA4ICE9IDApIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAoYml0cyA9PSAwKSB7" + + "IDs7IENhc2UgZm9yIHJvb3QgZG9tYWluCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpbnQgbGVuID0gYml0cyAvIDg7CiAgICBpbnQgY291bnRlciA9IDA7" + + "CiAgICBpbnQgaXNGaXJzdCA9IHRydWU7CiAgICBpbnQgaXNIeXBoZW4gPSBmYWxzZTsKICAgIHJlcGVhdChsZW4pIHsKICAgICAgICBpbnQgY2hhciA9IHNjfmxvYWRf" + + "dWludCg4KTsKICAgICAgICBpZiAoY2hhciA9PSAwKSB7CiAgICAgICAgICAgIGlmIChjb3VudGVyID09IDApIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK" + + "ICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoaXNIeXBoZW4pIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAg" + + "ICBjb3VudGVyID0gMDsKICAgICAgICAgICAgaXNIeXBoZW4gPSBmYWxzZTsKICAgICAgICAgICAgaXNGaXJzdCA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAg" + + "ICAgICAgaW50IGNoYXJJc0h5cGhlbiA9IChjaGFyID09IDQ1KTsKICAgICAgICAgICAgaW50IGlzVmFsaWQgPSBjaGFySXNIeXBoZW4gfCAoKGNoYXIgPj0gNDgpICYg" + + "KGNoYXIgPD0gNTcpKSB8ICgoY2hhciA+PSA5NykgJiAoY2hhciA8PSAxMjIpKTsKICAgICAgICAgICAgaWYgKH4gaXNWYWxpZCkgewogICAgICAgICAgICAgICAgcmV0" + + "dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChjaGFySXNIeXBoZW4gJiBpc0ZpcnN0KSAgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl" + + "OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlzSHlwaGVuID0gY2hhcklzSHlwaGVuOwogICAgICAgICAgICBpc0ZpcnN0ID0gZmFsc2U7CiAgICAgICAgICAgIGNv" + + "dW50ZXIgPSBjb3VudGVyICsgMTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gY291bnRlciA9PSAwICYgfiBpc0h5cGhlbjsKfQoKc2xpY2UgZG5zX2ludGVybmFs" + + "X25vcm1hbGl6ZShzbGljZSBzcmMpIGltcHVyZSBpbmxpbmVfcmVmIHsKICAgIHRocm93X3VubGVzcygxMzQsIHNyYy5zbGljZV9yZWZzKCkgPT0gMCk7IDs7IEludmFs" + + "aWQgYXJndW1lbnQgZXJyb3IKICAgIGJ1aWxkZXIgdGFyZ2V0ID0gYmVnaW5fY2VsbCgpOwogICAgcmVwZWF0KHNyYy5zbGljZV9iaXRzKCkgLyA4KSB7CiAgICAgICAg" + + "aW50IGNoYXIgPSBzcmN+bG9hZF91aW50KDgpOwoKICAgICAgICA7OyBiID0+IDYKICAgICAgICBpZiAoY2hhciA9PSA5OCkgewogICAgICAgICAgICBjaGFyID0gNTQ7" + + "CiAgICAgICAgfQoKICAgICAgICA7OyBnLCBxID0+IDkKICAgICAgICBpZiAoKGNoYXIgPT0gMTAzKSB8IChjaGFyID09IDExMykpIHsKICAgICAgICAgICAgY2hhciA9" + + "IDU3OyAgICAKICAgICAgICB9CgogICAgICAgIDs7IGwgPT4gMQogICAgICAgIGlmIChjaGFyID09IDEwOCkgewogICAgICAgICAgICBjaGFyID0gNDk7CiAgICAgICAg" + + "fQoKICAgICAgICA7OyBvID0+IDAKICAgICAgICBpZiAoY2hhciA9PSAxMTEpIHsKICAgICAgICAgICAgY2hhciA9IDQ4OwogICAgICAgIH0KCiAgICAgICAgOzsgcyA9" + + "PiA1CiAgICAgICAgaWYgKGNoYXIgPT0gMTE1KSB7CiAgICAgICAgICAgIGNoYXIgPSA1MzsKICAgICAgICB9CgogICAgICAgIDs7IHUgPT4gdgogICAgICAgIGlmIChj" + + "aGFyID09IDExNykgewogICAgICAgICAgICBjaGFyID0gMTE4OwogICAgICAgIH0KCiAgICAgICAgOzsgeiA9PiAyCiAgICAgICAgaWYgKGNoYXIgPT0gMTIyKSB7CiAg" + + "ICAgICAgICAgIGNoYXIgPSA1MDsKICAgICAgICB9CgogICAgICAgIHRhcmdldCA9IHRhcmdldC5zdG9yZV91aW50KGNoYXIsIDgpOwogICAgfQogICAgcmV0dXJuIHRh" + + "cmdldC5lbmRfY2VsbCgpLmJlZ2luX3BhcnNlKCk7Cn0K"; +files["libs/dns.tact"] = + "aW1wb3J0ICIuL2Rucy5mYyI7CgpzdHJ1Y3QgRE5TUmVzb2x2ZVJlc3VsdCB7CiAgICBwcmVmaXg6IEludDsgCiAgICByZWNvcmQ6IENlbGw/OyAKfQoKQG5hbWUoZG5z" + + "X3N0cmluZ190b19pbnRlcm5hbCkKbmF0aXZlIGRuc1N0cmluZ1RvSW50ZXJuYWwoc3RyOiBTdHJpbmcpOiBTbGljZT87CgpAbmFtZShkbnNfaW50ZXJuYWxfbm9ybWFs" + + "aXplKQpuYXRpdmUgZG5zSW50ZXJuYWxOb3JtYWxpemUoc3JjOiBTbGljZSk6IFNsaWNlOwoKQG5hbWUoZG5zX2ludGVybmFsX3ZlcmlmeSkKbmF0aXZlIGRuc0ludGVy" + + "bmFsVmVyaWZ5KHN1YmRvbWFpbjogU2xpY2UpOiBCb29sOwoKZnVuIGRuc0V4dHJhY3RUb3BEb21haW5MZW5ndGgoc3ViZG9tYWluOiBTbGljZSk6IEludCB7CiAgICBs" + + "ZXQgaTogSW50ID0gMDsKICAgIGxldCBuZWVkQnJlYWs6IEJvb2wgPSBmYWxzZTsKICAgIGRvIHsKICAgICAgICBsZXQgY2hhcjogSW50ID0gc3ViZG9tYWluLmxvYWRV" + + "aW50KDgpOyAvLyB3ZSBkbyBub3QgY2hlY2sgZG9tYWluLmxlbmd0aCBiZWNhdXNlIGl0IE1VU1QgY29udGFpbnMgXDAgY2hhcmFjdGVyCiAgICAgICAgbmVlZEJyZWFr" + + "ID0gY2hhciA9PSAwOwogICAgICAgIGlmICghbmVlZEJyZWFrKSB7CiAgICAgICAgICAgIGkgPSBpICsgODsKICAgICAgICB9CiAgICB9IHVudGlsIChuZWVkQnJlYWsp" + + "OwogICAgcmVxdWlyZShpICE9IDAsICJJbnZhbGlkIEROUyBuYW1lIik7CiAgICByZXR1cm4gaTsKfQoKZnVuIGRuc0V4dHJhY3RUb3BEb21haW4oc3ViZG9tYWluOiBT" + + "bGljZSk6IFNsaWNlIHsKICAgIGxldCBsZW46IEludCA9IGRuc0V4dHJhY3RUb3BEb21haW5MZW5ndGgoc3ViZG9tYWluKTsKICAgIHJldHVybiBzdWJkb21haW4ubG9h" + + "ZEJpdHMobGVuKTsKfQoKZnVuIGRuc1Jlc29sdmVOZXh0KGFkZHJlc3M6IEFkZHJlc3MpOiBDZWxsIHsKICAgIHJldHVybiBiZWdpbkNlbGwoKQogICAgICAgIC5zdG9y" + + "ZVVpbnQoMHhiYTkzLCAxNikKICAgICAgICAuc3RvcmVBZGRyZXNzKGFkZHJlc3MpCiAgICAgICAgLmVuZENlbGwoKTsKfQoKZnVuIGRuc1Jlc29sdmVXYWxsZXQoYWRk" + + "cmVzczogQWRkcmVzcyk6IENlbGwgewogICAgcmV0dXJuIGJlZ2luQ2VsbCgpCiAgICAgICAgLnN0b3JlVWludCgweDlmZDMsIDE2KQogICAgICAgIC5zdG9yZUFkZHJl" + + "c3MoYWRkcmVzcykKICAgICAgICAuc3RvcmVVaW50KDAsIDgpCiAgICAgICAgLmVuZENlbGwoKTsKfQoKdHJhaXQgRE5TUmVzb2x2ZXIgewoKICAgIGdldCBmdW4gZG5z" + + "cmVzb2x2ZShzdWJkb21haW46IFNsaWNlLCBjYXRlZ29yeTogSW50KTogRE5TUmVzb2x2ZVJlc3VsdCB7CgogICAgICAgIC8vIE5vcm1hbGl6ZQogICAgICAgIGxldCBk" + + "ZWx0YTogSW50ID0gMDsKICAgICAgICBpZiAoc3ViZG9tYWluLnByZWxvYWRVaW50KDgpID09IDApIHsKICAgICAgICAgICAgc3ViZG9tYWluLmxvYWRVaW50KDgpOyAv" + + "LyBTa2lwIGZpcnN0IGJ5dGUKICAgICAgICAgICAgZGVsdGEgPSBkZWx0YSArIDg7CiAgICAgICAgfQoKICAgICAgICAvLyBDaGVja3MgY29ycmVjdG5lc3MKICAgICAg" + + "ICByZXF1aXJlKGRuc0ludGVybmFsVmVyaWZ5KHN1YmRvbWFpbiksICJJbnZhbGlkIEROUyBuYW1lIik7CgogICAgICAgIC8vIFJlc29sdmUKICAgICAgICBsZXQgcmVz" + + "OiBETlNSZXNvbHZlUmVzdWx0ID0gc2VsZi5kb1Jlc29sdmVETlMoc3ViZG9tYWluLCBjYXRlZ29yeSk7CiAgICAgICAgcmV0dXJuIEROU1Jlc29sdmVSZXN1bHR7cHJl" + + "Zml4OiByZXMucHJlZml4ICsgZGVsdGEsIHJlY29yZDogcmVzLnJlY29yZH07CiAgICB9CgogICAgdmlydHVhbCBmdW4gZG9SZXNvbHZlRE5TKHN1YmRvbWFpbjogU2xp" + + "Y2UsIGNhdGVnb3J5OiBJbnQpOiBETlNSZXNvbHZlUmVzdWx0IHsKICAgICAgICByZXR1cm4gRE5TUmVzb2x2ZVJlc3VsdHtwcmVmaXg6IHN1YmRvbWFpbi5iaXRzKCks" + + "IHJlY29yZDogbnVsbH07CiAgICB9Cn0="; +files["libs/ownable.tact"] = + "bWVzc2FnZSBDaGFuZ2VPd25lciB7CiAgICBxdWVyeUlkOiBJbnQgYXMgdWludDY0OwogICAgbmV3T3duZXI6IEFkZHJlc3M7Cn0KCm1lc3NhZ2UgQ2hhbmdlT3duZXJP" + + "ayB7CiAgICBxdWVyeUlkOiBJbnQgYXMgdWludDY0OwogICAgbmV3T3duZXI6IEFkZHJlc3M7Cn0KCkBpbnRlcmZhY2UoIm9yZy50b24ub3duYWJsZSIpCnRyYWl0IE93" + + "bmFibGUgewogICAgb3duZXI6IEFkZHJlc3M7CgogICAgZnVuIHJlcXVpcmVPd25lcigpIHsKICAgICAgICBuYXRpdmVUaHJvd1VubGVzcygxMzIsIHNlbmRlcigpID09" + + "IHNlbGYub3duZXIpOwogICAgfQoKICAgIGdldCBmdW4gb3duZXIoKTogQWRkcmVzcyB7CiAgICAgICAgcmV0dXJuIHNlbGYub3duZXI7CiAgICB9Cn0KCkBpbnRlcmZh" + + "Y2UoIm9yZy50b24ub3duYWJsZS50cmFuc2ZlcmFibGUudjIiKQp0cmFpdCBPd25hYmxlVHJhbnNmZXJhYmxlIHdpdGggT3duYWJsZSB7CgogICAgb3duZXI6IEFkZHJl" + + "c3M7CgogICAgcmVjZWl2ZShtc2c6IENoYW5nZU93bmVyKSB7CiAgICAgICAgCiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHNlbmRlciBpcyB0aGUgb3duZXIKICAgICAg" + + "ICBzZWxmLnJlcXVpcmVPd25lcigpOwoKICAgICAgICAvLyBVcGRhdGUgb3duZXIKICAgICAgICBzZWxmLm93bmVyID0gbXNnLm5ld093bmVyOwoKICAgICAgICAvLyBS" + + "ZXBseSByZXN1bHQKICAgICAgICBzZWxmLnJlcGx5KENoYW5nZU93bmVyT2t7IHF1ZXJ5SWQ6IG1zZy5xdWVyeUlkLCBuZXdPd25lcjptc2cubmV3T3duZXIgfS50b0Nl" + + "bGwoKSk7CiAgICB9Cn0="; +files["libs/stoppable.tact"] = + "aW1wb3J0ICIuL293bmFibGUiOwoKQGludGVyZmFjZSgib3JnLnRvbi5zdG9wcGFibGUiKQp0cmFpdCBTdG9wcGFibGUgd2l0aCBPd25hYmxlIHsKICAgIAogICAgc3Rv" + + "cHBlZDogQm9vbDsKICAgIG93bmVyOiBBZGRyZXNzOwoKICAgIGZ1biByZXF1aXJlTm90U3RvcHBlZCgpIHsKICAgICAgICByZXF1aXJlKCFzZWxmLnN0b3BwZWQsICJD" + + "b250cmFjdCBzdG9wcGVkIik7CiAgICB9CgogICAgZnVuIHJlcXVpcmVTdG9wcGVkKCkgewogICAgICAgIHJlcXVpcmUoc2VsZi5zdG9wcGVkLCAiQ29udHJhY3Qgbm90" + + "IHN0b3BwZWQiKTsKICAgIH0KCiAgICByZWNlaXZlKCJTdG9wIikgewogICAgICAgIHNlbGYucmVxdWlyZU93bmVyKCk7CiAgICAgICAgc2VsZi5yZXF1aXJlTm90U3Rv" + + "cHBlZCgpOwogICAgICAgIHNlbGYuc3RvcHBlZCA9IHRydWU7CiAgICAgICAgc2VsZi5yZXBseSgiU3RvcHBlZCIuYXNDb21tZW50KCkpOwogICAgfQoKICAgIGdldCBm" + + "dW4gc3RvcHBlZCgpOiBCb29sIHsKICAgICAgICByZXR1cm4gc2VsZi5zdG9wcGVkOwogICAgfQp9CgpAaW50ZXJmYWNlKCJvcmcudG9uLnJlc3VtYWJsZSIpCnRyYWl0" + + "IFJlc3VtYWJsZSB3aXRoIFN0b3BwYWJsZSB7CiAgICBzdG9wcGVkOiBCb29sOwogICAgb3duZXI6IEFkZHJlc3M7CgogICAgcmVjZWl2ZSgiUmVzdW1lIikgewogICAg" + + "ICAgIHNlbGYucmVxdWlyZU93bmVyKCk7CiAgICAgICAgc2VsZi5yZXF1aXJlU3RvcHBlZCgpOwogICAgICAgIHNlbGYuc3RvcHBlZCA9IGZhbHNlOwogICAgICAgIHNl" + + "bGYucmVwbHkoIlJlc3VtZWQiLmFzQ29tbWVudCgpKTsKICAgIH0KfQ=="; +files["std/base.tact"] = + "dHJhaXQgQmFzZVRyYWl0IHsKICAgIHZpcnR1YWwgY29uc3Qgc3RvcmFnZVJlc2VydmU6IEludCA9IDA7CiAgICAKICAgIHZpcnR1YWwgaW5saW5lIGZ1biByZXBseShi" + + "b2R5OiBDZWxsPykgewogICAgICAgIHNlbGYuZm9yd2FyZChzZW5kZXIoKSwgYm9keSwgdHJ1ZSwgbnVsbCk7CiAgICB9CgogICAgdmlydHVhbCBpbmxpbmUgZnVuIG5v" + + "dGlmeShib2R5OiBDZWxsPykgewogICAgICAgIHNlbGYuZm9yd2FyZChzZW5kZXIoKSwgYm9keSwgZmFsc2UsIG51bGwpOwogICAgfQoKICAgIHZpcnR1YWwgZnVuIGZv" + + "cndhcmQodG86IEFkZHJlc3MsIGJvZHk6IENlbGw/LCBib3VuY2U6IEJvb2wsIGluaXQ6IFN0YXRlSW5pdD8pIHsKCiAgICAgICAgbGV0IGNvZGU6IENlbGw/ID0gbnVs" + + "bDsKICAgICAgICBsZXQgZGF0YTogQ2VsbD8gPSBudWxsOwogICAgICAgIGlmIChpbml0ICE9IG51bGwpIHsKICAgICAgICAgICAgbGV0IGluaXQyOiBTdGF0ZUluaXQg" + + "PSBpbml0ISE7CiAgICAgICAgICAgIGNvZGUgPSBpbml0Mi5jb2RlOwogICAgICAgICAgICBkYXRhID0gaW5pdDIuZGF0YTsKICAgICAgICB9CgogICAgICAgIC8vIExv" + + "Y2sgc3RvcmFnZSBpZiBuZWVkZWQKICAgICAgICBpZiAoc2VsZi5zdG9yYWdlUmVzZXJ2ZSA+IDApIHsgLy8gT3B0aW1pemVkIGluIGNvbXBpbGUtdGltZQogICAgICAg" + + "ICAgICBsZXQgY3R4OiBDb250ZXh0ID0gY29udGV4dCgpOwogICAgICAgICAgICBsZXQgYmFsYW5jZTogSW50ID0gbXlCYWxhbmNlKCk7CiAgICAgICAgICAgIGxldCBi" + + "YWxhbmNlQmVmb3JlTWVzc2FnZTogSW50ID0gYmFsYW5jZSAtIGN0eC52YWx1ZTsKICAgICAgICAgICAgaWYgKGJhbGFuY2VCZWZvcmVNZXNzYWdlIDwgc2VsZi5zdG9y" + + "YWdlUmVzZXJ2ZSkgewogICAgICAgICAgICAgICAgbmF0aXZlUmVzZXJ2ZShzZWxmLnN0b3JhZ2VSZXNlcnZlLCBSZXNlcnZlRXhhY3QpOwogICAgICAgICAgICAgICAg" + + "c2VuZChTZW5kUGFyYW1ldGVyc3tib3VuY2U6IGJvdW5jZSwgdG86IHRvLCB2YWx1ZTogMCwgbW9kZTogU2VuZFJlbWFpbmluZ0JhbGFuY2UgfCBTZW5kSWdub3JlRXJy" + + "b3JzLCBib2R5OiBib2R5LCBjb2RlOiBjb2RlLCBkYXRhOiBkYXRhIH0pOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAg" + + "ICAgICAvLyBKdXN0IHNlbmQgd2l0aCByZW1haW5pbmcgYmFsYW5jZQogICAgICAgIHNlbmQoU2VuZFBhcmFtZXRlcnN7Ym91bmNlOiBib3VuY2UsIHRvOiB0bywgdmFs" + + "dWU6IDAsIG1vZGU6IFNlbmRSZW1haW5pbmdWYWx1ZSB8IFNlbmRJZ25vcmVFcnJvcnMsIGJvZHk6IGJvZHksIGNvZGU6IGNvZGUsIGRhdGE6IGRhdGEgfSk7CiAgICB9" + + "Cn0="; +files["std/cells.tact"] = + "Ly8KLy8gQnVpbGRlcgovLwoKYXNtIGZ1biBiZWdpbkNlbGwoKTogQnVpbGRlciB7IE5FV0MgfQoKLy8gc3BlY2lhbCB0cmVhdG1lbnQgaW4gRnVuYyBjb21waWxlciwg" + + "c28gbm90IHJlcGxhY2VkIHdpdGggYXNtICJTVElYIgpAbmFtZShzdG9yZV9pbnQpCmV4dGVuZHMgbmF0aXZlIHN0b3JlSW50KHNlbGY6IEJ1aWxkZXIsIHZhbHVlOiBJ" + + "bnQsIGJpdHM6IEludCk6IEJ1aWxkZXI7CgovLyBzcGVjaWFsIHRyZWF0bWVudCBpbiBGdW5jIGNvbXBpbGVyLCBzbyBub3QgcmVwbGFjZWQgd2l0aCBhc20gIlNUVVgi" + + "CkBuYW1lKHN0b3JlX3VpbnQpCmV4dGVuZHMgbmF0aXZlIHN0b3JlVWludChzZWxmOiBCdWlsZGVyLCB2YWx1ZTogSW50LCBiaXRzOiBJbnQpOiBCdWlsZGVyOwoKQG5h" + + "bWUoX190YWN0X3N0b3JlX2Jvb2wpCmV4dGVuZHMgbmF0aXZlIHN0b3JlQm9vbChzZWxmOiBCdWlsZGVyLCB2YWx1ZTogQm9vbCk6IEJ1aWxkZXI7CgovLy8gRXh0ZW5z" + + "aW9uIGZ1bmN0aW9uIGZvciB0aGUgYEJ1aWxkZXJgLiBBbGlhcyB0byBgQnVpbGRlci5zdG9yZUJvb2woKWAuIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNS4wLgovLy8K" + + "Ly8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBiOiBCdWlsZGVyID0gYmVnaW5DZWxsKCk7Ci8vLyAgICAgbGV0IGZpeno6IEJ1aWxkZXIg" + + "PSBiLnN0b3JlQml0KHRydWUpOyAgLy8gd3JpdGVzIDEKLy8vICAgICBsZXQgYnV6ejogQnVpbGRlciA9IGIuc3RvcmVCaXQoZmFsc2UpOyAvLyB3cml0ZXMgMAovLy8g" + + "fQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNidWlsZGVyc3RvcmViaXQKLy8vCkBuYW1lKF9fdGFj" + + "dF9zdG9yZV9ib29sKQpleHRlbmRzIG5hdGl2ZSBzdG9yZUJpdChzZWxmOiBCdWlsZGVyLCB2YWx1ZTogQm9vbCk6IEJ1aWxkZXI7Cgphc20gZXh0ZW5kcyBmdW4gc3Rv" + + "cmVDb2lucyhzZWxmOiBCdWlsZGVyLCB2YWx1ZTogSW50KTogQnVpbGRlciB7IFNUVkFSVUlOVDE2IH0KCmFzbSBleHRlbmRzIGZ1biBzdG9yZVZhckludDE2KHNlbGY6" + + "IEJ1aWxkZXIsIHZhbHVlOiBJbnQpOiBCdWlsZGVyIHsgU1RWQVJJTlQxNiB9Cgphc20gZXh0ZW5kcyBmdW4gc3RvcmVWYXJJbnQzMihzZWxmOiBCdWlsZGVyLCB2YWx1" + + "ZTogSW50KTogQnVpbGRlciB7IFNUVkFSSU5UMzIgfQoKYXNtIGV4dGVuZHMgZnVuIHN0b3JlVmFyVWludDE2KHNlbGY6IEJ1aWxkZXIsIHZhbHVlOiBJbnQpOiBCdWls" + + "ZGVyIHsgU1RWQVJVSU5UMTYgfQoKYXNtIGV4dGVuZHMgZnVuIHN0b3JlVmFyVWludDMyKHNlbGY6IEJ1aWxkZXIsIHZhbHVlOiBJbnQpOiBCdWlsZGVyIHsgU1RWQVJV" + + "SU5UMzIgfQoKYXNtKGNlbGwgc2VsZikgZXh0ZW5kcyBmdW4gc3RvcmVSZWYoc2VsZjogQnVpbGRlciwgY2VsbDogQ2VsbCk6IEJ1aWxkZXIgeyBTVFJFRiB9Cgphc20g" + + "ZXh0ZW5kcyBmdW4gc3RvcmVTbGljZShzZWxmOiBCdWlsZGVyLCBjZWxsOiBTbGljZSk6IEJ1aWxkZXIgeyBTVFNMSUNFUiB9CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9u" + + "IGZvciB0aGUgYEJ1aWxkZXJgLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjUuMC4KLy8vCi8vLyBBcHBlbmRzIGFsbCBkYXRhIGZyb20gYSBgQnVpbGRlcmAgYGNlbGxg" + + "IHRvIHRoZSBjb3B5IG9mIHRoZSBgQnVpbGRlcmAuIFJldHVybnMgdGhhdCBjb3B5LgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxl" + + "dCBiOiBCdWlsZGVyID0gYmVnaW5DZWxsKCkuc3RvcmVDb2lucyg0Mik7Ci8vLyAgICAgbGV0IGZpeno6IEJ1aWxkZXIgPSBiZWdpbkNlbGwoKS5zdG9yZUJ1aWxkZXIo" + + "Yik7Ci8vLyAgICAgYi5lbmRDZWxsKCkgPT0gZml6ei5lbmRDZWxsKCk7IC8vIHRydWUKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3Qt" + + "bGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjYnVpbGRlcnN0b3JlYnVpbGRlcgovLy8KYXNtIGV4dGVuZHMgZnVuIHN0b3JlQnVpbGRlcihzZWxmOiBCdWlsZGVyLCBjZWxs" + + "OiBCdWlsZGVyKTogQnVpbGRlciB7IFNUQlIgfQoKQG5hbWUoX190YWN0X3N0b3JlX2FkZHJlc3MpCmV4dGVuZHMgbmF0aXZlIHN0b3JlQWRkcmVzcyhzZWxmOiBCdWls" + + "ZGVyLCBhZGRyZXNzOiBBZGRyZXNzKTogQnVpbGRlcjsKCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgQnVpbGRlcmAuIEF2YWlsYWJsZSBzaW5jZSBUYWN0" + + "IDEuNS4wLgovLy8KLy8vIElmIHRoZSBgY2VsbGAgaXMgbm90IGBudWxsYCwgc3RvcmVzIDEgYXMgYSBzaW5nbGUgYml0IGFuZCB0aGVuIHJlZmVyZW5jZSBgY2VsbGAg" + + "aW50byB0aGUgY29weSBvZiB0aGUgYEJ1aWxkZXJgLiBSZXR1cm5zIHRoYXQgY29weS4KLy8vCi8vLyBJZiB0aGUgYGNlbGxgIGlzIGBudWxsYCwgb25seSBzdG9yZXMg" + + "MCBhcyBhIHNpbmdsZSBiaXQgaW50byB0aGUgY29weSBvZiB0aGUgYEJ1aWxkZXJgLiBSZXR1cm5zIHRoYXQgY29weS4KLy8vCi8vLyBBcyBhIHNpbmdsZSBgQ2VsbGAg" + + "Y2FuIHN0b3JlIHVwIHRvIDQgcmVmZXJlbmNlcywgYXR0ZW1wdHMgdG8gc3RvcmUgbW9yZSB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgODogYENlbGwg" + + "b3ZlcmZsb3dgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBiOiBCdWlsZGVyID0gYmVnaW5DZWxsKCk7Ci8vLyAgICAgbGV0" + + "IGZpeno6IEJ1aWxkZXIgPSBiCi8vLyAgICAgICAgIC5zdG9yZU1heWJlUmVmKGVtcHR5Q2VsbCgpKSAvLyAxLCB0aGVuIGVtcHR5IGNlbGwKLy8vICAgICAgICAgLnN0" + + "b3JlTWF5YmVSZWYobnVsbCk7ICAgICAgIC8vIDAKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2Vs" + + "bHMjYnVpbGRlcnN0b3JlbWF5YmVyZWYKLy8vCmFzbShjZWxsIHNlbGYpIGV4dGVuZHMgZnVuIHN0b3JlTWF5YmVSZWYoc2VsZjogQnVpbGRlciwgY2VsbDogQ2VsbD8p" + + "OiBCdWlsZGVyIHsgU1RPUFRSRUYgfQoKYXNtIGV4dGVuZHMgZnVuIGVuZENlbGwoc2VsZjogQnVpbGRlcik6IENlbGwgeyBFTkRDIH0KCmFzbSBleHRlbmRzIGZ1biBy" + + "ZWZzKHNlbGY6IEJ1aWxkZXIpOiBJbnQgeyBCUkVGUyB9Cgphc20gZXh0ZW5kcyBmdW4gYml0cyhzZWxmOiBCdWlsZGVyKTogSW50IHsgQkJJVFMgfQoKLy8KLy8gU2xp" + + "Y2UKLy8KCmFzbSBleHRlbmRzIGZ1biBiZWdpblBhcnNlKHNlbGY6IENlbGwpOiBTbGljZSB7IENUT1MgfQoKYXNtKC0+IDEgMCkgZXh0ZW5kcyBtdXRhdGVzIGZ1biBs" + + "b2FkUmVmKHNlbGY6IFNsaWNlKTogQ2VsbCB7IExEUkVGIH0KCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgU2xpY2VgLiBBdmFpbGFibGUgc2luY2UgVGFj" + + "dCAxLjUuMC4KLy8vCi8vLyBQcmVsb2FkcyB0aGUgbmV4dCByZWZlcmVuY2UgZnJvbSB0aGUgYFNsaWNlYCBhcyBhIGBDZWxsYC4gRG9lc24ndCBtb2RpZnkgdGhlIG9y" + + "aWdpbmFsIGBTbGljZWAuCi8vLwovLy8gQXR0ZW1wdHMgdG8gcHJlbG9hZCBzdWNoIHJlZmVyZW5jZSBgQ2VsbGAgd2hlbiBgU2xpY2VgIGRvZXNuJ3QgY29udGFpbiBp" + + "dCB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgODogYENlbGwgb3ZlcmZsb3dgLgovLy8KLy8vIEF0dGVtcHRzIHRvIHByZWxvYWQgbW9yZSBkYXRhIHRo" + + "YW4gYFNsaWNlYCBjb250YWlucyB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgOTogYENlbGwgdW5kZXJmbG93YC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBm" + + "dW4gZXhhbXBsZXMoKSB7Ci8vLyAgICAgbGV0IHMxOiBTbGljZSA9IGJlZ2luQ2VsbCgpLnN0b3JlUmVmKGVtcHR5Q2VsbCgpKS5hc1NsaWNlKCk7Ci8vLyAgICAgbGV0" + + "IGZpeno6IENlbGwgPSBzMS5wcmVsb2FkUmVmKCk7IC8vIGRpZG4ndCBtb2RpZnkgczEKLy8vCi8vLyAgICAgbGV0IHMyOiBTbGljZSA9IGJlZ2luQ2VsbCgpCi8vLyAg" + + "ICAgICAgIC5zdG9yZVJlZihlbXB0eUNlbGwoKSkKLy8vICAgICAgICAgLnN0b3JlUmVmKHMxLmFzQ2VsbCgpKQovLy8gICAgICAgICAuYXNTbGljZSgpOwovLy8gICAg" + + "IGxldCByZWYxOiBDZWxsID0gczIucHJlbG9hZFJlZigpOwovLy8gICAgIGxldCByZWYyOiBDZWxsID0gczIucHJlbG9hZFJlZigpOwovLy8gICAgIHJlZjEgPT0gcmVm" + + "MjsgLy8gdHJ1ZQovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZXByZWxv" + + "YWRyZWYKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9leGl0LWNvZGVzCi8vLwphc20gZXh0ZW5kcyBmdW4gcHJlbG9hZFJlZihzZWxmOiBTbGlj" + + "ZSk6IENlbGwgeyBQTERSRUYgfQoKLy8gc3BlY2lhbCB0cmVhdG1lbnQgaW4gRnVuYyBjb21waWxlciwgc28gbm90IHJlcGxhY2VkIHdpdGggYXNtICJMRFNMSUNFWCIK" + + "QG5hbWUobG9hZF9iaXRzKQpleHRlbmRzIG11dGF0ZXMgbmF0aXZlIGxvYWRCaXRzKHNlbGY6IFNsaWNlLCBsOiBJbnQpOiBTbGljZTsKCi8vIHNwZWNpYWwgdHJlYXRt" + + "ZW50IGluIEZ1bmMgY29tcGlsZXIsIHNvIG5vdCByZXBsYWNlZCB3aXRoIGFzbSAiUExEU0xJQ0VYIgpAbmFtZShwcmVsb2FkX2JpdHMpCmV4dGVuZHMgbmF0aXZlIHBy" + + "ZWxvYWRCaXRzKHNlbGY6IFNsaWNlLCBsOiBJbnQpOiBTbGljZTsKCi8vIHNwZWNpYWwgdHJlYXRtZW50IGluIEZ1bmMgY29tcGlsZXIsIHNvIG5vdCByZXBsYWNlZCB3" + + "aXRoIGFzbSAiTERJWCIKQG5hbWUobG9hZF9pbnQpCmV4dGVuZHMgbXV0YXRlcyBuYXRpdmUgbG9hZEludChzZWxmOiBTbGljZSwgbDogSW50KTogSW50OwoKLy8gc3Bl" + + "Y2lhbCB0cmVhdG1lbnQgaW4gRnVuYyBjb21waWxlciwgc28gbm90IHJlcGxhY2VkIHdpdGggYXNtICJQTERJWCIKQG5hbWUocHJlbG9hZF9pbnQpCmV4dGVuZHMgbmF0" + + "aXZlIHByZWxvYWRJbnQoc2VsZjogU2xpY2UsIGw6IEludCk6IEludDsKCi8vIHNwZWNpYWwgdHJlYXRtZW50IGluIEZ1bmMgY29tcGlsZXIsIHNvIG5vdCByZXBsYWNl" + + "ZCB3aXRoIGFzbSAiTERVWCIKQG5hbWUobG9hZF91aW50KQpleHRlbmRzIG11dGF0ZXMgbmF0aXZlIGxvYWRVaW50KHNlbGY6IFNsaWNlLCBsOiBJbnQpOiBJbnQ7Cgov" + + "LyBzcGVjaWFsIHRyZWF0bWVudCBpbiBGdW5jIGNvbXBpbGVyLCBzbyBub3QgcmVwbGFjZWQgd2l0aCBhc20gIlBMRFVYIgpAbmFtZShwcmVsb2FkX3VpbnQpCmV4dGVu" + + "ZHMgbmF0aXZlIHByZWxvYWRVaW50KHNlbGY6IFNsaWNlLCBsOiBJbnQpOiBJbnQ7Cgphc20oLT4gMSAwKSBleHRlbmRzIG11dGF0ZXMgZnVuIGxvYWRCb29sKHNlbGY6" + + "IFNsaWNlKTogQm9vbCB7IDEgTERJIH0KCi8vLyBFeHRlbnNpb24gbXV0YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBgU2xpY2VgLiBBbGlhcyB0byBgU2xpY2UubG9hZEJv" + + "b2woKWAuIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNS4wLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBzOiBTbGljZSA9IGJl" + + "Z2luQ2VsbCgpLnN0b3JlQm9vbCh0cnVlKS5hc1NsaWNlKCk7Ci8vLyAgICAgbGV0IGZpeno6IEJvb2wgPSBzLmxvYWRCaXQoKTsgLy8gdHJ1ZQovLy8gfQovLy8gYGBg" + + "Ci8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZWxvYWRiaXQKLy8vCmFzbSgtPiAxIDApIGV4dGVuZHMgbXV0" + + "YXRlcyBmdW4gbG9hZEJpdChzZWxmOiBTbGljZSk6IEJvb2wgeyAxIExESSB9Cgphc20oIC0+IDEgMCkgZXh0ZW5kcyBtdXRhdGVzIGZ1biBsb2FkQ29pbnMoc2VsZjog" + + "U2xpY2UpOiBJbnQgeyBMRFZBUlVJTlQxNiB9CgpAbmFtZShfX3RhY3RfbG9hZF9hZGRyZXNzKQpleHRlbmRzIG11dGF0ZXMgbmF0aXZlIGxvYWRBZGRyZXNzKHNlbGY6" + + "IFNsaWNlKTogQWRkcmVzczsKCmFzbSBleHRlbmRzIG11dGF0ZXMgZnVuIHNraXBCaXRzKHNlbGY6IFNsaWNlLCBsOiBJbnQpIHsgU0RTS0lQRklSU1QgfQoKYXNtIGV4" + + "dGVuZHMgZnVuIGVuZFBhcnNlKHNlbGY6IFNsaWNlKSB7IEVORFMgfQoKLy8KLy8gU2xpY2Ugc2l6ZQovLwoKYXNtIGV4dGVuZHMgZnVuIHJlZnMoc2VsZjogU2xpY2Up" + + "OiBJbnQgeyBTUkVGUyB9Cgphc20gZXh0ZW5kcyBmdW4gYml0cyhzZWxmOiBTbGljZSk6IEludCB7IFNCSVRTIH0KCmFzbSBleHRlbmRzIGZ1biBlbXB0eShzZWxmOiBT" + + "bGljZSk6IEJvb2wgeyBTRU1QVFkgfQoKYXNtIGV4dGVuZHMgZnVuIGRhdGFFbXB0eShzZWxmOiBTbGljZSk6IEJvb2wgeyBTREVNUFRZIH0KCmFzbSBleHRlbmRzIGZ1" + + "biByZWZzRW1wdHkoc2VsZjogU2xpY2UpOiBCb29sIHsgU1JFTVBUWSB9CgovLwovLyBDb252ZXJzaW9ucwovLwoKaW5saW5lIGV4dGVuZHMgZnVuIGFzU2xpY2Uoc2Vs" + + "ZjogQnVpbGRlcik6IFNsaWNlIHsKICAgIHJldHVybiBzZWxmLmVuZENlbGwoKS5iZWdpblBhcnNlKCk7Cn0KCmlubGluZSBleHRlbmRzIGZ1biBhc1NsaWNlKHNlbGY6" + + "IENlbGwpOiBTbGljZSB7CiAgICByZXR1cm4gc2VsZi5iZWdpblBhcnNlKCk7Cn0KCmlubGluZSBleHRlbmRzIGZ1biBhc0NlbGwoc2VsZjogU2xpY2UpOiBDZWxsIHsK" + + "ICAgIHJldHVybiBiZWdpbkNlbGwoKQogICAgICAgIC5zdG9yZVNsaWNlKHNlbGYpCiAgICAgICAgLmVuZENlbGwoKTsKfQoKaW5saW5lIGV4dGVuZHMgZnVuIGFzQ2Vs" + + "bChzZWxmOiBCdWlsZGVyKTogQ2VsbCB7CiAgICByZXR1cm4gc2VsZi5lbmRDZWxsKCk7Cn0KCmlubGluZSBmdW4gZW1wdHlDZWxsKCk6IENlbGwgewogICAgcmV0dXJu" + + "IGJlZ2luQ2VsbCgpLmVuZENlbGwoKTsKfQoKaW5saW5lIGZ1biBlbXB0eVNsaWNlKCk6IFNsaWNlIHsKICAgIHJldHVybiBlbXB0eUNlbGwoKS5hc1NsaWNlKCk7Cn0K"; +files["std/config.tact"] = + "YXNtIGZ1biBnZXRDb25maWdQYXJhbShpZDogSW50KTogQ2VsbD8geyBDT05GSUdPUFRQQVJBTSB9Cg=="; +files["std/context.tact"] = + "c3RydWN0IENvbnRleHQgewogICAgYm91bmNlZDogQm9vbDsKICAgIHNlbmRlcjogQWRkcmVzczsKICAgIHZhbHVlOiBJbnQ7CiAgICByYXc6IFNsaWNlOwp9CgpAbmFt" + + "ZShfX3RhY3RfY29udGV4dF9nZXQpCm5hdGl2ZSBjb250ZXh0KCk6IENvbnRleHQ7CgpAbmFtZShfX3RhY3RfY29udGV4dF9nZXRfc2VuZGVyKQpuYXRpdmUgc2VuZGVy" + + "KCk6IEFkZHJlc3M7CgpleHRlbmRzIGZ1biByZWFkRm9yd2FyZEZlZShzZWxmOiBDb250ZXh0KTogSW50IHsKICAgIGxldCBzYzogU2xpY2UgPSBzZWxmLnJhdzsKICAg" + + "IHNjLmxvYWRBZGRyZXNzKCk7IC8vIFNraXAgZGVzdGluYXRpb24KICAgIHNjLmxvYWRDb2lucygpOyAvLyBTa2lwIHZhbHVlCiAgICBzYy5za2lwQml0cygxKTsgLy8g" + + "U2tpcCBleHRyYSBjdXJyZW5jeSBjb2xsZWN0aW9uCiAgICBzYy5sb2FkQ29pbnMoKTsgLy8gU2tpcCBpaHJfZmVlCiAgICByZXR1cm4gKHNjLmxvYWRDb2lucygpICog" + + "MykgLyAyOwp9"; +files["std/contract.tact"] = + "c3RydWN0IFN0YXRlSW5pdCB7CiAgICBjb2RlOiBDZWxsOwogICAgZGF0YTogQ2VsbDsKfQoKQG5hbWUoX190YWN0X2NvbXB1dGVfY29udHJhY3RfYWRkcmVzcykKbmF0" + + "aXZlIGNvbnRyYWN0QWRkcmVzc0V4dChjaGFpbjogSW50LCBjb2RlOiBDZWxsLCBkYXRhOiBDZWxsKTogQWRkcmVzczsKCmlubGluZSBmdW4gY29udHJhY3RBZGRyZXNz" + + "KHM6IFN0YXRlSW5pdCk6IEFkZHJlc3MgewogICAgcmV0dXJuIGNvbnRyYWN0QWRkcmVzc0V4dCgwLCBzLmNvZGUsIHMuZGF0YSk7Cn0KCkBuYW1lKF9fdGFjdF9hZGRy" + + "ZXNzX3RvX3NsaWNlKQpleHRlbmRzIG5hdGl2ZSBhc1NsaWNlKHNlbGY6IEFkZHJlc3MpOiBTbGljZTsKCkBuYW1lKF9fdGFjdF9jcmVhdGVfYWRkcmVzcykKbmF0aXZl" + + "IG5ld0FkZHJlc3MoY2hhaW46IEludCwgaGFzaDogSW50KTogQWRkcmVzczsKCmFzbSBmdW4gbXlBZGRyZXNzKCk6IEFkZHJlc3MgeyBNWUFERFIgfQoKYXNtIGZ1biBt" + + "eUJhbGFuY2UoKTogSW50IHsgQkFMQU5DRSBGSVJTVCB9CgovLy8gR2xvYmFsIGZ1bmN0aW9uLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjUuMC4KLy8vCi8vLyBSZXR1" + + "cm5zIHRoZSBuYW5vVG9uY29pbiBgSW50YCBhbW91bnQgb2YgZ2FzIGNvbnN1bWVkIGJ5IFRWTSBpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBzbyBmYXIuIFRoZSBy" + + "ZXN1bHRpbmcgdmFsdWUgaW5jbHVkZXMgdGhlIGNvc3Qgb2YgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewov" + + "Ly8gICAgIGxldCBnYXM6IEludCA9IGdhc0NvbnN1bWVkKCk7Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9j" + + "b3JlLWFkdmFuY2VkI2dhc2NvbnN1bWVkCi8vLwphc20gZnVuIGdhc0NvbnN1bWVkKCk6IEludCB7IEdBU0NPTlNVTUVEIH0KCi8vLyBHbG9iYWwgZnVuY3Rpb24uIEF2" + + "YWlsYWJsZSBzaW5jZSBUYWN0IDEuNS4wLgovLy8KLy8vIFJldHVybnMgdGhlIG5hbm9Ub25jb2luIGBJbnRgIGFtb3VudCBvZiB0aGUgYWNjdW11bGF0ZWQgc3RvcmFn" + + "ZSBmZWUgZGVidC4gU3RvcmFnZSBmZWVzIGFyZSBkZWR1Y3RlZCBmcm9tIHRoZSBpbmNvbWluZyBtZXNzYWdlIHZhbHVlIGJlZm9yZSB0aGUgbmV3IGNvbnRyYWN0IGJh" + + "bGFuY2UgaXMgY2FsY3VsYXRlZC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgZGVidDogSW50ID0gbXlTdG9yYWdlRHVlKCk7" + + "Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWFkdmFuY2VkI215c3RvcmFnZWR1ZQovLy8KYXNtIGZ1" + + "biBteVN0b3JhZ2VEdWUoKTogSW50IHsgRFVFUEFZTUVOVCB9CgovLy8gR2xvYmFsIGZ1bmN0aW9uLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjUuMC4KLy8vCi8vLyBD" + + "YWxjdWxhdGVzIGFuZCByZXR1cm5zIHRoZSBzdG9yYWdlIGZlZSBpbiBuYW5vVG9uY29pbnMgYEludGAgZm9yIHN0b3JpbmcgYSBjb250cmFjdCB3aXRoIGEgZ2l2ZW4g" + + "bnVtYmVyIG9mIGBjZWxsc2AgYW5kIGBiaXRzYCBmb3IgYSBudW1iZXIgb2YgYHNlY29uZHNgLiBVc2VzIHRoZSBwcmljZXMgb2YgdGhlIG1hc3RlcmNoYWluIGlmIGBp" + + "c01hc3RlcmNoYWluYCBpcyBgdHJ1ZWAsIG90aGVyd2lzZSB0aGUgcHJpY2VzIG9mIHRoZSBiYXNlY2hhaW4uIFRoZSBjdXJyZW50IHByaWNlcyBhcmUgb2J0YWluZWQg" + + "ZnJvbSB0aGUgY29uZmlnIHBhcmFtIDE4IG9mIFRPTiBCbG9ja2NoYWluLgovLy8KLy8vIE5vdGUsIHRoYXQgdGhlIHZhbHVlcyBvZiBgY2VsbHNgIGFuZCBgYml0c2Ag" + + "YXJlIHRha2VuIG1vZHVsbyB0aGVpciBtYXhpbXVtIHZhbHVlcyBwbHVzIDEuIFRoYXQgaXMsIHNwZWNpZnlpbmcgdmFsdWVzIGhpZ2hlciB0aGFuIHRob3NlIGxpc3Rl" + + "ZCBpbiBhY2NvdW50IHN0YXRlIGxpbWl0cyAoYG1heF9hY2Nfc3RhdGVfY2VsbHNgIGFuZCBgbWF4X2FjY19zdGF0ZV9iaXRzYCkgd2lsbCBoYXZlIHRoZSBzYW1lIHJl" + + "c3VsdCBhcyB3aXRoIHNwZWNpZnlpbmcgdGhlIGV4YWN0IGxpbWl0cy4gSW4gYWRkaXRpb24sIG1ha2Ugc3VyZSB5b3UgdGFrZSBpbnRvIGFjY291bnQgdGhlIGRlZHVw" + + "bGljYXRpb24gb2YgY2VsbHMgd2l0aCB0aGUgc2FtZSBoYXNoLgovLy8KLy8vIEF0dGVtcHRzIHRvIHNwZWNpZnkgbmVnYXRpdmUgbnVtYmVyIG9mIGBjZWxsc2AsIGBi" + + "aXRzYCBvciBgc2Vjb25kc2AgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggZXhpdCBjb2RlIDU6IGBJbnRlZ2VyIG91dCBvZiBleHBlY3RlZCByYW5nZWAuCi8vLwovLy8g" + + "YGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGZlZTogSW50ID0gZ2V0U3RvcmFnZUZlZSgxXzAwMCwgMV8wMDAsIDFfMDAwLCBmYWxzZSk7Ci8v" + + "LyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWFkdmFuY2VkI2dldHN0b3JhZ2VmZWUKLy8vICog" + + "aHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtYWR2YW5jZWQjZ2V0c2ltcGxlc3RvcmFnZWZlZQovLy8KYXNtIGZ1biBnZXRTdG9yYWdlRmVlKGNlbGxz" + + "OiBJbnQsIGJpdHM6IEludCwgc2Vjb25kczogSW50LCBpc01hc3RlcmNoYWluOiBCb29sKTogSW50IHsgR0VUU1RPUkFHRUZFRSB9CgovLy8gR2xvYmFsIGZ1bmN0aW9u" + + "LiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjUuMC4KLy8vCi8vLyBDYWxjdWxhdGVzIGFuZCByZXR1cm5zIHRoZSBjb21wdXRlIGZlZSBpbiBuYW5vVG9uY29pbnMgYElu" + + "dGAgZm9yIGEgdHJhbnNhY3Rpb24gdGhhdCBjb25zdW1lZCBgZ2FzVXNlZGAgYW1vdW50IG9mIGdhcy4gVXNlcyB0aGUgcHJpY2VzIG9mIHRoZSBtYXN0ZXJjaGFpbiBp" + + "ZiBgaXNNYXN0ZXJjaGFpbmAgaXMgYHRydWVgLCBvdGhlcndpc2UgdGhlIHByaWNlcyBvZiB0aGUgYmFzZWNoYWluLiBUaGUgY3VycmVudCBwcmljZXMgYXJlIG9idGFp" + + "bmVkIGZyb20gdGhlIGNvbmZpZyBwYXJhbSAyMCBmb3IgdGhlIG1hc3RlcmNoYWluIGFuZCBjb25maWcgcGFyYW0gMjEgZm9yIHRoZSBiYXNlY2hhaW4gb2YgVE9OIEJs" + + "b2NrY2hhaW4uCi8vLwovLy8gV2hlbiB0aGUgYGdhc1VzZWRgIGlzIGxlc3MgdGhhbiBhIGNlcnRhaW4gdGhyZXNob2xkIGNhbGxlZCBgZmxhdF9nYXNfbGltaXRgLCB0" + + "aGVyZSdzIGEgbWluaW11bSBwcmljZSB0byBwYXkgYmFzZWQgb24gdGhlIHZhbHVlIG9mIGBmbGF0X2dhc19wcmljZWAuIFRoZSBsZXNzIGdhcyBpcyB1c2VkIGJlbG93" + + "IHRoaXMgdGhyZXNob2xkLCB0aGUgaGlnaGVyIHRoZSBtaW5pbXVtIHByaWNlIHdpbGwgYmUuIFNlZSB0aGUgZXhhbXBsZSBmb3IgYGdldFNpbXBsZUNvbXB1dGVGZWUo" + + "KWAgdG8gZGVyaXZlIHRoYXQgdGhyZXNob2xkLgovLy8KLy8vIEF0dGVtcHRzIHRvIHNwZWNpZnkgbmVnYXRpdmUgdmFsdWUgb2YgYGdhc1VzZWRgIHRocm93IGFuIGV4" + + "Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA1OiBgSW50ZWdlciBvdXQgb2YgZXhwZWN0ZWQgcmFuZ2VgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewov" + + "Ly8gICAgIGxldCBmZWU6IEludCA9IGdldENvbXB1dGVGZWUoMV8wMDAsIGZhbHNlKTsKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3Qt" + + "bGFuZy5vcmcvcmVmL2NvcmUtYWR2YW5jZWQjZ2V0Y29tcHV0ZWZlZQovLy8KYXNtIGZ1biBnZXRDb21wdXRlRmVlKGdhc1VzZWQ6IEludCwgaXNNYXN0ZXJjaGFpbjog" + + "Qm9vbCk6IEludCB7IEdFVEdBU0ZFRSB9CgovLy8gR2xvYmFsIGZ1bmN0aW9uLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjUuMC4KLy8vCi8vLyBTaW1pbGFyIHRvIGBn" + + "ZXRDb21wdXRlRmVlKClgLCBidXQgd2l0aG91dCB0aGUgYGZsYXRfZ2FzX3ByaWNlYCwgaS5lLiB3aXRob3V0IGEgbWluaW11bSBwcmljZSB0byBwYXkgaWYgdGhlIGBn" + + "YXNVc2VkYCBpcyBsZXNzIHRoYW4gYSBjZXJ0YWluIHRocmVzaG9sZCBjYWxsZWQgYGZsYXRfZ2FzX2xpbWl0YC4gQ2FsY3VsYXRlcyBhbmQgcmV0dXJucyBvbmx5IHRo" + + "ZSBgZ2FzVXNlZGAgdGltZXMgdGhlIGN1cnJlbnQgZ2FzIHByaWNlLgovLy8KLy8vIEF0dGVtcHRzIHRvIHNwZWNpZnkgbmVnYXRpdmUgbnVtYmVyIG9mIGBjZWxsc2As" + + "IGBiaXRzYCBvciBgc2Vjb25kc2AgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggZXhpdCBjb2RlIDU6IGBJbnRlZ2VyIG91dCBvZiBleHBlY3RlZCByYW5nZWAuCi8vLwov" + + "Ly8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGZlZSA9IGdldENvbXB1dGVGZWUoMCwgZmFsc2UpOwovLy8gICAgIGxldCBmZWVOb0ZsYXQg" + + "PSBnZXRTaW1wbGVDb21wdXRlRmVlKDAsIGZhbHNlKTsKLy8vICAgICBsZXQgbWF4RmxhdFByaWNlID0gZmVlIC0gZmVlTm9GbGF0OwovLy8gfQovLy8gYGBgCi8vLwov" + + "Ly8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1hZHZhbmNlZCNnZXRzaW1wbGVzdG9yYWdlZmVlCi8vLyAqIGh0dHBzOi8vZG9j" + + "cy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWFkdmFuY2VkI2dldHN0b3JhZ2VmZWUKLy8vCmFzbSBmdW4gZ2V0U2ltcGxlQ29tcHV0ZUZlZShnYXNVc2VkOiBJbnQsIGlz" + + "TWFzdGVyY2hhaW46IEJvb2wpOiBJbnQgeyBHRVRHQVNGRUVTSU1QTEUgfQoKLy8vIEdsb2JhbCBmdW5jdGlvbi4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS41LjAuCi8v" + + "LwovLy8gQ2FsY3VsYXRlcyBhbmQgcmV0dXJucyB0aGUgZm9yd2FyZCBmZWUgaW4gbmFub1RvbmNvaW5zIGBJbnRgIGZvciBhbiBvdXRnb2luZyBtZXNzYWdlIGNvbnNp" + + "c3Rpbmcgb2YgYSBnaXZlbiBudW1iZXIgb2YgYGNlbGxzYCBhbmQgYGJpdHNgLiBVc2VzIHRoZSBwcmljZXMgb2YgdGhlIG1hc3RlcmNoYWluIGlmIGBpc01hc3RlcmNo" + + "YWluYCBpcyBgdHJ1ZXs6dGFjdH1gLCBvdGhlcndpc2UgdGhlIHByaWNlcyBvZiB0aGUgYmFzZWNoYWluLiBUaGUgY3VycmVudCBwcmljZXMgYXJlIG9idGFpbmVkIGZy" + + "b20gdGhlIGNvbmZpZyBwYXJhbSAyNCBmb3IgdGhlIG1hc3RlcmNoYWluIGFuZCBjb25maWcgcGFyYW0gMjUgZm9yIHRoZSBiYXNlY2hhaW4gb2YgVE9OIEJsb2NrY2hh" + + "aW4uCi8vLwovLy8gSWYgYm90aCB0aGUgc291cmNlIGFuZCB0aGUgZGVzdGluYXRpb24gYWRkcmVzc2VzIGFyZSBpbiB0aGUgYmFzZWNoYWluLCB0aGVuIHNwZWNpZnkg" + + "YGlzTWFzdGVyY2hhaW5gIGFzIGBmYWxzZWAuIE90aGVyd2lzZSwgc3BlY2lmeSBgdHJ1ZWAuCi8vLwovLy8gTm90ZSwgdGhhdCB0aGUgdmFsdWVzIG9mIGBjZWxsc2Ag" + + "YW5kIGBiaXRzYCBhcmUgdGFrZW4gbW9kdWxvIHRoZWlyIG1heGltdW0gdmFsdWVzIHBsdXMgMS4gVGhhdCBpcywgc3BlY2lmeWluZyB2YWx1ZXMgaGlnaGVyIHRoYW4g" + + "dGhvc2UgbGlzdGVkIGluIGFjY291bnQgc3RhdGUgbGltaXRzIChgbWF4X21zZ19jZWxsc2AgYW5kIGBtYXhfbXNnX2JpdHNgKSB3aWxsIGhhdmUgdGhlIHNhbWUgcmVz" + + "dWx0IGFzIHdpdGggc3BlY2lmeWluZyB0aGUgZXhhY3QgbGltaXRzLgovLy8KLy8vIEhvd2V2ZXIsIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlcyBvZiBgY2VsbHNgIGFu" + + "ZCBgYml0c2AsIHRoaXMgZnVuY3Rpb24gYWx3YXlzIGFkZHMgdGhlIG1pbmltdW0gcHJpY2UgYmFzZWQgb24gdGhlIHZhbHVlIG9mIGBsdW1wX3ByaWNlYC4gU2VlIHRo" + + "ZSBleGFtcGxlIGZvciBbYGdldFNpbXBsZUZvcndhcmRGZWUoKXs6dGFjdH1gXSgjZ2V0c2ltcGxlZm9yd2FyZGZlZSkgdG8gZGVyaXZlIGl0LiBJbiBhZGRpdGlvbiwg" + + "bWFrZSBzdXJlIHlvdSB0YWtlIGludG8gYWNjb3VudCB0aGUgZGVkdXBsaWNhdGlvbiBvZiBjZWxscyB3aXRoIHRoZSBzYW1lIGhhc2gsIHNpbmNlIGZvciBleGFtcGxl" + + "IHRoZSByb290IGNlbGwgYW5kIGl0cyBkYXRhIGJpdHMgZG9uJ3QgY291bnQgdG93YXJkcyB0aGUgZm9yd2FyZCBmZWUgYW5kIGFyZSBjb3ZlcmVkIGJ5IHRoZSBgbHVt" + + "cF9wcmljZWAuCi8vLwovLy8gQXR0ZW1wdHMgdG8gc3BlY2lmeSBuZWdhdGl2ZSBudW1iZXIgb2YgYGNlbGxzYCBvciBgYml0c2AgdGhyb3cgYW4gZXhjZXB0aW9uIHdp" + + "dGggZXhpdCBjb2RlIDU6IGBJbnRlZ2VyIG91dCBvZiBleHBlY3RlZCByYW5nZWAuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0" + + "IGZlZTogSW50ID0gZ2V0Rm9yd2FyZEZlZSgxXzAwMCwgMV8wMDAsIGZhbHNlKTsKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRh" + + "Y3QtbGFuZy5vcmcvcmVmL2NvcmUtYWR2YW5jZWQjZ2V0Zm9yd2FyZGZlZQovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1hZHZhbmNlZCNn" + + "ZXRzaW1wbGVmb3J3YXJkZmVlCi8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWFkdmFuY2VkI2dldG9yaWdpbmFsZndkZmVlCi8vLwphc20g" + + "ZnVuIGdldEZvcndhcmRGZWUoY2VsbHM6IEludCwgYml0czogSW50LCBpc01hc3RlcmNoYWluOiBCb29sKTogSW50IHsgR0VURk9SV0FSREZFRSB9CgovLy8gR2xvYmFs" + + "IGZ1bmN0aW9uLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjUuMC4KLy8vCi8vLyBTaW1pbGFyIHRvIGBnZXRGb3J3YXJkRmVlKClgLCBidXQgd2l0aG91dCB0aGUgYGx1" + + "bXBfcHJpY2VgLCBpLmUuIHdpdGhvdXQgdGhlIG1pbmltdW0gcHJpY2UgdG8gcGF5IHJlZ2FyZGxlc3Mgb2YgdGhlIGFtb3VudCBvZiBgY2VsbHNgIG9yIGBiaXRzYC4g" + + "Q2FsY3VsYXRlcyBhbmQgcmV0dXJucyBvbmx5IHRoZSBgY2VsbHNgIHRpbWVzIHRoZSBjdXJyZW50IGNlbGwgcHJpY2UgcGx1cyBgYml0c2AgdGltZXMgdGhlIGN1cnJl" + + "bnQgYml0IHByaWNlLgovLy8KLy8vIEF0dGVtcHRzIHRvIHNwZWNpZnkgbmVnYXRpdmUgbnVtYmVyIG9mIGBjZWxsc2Agb3IgYGJpdHNgIHRocm93IGFuIGV4Y2VwdGlv" + + "biB3aXRoIGV4aXQgY29kZSA1OiBgSW50ZWdlciBvdXQgb2YgZXhwZWN0ZWQgcmFuZ2VgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAg" + + "IGxldCBmZWUgPSBnZXRGb3J3YXJkRmVlKDFfMDAwLCAxXzAwMCwgZmFsc2UpOwovLy8gICAgIGxldCBmZWVOb0x1bXAgPSBnZXRTaW1wbGVGb3J3YXJkRmVlKDFfMDAw" + + "LCAxXzAwMCwgZmFsc2UpOwovLy8gICAgIGxldCBsdW1wUHJpY2UgPSBmZWUgLSBmZWVOb0x1bXA7Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6Ci8vLyAqIGh0dHBz" + + "Oi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWFkdmFuY2VkI2dldHNpbXBsZWZvcndhcmRmZWUKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVm" + + "L2NvcmUtYWR2YW5jZWQjZ2V0Zm9yd2FyZGZlZQovLy8KYXNtIGZ1biBnZXRTaW1wbGVGb3J3YXJkRmVlKGNlbGxzOiBJbnQsIGJpdHM6IEludCwgaXNNYXN0ZXJjaGFp" + + "bjogQm9vbCk6IEludCB7IEdFVEZPUldBUkRGRUVTSU1QTEUgfQoKLy8vIEdsb2JhbCBmdW5jdGlvbi4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS41LjAuCi8vLwovLy8g" + + "Q2FsY3VsYXRlcyBhbmQgcmV0dXJucyB0aGUgc28tY2FsbGVkIF9vcmlnaW5hbF8gZm9yd2FyZCBmZWUgaW4gbmFub1RvbmNvaW5zIGBJbnRgIGZvciBhbiBvdXRnb2lu" + + "ZyBtZXNzYWdlIGJhc2VkIG9uIHRoZSBgZndkRmVlYCBvYnRhaW5lZCBmcm9tIHRoZSBpbmNvbWluZyBtZXNzYWdlLiBJZiBib3RoIHRoZSBzb3VyY2UgYW5kIHRoZSBk" + + "ZXN0aW5hdGlvbiBhZGRyZXNzZXMgYXJlIGluIHRoZSBiYXNlY2hhaW4sIHRoZW4gc3BlY2lmeSBgaXNNYXN0ZXJjaGFpbmAgYXMgYGZhbHNlYC4gT3RoZXJ3aXNlLCBz" + + "cGVjaWZ5IGB0cnVlYC4KLy8vCi8vLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCB3aGVuIHRoZSBvdXRnb2luZyBtZXNzYWdlIGRlcGVuZHMgaGVhdmlseSBvbiB0aGUg" + + "c3RydWN0dXJlIG9mIHRoZSBpbmNvbWluZyBtZXNzYWdlLCBzbyBtdWNoIHNvIHRoYXQgeW91IGNhbm5vdCBmdWxseSBwcmVkaWN0IHRoZSBmZWUgdXNpbmcgYGdldEZv" + + "cndhcmRGZWUoKWAgYWxvbmUuIEV2ZW4gaWYgeW91IGNvdWxkLCBjYWxjdWxhdGluZyB0aGUgZXhhY3QgZmVlIHdpdGggbmFub1RvbmNvaW4tbGV2ZWwgcHJlY2lzaW9u" + + "IGNhbiBiZSB2ZXJ5IGV4cGVuc2l2ZSwgc28gdGhlIGFwcHJveGltYXRlIHZhbHVlIGdpdmVuIGJ5IHRoaXMgZnVuY3Rpb24gaXMgb2Z0ZW4gZ29vZCBlbm91Z2guCi8v" + + "LwovLy8gQXR0ZW1wdHMgdG8gc3BlY2lmeSBhIG5lZ2F0aXZlIHZhbHVlIG9mIGBmd2RGZWVgIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA1OiBgSW50" + + "ZWdlciBvdXQgb2YgZXhwZWN0ZWQgcmFuZ2VgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBmd2RGZWU6IEludCA9IGNvbnRl" + + "eHQoKS5yZWFkRm9yd2FyZEZlZSgpOwovLy8gICAgIGxldCBvcmlnRmVlOiBJbnQgPSBnZXRPcmlnaW5hbEZ3ZEZlZShmZWUsIGZhbHNlKTsKLy8vIH0KLy8vIGBgYAov" + + "Ly8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtYWR2YW5jZWQjZ2V0b3JpZ2luYWxmd2RmZWUKLy8vICogaHR0cHM6Ly9k" + + "b2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtYWR2YW5jZWQjZ2V0Zm9yd2FyZGZlZQovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1hZHZh" + + "bmNlZCNjb250ZXh0cmVhZGZvcndhcmRmZWUKLy8vCmFzbSBmdW4gZ2V0T3JpZ2luYWxGd2RGZWUoZndkRmVlOiBJbnQsIGlzTWFzdGVyY2hhaW46IEJvb2wpOiBJbnQg" + + "eyBHRVRPUklHSU5BTEZXREZFRSB9CgovLy8gU3RydWN0IHJlcHJlc2VudGluZyB0aGUgc3RhbmRhcmQgYWRkcmVzcyBvbiBUT04gQmxvY2tjaGFpbiB3aXRoIHNpZ25l" + + "ZCA4LWJpdCBgd29ya2NoYWluYCBJRCBhbmQgYW4gdW5zaWduZWQgMjU2LWJpdCBgYWRkcmVzc2AgaW4gdGhlIHNwZWNpZmllZCBgd29ya2NoYWluYC4gQXZhaWxhYmxl" + + "IHNpbmNlIFRhY3QgMS41LjAuCi8vLwovLy8gQXQgdGhlIG1vbWVudCwgb25seSBgd29ya2NoYWluYCBJRHMgdXNlZCBvbiBUT04gYXJlIDAgb2YgdGhlIGJhc2VjaGFp" + + "biBhbmQgLTEgb2YgdGhlIG1hc3RlcmNoYWluLgovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtYWR2YW5jZWQjcGFy" + + "c2VzdGRhZGRyZXNzCi8vLyAqIGh0dHBzOi8vZ2l0aHViLmNvbS90b24tYmxvY2tjaGFpbi90b24vYmxvYi9tYXN0ZXIvY3J5cHRvL2Jsb2NrL2Jsb2NrLnRsYiNMMTA1" + + "LUwxMDYKLy8vCnN0cnVjdCBTdGRBZGRyZXNzIHsKICAgIHdvcmtjaGFpbjogSW50IGFzIGludDg7CiAgICBhZGRyZXNzOiBJbnQgYXMgdWludDI1NjsKfQoKLy8vIFN0" + + "cnVjdCByZXByZXNlbnRpbmcgdGhlIGFkZHJlc3Mgb2YgdmFyaWFibGUgbGVuZ3RoIHdpdGggc2lnbmVkIDMyLWJpdCBgd29ya2NoYWluYCBJRCBhbmQgYSBgU2xpY2Vg" + + "IGNvbnRhaW5pbmcgdW5zaWduZWQgYGFkZHJlc3NgIGluIHRoZSBzcGVjaWZpZWQgYHdvcmtjaGFpbmAuIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNS4wLgovLy8KLy8v" + + "IFZhcmlhYmxlLWxlbmd0aCBhZGRyZXNzZXMgYXJlIGludGVuZGVkIGZvciBmdXR1cmUgZXh0ZW5zaW9ucywgYW5kIHdoaWxlIHZhbGlkYXRvcnMgbXVzdCBiZSByZWFk" + + "eSB0byBhY2NlcHQgdGhlbSBpbiBpbmJvdW5kIG1lc3NhZ2VzLCB0aGUgc3RhbmRhcmQgKG5vbi12YXJpYWJsZSkgYWRkcmVzc2VzIGFyZSB1c2VkIHdoZW5ldmVyIHBv" + + "c3NpYmxlLgovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtYWR2YW5jZWQjcGFyc2V2YXJhZGRyZXNzCi8vLyAqIGh0" + + "dHBzOi8vZ2l0aHViLmNvbS90b24tYmxvY2tjaGFpbi90b24vYmxvYi9tYXN0ZXIvY3J5cHRvL2Jsb2NrL2Jsb2NrLnRsYiNMMTA3LUwxMDgKLy8vCnN0cnVjdCBWYXJB" + + "ZGRyZXNzIHsKICAgIHdvcmtjaGFpbjogSW50IGFzIGludDMyOwogICAgYWRkcmVzczogU2xpY2U7Cn0KCi8vLyBBc3NlbWJseSBmdW5jdGlvbi4gQXZhaWxhYmxlIHNp" + + "bmNlIFRhY3QgMS41LjAuCi8vLwovLy8gQ29udmVydHMgYSBgU2xpY2VgIGNvbnRhaW5pbmcgYW4gYWRkcmVzcyBpbnRvIHRoZSBgU3RkQWRkcmVzc2AgU3RydWN0IGFu" + + "ZCByZXR1cm5zIGl0LgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBhZGRyID0gYWRkcmVzcygiRVFEdEZwRXdjRkFFY1JlNW1M" + + "VmgyTjZDMHgtX2hKRU03VzYxX0pMblNGNzRwNHEyIik7Ci8vLyAgICAgbGV0IHBhcnNlZEFkZHIgPSBwYXJzZVN0ZEFkZHJlc3MoYWRkci5hc1NsaWNlKCkpOwovLy8K" + + "Ly8vICAgICBwYXJzZWRBZGRyLndvcmtjaGFpbjsgLy8gMAovLy8gICAgIHBhcnNlZEFkZHIuYWRkcmVzczsgICAvLyAxMDcuLi4yODcKLy8vIH0KLy8vIGBgYAovLy8K" + + "Ly8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtYWR2YW5jZWQjcGFyc2VzdGRhZGRyZXNzCi8vLwphc20gZnVuIHBhcnNlU3RkQWRkcmVz" + + "cyhzbGljZTogU2xpY2UpOiBTdGRBZGRyZXNzIHsgUkVXUklURVNUREFERFIgfQoKLy8vIEFzc2VtYmx5IGZ1bmN0aW9uLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjUu" + + "MC4KLy8vCi8vLyBDb252ZXJ0cyBhIGBTbGljZWAgY29udGFpbmluZyBhbiBhZGRyZXNzIG9mIHZhcmlhYmxlIGxlbmd0aCBpbnRvIHRoZSBgVmFyQWRkcmVzc2AgU3Ry" + + "dWN0IGFuZCByZXR1cm5zIGl0LgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCB2YXJBZGRyU2xpY2UgPSBiZWdpbkNlbGwoKQov" + + "Ly8gICAgICAgICAuc3RvcmVVaW50KDYsIDMpICAgICAvLyB0byByZWNvZ25pemUgdGhlIGZvbGxvd2luZyBhcyBhIFZhckFkZHJlc3MKLy8vICAgICAgICAgLnN0b3Jl" + + "VWludCgxMjMsIDkpICAgLy8gbWFrZSBhZGRyZXNzIG9jY3VweSAxMjMgYml0cwovLy8gICAgICAgICAuc3RvcmVVaW50KDIzNCwgMzIpICAvLyBzcGVjaWZ5IHdvcmtj" + + "aGFpbiBJRCBvZiAyMzQKLy8vICAgICAgICAgLnN0b3JlVWludCgzNDUsIDEyMykgLy8gc3BlY2lmeSBhZGRyZXNzIG9mIDM0NQovLy8gICAgICAgICAuYXNTbGljZSgp" + + "OwovLy8gICAgIGxldCBwYXJzZWRWYXJBZGRyID0gcGFyc2VWYXJBZGRyZXNzKHZhckFkZHJTbGljZSk7Ci8vLwovLy8gICAgIHBhcnNlZFZhckFkZHIud29ya2NoYWlu" + + "OyAgICAgICAgICAgICAvLyAyMzQKLy8vICAgICBwYXJzZWRWYXJBZGRyLmFkZHJlc3M7ICAgICAgICAgICAgICAgLy8gQ1N7Q2VsbHswMDIuLi4yYjN9IGJpdHM6IDQ0" + + "Li4xNjc7IHJlZnM6IDAuLjB9Ci8vLyAgICAgcGFyc2VkVmFyQWRkci5hZGRyZXNzLmxvYWRVaW50KDEyMyk7IC8vIDM0NQovLy8gfQovLy8gYGBgCi8vLwovLy8gU2Vl" + + "OiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1hZHZhbmNlZCNwYXJzZXZhcmFkZHJlc3MKLy8vCmFzbSBmdW4gcGFyc2VWYXJBZGRyZXNzKHNsaWNl" + + "OiBTbGljZSk6IFZhckFkZHJlc3MgeyBSRVdSSVRFVkFSQUREUiB9Cg=="; +files["std/crypto.tact"] = + "YXNtIGV4dGVuZHMgZnVuIGhhc2goc2VsZjogQ2VsbCk6IEludCB7IEhBU0hDVSB9Cgphc20gZXh0ZW5kcyBmdW4gaGFzaChzZWxmOiBTbGljZSk6IEludCB7IEhBU0hT" + + "VSB9Cgphc20gZnVuIGNoZWNrU2lnbmF0dXJlKGhhc2g6IEludCwgc2lnbmF0dXJlOiBTbGljZSwgcHVibGljX2tleTogSW50KTogQm9vbCB7IENIS1NJR05VIH0KCmFz" + + "bSBmdW4gY2hlY2tEYXRhU2lnbmF0dXJlKGRhdGE6IFNsaWNlLCBzaWduYXR1cmU6IFNsaWNlLCBwdWJsaWNfa2V5OiBJbnQpOiBCb29sIHsgQ0hLU0lHTlMgfQo="; +files["std/debug.tact"] = + "Ly8gdGhlc2UgYXJlIGJ1aWx0aW4gZnVuY3Rpb25zLCB0aGVzZSBnZXQgc3BlY2lhbCB0cmVhdG1lbnQgZnJvbSBGdW5DCi8vIGhlbmNlLCBubyBhc20gaGVyZQoKQG5h" + + "bWUodGhyb3cpCm5hdGl2ZSBuYXRpdmVUaHJvdyhjb2RlOiBJbnQpOwoKQG5hbWUodGhyb3dfaWYpCm5hdGl2ZSBuYXRpdmVUaHJvd0lmKGNvZGU6IEludCwgY29uZGl0" + + "aW9uOiBCb29sKTsKCkBuYW1lKHRocm93KQpuYXRpdmUgdGhyb3coY29kZTogSW50KTsKCkBuYW1lKHRocm93X3VubGVzcykKbmF0aXZlIG5hdGl2ZVRocm93VW5sZXNz" + + "KGNvZGU6IEludCwgY29uZGl0aW9uOiBCb29sKTs="; +files["std/math.tact"] = + "Ly8gUHJlcGFyZSByYW5kb20KCi8vIE1peGVzIHVuc2lnbmVkIDI1Ni1iaXQgaW50ZWdlciB4IGludG8gdGhlIHJhbmRvbSBzZWVkIHIgYnkgc2V0dGluZyB0aGUgcmFu" + + "ZG9tIHNlZWQKLy8gdG8gc2hhMjU2IG9mIHRoZSBjb25jYXRlbmF0aW9uIG9mIHR3byAzMi1ieXRlIHN0cmluZ3M6Ci8vIHRoZSBmaXJzdCB3aXRoIHRoZSBiaWctZW5k" + + "aWFuIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvbGQgc2VlZCByLCBhbmQKLy8gdGhlIHNlY29uZCB3aXRoIHRoZSBiaWctZW5kaWFuIHJlcHJlc2VudGF0aW9uIG9mIHgu" + + "CmFzbSBmdW4gbmF0aXZlUmFuZG9taXplKHg6IEludCkgeyBBRERSQU5EIH0KCi8vLyBFcXVpdmFsZW50IHRvIGBuYXRpdmVSYW5kb21pemUoY3VyX2x0KCkpYCwKLy8v" + + "IHdoZXJlIGBjdXJfbHQoKWAgaXMgdGhlIGxvZ2ljYWwgdGltZSBvZiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbgphc20gZnVuIG5hdGl2ZVJhbmRvbWl6ZUx0KCkgeyBM" + + "VElNRSBBRERSQU5EIH0KCkBuYW1lKF9fdGFjdF9wcmVwYXJlX3JhbmRvbSkKbmF0aXZlIG5hdGl2ZVByZXBhcmVSYW5kb20oKTsKCi8vIFJhbmRvbQoKLy8gR2VuZXJh" + + "dGVzIGEgbmV3IHBzZXVkby1yYW5kb20gdW5zaWduZWQgMjU2LWJpdCBpbnRlZ2VyIHguCi8vIFRoZSBhbGdvcml0aG0gaXMgYXMgZm9sbG93czogaWYgciBpcyB0aGUg" + + "b2xkIHZhbHVlIG9mIHRoZSByYW5kb20gc2VlZCwKLy8gY29uc2lkZXJlZCBhcyBhIDMyLWJ5dGUgYXJyYXkgKGJ5IGNvbnN0cnVjdGluZyB0aGUgYmlnLWVuZGlhbiBy" + + "ZXByZXNlbnRhdGlvbgovLyBvZiBhbiB1bnNpZ25lZCAyNTYtYml0IGludGVnZXIpLCB0aGVuIGl0cyBzaGE1MTIocikgaXMgY29tcHV0ZWQ7Ci8vIHRoZSBmaXJzdCAz" + + "MiBieXRlcyBvZiB0aGlzIGhhc2ggYXJlIHN0b3JlZCBhcyB0aGUgbmV3IHZhbHVlIHInIG9mIHRoZSByYW5kb20gc2VlZCwKLy8gYW5kIHRoZSByZW1haW5pbmcgMzIg" + + "Ynl0ZXMgYXJlIHJldHVybmVkIGFzIHRoZSBuZXh0IHJhbmRvbSB2YWx1ZSB4Lgphc20gZnVuIG5hdGl2ZVJhbmRvbSgpOiBJbnQgeyBSQU5EVTI1NiB9CgovLyBHZW5l" + + "cmF0ZXMgYSBuZXcgcHNldWRvLXJhbmRvbSBpbnRlZ2VyIHogaW4gdGhlIHJhbmdlIDAuLnJhbmdl4oiSMQovLyAob3IgcmFuZ2UuLuKIkjEsIGlmIHJhbmdlIDwgMCku" + + "Ci8vIE1vcmUgcHJlY2lzZWx5LCBhbiB1bnNpZ25lZCByYW5kb20gdmFsdWUgeCBpcyBnZW5lcmF0ZWQgYXMgaW4gYG5hdGl2ZVJhbmRvbWA7Ci8vIHRoZW4geiA6PSB4" + + "ICogcmFuZ2UgLyAyXjI1NiBpcyBjb21wdXRlZC4KYXNtIGZ1biBuYXRpdmVSYW5kb21JbnRlcnZhbChtYXg6IEludCk6IEludCB7IFJBTkQgfQoKaW5saW5lIGZ1biBy" + + "YW5kb21JbnQoKTogSW50IHsKICAgIG5hdGl2ZVByZXBhcmVSYW5kb20oKTsKICAgIHJldHVybiBuYXRpdmVSYW5kb20oKTsKfQoKaW5saW5lIGZ1biByYW5kb20obWlu" + + "OiBJbnQsIG1heDogSW50KTogSW50IHsKICAgIG5hdGl2ZVByZXBhcmVSYW5kb20oKTsKICAgIHJldHVybiBtaW4gKyBuYXRpdmVSYW5kb21JbnRlcnZhbChtYXggLSBt" + + "aW4pOwp9CgovLyBNYXRoCgphc20gZnVuIG1pbih4OiBJbnQsIHk6IEludCk6IEludCB7IE1JTiB9Cgphc20gZnVuIG1heCh4OiBJbnQsIHk6IEludCk6IEludCB7IE1B" + + "WCB9Cgphc20gZnVuIGFicyh4OiBJbnQpOiBJbnQgeyBBQlMgfQoKYXNtIGZ1biBub3coKTogSW50IHsgTk9XIH0KCmFzbSBmdW4gbG9nMihudW06IEludCk6IEludCB7" + + "CiAgICBEVVAgNSBUSFJPV0lGTk9UIFVCSVRTSVpFIERFQwp9CgpAbmFtZShfX3RhY3RfbG9nKQpuYXRpdmUgbG9nKG51bTogSW50LCBiYXNlOiBJbnQpOiBJbnQ7CgpA" + + "bmFtZShfX3RhY3RfcG93KQpuYXRpdmUgcG93KGJhc2U6IEludCwgZXhwOiBJbnQpOiBJbnQ7Cgphc20gZnVuIHBvdzIoZXhwOiBJbnQpOiBJbnQgeyBQT1cyIH0="; +files["std/primitives.tact"] = + "cHJpbWl0aXZlIEludDsKcHJpbWl0aXZlIEJvb2w7CnByaW1pdGl2ZSBCdWlsZGVyOwpwcmltaXRpdmUgU2xpY2U7CnByaW1pdGl2ZSBDZWxsOwpwcmltaXRpdmUgQWRk" + + "cmVzczsKcHJpbWl0aXZlIFN0cmluZzsKcHJpbWl0aXZlIFN0cmluZ0J1aWxkZXI7"; +files["std/reserve.tact"] = + "YXNtIGZ1biBuYXRpdmVSZXNlcnZlKGFtb3VudDogSW50LCBtb2RlOiBJbnQpIHsgUkFXUkVTRVJWRSB9Cgpjb25zdCBSZXNlcnZlRXhhY3Q6IEludCA9IDA7CmNvbnN0" + + "IFJlc2VydmVBbGxFeGNlcHQ6IEludCA9IDE7CmNvbnN0IFJlc2VydmVBdE1vc3Q6IEludCA9IDI7CmNvbnN0IFJlc2VydmVBZGRPcmlnaW5hbEJhbGFuY2U6IEludCA9" + + "IDQ7CmNvbnN0IFJlc2VydmVJbnZlcnRTaWduOiBJbnQgPSA4Owpjb25zdCBSZXNlcnZlQm91bmNlSWZBY3Rpb25GYWlsOiBJbnQgPSAxNjs="; +files["std/send.tact"] = + "YXNtIGZ1biBuYXRpdmVTZW5kTWVzc2FnZShjZWxsOiBDZWxsLCBtb2RlOiBJbnQpIHsgU0VORFJBV01TRyB9Cgphc20gZnVuIG5hdGl2ZVNlbmRNZXNzYWdlUmV0dXJu" + + "Rm9yd2FyZEZlZShtc2c6IENlbGwsIG1vZGU6IEludCk6IEludCB7IFNFTkRNU0cgfQoKY29uc3QgU2VuZFJlbWFpbmluZ0JhbGFuY2U6IEludCA9IDEyODsKY29uc3Qg" + + "U2VuZFJlbWFpbmluZ1ZhbHVlOiBJbnQgPSA2NDsKY29uc3QgU2VuZERlZmF1bHRNb2RlOiBJbnQgPSAwOwpjb25zdCBTZW5kSWdub3JlRXJyb3JzOiBJbnQgPSAyOwpj" + + "b25zdCBTZW5kUGF5R2FzU2VwYXJhdGVseTogSW50ID0gMTsKY29uc3QgU2VuZERlc3Ryb3lJZlplcm86IEludCA9IDMyOwpjb25zdCBTZW5kQm91bmNlSWZBY3Rpb25G" + + "YWlsOiBJbnQgPSAxNjsKY29uc3QgU2VuZE9ubHlFc3RpbWF0ZUZlZTogSW50ID0gMTAyNDsKCnN0cnVjdCBTZW5kUGFyYW1ldGVycyB7CiAgICBib3VuY2U6IEJvb2wg" + + "PSB0cnVlOwogICAgdG86IEFkZHJlc3M7CiAgICB2YWx1ZTogSW50OwogICAgbW9kZTogSW50ID0gMDsKICAgIGJvZHk6IENlbGw/ID0gbnVsbDsKICAgIGNvZGU6IENl" + + "bGw/ID0gbnVsbDsKICAgIGRhdGE6IENlbGw/ID0gbnVsbDsKfQoKZnVuIHNlbmQocGFyYW1zOiBTZW5kUGFyYW1ldGVycyk6IEludCB7IC8vIHJldHVybnMgZm9yd2Fy" + + "ZCBmZWUKICAgIGxldCBiOiBCdWlsZGVyID0gYmVnaW5DZWxsKCk7CiAgICBiID0gYi5zdG9yZUludCgxLCAyKTsgLy8gaW50ZXJuYWxfbWVzc2FnZSArIGloZF9kaXNh" + + "YmxlZAogICAgYiA9IGIuc3RvcmVCb29sKHBhcmFtcy5ib3VuY2UpOyAvLyBib3VuY2UKICAgIGIgPSBiLnN0b3JlSW50KDAsIDMpOyAvLyBib3VuY2VkICsgZnJvbQog" + + "ICAgYiA9IGIuc3RvcmVBZGRyZXNzKHBhcmFtcy50byk7IC8vIFRvCiAgICBiID0gYi5zdG9yZUNvaW5zKHBhcmFtcy52YWx1ZSk7IC8vIFZhbHVlCiAgICBiID0gYi5z" + + "dG9yZUludCgwLCAxICsgNCArIDQgKyA2NCArIDMyKTsgLy8gY3VycmVuY3lfY29sbGVjdGlvbiArIElIUiBmZWVzICsgRndkIGZlZXMgKyBDcmVhdGVkTFQgKyBDcmVh" + + "dGVkQXQKCiAgICAvLyBTdGF0ZWluaXQKICAgIGlmIChwYXJhbXMuY29kZSAhPSBudWxsIHx8IHBhcmFtcy5kYXRhICE9IG51bGwpIHsKICAgICAgICBiID0gYi5zdG9y" + + "ZUJvb2wodHJ1ZSk7IC8vIFN0YXRlIGluaXQKCiAgICAgICAgLy8gQXNzZW1ibGUgc3RhdGUgaW5pdCBjZWxsCiAgICAgICAgbGV0IGJjOiBCdWlsZGVyID0gYmVnaW5D" + + "ZWxsKCk7CiAgICAgICAgYmMgPSBiYy5zdG9yZUJvb2woZmFsc2UpOyAvLyBTcGxpdERlcHRoCiAgICAgICAgYmMgPSBiYy5zdG9yZUJvb2woZmFsc2UpOyAvLyBUaWNr" + + "VG9jawogICAgICAgIGlmIChwYXJhbXMuY29kZSAhPSBudWxsKSB7CiAgICAgICAgICAgIGJjID0gYmMuc3RvcmVCb29sKHRydWUpOyAvLyBDb2RlIHByZXNlbmNlCiAg" + + "ICAgICAgICAgIGJjID0gYmMuc3RvcmVSZWYocGFyYW1zLmNvZGUhISk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYmMgPSBiYy5zdG9yZUJvb2woZmFsc2Up" + + "OyAvLyBDb2RlIHByZXNlbmNlCiAgICAgICAgfQogICAgICAgIGlmIChwYXJhbXMuZGF0YSAhPSBudWxsKSB7CiAgICAgICAgICAgIGJjID0gYmMuc3RvcmVCb29sKHRy" + + "dWUpOyAvLyBEYXRhIHByZXNlbmNlCiAgICAgICAgICAgIGJjID0gYmMuc3RvcmVSZWYocGFyYW1zLmRhdGEhISk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg" + + "YmMgPSBiYy5zdG9yZUJvb2woZmFsc2UpOyAvLyBEYXRhIHByZXNlbmNlCiAgICAgICAgfQogICAgICAgIGJjID0gYmMuc3RvcmVCb29sKGZhbHNlKTsgLy8gTGlicmFy" + + "eQoKICAgICAgICBiID0gYi5zdG9yZUJvb2wodHJ1ZSk7IC8vIFN0b3JlIGFzIHJlZgogICAgICAgIGIgPSBiLnN0b3JlUmVmKGJjLmVuZENlbGwoKSk7CiAgICB9IGVs" + + "c2UgewogICAgICAgIGIgPSBiLnN0b3JlQm9vbChmYWxzZSk7IC8vIE5vIHN0YXRlIGluaXQKICAgIH0KCiAgICAvLyBCb2R5CiAgICBsZXQgYm9keTogQ2VsbD8gPSBw" + + "YXJhbXMuYm9keTsKICAgIGlmIChib2R5ICE9IG51bGwpIHsKICAgICAgICBiID0gYi5zdG9yZUJvb2wodHJ1ZSk7CiAgICAgICAgYiA9IGIuc3RvcmVSZWYoYm9keSEh" + + "KTsKICAgIH0gZWxzZSB7CiAgICAgICAgYiA9IGIuc3RvcmVCb29sKGZhbHNlKTsgLy8gTm8gYm9keQogICAgfQoKICAgIC8vIFNlbmQKICAgIGxldCBjOiBDZWxsID0g" + + "Yi5lbmRDZWxsKCk7CiAgICByZXR1cm4gbmF0aXZlU2VuZE1lc3NhZ2VSZXR1cm5Gb3J3YXJkRmVlKGMsIHBhcmFtcy5tb2RlKTsKfQoKaW5saW5lIGZ1biBlbWl0KGJv" + + "ZHk6IENlbGwpIHsKICAgIC8vIGV4dF9vdXRfbXNnX2luZm8kMTEgc3JjOk1zZ0FkZHJlc3NJbnQgZGVzdDpNc2dBZGRyZXNzRXh0IGNyZWF0ZWRfbHQ6dWludDY0IGNy" + + "ZWF0ZWRfYXQ6dWludDMyCiAgICAvLyAgICAgICAgICAgICAgICAgICAgIG1heWJlOiBzdGF0ZUluaXQgKGZhbHNlKSBib2R5UmVmOiBib29sICh0cnVlKQogICAgbGV0" + + "IGM6IENlbGwgPSBiZWdpbkNlbGwoKQogICAgICAgIC5zdG9yZVVpbnQoMTUyMTE4MDcyMDI3Mzg3NTI4MTc5NjA0Mzg0NjQ1MTMsIDEwNCkKICAgICAgICAuc3RvcmVS" + + "ZWYoYm9keSkKICAgICAgICAuZW5kQ2VsbCgpOwogICAgbmF0aXZlU2VuZE1lc3NhZ2UoYywgMCk7Cn0KCmFzbSBmdW4gYWNjZXB0TWVzc2FnZSgpIHsgQUNDRVBUIH0K" + + "CmFzbSBmdW4gY29tbWl0KCkgeyBDT01NSVQgfQo="; +files["std/text.tact"] = + "Ly8KLy8gU3RyaW5nIGJ1aWxkZXIKLy8KCkBuYW1lKF9fdGFjdF9zdHJpbmdfYnVpbGRlcl9zdGFydF9zdHJpbmcpCm5hdGl2ZSBiZWdpblN0cmluZygpOiBTdHJpbmdC" + + "dWlsZGVyOwoKQG5hbWUoX190YWN0X3N0cmluZ19idWlsZGVyX3N0YXJ0X2NvbW1lbnQpCm5hdGl2ZSBiZWdpbkNvbW1lbnQoKTogU3RyaW5nQnVpbGRlcjsKCkBuYW1l" + + "KF9fdGFjdF9zdHJpbmdfYnVpbGRlcl9zdGFydF90YWlsX3N0cmluZykKbmF0aXZlIGJlZ2luVGFpbFN0cmluZygpOiBTdHJpbmdCdWlsZGVyOwoKQG5hbWUoX190YWN0" + + "X3N0cmluZ19idWlsZGVyX3N0YXJ0KQpuYXRpdmUgYmVnaW5TdHJpbmdGcm9tQnVpbGRlcihiOiBCdWlsZGVyKTogU3RyaW5nQnVpbGRlcjsKCkBuYW1lKF9fdGFjdF9z" + + "dHJpbmdfYnVpbGRlcl9hcHBlbmQpCmV4dGVuZHMgbXV0YXRlcyBuYXRpdmUgYXBwZW5kKHNlbGY6IFN0cmluZ0J1aWxkZXIsIHM6IFN0cmluZyk7CgpAbmFtZShfX3Rh" + + "Y3Rfc3RyaW5nX2J1aWxkZXJfYXBwZW5kX25vdF9tdXQpCmV4dGVuZHMgbmF0aXZlIGNvbmNhdChzZWxmOiBTdHJpbmdCdWlsZGVyLCBzOiBTdHJpbmcpOiBTdHJpbmdC" + + "dWlsZGVyOwoKQG5hbWUoX190YWN0X3N0cmluZ19idWlsZGVyX2VuZCkKZXh0ZW5kcyBuYXRpdmUgdG9DZWxsKHNlbGY6IFN0cmluZ0J1aWxkZXIpOiBDZWxsOwoKQG5h" + + "bWUoX190YWN0X3N0cmluZ19idWlsZGVyX2VuZF9zbGljZSkKZXh0ZW5kcyBuYXRpdmUgdG9TdHJpbmcoc2VsZjogU3RyaW5nQnVpbGRlcik6IFN0cmluZzsKCkBuYW1l" + + "KF9fdGFjdF9zdHJpbmdfYnVpbGRlcl9lbmRfc2xpY2UpCmV4dGVuZHMgbmF0aXZlIHRvU2xpY2Uoc2VsZjogU3RyaW5nQnVpbGRlcik6IFNsaWNlOwoKLy8KLy8gU3Ry" + + "aW5nIGNvbnZlcnNpb24KLy8KCkBuYW1lKF9fdGFjdF9pbnRfdG9fc3RyaW5nKQpleHRlbmRzIG5hdGl2ZSB0b1N0cmluZyhzZWxmOiBJbnQpOiBTdHJpbmc7CgpAbmFt" + + "ZShfX3RhY3RfZmxvYXRfdG9fc3RyaW5nKQpleHRlbmRzIG5hdGl2ZSB0b0Zsb2F0U3RyaW5nKHNlbGY6IEludCwgZGlnaXRzOiBJbnQpOiBTdHJpbmc7CgppbmxpbmUg" + + "ZXh0ZW5kcyBmdW4gdG9Db2luc1N0cmluZyhzZWxmOiBJbnQpOiBTdHJpbmcgewogICAgcmV0dXJuIHNlbGYudG9GbG9hdFN0cmluZyg5KTsKfQoKZXh0ZW5kcyBmdW4g" + + "YXNDb21tZW50KHNlbGY6IFN0cmluZyk6IENlbGwgewogICAgbGV0IGI6IFN0cmluZ0J1aWxkZXIgPSBiZWdpbkNvbW1lbnQoKTsKICAgIGIuYXBwZW5kKHNlbGYpOwog" + + "ICAgcmV0dXJuIGIudG9DZWxsKCk7Cn0KCkBuYW1lKF9fdGFjdF9zdHJfdG9fc2xpY2UpCmV4dGVuZHMgbmF0aXZlIGFzU2xpY2Uoc2VsZjogU3RyaW5nKTogU2xpY2U7" + + "CgpAbmFtZShfX3RhY3Rfc2xpY2VfdG9fc3RyKQpleHRlbmRzIG5hdGl2ZSBhc1N0cmluZyhzZWxmOiBTbGljZSk6IFN0cmluZzsKCmlubGluZSBleHRlbmRzIGZ1biBm" + + "cm9tQmFzZTY0KHNlbGY6IFN0cmluZyk6IFNsaWNlIHsKICAgIHJldHVybiBzZWxmLmFzU2xpY2UoKS5mcm9tQmFzZTY0KCk7Cn0KCmV4dGVuZHMgZnVuIGZyb21CYXNl" + + "NjQoc2VsZjogU2xpY2UpOiBTbGljZSB7CiAgICBsZXQgc2l6ZTogSW50ID0gc2VsZi5iaXRzKCkgLyA4OwogICAgbGV0IHJlc3VsdDogQnVpbGRlciA9IGJlZ2luQ2Vs" + + "bCgpOwoKICAgIHJlcGVhdCAoc2l6ZSkgewogICAgICAgIGxldCBjb2RlOiBJbnQgPSBzZWxmLmxvYWRVaW50KDgpOwogICAgICAgIGlmIChjb2RlID49IDY1ICYmIGNv" + + "ZGUgPD0gOTApIHsgLy8gQS1aCiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zdG9yZVVpbnQoY29kZSAtIDY1LCA2KTsKICAgICAgICB9IGVsc2UgaWYgKGNvZGUg" + + "Pj0gOTcgJiYgY29kZSA8PSAxMjIpIHsgLy8gYS16CiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zdG9yZVVpbnQoY29kZSAtICg5NyAtIDI2KSwgNik7CiAgICAg" + + "ICAgfSBlbHNlIGlmIChjb2RlID49IDQ4ICYmIGNvZGUgPD0gNTcpIHsgLy8gMC05CiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zdG9yZVVpbnQoY29kZSArICg1" + + "MiAtIDQ4KSwgNik7CiAgICAgICAgfSBlbHNlIGlmIChjb2RlID09IDQ1IHx8IGNvZGUgPT0gNDMpIHsgLy8gLSBvciArCiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3Vs" + + "dC5zdG9yZVVpbnQoNjIsIDYpOwogICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSA5NSB8fCBjb2RlID09IDQ3KSB7IC8vIF8gb3IgLwogICAgICAgICAgICByZXN1bHQg" + + "PSByZXN1bHQuc3RvcmVVaW50KDYzLCA2KTsKICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gNjEpIHsgLy8gPQogICAgICAgICAgICAvLyBTa2lwCiAgICAgICAgfSBl" + + "bHNlIHsKICAgICAgICAgICAgdGhyb3coMTM0KTsKICAgICAgICB9CiAgICB9CgogICAgLy8gUGFkZGluZwogICAgbGV0IHRvdGFsOiBJbnQgPSByZXN1bHQuYml0cygp" + + "OwogICAgbGV0IHBhZGRpbmc6IEludCA9IHRvdGFsICUgODsKICAgIGlmIChwYWRkaW5nICE9IDApIHsKICAgICAgICBsZXQgczogU2xpY2UgPSByZXN1bHQuYXNTbGlj" + + "ZSgpOwogICAgICAgIHJldHVybiBzLmxvYWRCaXRzKHRvdGFsIC0gcGFkZGluZyk7CiAgICB9IGVsc2UgewogICAgICAgIHJldHVybiByZXN1bHQuYXNTbGljZSgpOwog" + + "ICAgfQp9CgovLwovLyBBZGRyZXNzIGNvbnZlcnNpb24KLy8KCkBuYW1lKF9fdGFjdF9hZGRyZXNzX3RvX3VzZXJfZnJpZW5kbHkpCmV4dGVuZHMgbmF0aXZlIHRvU3Ry" + + "aW5nKHNlbGY6IEFkZHJlc3MpOiBTdHJpbmc7"; +files["stdlib_ex.fc"] = + "Zm9yYWxsIFggLT4gdHVwbGUgX190YWN0X3NldCh0dXBsZSB4LCBYIHYsIGludCBpKSBhc20gIlNFVElOREVYVkFSUSI7CigpIF9fdGFjdF9ub3AoKSBhc20gIk5PUCI7" + + "CnNsaWNlIF9fdGFjdF9zdHJfdG9fc2xpY2Uoc2xpY2UgcykgYXNtICJOT1AiOwpzbGljZSBfX3RhY3Rfc2xpY2VfdG9fc3RyKHNsaWNlIHMpIGFzbSAiTk9QIjsKc2xp" + + "Y2UgX190YWN0X2FkZHJlc3NfdG9fc2xpY2Uoc2xpY2UgcykgYXNtICJOT1AiOw=="; +files["stdlib.fc"] = + "OzsgU3RhbmRhcmQgbGlicmFyeSBmb3IgZnVuQwo7OwoKey0KICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFRPTiBGdW5DIFN0YW5kYXJkIExpYnJhcnkuCgogICAgRnVu" + + "QyBTdGFuZGFyZCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJt" + + "cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0" + + "aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCgogICAgRnVuQyBTdGFuZGFyZCBMaWJy" + + "YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl" + + "biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAg" + + "R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCgotfQoKey0KICAjIFR1cGxlIG1hbmlwdWxhdGlvbiBwcmltaXRpdmVzCiAg" + + "VGhlIG5hbWVzIGFuZCB0aGUgdHlwZXMgYXJlIG1vc3RseSBzZWxmLWV4cGxhaW5pbmcuCiAgU2VlIFtwb2x5bW9yaGlzbSB3aXRoIGZvcmFsbF0oaHR0cHM6Ly90b24u" + + "b3JnL2RvY3MvIy9mdW5jL2Z1bmN0aW9ucz9pZD1wb2x5bW9ycGhpc20td2l0aC1mb3JhbGwpCiAgZm9yIG1vcmUgaW5mbyBvbiB0aGUgcG9seW1vcnBoaWMgZnVuY3Rp" + + "b25zLgoKICBOb3RlIHRoYXQgY3VycmVudGx5IHZhbHVlcyBvZiBhdG9taWMgdHlwZSBgdHVwbGVgIGNhbid0IGJlIGNhc3QgdG8gY29tcG9zaXRlIHR1cGxlIHR5cGUg" + + "KGUuZy4gYFtpbnQsIGNlbGxdYCkKICBhbmQgdmlzZSB2ZXJzYS4KLX0KCnstCiAgIyBMaXNwLXN0eWxlIGxpc3RzCgogIExpc3RzIGNhbiBiZSByZXByZXNlbnRlZCBh" + + "cyBuZXN0ZWQgMi1lbGVtZW50cyB0dXBsZXMuCiAgRW1wdHkgbGlzdCBpcyBjb252ZW50aW9uYWxseSByZXByZXNlbnRlZCBhcyBUVk0gYG51bGxgIHZhbHVlIChpdCBj" + + "YW4gYmUgb2J0YWluZWQgYnkgY2FsbGluZyBbbnVsbCgpXSkuCiAgRm9yIGV4YW1wbGUsIHR1cGxlIGAoMSwgKDIsICgzLCBudWxsKSkpYCByZXByZXNlbnRzIGxpc3Qg" + + "YFsxLCAyLCAzXWAuIEVsZW1lbnRzIG9mIGEgbGlzdCBjYW4gYmUgb2YgZGlmZmVyZW50IHR5cGVzLgotfQoKOzs7IEFkZHMgYW4gZWxlbWVudCB0byB0aGUgYmVnaW5u" + + "aW5nIG9mIGxpc3Atc3R5bGUgbGlzdC4KZm9yYWxsIFggLT4gdHVwbGUgY29ucyhYIGhlYWQsIHR1cGxlIHRhaWwpIGFzbSAiQ09OUyI7Cgo7OzsgRXh0cmFjdHMgdGhl" + + "IGhlYWQgYW5kIHRoZSB0YWlsIG9mIGxpc3Atc3R5bGUgbGlzdC4KZm9yYWxsIFggLT4gKFgsIHR1cGxlKSB1bmNvbnModHVwbGUgbGlzdCkgYXNtICJVTkNPTlMiOwoK" + + "Ozs7IEV4dHJhY3RzIHRoZSB0YWlsIGFuZCB0aGUgaGVhZCBvZiBsaXNwLXN0eWxlIGxpc3QuCmZvcmFsbCBYIC0+ICh0dXBsZSwgWCkgbGlzdF9uZXh0KHR1cGxlIGxp" + + "c3QpIGFzbSgtPiAxIDApICJVTkNPTlMiOwoKOzs7IFJldHVybnMgdGhlIGhlYWQgb2YgbGlzcC1zdHlsZSBsaXN0Lgpmb3JhbGwgWCAtPiBYIGNhcih0dXBsZSBsaXN0" + + "KSBhc20gIkNBUiI7Cgo7OzsgUmV0dXJucyB0aGUgdGFpbCBvZiBsaXNwLXN0eWxlIGxpc3QuCnR1cGxlIGNkcih0dXBsZSBsaXN0KSBhc20gIkNEUiI7Cgo7OzsgQ3Jl" + + "YXRlcyB0dXBsZSB3aXRoIHplcm8gZWxlbWVudHMuCnR1cGxlIGVtcHR5X3R1cGxlKCkgYXNtICJOSUwiOwoKOzs7IEFwcGVuZHMgYSB2YWx1ZSBgeGAgdG8gYSBgVHVw" + + "bGUgdCA9ICh4MSwgLi4uLCB4bilgLCBidXQgb25seSBpZiB0aGUgcmVzdWx0aW5nIGBUdXBsZSB0JyA9ICh4MSwgLi4uLCB4biwgeClgCjs7OyBpcyBvZiBsZW5ndGgg" + + "YXQgbW9zdCAyNTUuIE90aGVyd2lzZSB0aHJvd3MgYSB0eXBlIGNoZWNrIGV4Y2VwdGlvbi4KZm9yYWxsIFggLT4gdHVwbGUgdHB1c2godHVwbGUgdCwgWCB2YWx1ZSkg" + + "YXNtICJUUFVTSCI7CmZvcmFsbCBYIC0+ICh0dXBsZSwgKCkpIH50cHVzaCh0dXBsZSB0LCBYIHZhbHVlKSBhc20gIlRQVVNIIjsKCjs7OyBDcmVhdGVzIGEgdHVwbGUg" + + "b2YgbGVuZ3RoIG9uZSB3aXRoIGdpdmVuIGFyZ3VtZW50IGFzIGVsZW1lbnQuCmZvcmFsbCBYIC0+IFtYXSBzaW5nbGUoWCB4KSBhc20gIlNJTkdMRSI7Cgo7OzsgVW5w" + + "YWNrcyBhIHR1cGxlIG9mIGxlbmd0aCBvbmUKZm9yYWxsIFggLT4gWCB1bnNpbmdsZShbWF0gdCkgYXNtICJVTlNJTkdMRSI7Cgo7OzsgQ3JlYXRlcyBhIHR1cGxlIG9m" + + "IGxlbmd0aCB0d28gd2l0aCBnaXZlbiBhcmd1bWVudHMgYXMgZWxlbWVudHMuCmZvcmFsbCBYLCBZIC0+IFtYLCBZXSBwYWlyKFggeCwgWSB5KSBhc20gIlBBSVIiOwoK" + + "Ozs7IFVucGFja3MgYSB0dXBsZSBvZiBsZW5ndGggdHdvCmZvcmFsbCBYLCBZIC0+IChYLCBZKSB1bnBhaXIoW1gsIFldIHQpIGFzbSAiVU5QQUlSIjsKCjs7OyBDcmVh" + + "dGVzIGEgdHVwbGUgb2YgbGVuZ3RoIHRocmVlIHdpdGggZ2l2ZW4gYXJndW1lbnRzIGFzIGVsZW1lbnRzLgpmb3JhbGwgWCwgWSwgWiAtPiBbWCwgWSwgWl0gdHJpcGxl" + + "KFggeCwgWSB5LCBaIHopIGFzbSAiVFJJUExFIjsKCjs7OyBVbnBhY2tzIGEgdHVwbGUgb2YgbGVuZ3RoIHRocmVlCmZvcmFsbCBYLCBZLCBaIC0+IChYLCBZLCBaKSB1" + + "bnRyaXBsZShbWCwgWSwgWl0gdCkgYXNtICJVTlRSSVBMRSI7Cgo7OzsgQ3JlYXRlcyBhIHR1cGxlIG9mIGxlbmd0aCBmb3VyIHdpdGggZ2l2ZW4gYXJndW1lbnRzIGFz" + + "IGVsZW1lbnRzLgpmb3JhbGwgWCwgWSwgWiwgVyAtPiBbWCwgWSwgWiwgV10gdHVwbGU0KFggeCwgWSB5LCBaIHosIFcgdykgYXNtICI0IFRVUExFIjsKCjs7OyBVbnBh" + + "Y2tzIGEgdHVwbGUgb2YgbGVuZ3RoIGZvdXIKZm9yYWxsIFgsIFksIFosIFcgLT4gKFgsIFksIFosIFcpIHVudHVwbGU0KFtYLCBZLCBaLCBXXSB0KSBhc20gIjQgVU5U" + + "VVBMRSI7Cgo7OzsgUmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCBvZiBhIHR1cGxlICh3aXRoIHVua25vd24gZWxlbWVudCB0eXBlcykuCmZvcmFsbCBYIC0+IFggZmly" + + "c3QodHVwbGUgdCkgYXNtICJGSVJTVCI7Cgo7OzsgUmV0dXJucyB0aGUgc2Vjb25kIGVsZW1lbnQgb2YgYSB0dXBsZSAod2l0aCB1bmtub3duIGVsZW1lbnQgdHlwZXMp" + + "Lgpmb3JhbGwgWCAtPiBYIHNlY29uZCh0dXBsZSB0KSBhc20gIlNFQ09ORCI7Cgo7OzsgUmV0dXJucyB0aGUgdGhpcmQgZWxlbWVudCBvZiBhIHR1cGxlICh3aXRoIHVu" + + "a25vd24gZWxlbWVudCB0eXBlcykuCmZvcmFsbCBYIC0+IFggdGhpcmQodHVwbGUgdCkgYXNtICJUSElSRCI7Cgo7OzsgUmV0dXJucyB0aGUgZm91cnRoIGVsZW1lbnQg" + + "b2YgYSB0dXBsZSAod2l0aCB1bmtub3duIGVsZW1lbnQgdHlwZXMpLgpmb3JhbGwgWCAtPiBYIGZvdXJ0aCh0dXBsZSB0KSBhc20gIjMgSU5ERVgiOwoKOzs7IFJldHVy" + + "bnMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYSBwYWlyIHR1cGxlLgpmb3JhbGwgWCwgWSAtPiBYIHBhaXJfZmlyc3QoW1gsIFldIHApIGFzbSAiRklSU1QiOwoKOzs7IFJl" + + "dHVybnMgdGhlIHNlY29uZCBlbGVtZW50IG9mIGEgcGFpciB0dXBsZS4KZm9yYWxsIFgsIFkgLT4gWSBwYWlyX3NlY29uZChbWCwgWV0gcCkgYXNtICJTRUNPTkQiOwoK" + + "Ozs7IFJldHVybnMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYSB0cmlwbGUgdHVwbGUuCmZvcmFsbCBYLCBZLCBaIC0+IFggdHJpcGxlX2ZpcnN0KFtYLCBZLCBaXSBwKSBh" + + "c20gIkZJUlNUIjsKCjs7OyBSZXR1cm5zIHRoZSBzZWNvbmQgZWxlbWVudCBvZiBhIHRyaXBsZSB0dXBsZS4KZm9yYWxsIFgsIFksIFogLT4gWSB0cmlwbGVfc2Vjb25k" + + "KFtYLCBZLCBaXSBwKSBhc20gIlNFQ09ORCI7Cgo7OzsgUmV0dXJucyB0aGUgdGhpcmQgZWxlbWVudCBvZiBhIHRyaXBsZSB0dXBsZS4KZm9yYWxsIFgsIFksIFogLT4g" + + "WiB0cmlwbGVfdGhpcmQoW1gsIFksIFpdIHApIGFzbSAiVEhJUkQiOwoKCjs7OyBQdXNoIG51bGwgZWxlbWVudCAoY2FzdGVkIHRvIGdpdmVuIHR5cGUpCjs7OyBCeSB0" + + "aGUgVFZNIHR5cGUgYE51bGxgIEZ1bkMgcmVwcmVzZW50cyBhYnNlbmNlIG9mIGEgdmFsdWUgb2Ygc29tZSBhdG9taWMgdHlwZS4KOzs7IFNvIGBudWxsYCBjYW4gYWN0" + + "dWFsbHkgaGF2ZSBhbnkgYXRvbWljIHR5cGUuCmZvcmFsbCBYIC0+IFggbnVsbCgpIGFzbSAiUFVTSE5VTEwiOwoKOzs7IE1vdmVzIGEgdmFyaWFibGUgW3hdIHRvIHRo" + + "ZSB0b3Agb2YgdGhlIHN0YWNrCmZvcmFsbCBYIC0+IChYLCAoKSkgfmltcHVyZV90b3VjaChYIHgpIGltcHVyZSBhc20gIk5PUCI7CgoKCjs7OyBSZXR1cm5zIHRoZSBj" + + "dXJyZW50IFVuaXggdGltZSBhcyBhbiBJbnRlZ2VyCmludCBub3coKSBhc20gIk5PVyI7Cgo7OzsgUmV0dXJucyB0aGUgaW50ZXJuYWwgYWRkcmVzcyBvZiB0aGUgY3Vy" + + "cmVudCBzbWFydCBjb250cmFjdCBhcyBhIFNsaWNlIHdpdGggYSBgTXNnQWRkcmVzc0ludGAuCjs7OyBJZiBuZWNlc3NhcnksIGl0IGNhbiBiZSBwYXJzZWQgZnVydGhl" + + "ciB1c2luZyBwcmltaXRpdmVzIHN1Y2ggYXMgW3BhcnNlX3N0ZF9hZGRyXS4Kc2xpY2UgbXlfYWRkcmVzcygpIGFzbSAiTVlBRERSIjsKCjs7OyBSZXR1cm5zIHRoZSBi" + + "YWxhbmNlIG9mIHRoZSBzbWFydCBjb250cmFjdCBhcyBhIHR1cGxlIGNvbnNpc3Rpbmcgb2YgYW4gaW50Cjs7OyAoYmFsYW5jZSBpbiBuYW5vdG9uY29pbnMpIGFuZCBh" + + "IGBjZWxsYAo7OzsgKGEgZGljdGlvbmFyeSB3aXRoIDMyLWJpdCBrZXlzIHJlcHJlc2VudGluZyB0aGUgYmFsYW5jZSBvZiAiZXh0cmEgY3VycmVuY2llcyIpCjs7OyBh" + + "dCB0aGUgc3RhcnQgb2YgQ29tcHV0YXRpb24gUGhhc2UuCjs7OyBOb3RlIHRoYXQgUkFXIHByaW1pdGl2ZXMgc3VjaCBhcyBbc2VuZF9yYXdfbWVzc2FnZV0gZG8gbm90" + + "IHVwZGF0ZSB0aGlzIGZpZWxkLgpbaW50LCBjZWxsXSBnZXRfYmFsYW5jZSgpIGFzbSAiQkFMQU5DRSI7Cgo7OzsgUmV0dXJucyB0aGUgbG9naWNhbCB0aW1lIG9mIHRo" + + "ZSBjdXJyZW50IHRyYW5zYWN0aW9uLgppbnQgY3VyX2x0KCkgYXNtICJMVElNRSI7Cgo7OzsgUmV0dXJucyB0aGUgc3RhcnRpbmcgbG9naWNhbCB0aW1lIG9mIHRoZSBj" + + "dXJyZW50IGJsb2NrLgppbnQgYmxvY2tfbHQoKSBhc20gIkJMT0NLTFQiOwoKOzs7IENvbXB1dGVzIHRoZSByZXByZXNlbnRhdGlvbiBoYXNoIG9mIGEgYGNlbGxgIFtj" + + "XSBhbmQgcmV0dXJucyBpdCBhcyBhIDI1Ni1iaXQgdW5zaWduZWQgaW50ZWdlciBgeGAuCjs7OyBVc2VmdWwgZm9yIHNpZ25pbmcgYW5kIGNoZWNraW5nIHNpZ25hdHVy" + + "ZXMgb2YgYXJiaXRyYXJ5IGVudGl0aWVzIHJlcHJlc2VudGVkIGJ5IGEgdHJlZSBvZiBjZWxscy4KaW50IGNlbGxfaGFzaChjZWxsIGMpIGFzbSAiSEFTSENVIjsKCjs7" + + "OyBDb21wdXRlcyB0aGUgaGFzaCBvZiBhIGBzbGljZSBzYCBhbmQgcmV0dXJucyBpdCBhcyBhIDI1Ni1iaXQgdW5zaWduZWQgaW50ZWdlciBgeGAuCjs7OyBUaGUgcmVz" + + "dWx0IGlzIHRoZSBzYW1lIGFzIGlmIGFuIG9yZGluYXJ5IGNlbGwgY29udGFpbmluZyBvbmx5IGRhdGEgYW5kIHJlZmVyZW5jZXMgZnJvbSBgc2AgaGFkIGJlZW4gY3Jl" + + "YXRlZAo7OzsgYW5kIGl0cyBoYXNoIGNvbXB1dGVkIGJ5IFtjZWxsX2hhc2hdLgppbnQgc2xpY2VfaGFzaChzbGljZSBzKSBhc20gIkhBU0hTVSI7Cgo7OzsgQ29tcHV0" + + "ZXMgc2hhMjU2IG9mIHRoZSBkYXRhIGJpdHMgb2YgYHNsaWNlYCBbc10uIElmIHRoZSBiaXQgbGVuZ3RoIG9mIGBzYCBpcyBub3QgZGl2aXNpYmxlIGJ5IGVpZ2h0LAo7" + + "OzsgdGhyb3dzIGEgY2VsbCB1bmRlcmZsb3cgZXhjZXB0aW9uLiBUaGUgaGFzaCB2YWx1ZSBpcyByZXR1cm5lZCBhcyBhIDI1Ni1iaXQgdW5zaWduZWQgaW50ZWdlciBg" + + "eGAuCmludCBzdHJpbmdfaGFzaChzbGljZSBzKSBhc20gIlNIQTI1NlUiOwoKey0KICAjIFNpZ25hdHVyZSBjaGVja3MKLX0KCjs7OyBDaGVja3MgdGhlIEVkMjU1MTkt" + + "YHNpZ25hdHVyZWAgb2YgYSBgaGFzaGAgKGEgMjU2LWJpdCB1bnNpZ25lZCBpbnRlZ2VyLCB1c3VhbGx5IGNvbXB1dGVkIGFzIHRoZSBoYXNoIG9mIHNvbWUgZGF0YSkK" + + "Ozs7IHVzaW5nIFtwdWJsaWNfa2V5XSAoYWxzbyByZXByZXNlbnRlZCBieSBhIDI1Ni1iaXQgdW5zaWduZWQgaW50ZWdlcikuCjs7OyBUaGUgc2lnbmF0dXJlIG11c3Qg" + + "Y29udGFpbiBhdCBsZWFzdCA1MTIgZGF0YSBiaXRzOyBvbmx5IHRoZSBmaXJzdCA1MTIgYml0cyBhcmUgdXNlZC4KOzs7IFRoZSByZXN1bHQgaXMgYOKIkjFgIGlmIHRo" + + "ZSBzaWduYXR1cmUgaXMgdmFsaWQsIGAwYCBvdGhlcndpc2UuCjs7OyBOb3RlIHRoYXQgYENIS1NJR05VYCBjcmVhdGVzIGEgMjU2LWJpdCBzbGljZSB3aXRoIHRoZSBo" + + "YXNoIGFuZCBjYWxscyBgQ0hLU0lHTlNgLgo7OzsgVGhhdCBpcywgaWYgW2hhc2hdIGlzIGNvbXB1dGVkIGFzIHRoZSBoYXNoIG9mIHNvbWUgZGF0YSwgdGhlc2UgZGF0" + + "YSBhcmUgaGFzaGVkIHR3aWNlLAo7OzsgdGhlIHNlY29uZCBoYXNoaW5nIG9jY3VycmluZyBpbnNpZGUgYENIS1NJR05TYC4KaW50IGNoZWNrX3NpZ25hdHVyZShpbnQg" + + "aGFzaCwgc2xpY2Ugc2lnbmF0dXJlLCBpbnQgcHVibGljX2tleSkgYXNtICJDSEtTSUdOVSI7Cgo7OzsgQ2hlY2tzIHdoZXRoZXIgW3NpZ25hdHVyZV0gaXMgYSB2YWxp" + + "ZCBFZDI1NTE5LXNpZ25hdHVyZSBvZiB0aGUgZGF0YSBwb3J0aW9uIG9mIGBzbGljZSBkYXRhYCB1c2luZyBgcHVibGljX2tleWAsCjs7OyBzaW1pbGFybHkgdG8gW2No" + + "ZWNrX3NpZ25hdHVyZV0uCjs7OyBJZiB0aGUgYml0IGxlbmd0aCBvZiBbZGF0YV0gaXMgbm90IGRpdmlzaWJsZSBieSBlaWdodCwgdGhyb3dzIGEgY2VsbCB1bmRlcmZs" + + "b3cgZXhjZXB0aW9uLgo7OzsgVGhlIHZlcmlmaWNhdGlvbiBvZiBFZDI1NTE5IHNpZ25hdHVyZXMgaXMgdGhlIHN0YW5kYXJkIG9uZSwKOzs7IHdpdGggc2hhMjU2IHVz" + + "ZWQgdG8gcmVkdWNlIFtkYXRhXSB0byB0aGUgMjU2LWJpdCBudW1iZXIgdGhhdCBpcyBhY3R1YWxseSBzaWduZWQuCmludCBjaGVja19kYXRhX3NpZ25hdHVyZShzbGlj" + + "ZSBkYXRhLCBzbGljZSBzaWduYXR1cmUsIGludCBwdWJsaWNfa2V5KSBhc20gIkNIS1NJR05TIjsKCnstLS0KICAjIENvbXB1dGF0aW9uIG9mIGJvYyBzaXplCiAgVGhl" + + "IHByaW1pdGl2ZXMgYmVsb3cgbWF5IGJlIHVzZWZ1bCBmb3IgY29tcHV0aW5nIHN0b3JhZ2UgZmVlcyBvZiB1c2VyLXByb3ZpZGVkIGRhdGEuCi19Cgo7OzsgUmV0dXJu" + + "cyBgKHgsIHksIHosIC0xKWAgb3IgYChudWxsLCBudWxsLCBudWxsLCAwKWAuCjs7OyBSZWN1cnNpdmVseSBjb21wdXRlcyB0aGUgY291bnQgb2YgZGlzdGluY3QgY2Vs" + + "bHMgYHhgLCBkYXRhIGJpdHMgYHlgLCBhbmQgY2VsbCByZWZlcmVuY2VzIGB6YAo7OzsgaW4gdGhlIERBRyByb290ZWQgYXQgYGNlbGxgIFtjXSwgZWZmZWN0aXZlbHkg" + + "cmV0dXJuaW5nIHRoZSB0b3RhbCBzdG9yYWdlIHVzZWQgYnkgdGhpcyBEQUcgdGFraW5nIGludG8gYWNjb3VudAo7OzsgdGhlIGlkZW50aWZpY2F0aW9uIG9mIGVxdWFs" + + "IGNlbGxzLgo7OzsgVGhlIHZhbHVlcyBvZiBgeGAsIGB5YCwgYW5kIGB6YCBhcmUgY29tcHV0ZWQgYnkgYSBkZXB0aC1maXJzdCB0cmF2ZXJzYWwgb2YgdGhpcyBEQUcs" + + "Cjs7OyB3aXRoIGEgaGFzaCB0YWJsZSBvZiB2aXNpdGVkIGNlbGwgaGFzaGVzIHVzZWQgdG8gcHJldmVudCB2aXNpdHMgb2YgYWxyZWFkeS12aXNpdGVkIGNlbGxzLgo7" + + "OzsgVGhlIHRvdGFsIGNvdW50IG9mIHZpc2l0ZWQgY2VsbHMgYHhgIGNhbm5vdCBleGNlZWQgbm9uLW5lZ2F0aXZlIFttYXhfY2VsbHNdOwo7Ozsgb3RoZXJ3aXNlIHRo" + + "ZSBjb21wdXRhdGlvbiBpcyBhYm9ydGVkIGJlZm9yZSB2aXNpdGluZyB0aGUgYChtYXhfY2VsbHMgKyAxKWAtc3QgY2VsbCBhbmQKOzs7IGEgemVybyBmbGFnIGlzIHJl" + + "dHVybmVkIHRvIGluZGljYXRlIGZhaWx1cmUuIElmIFtjXSBpcyBgbnVsbGAsIHJldHVybnMgYHggPSB5ID0geiA9IDBgLgooaW50LCBpbnQsIGludCkgY29tcHV0ZV9k" + + "YXRhX3NpemUoY2VsbCBjLCBpbnQgbWF4X2NlbGxzKSBpbXB1cmUgYXNtICJDREFUQVNJWkUiOwoKOzs7IFNpbWlsYXIgdG8gW2NvbXB1dGVfZGF0YV9zaXplP10sIGJ1" + + "dCBhY2NlcHRpbmcgYSBgc2xpY2VgIFtzXSBpbnN0ZWFkIG9mIGEgYGNlbGxgLgo7OzsgVGhlIHJldHVybmVkIHZhbHVlIG9mIGB4YCBkb2VzIG5vdCB0YWtlIGludG8g" + + "YWNjb3VudCB0aGUgY2VsbCB0aGF0IGNvbnRhaW5zIHRoZSBgc2xpY2VgIFtzXSBpdHNlbGY7Cjs7OyBob3dldmVyLCB0aGUgZGF0YSBiaXRzIGFuZCB0aGUgY2VsbCBy" + + "ZWZlcmVuY2VzIG9mIFtzXSBhcmUgYWNjb3VudGVkIGZvciBpbiBgeWAgYW5kIGB6YC4KKGludCwgaW50LCBpbnQpIHNsaWNlX2NvbXB1dGVfZGF0YV9zaXplKHNsaWNl" + + "IHMsIGludCBtYXhfY2VsbHMpIGltcHVyZSBhc20gIlNEQVRBU0laRSI7Cgo7OzsgQSBub24tcXVpZXQgdmVyc2lvbiBvZiBbY29tcHV0ZV9kYXRhX3NpemU/XSB0aGF0" + + "IHRocm93cyBhIGNlbGwgb3ZlcmZsb3cgZXhjZXB0aW9uIChgOGApIG9uIGZhaWx1cmUuCihpbnQsIGludCwgaW50LCBpbnQpIGNvbXB1dGVfZGF0YV9zaXplPyhjZWxs" + + "IGMsIGludCBtYXhfY2VsbHMpIGFzbSAiQ0RBVEFTSVpFUSBOVUxMU1dBUElGTk9UMiBOVUxMU1dBUElGTk9UIjsKCjs7OyBBIG5vbi1xdWlldCB2ZXJzaW9uIG9mIFtz" + + "bGljZV9jb21wdXRlX2RhdGFfc2l6ZT9dIHRoYXQgdGhyb3dzIGEgY2VsbCBvdmVyZmxvdyBleGNlcHRpb24gKDgpIG9uIGZhaWx1cmUuCihpbnQsIGludCwgaW50LCBp" + + "bnQpIHNsaWNlX2NvbXB1dGVfZGF0YV9zaXplPyhjZWxsIGMsIGludCBtYXhfY2VsbHMpIGFzbSAiU0RBVEFTSVpFUSBOVUxMU1dBUElGTk9UMiBOVUxMU1dBUElGTk9U" + + "IjsKCjs7OyBUaHJvd3MgYW4gZXhjZXB0aW9uIHdpdGggZXhpdF9jb2RlIGV4Y25vIGlmIGNvbmQgaXMgbm90IDAgKGNvbW1lbnRlZCBzaW5jZSBpbXBsZW1lbnRlZCBp" + + "biBjb21waWxhdG9yKQo7OyAoKSB0aHJvd19pZihpbnQgZXhjbm8sIGludCBjb25kKSBpbXB1cmUgYXNtICJUSFJPV0FSR0lGIjsKCnstLQogICMgRGVidWcgcHJpbWl0" + + "aXZlcwogIE9ubHkgd29ya3MgZm9yIGxvY2FsIFRWTSBleGVjdXRpb24gd2l0aCBkZWJ1ZyBsZXZlbCB2ZXJib3NpdHkKLX0KOzs7IER1bXBzIHRoZSBzdGFjayAoYXQg" + + "bW9zdCB0aGUgdG9wIDI1NSB2YWx1ZXMpIGFuZCBzaG93cyB0aGUgdG90YWwgc3RhY2sgZGVwdGguCigpIGR1bXBfc3RhY2soKSBpbXB1cmUgYXNtICJEVU1QU1RLIjsK" + + "CnstCiAgIyBQZXJzaXN0ZW50IHN0b3JhZ2Ugc2F2ZSBhbmQgbG9hZAotfQoKOzs7IFJldHVybnMgdGhlIHBlcnNpc3RlbnQgY29udHJhY3Qgc3RvcmFnZSBjZWxsLiBJ" + + "dCBjYW4gYmUgcGFyc2VkIG9yIG1vZGlmaWVkIHdpdGggc2xpY2UgYW5kIGJ1aWxkZXIgcHJpbWl0aXZlcyBsYXRlci4KY2VsbCBnZXRfZGF0YSgpIGFzbSAiYzQgUFVT" + + "SCI7Cgo7OzsgU2V0cyBgY2VsbGAgW2NdIGFzIHBlcnNpc3RlbnQgY29udHJhY3QgZGF0YS4gWW91IGNhbiB1cGRhdGUgcGVyc2lzdGVudCBjb250cmFjdCBzdG9yYWdl" + + "IHdpdGggdGhpcyBwcmltaXRpdmUuCigpIHNldF9kYXRhKGNlbGwgYykgaW1wdXJlIGFzbSAiYzQgUE9QIjsKCnstCiAgIyBDb250aW51YXRpb24gcHJpbWl0aXZlcwot" + + "fQo7OzsgVXN1YWxseSBgYzNgIGhhcyBhIGNvbnRpbnVhdGlvbiBpbml0aWFsaXplZCBieSB0aGUgd2hvbGUgY29kZSBvZiB0aGUgY29udHJhY3QuIEl0IGlzIHVzZWQg" + + "Zm9yIGZ1bmN0aW9uIGNhbGxzLgo7OzsgVGhlIHByaW1pdGl2ZSByZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIGBjM2AuCmNvbnQgZ2V0X2MzKCkgaW1wdXJlIGFz" + + "bSAiYzMgUFVTSCI7Cgo7OzsgVXBkYXRlcyB0aGUgY3VycmVudCB2YWx1ZSBvZiBgYzNgLiBVc3VhbGx5LCBpdCBpcyB1c2VkIGZvciB1cGRhdGluZyBzbWFydCBjb250" + + "cmFjdCBjb2RlIGluIHJ1bi10aW1lLgo7OzsgTm90ZSB0aGF0IGFmdGVyIGV4ZWN1dGlvbiBvZiB0aGlzIHByaW1pdGl2ZSB0aGUgY3VycmVudCBjb2RlCjs7OyAoYW5k" + + "IHRoZSBzdGFjayBvZiByZWN1cnNpdmUgZnVuY3Rpb24gY2FsbHMpIHdvbid0IGNoYW5nZSwKOzs7IGJ1dCBhbnkgb3RoZXIgZnVuY3Rpb24gY2FsbCB3aWxsIHVzZSBh" + + "IGZ1bmN0aW9uIGZyb20gdGhlIG5ldyBjb2RlLgooKSBzZXRfYzMoY29udCBjKSBpbXB1cmUgYXNtICJjMyBQT1AiOwoKOzs7IFRyYW5zZm9ybXMgYSBgc2xpY2VgIFtz" + + "XSBpbnRvIGEgc2ltcGxlIG9yZGluYXJ5IGNvbnRpbnVhdGlvbiBgY2AsIHdpdGggYGMuY29kZSA9IHNgIGFuZCBhbiBlbXB0eSBzdGFjayBhbmQgc2F2ZWxpc3QuCmNv" + + "bnQgYmxlc3Moc2xpY2UgcykgaW1wdXJlIGFzbSAiQkxFU1MiOwoKey0tLQogICMgR2FzIHJlbGF0ZWQgcHJpbWl0aXZlcwotfQoKOzs7IFNldHMgY3VycmVudCBnYXMg" + + "bGltaXQgYGdsYCB0byBpdHMgbWF4aW1hbCBhbGxvd2VkIHZhbHVlIGBnbWAsIGFuZCByZXNldHMgdGhlIGdhcyBjcmVkaXQgYGdjYCB0byB6ZXJvLAo7OzsgZGVjcmVh" + + "c2luZyB0aGUgdmFsdWUgb2YgYGdyYCBieSBgZ2NgIGluIHRoZSBwcm9jZXNzLgo7OzsgSW4gb3RoZXIgd29yZHMsIHRoZSBjdXJyZW50IHNtYXJ0IGNvbnRyYWN0IGFn" + + "cmVlcyB0byBidXkgc29tZSBnYXMgdG8gZmluaXNoIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLgo7OzsgVGhpcyBhY3Rpb24gaXMgcmVxdWlyZWQgdG8gcHJvY2VzcyBl" + + "eHRlcm5hbCBtZXNzYWdlcywgd2hpY2ggYnJpbmcgbm8gdmFsdWUgKGhlbmNlIG5vIGdhcykgd2l0aCB0aGVtc2VsdmVzLgo7OzsKOzs7IEZvciBtb3JlIGRldGFpbHMg" + + "Y2hlY2sgW2FjY2VwdF9tZXNzYWdlIGVmZmVjdHNdKGh0dHBzOi8vdG9uLm9yZy9kb2NzLyMvc21hcnQtY29udHJhY3RzL2FjY2VwdCkuCigpIGFjY2VwdF9tZXNzYWdl" + + "KCkgaW1wdXJlIGFzbSAiQUNDRVBUIjsKCjs7OyBTZXRzIGN1cnJlbnQgZ2FzIGxpbWl0IGBnbGAgdG8gdGhlIG1pbmltdW0gb2YgbGltaXQgYW5kIGBnbWAsIGFuZCBy" + + "ZXNldHMgdGhlIGdhcyBjcmVkaXQgYGdjYCB0byB6ZXJvLgo7OzsgSWYgdGhlIGdhcyBjb25zdW1lZCBzbyBmYXIgKGluY2x1ZGluZyB0aGUgcHJlc2VudCBpbnN0cnVj" + + "dGlvbikgZXhjZWVkcyB0aGUgcmVzdWx0aW5nIHZhbHVlIG9mIGBnbGAsCjs7OyBhbiAodW5oYW5kbGVkKSBvdXQgb2YgZ2FzIGV4Y2VwdGlvbiBpcyB0aHJvd24gYmVm" + + "b3JlIHNldHRpbmcgbmV3IGdhcyBsaW1pdHMuCjs7OyBOb3RpY2UgdGhhdCBbc2V0X2dhc19saW1pdF0gd2l0aCBhbiBhcmd1bWVudCBgbGltaXQg4omlIDJeNjMg4oiS" + + "IDFgIGlzIGVxdWl2YWxlbnQgdG8gW2FjY2VwdF9tZXNzYWdlXS4KKCkgc2V0X2dhc19saW1pdChpbnQgbGltaXQpIGltcHVyZSBhc20gIlNFVEdBU0xJTUlUIjsKCjs7" + + "OyBDb21taXRzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHJlZ2lzdGVycyBgYzRgICjigJxwZXJzaXN0ZW50IGRhdGHigJ0pIGFuZCBgYzVgICjigJxhY3Rpb25z4oCdKQo7" + + "Ozsgc28gdGhhdCB0aGUgY3VycmVudCBleGVjdXRpb24gaXMgY29uc2lkZXJlZCDigJxzdWNjZXNzZnVs4oCdIHdpdGggdGhlIHNhdmVkIHZhbHVlcyBldmVuIGlmIGFu" + + "IGV4Y2VwdGlvbgo7OzsgaW4gQ29tcHV0YXRpb24gUGhhc2UgaXMgdGhyb3duIGxhdGVyLgooKSBjb21taXQoKSBpbXB1cmUgYXNtICJDT01NSVQiOwoKOzs7IE5vdCBp" + + "bXBsZW1lbnRlZAo7OzsgQ29tcHV0ZXMgdGhlIGFtb3VudCBvZiBnYXMgdGhhdCBjYW4gYmUgYm91Z2h0IGZvciBgYW1vdW50YCBuYW5vVE9OcywKOzs7IGFuZCBzZXRz" + + "IGBnbGAgYWNjb3JkaW5nbHkgaW4gdGhlIHNhbWUgd2F5IGFzIFtzZXRfZ2FzX2xpbWl0XS4KOzsoKSBidXlfZ2FzKGludCBhbW91bnQpIGltcHVyZSBhc20gIkJVWUdB" + + "UyI7Cgo7OzsgQ29tcHV0ZXMgdGhlIG1pbmltdW0gb2YgdHdvIGludGVnZXJzIFt4XSBhbmQgW3ldLgppbnQgbWluKGludCB4LCBpbnQgeSkgYXNtICJNSU4iOwoKOzs7" + + "IENvbXB1dGVzIHRoZSBtYXhpbXVtIG9mIHR3byBpbnRlZ2VycyBbeF0gYW5kIFt5XS4KaW50IG1heChpbnQgeCwgaW50IHkpIGFzbSAiTUFYIjsKCjs7OyBTb3J0cyB0" + + "d28gaW50ZWdlcnMuCihpbnQsIGludCkgbWlubWF4KGludCB4LCBpbnQgeSkgYXNtICJNSU5NQVgiOwoKOzs7IENvbXB1dGVzIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBh" + + "biBpbnRlZ2VyIFt4XS4KaW50IGFicyhpbnQgeCkgYXNtICJBQlMiOwoKey0KICAjIFNsaWNlIHByaW1pdGl2ZXMKCiAgSXQgaXMgc2FpZCB0aGF0IGEgcHJpbWl0aXZl" + + "IF9sb2Fkc18gc29tZSBkYXRhLAogIGlmIGl0IHJldHVybnMgdGhlIGRhdGEgYW5kIHRoZSByZW1haW5kZXIgb2YgdGhlIHNsaWNlCiAgKHNvIGl0IGNhbiBhbHNvIGJl" + + "IHVzZWQgYXMgW21vZGlmeWluZyBtZXRob2RdKGh0dHBzOi8vdG9uLm9yZy9kb2NzLyMvZnVuYy9zdGF0ZW1lbnRzP2lkPW1vZGlmeWluZy1tZXRob2RzKSkuCgogIEl0" + + "IGlzIHNhaWQgdGhhdCBhIHByaW1pdGl2ZSBfcHJlbG9hZHNfIHNvbWUgZGF0YSwgaWYgaXQgcmV0dXJucyBvbmx5IHRoZSBkYXRhCiAgKGl0IGNhbiBiZSB1c2VkIGFz" + + "IFtub24tbW9kaWZ5aW5nIG1ldGhvZF0oaHR0cHM6Ly90b24ub3JnL2RvY3MvIy9mdW5jL3N0YXRlbWVudHM/aWQ9bm9uLW1vZGlmeWluZy1tZXRob2RzKSkuCgogIFVu" + + "bGVzcyBvdGhlcndpc2Ugc3RhdGVkLCBsb2FkaW5nIGFuZCBwcmVsb2FkaW5nIHByaW1pdGl2ZXMgcmVhZCB0aGUgZGF0YSBmcm9tIGEgcHJlZml4IG9mIHRoZSBzbGlj" + + "ZS4KLX0KCgo7OzsgQ29udmVydHMgYSBgY2VsbGAgW2NdIGludG8gYSBgc2xpY2VgLiBOb3RpY2UgdGhhdCBbY10gbXVzdCBiZSBlaXRoZXIgYW4gb3JkaW5hcnkgY2Vs" + + "bCwKOzs7IG9yIGFuIGV4b3RpYyBjZWxsIChzZWUgW1RWTS5wZGZdKGh0dHBzOi8vdG9uLWJsb2NrY2hhaW4uZ2l0aHViLmlvL2RvY3MvdHZtLnBkZiksIDMuMS4yKQo7" + + "Ozsgd2hpY2ggaXMgYXV0b21hdGljYWxseSBsb2FkZWQgdG8geWllbGQgYW4gb3JkaW5hcnkgY2VsbCBgYydgLCBjb252ZXJ0ZWQgaW50byBhIGBzbGljZWAgYWZ0ZXJ3" + + "YXJkcy4Kc2xpY2UgYmVnaW5fcGFyc2UoY2VsbCBjKSBhc20gIkNUT1MiOwoKOzs7IENoZWNrcyBpZiBbc10gaXMgZW1wdHkuIElmIG5vdCwgdGhyb3dzIGFuIGV4Y2Vw" + + "dGlvbi4KKCkgZW5kX3BhcnNlKHNsaWNlIHMpIGltcHVyZSBhc20gIkVORFMiOwoKOzs7IExvYWRzIHRoZSBmaXJzdCByZWZlcmVuY2UgZnJvbSB0aGUgc2xpY2UuCihz" + + "bGljZSwgY2VsbCkgbG9hZF9yZWYoc2xpY2UgcykgYXNtKC0+IDEgMCkgIkxEUkVGIjsKCjs7OyBQcmVsb2FkcyB0aGUgZmlyc3QgcmVmZXJlbmNlIGZyb20gdGhlIHNs" + + "aWNlLgpjZWxsIHByZWxvYWRfcmVmKHNsaWNlIHMpIGFzbSAiUExEUkVGIjsKCnstIEZ1bmN0aW9ucyBiZWxvdyBhcmUgY29tbWVudGVkIGJlY2F1c2UgYXJlIGltcGxl" + + "bWVudGVkIG9uIGNvbXBpbGF0b3IgbGV2ZWwgZm9yIG9wdGltaXNhdGlvbiAtfQoKOzs7IExvYWRzIGEgc2lnbmVkIFtsZW5dLWJpdCBpbnRlZ2VyIGZyb20gYSBzbGlj" + + "ZSBbc10uCjs7IChzbGljZSwgaW50KSB+bG9hZF9pbnQoc2xpY2UgcywgaW50IGxlbikgYXNtKHMgbGVuIC0+IDEgMCkgIkxESVgiOwoKOzs7IExvYWRzIGFuIHVuc2ln" + + "bmVkIFtsZW5dLWJpdCBpbnRlZ2VyIGZyb20gYSBzbGljZSBbc10uCjs7IChzbGljZSwgaW50KSB+bG9hZF91aW50KHNsaWNlIHMsIGludCBsZW4pIGFzbSggLT4gMSAw" + + "KSAiTERVWCI7Cgo7OzsgUHJlbG9hZHMgYSBzaWduZWQgW2xlbl0tYml0IGludGVnZXIgZnJvbSBhIHNsaWNlIFtzXS4KOzsgaW50IHByZWxvYWRfaW50KHNsaWNlIHMs" + + "IGludCBsZW4pIGFzbSAiUExESVgiOwoKOzs7IFByZWxvYWRzIGFuIHVuc2lnbmVkIFtsZW5dLWJpdCBpbnRlZ2VyIGZyb20gYSBzbGljZSBbc10uCjs7IGludCBwcmVs" + + "b2FkX3VpbnQoc2xpY2UgcywgaW50IGxlbikgYXNtICJQTERVWCI7Cgo7OzsgTG9hZHMgdGhlIGZpcnN0IGAwIOKJpCBsZW4g4omkIDEwMjNgIGJpdHMgZnJvbSBzbGlj" + + "ZSBbc10gaW50byBhIHNlcGFyYXRlIGBzbGljZSBzJydgLgo7OyAoc2xpY2UsIHNsaWNlKSBsb2FkX2JpdHMoc2xpY2UgcywgaW50IGxlbikgYXNtKHMgbGVuIC0+IDEg" + + "MCkgIkxEU0xJQ0VYIjsKCjs7OyBQcmVsb2FkcyB0aGUgZmlyc3QgYDAg4omkIGxlbiDiiaQgMTAyM2AgYml0cyBmcm9tIHNsaWNlIFtzXSBpbnRvIGEgc2VwYXJhdGUg" + + "YHNsaWNlIHMnJ2AuCjs7IHNsaWNlIHByZWxvYWRfYml0cyhzbGljZSBzLCBpbnQgbGVuKSBhc20gIlBMRFNMSUNFWCI7Cgo7OzsgTG9hZHMgc2VyaWFsaXplZCBhbW91" + + "bnQgb2YgVG9uQ29pbnMgKGFueSB1bnNpZ25lZCBpbnRlZ2VyIHVwIHRvIGAyXjEyMCAtIDFgKS4KKHNsaWNlLCBpbnQpIGxvYWRfZ3JhbXMoc2xpY2UgcykgYXNtKC0+" + + "IDEgMCkgIkxER1JBTVMiOwooc2xpY2UsIGludCkgbG9hZF9jb2lucyhzbGljZSBzKSBhc20oLT4gMSAwKSAiTERWQVJVSU5UMTYiOwoKKHNsaWNlLCBpbnQpIGxvYWRf" + + "dmFyaW50MTYoc2xpY2UgcykgYXNtKC0+IDEgMCkgIkxEVkFSSU5UMTYiOwooc2xpY2UsIGludCkgbG9hZF92YXJpbnQzMihzbGljZSBzKSBhc20oLT4gMSAwKSAiTERW" + + "QVJJTlQzMiI7CihzbGljZSwgaW50KSBsb2FkX3ZhcnVpbnQxNihzbGljZSBzKSBhc20oLT4gMSAwKSAiTERWQVJVSU5UMTYiOwooc2xpY2UsIGludCkgbG9hZF92YXJ1" + + "aW50MzIoc2xpY2UgcykgYXNtKC0+IDEgMCkgIkxEVkFSVUlOVDMyIjsKCjs7OyBSZXR1cm5zIGFsbCBidXQgdGhlIGZpcnN0IGAwIOKJpCBsZW4g4omkIDEwMjNgIGJp" + + "dHMgb2YgYHNsaWNlYCBbc10uCnNsaWNlIHNraXBfYml0cyhzbGljZSBzLCBpbnQgbGVuKSBhc20gIlNEU0tJUEZJUlNUIjsKKHNsaWNlLCAoKSkgfnNraXBfYml0cyhz" + + "bGljZSBzLCBpbnQgbGVuKSBhc20gIlNEU0tJUEZJUlNUIjsKCjs7OyBSZXR1cm5zIHRoZSBmaXJzdCBgMCDiiaQgbGVuIOKJpCAxMDIzYCBiaXRzIG9mIGBzbGljZWAg" + + "W3NdLgpzbGljZSBmaXJzdF9iaXRzKHNsaWNlIHMsIGludCBsZW4pIGFzbSAiU0RDVVRGSVJTVCI7Cgo7OzsgUmV0dXJucyBhbGwgYnV0IHRoZSBsYXN0IGAwIOKJpCBs" + + "ZW4g4omkIDEwMjNgIGJpdHMgb2YgYHNsaWNlYCBbc10uCnNsaWNlIHNraXBfbGFzdF9iaXRzKHNsaWNlIHMsIGludCBsZW4pIGFzbSAiU0RTS0lQTEFTVCI7CihzbGlj" + + "ZSwgKCkpIH5za2lwX2xhc3RfYml0cyhzbGljZSBzLCBpbnQgbGVuKSBhc20gIlNEU0tJUExBU1QiOwoKOzs7IFJldHVybnMgdGhlIGxhc3QgYDAg4omkIGxlbiDiiaQg" + + "MTAyM2AgYml0cyBvZiBgc2xpY2VgIFtzXS4Kc2xpY2Ugc2xpY2VfbGFzdChzbGljZSBzLCBpbnQgbGVuKSBhc20gIlNEQ1VUTEFTVCI7Cgo7OzsgTG9hZHMgYSBkaWN0" + + "aW9uYXJ5IGBEYCAoSGFzaE1hcEUpIGZyb20gYHNsaWNlYCBbc10uCjs7OyAocmV0dXJucyBgbnVsbGAgaWYgYG5vdGhpbmdgIGNvbnN0cnVjdG9yIGlzIHVzZWQpLgoo" + + "c2xpY2UsIGNlbGwpIGxvYWRfZGljdChzbGljZSBzKSBhc20oLT4gMSAwKSAiTERESUNUIjsKCjs7OyBQcmVsb2FkcyBhIGRpY3Rpb25hcnkgYERgIGZyb20gYHNsaWNl" + + "YCBbc10uCmNlbGwgcHJlbG9hZF9kaWN0KHNsaWNlIHMpIGFzbSAiUExERElDVCI7Cgo7OzsgTG9hZHMgYSBkaWN0aW9uYXJ5IGFzIFtsb2FkX2RpY3RdLCBidXQgcmV0" + + "dXJucyBvbmx5IHRoZSByZW1haW5kZXIgb2YgdGhlIHNsaWNlLgpzbGljZSBza2lwX2RpY3Qoc2xpY2UgcykgYXNtICJTS0lQRElDVCI7CihzbGljZSwgKCkpIH5za2lw" + + "X2RpY3Qoc2xpY2UgcykgYXNtICJTS0lQRElDVCI7Cgo7OzsgTG9hZHMgKE1heWJlIF5DZWxsKSBmcm9tIGBzbGljZWAgW3NdLgo7OzsgSW4gb3RoZXIgd29yZHMgbG9h" + + "ZHMgMSBiaXQgYW5kIGlmIGl0IGlzIHRydWUKOzs7IGxvYWRzIGZpcnN0IHJlZiBhbmQgcmV0dXJuIGl0IHdpdGggc2xpY2UgcmVtYWluZGVyCjs7OyBvdGhlcndpc2Ug" + + "cmV0dXJucyBgbnVsbGAgYW5kIHNsaWNlIHJlbWFpbmRlcgooc2xpY2UsIGNlbGwpIGxvYWRfbWF5YmVfcmVmKHNsaWNlIHMpIGFzbSgtPiAxIDApICJMRE9QVFJFRiI7" + + "Cgo7OzsgUHJlbG9hZHMgKE1heWJlIF5DZWxsKSBmcm9tIGBzbGljZWAgW3NdLgpjZWxsIHByZWxvYWRfbWF5YmVfcmVmKHNsaWNlIHMpIGFzbSAiUExET1BUUkVGIjsK" + + "Cgo7OzsgUmV0dXJucyB0aGUgZGVwdGggb2YgYGNlbGxgIFtjXS4KOzs7IElmIFtjXSBoYXMgbm8gcmVmZXJlbmNlcywgdGhlbiByZXR1cm4gYDBgOwo7Ozsgb3RoZXJ3" + + "aXNlIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyBvbmUgcGx1cyB0aGUgbWF4aW11bSBvZiBkZXB0aHMgb2YgY2VsbHMgcmVmZXJyZWQgdG8gZnJvbSBbY10uCjs7OyBJZiBb" + + "Y10gaXMgYSBgbnVsbGAgaW5zdGVhZCBvZiBhIGNlbGwsIHJldHVybnMgemVyby4KaW50IGNlbGxfZGVwdGgoY2VsbCBjKSBhc20gIkNERVBUSCI7CgoKey0KICAjIFNs" + + "aWNlIHNpemUgcHJpbWl0aXZlcwotfQoKOzs7IFJldHVybnMgdGhlIG51bWJlciBvZiByZWZlcmVuY2VzIGluIGBzbGljZWAgW3NdLgppbnQgc2xpY2VfcmVmcyhzbGlj" + + "ZSBzKSBhc20gIlNSRUZTIjsKCjs7OyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGF0YSBiaXRzIGluIGBzbGljZWAgW3NdLgppbnQgc2xpY2VfYml0cyhzbGljZSBzKSBh" + + "c20gIlNCSVRTIjsKCjs7OyBSZXR1cm5zIGJvdGggdGhlIG51bWJlciBvZiBkYXRhIGJpdHMgYW5kIHRoZSBudW1iZXIgb2YgcmVmZXJlbmNlcyBpbiBgc2xpY2VgIFtz" + + "XS4KKGludCwgaW50KSBzbGljZV9iaXRzX3JlZnMoc2xpY2UgcykgYXNtICJTQklUUkVGUyI7Cgo7OzsgQ2hlY2tzIHdoZXRoZXIgYSBgc2xpY2VgIFtzXSBpcyBlbXB0" + + "eSAoaS5lLiwgY29udGFpbnMgbm8gYml0cyBvZiBkYXRhIGFuZCBubyBjZWxsIHJlZmVyZW5jZXMpLgppbnQgc2xpY2VfZW1wdHk/KHNsaWNlIHMpIGFzbSAiU0VNUFRZ" + + "IjsKCjs7OyBDaGVja3Mgd2hldGhlciBgc2xpY2VgIFtzXSBoYXMgbm8gYml0cyBvZiBkYXRhLgppbnQgc2xpY2VfZGF0YV9lbXB0eT8oc2xpY2UgcykgYXNtICJTREVN" + + "UFRZIjsKCjs7OyBDaGVja3Mgd2hldGhlciBgc2xpY2VgIFtzXSBoYXMgbm8gcmVmZXJlbmNlcy4KaW50IHNsaWNlX3JlZnNfZW1wdHk/KHNsaWNlIHMpIGFzbSAiU1JF" + + "TVBUWSI7Cgo7OzsgUmV0dXJucyB0aGUgZGVwdGggb2YgYHNsaWNlYCBbc10uCjs7OyBJZiBbc10gaGFzIG5vIHJlZmVyZW5jZXMsIHRoZW4gcmV0dXJucyBgMGA7Cjs7" + + "OyBvdGhlcndpc2UgdGhlIHJldHVybmVkIHZhbHVlIGlzIG9uZSBwbHVzIHRoZSBtYXhpbXVtIG9mIGRlcHRocyBvZiBjZWxscyByZWZlcnJlZCB0byBmcm9tIFtzXS4K" + + "aW50IHNsaWNlX2RlcHRoKHNsaWNlIHMpIGFzbSAiU0RFUFRIIjsKCnstCiAgIyBCdWlsZGVyIHNpemUgcHJpbWl0aXZlcwotfQoKOzs7IFJldHVybnMgdGhlIG51bWJl" + + "ciBvZiBjZWxsIHJlZmVyZW5jZXMgYWxyZWFkeSBzdG9yZWQgaW4gYGJ1aWxkZXJgIFtiXQppbnQgYnVpbGRlcl9yZWZzKGJ1aWxkZXIgYikgYXNtICJCUkVGUyI7Cgo7" + + "OzsgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRhdGEgYml0cyBhbHJlYWR5IHN0b3JlZCBpbiBgYnVpbGRlcmAgW2JdLgppbnQgYnVpbGRlcl9iaXRzKGJ1aWxkZXIgYikg" + + "YXNtICJCQklUUyI7Cgo7OzsgUmV0dXJucyB0aGUgZGVwdGggb2YgYGJ1aWxkZXJgIFtiXS4KOzs7IElmIG5vIGNlbGwgcmVmZXJlbmNlcyBhcmUgc3RvcmVkIGluIFti" + + "XSwgdGhlbiByZXR1cm5zIDA7Cjs7OyBvdGhlcndpc2UgdGhlIHJldHVybmVkIHZhbHVlIGlzIG9uZSBwbHVzIHRoZSBtYXhpbXVtIG9mIGRlcHRocyBvZiBjZWxscyBy" + + "ZWZlcnJlZCB0byBmcm9tIFtiXS4KaW50IGJ1aWxkZXJfZGVwdGgoYnVpbGRlciBiKSBhc20gIkJERVBUSCI7Cgp7LQogICMgQnVpbGRlciBwcmltaXRpdmVzCiAgSXQg" + + "aXMgc2FpZCB0aGF0IGEgcHJpbWl0aXZlIF9zdG9yZXNfIGEgdmFsdWUgYHhgIGludG8gYSBidWlsZGVyIGBiYAogIGlmIGl0IHJldHVybnMgYSBtb2RpZmllZCB2ZXJz" + + "aW9uIG9mIHRoZSBidWlsZGVyIGBiJ2Agd2l0aCB0aGUgdmFsdWUgYHhgIHN0b3JlZCBhdCB0aGUgZW5kIG9mIGl0LgogIEl0IGNhbiBiZSB1c2VkIGFzIFtub24tbW9k" + + "aWZ5aW5nIG1ldGhvZF0oaHR0cHM6Ly90b24ub3JnL2RvY3MvIy9mdW5jL3N0YXRlbWVudHM/aWQ9bm9uLW1vZGlmeWluZy1tZXRob2RzKS4KCiAgQWxsIHRoZSBwcmlt" + + "aXRpdmVzIGJlbG93IGZpcnN0IGNoZWNrIHdoZXRoZXIgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGluIHRoZSBgYnVpbGRlcmAsCiAgYW5kIG9ubHkgdGhlbiBjaGVjayB0" + + "aGUgcmFuZ2Ugb2YgdGhlIHZhbHVlIGJlaW5nIHNlcmlhbGl6ZWQuCi19Cgo7OzsgQ3JlYXRlcyBhIG5ldyBlbXB0eSBgYnVpbGRlcmAuCmJ1aWxkZXIgYmVnaW5fY2Vs" + + "bCgpIGFzbSAiTkVXQyI7Cgo7OzsgQ29udmVydHMgYSBgYnVpbGRlcmAgaW50byBhbiBvcmRpbmFyeSBgY2VsbGAuCmNlbGwgZW5kX2NlbGwoYnVpbGRlciBiKSBhc20g" + + "IkVOREMiOwoKOzs7IFN0b3JlcyBhIHJlZmVyZW5jZSB0byBgY2VsbGAgW2NdIGludG8gYGJ1aWxkZXJgIFtiXS4KYnVpbGRlciBzdG9yZV9yZWYoYnVpbGRlciBiLCBj" + + "ZWxsIGMpIGFzbShjIGIpICJTVFJFRiI7Cgo7OzsgU3RvcmVzIGFuIHVuc2lnbmVkIFtsZW5dLWJpdCBpbnRlZ2VyIGB4YCBpbnRvIGBiYCBmb3IgYDAg4omkIGxlbiDi" + + "iaQgMjU2YC4KOzsgYnVpbGRlciBzdG9yZV91aW50KGJ1aWxkZXIgYiwgaW50IHgsIGludCBsZW4pIGFzbSh4IGIgbGVuKSAiU1RVWCI7Cgo7OzsgU3RvcmVzIGEgc2ln" + + "bmVkIFtsZW5dLWJpdCBpbnRlZ2VyIGB4YCBpbnRvIGBiYCBmb3JgIDAg4omkIGxlbiDiiaQgMjU3YC4KOzsgYnVpbGRlciBzdG9yZV9pbnQoYnVpbGRlciBiLCBpbnQg" + + "eCwgaW50IGxlbikgYXNtKHggYiBsZW4pICJTVElYIjsKCgo7OzsgU3RvcmVzIGBzbGljZWAgW3NdIGludG8gYGJ1aWxkZXJgIFtiXQpidWlsZGVyIHN0b3JlX3NsaWNl" + + "KGJ1aWxkZXIgYiwgc2xpY2UgcykgYXNtICJTVFNMSUNFUiI7Cgo7OzsgU3RvcmVzIChzZXJpYWxpemVzKSBhbiBpbnRlZ2VyIFt4XSBpbiB0aGUgcmFuZ2UgYDAuLjJe" + + "MTIwIOKIkiAxYCBpbnRvIGBidWlsZGVyYCBbYl0uCjs7OyBUaGUgc2VyaWFsaXphdGlvbiBvZiBbeF0gY29uc2lzdHMgb2YgYSA0LWJpdCB1bnNpZ25lZCBiaWctZW5k" + + "aWFuIGludGVnZXIgYGxgLAo7Ozsgd2hpY2ggaXMgdGhlIHNtYWxsZXN0IGludGVnZXIgYGwg4omlIDBgLCBzdWNoIHRoYXQgYHggPCAyXjhsYCwKOzs7IGZvbGxvd2Vk" + + "IGJ5IGFuIGA4bGAtYml0IHVuc2lnbmVkIGJpZy1lbmRpYW4gcmVwcmVzZW50YXRpb24gb2YgW3hdLgo7OzsgSWYgW3hdIGRvZXMgbm90IGJlbG9uZyB0byB0aGUgc3Vw" + + "cG9ydGVkIHJhbmdlLCBhIHJhbmdlIGNoZWNrIGV4Y2VwdGlvbiBpcyB0aHJvd24uCjs7Owo7OzsgU3RvcmUgYW1vdW50cyBvZiBUb25Db2lucyB0byB0aGUgYnVpbGRl" + + "ciBhcyBWYXJVSW50ZWdlciAxNgpidWlsZGVyIHN0b3JlX2dyYW1zKGJ1aWxkZXIgYiwgaW50IHgpIGFzbSAiU1RHUkFNUyI7CmJ1aWxkZXIgc3RvcmVfY29pbnMoYnVp" + + "bGRlciBiLCBpbnQgeCkgYXNtICJTVFZBUlVJTlQxNiI7CgpidWlsZGVyIHN0b3JlX3ZhcmludDE2KGJ1aWxkZXIgYiwgaW50IHgpIGFzbSAiU1RWQVJJTlQxNiI7CmJ1" + + "aWxkZXIgc3RvcmVfdmFyaW50MzIoYnVpbGRlciBiLCBpbnQgeCkgYXNtICJTVFZBUklOVDMyIjsKYnVpbGRlciBzdG9yZV92YXJ1aW50MTYoYnVpbGRlciBiLCBpbnQg" + + "eCkgYXNtICJTVFZBUlVJTlQxNiI7CmJ1aWxkZXIgc3RvcmVfdmFydWludDMyKGJ1aWxkZXIgYiwgaW50IHgpIGFzbSAiU1RWQVJVSU5UMzIiOwoKOzs7IFN0b3JlcyBk" + + "aWN0aW9uYXJ5IGBEYCByZXByZXNlbnRlZCBieSBgY2VsbGAgW2NdIG9yIGBudWxsYCBpbnRvIGBidWlsZGVyYCBbYl0uCjs7OyBJbiBvdGhlciB3b3Jkcywgc3RvcmVz" + + "IGEgYDFgLWJpdCBhbmQgYSByZWZlcmVuY2UgdG8gW2NdIGlmIFtjXSBpcyBub3QgYG51bGxgIGFuZCBgMGAtYml0IG90aGVyd2lzZS4KYnVpbGRlciBzdG9yZV9kaWN0" + + "KGJ1aWxkZXIgYiwgY2VsbCBjKSBhc20oYyBiKSAiU1RESUNUIjsKCjs7OyBTdG9yZXMgKE1heWJlIF5DZWxsKSB0byBidWlsZGVyOgo7OzsgaWYgY2VsbCBpcyBudWxs" + + "IHN0b3JlIDEgemVybyBiaXQKOzs7IG90aGVyd2lzZSBzdG9yZSAxIHRydWUgYml0IGFuZCByZWYgdG8gY2VsbApidWlsZGVyIHN0b3JlX21heWJlX3JlZihidWlsZGVy" + + "IGIsIGNlbGwgYykgYXNtKGMgYikgIlNUT1BUUkVGIjsKCgp7LQogICMgQWRkcmVzcyBtYW5pcHVsYXRpb24gcHJpbWl0aXZlcwogIFRoZSBhZGRyZXNzIG1hbmlwdWxh" + + "dGlvbiBwcmltaXRpdmVzIGxpc3RlZCBiZWxvdyBzZXJpYWxpemUgYW5kIGRlc2VyaWFsaXplIHZhbHVlcyBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyBUTC1CIHNj" + + "aGVtZToKICBgYGBUTC1CCiAgYWRkcl9ub25lJDAwID0gTXNnQWRkcmVzc0V4dDsKICBhZGRyX2V4dGVybiQwMSBsZW46KCMjIDgpIGV4dGVybmFsX2FkZHJlc3M6KGJp" + + "dHMgbGVuKQogICAgICAgICAgICAgICA9IE1zZ0FkZHJlc3NFeHQ7CiAgYW55Y2FzdF9pbmZvJF8gZGVwdGg6KCM8PSAzMCkgeyBkZXB0aCA+PSAxIH0KICAgIHJld3Jp" + + "dGVfcGZ4OihiaXRzIGRlcHRoKSA9IEFueWNhc3Q7CiAgYWRkcl9zdGQkMTAgYW55Y2FzdDooTWF5YmUgQW55Y2FzdCkKICAgIHdvcmtjaGFpbl9pZDppbnQ4IGFkZHJl" + + "c3M6Yml0czI1NiA9IE1zZ0FkZHJlc3NJbnQ7CiAgYWRkcl92YXIkMTEgYW55Y2FzdDooTWF5YmUgQW55Y2FzdCkgYWRkcl9sZW46KCMjIDkpCiAgICB3b3JrY2hhaW5f" + + "aWQ6aW50MzIgYWRkcmVzczooYml0cyBhZGRyX2xlbikgPSBNc2dBZGRyZXNzSW50OwogIF8gXzpNc2dBZGRyZXNzSW50ID0gTXNnQWRkcmVzczsKICBfIF86TXNnQWRk" + + "cmVzc0V4dCA9IE1zZ0FkZHJlc3M7CgogIGludF9tc2dfaW5mbyQwIGlocl9kaXNhYmxlZDpCb29sIGJvdW5jZTpCb29sIGJvdW5jZWQ6Qm9vbAogICAgc3JjOk1zZ0Fk" + + "ZHJlc3MgZGVzdDpNc2dBZGRyZXNzSW50CiAgICB2YWx1ZTpDdXJyZW5jeUNvbGxlY3Rpb24gaWhyX2ZlZTpHcmFtcyBmd2RfZmVlOkdyYW1zCiAgICBjcmVhdGVkX2x0" + + "OnVpbnQ2NCBjcmVhdGVkX2F0OnVpbnQzMiA9IENvbW1vbk1zZ0luZm9SZWxheGVkOwogIGV4dF9vdXRfbXNnX2luZm8kMTEgc3JjOk1zZ0FkZHJlc3MgZGVzdDpNc2dB" + + "ZGRyZXNzRXh0CiAgICBjcmVhdGVkX2x0OnVpbnQ2NCBjcmVhdGVkX2F0OnVpbnQzMiA9IENvbW1vbk1zZ0luZm9SZWxheGVkOwogIGBgYAogIEEgZGVzZXJpYWxpemVk" + + "IGBNc2dBZGRyZXNzYCBpcyByZXByZXNlbnRlZCBieSBhIHR1cGxlIGB0YCBhcyBmb2xsb3dzOgoKICAtIGBhZGRyX25vbmVgIGlzIHJlcHJlc2VudGVkIGJ5IGB0ID0g" + + "KDApYCwKICAgIGkuZS4sIGEgdHVwbGUgY29udGFpbmluZyBleGFjdGx5IG9uZSBpbnRlZ2VyIGVxdWFsIHRvIHplcm8uCiAgLSBgYWRkcl9leHRlcm5gIGlzIHJlcHJl" + + "c2VudGVkIGJ5IGB0ID0gKDEsIHMpYCwKICAgIHdoZXJlIHNsaWNlIGBzYCBjb250YWlucyB0aGUgZmllbGQgYGV4dGVybmFsX2FkZHJlc3NgLiBJbiBvdGhlciB3b3Jk" + + "cywgYAogICAgdGAgaXMgYSBwYWlyIChhIHR1cGxlIGNvbnNpc3Rpbmcgb2YgdHdvIGVudHJpZXMpLCBjb250YWluaW5nIGFuIGludGVnZXIgZXF1YWwgdG8gb25lIGFu" + + "ZCBzbGljZSBgc2AuCiAgLSBgYWRkcl9zdGRgIGlzIHJlcHJlc2VudGVkIGJ5IGB0ID0gKDIsIHUsIHgsIHMpYCwKICAgIHdoZXJlIGB1YCBpcyBlaXRoZXIgYSBgbnVs" + + "bGAgKGlmIGBhbnljYXN0YCBpcyBhYnNlbnQpIG9yIGEgc2xpY2UgYHMnYCBjb250YWluaW5nIGByZXdyaXRlX3BmeGAgKGlmIGFueWNhc3QgaXMgcHJlc2VudCkuCiAg" + + "ICBOZXh0LCBpbnRlZ2VyIGB4YCBpcyB0aGUgYHdvcmtjaGFpbl9pZGAsIGFuZCBzbGljZSBgc2AgY29udGFpbnMgdGhlIGFkZHJlc3MuCiAgLSBgYWRkcl92YXJgIGlz" + + "IHJlcHJlc2VudGVkIGJ5IGB0ID0gKDMsIHUsIHgsIHMpYCwKICAgIHdoZXJlIGB1YCwgYHhgLCBhbmQgYHNgIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyBmb3IgYGFk" + + "ZHJfc3RkYC4KLX0KCjs7OyBMb2FkcyBmcm9tIHNsaWNlIFtzXSB0aGUgb25seSBwcmVmaXggdGhhdCBpcyBhIHZhbGlkIGBNc2dBZGRyZXNzYCwKOzs7IGFuZCByZXR1" + + "cm5zIGJvdGggdGhpcyBwcmVmaXggYHMnYCBhbmQgdGhlIHJlbWFpbmRlciBgcycnYCBvZiBbc10gYXMgc2xpY2VzLgooc2xpY2UsIHNsaWNlKSBsb2FkX21zZ19hZGRy" + + "KHNsaWNlIHMpIGFzbSgtPiAxIDApICJMRE1TR0FERFIiOwoKOzs7IERlY29tcG9zZXMgc2xpY2UgW3NdIGNvbnRhaW5pbmcgYSB2YWxpZCBgTXNnQWRkcmVzc2AgaW50" + + "byBhIGB0dXBsZSB0YCB3aXRoIHNlcGFyYXRlIGZpZWxkcyBvZiB0aGlzIGBNc2dBZGRyZXNzYC4KOzs7IElmIFtzXSBpcyBub3QgYSB2YWxpZCBgTXNnQWRkcmVzc2As" + + "IGEgY2VsbCBkZXNlcmlhbGl6YXRpb24gZXhjZXB0aW9uIGlzIHRocm93bi4KdHVwbGUgcGFyc2VfYWRkcihzbGljZSBzKSBhc20gIlBBUlNFTVNHQUREUiI7Cgo7Ozsg" + + "UGFyc2VzIHNsaWNlIFtzXSBjb250YWluaW5nIGEgdmFsaWQgYE1zZ0FkZHJlc3NJbnRgICh1c3VhbGx5IGEgYG1zZ19hZGRyX3N0ZGApLAo7OzsgYXBwbGllcyByZXdy" + + "aXRpbmcgZnJvbSB0aGUgYW55Y2FzdCAoaWYgcHJlc2VudCkgdG8gdGhlIHNhbWUtbGVuZ3RoIHByZWZpeCBvZiB0aGUgYWRkcmVzcywKOzs7IGFuZCByZXR1cm5zIGJv" + + "dGggdGhlIHdvcmtjaGFpbiBhbmQgdGhlIDI1Ni1iaXQgYWRkcmVzcyBhcyBpbnRlZ2Vycy4KOzs7IElmIHRoZSBhZGRyZXNzIGlzIG5vdCAyNTYtYml0LCBvciBpZiBb" + + "c10gaXMgbm90IGEgdmFsaWQgc2VyaWFsaXphdGlvbiBvZiBgTXNnQWRkcmVzc0ludGAsCjs7OyB0aHJvd3MgYSBjZWxsIGRlc2VyaWFsaXphdGlvbiBleGNlcHRpb24u" + + "CihpbnQsIGludCkgcGFyc2Vfc3RkX2FkZHIoc2xpY2UgcykgYXNtICJSRVdSSVRFU1REQUREUiI7Cgo7OzsgQSB2YXJpYW50IG9mIFtwYXJzZV9zdGRfYWRkcl0gdGhh" + + "dCByZXR1cm5zIHRoZSAocmV3cml0dGVuKSBhZGRyZXNzIGFzIGEgc2xpY2UgW3NdLAo7OzsgZXZlbiBpZiBpdCBpcyBub3QgZXhhY3RseSAyNTYgYml0IGxvbmcgKHJl" + + "cHJlc2VudGVkIGJ5IGEgYG1zZ19hZGRyX3ZhcmApLgooaW50LCBzbGljZSkgcGFyc2VfdmFyX2FkZHIoc2xpY2UgcykgYXNtICJSRVdSSVRFVkFSQUREUiI7Cgp7LQog" + + "ICMgRGljdGlvbmFyeSBwcmltaXRpdmVzCi19CgoKOzs7IFNldHMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBba2V5X2xlbl0tYml0IGtleSBzaWduZWQgaW5kZXgg" + + "aW4gZGljdGlvbmFyeSBbZGljdF0gdG8gW3ZhbHVlXSAoY2VsbCksCjs7OyBhbmQgcmV0dXJucyB0aGUgcmVzdWx0aW5nIGRpY3Rpb25hcnkuCmNlbGwgaWRpY3Rfc2V0" + + "X3JlZihjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBpbnQgaW5kZXgsIGNlbGwgdmFsdWUpIGFzbSh2YWx1ZSBpbmRleCBkaWN0IGtleV9sZW4pICJESUNUSVNFVFJFRiI7" + + "CihjZWxsLCAoKSkgfmlkaWN0X3NldF9yZWYoY2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgaW50IGluZGV4LCBjZWxsIHZhbHVlKSBhc20odmFsdWUgaW5kZXggZGljdCBr" + + "ZXlfbGVuKSAiRElDVElTRVRSRUYiOwoKOzs7IFNldHMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBba2V5X2xlbl0tYml0IGtleSB1bnNpZ25lZCBpbmRleCBpbiBk" + + "aWN0aW9uYXJ5IFtkaWN0XSB0byBbdmFsdWVdIChjZWxsKSwKOzs7IGFuZCByZXR1cm5zIHRoZSByZXN1bHRpbmcgZGljdGlvbmFyeS4KY2VsbCB1ZGljdF9zZXRfcmVm" + + "KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIGludCBpbmRleCwgY2VsbCB2YWx1ZSkgYXNtKHZhbHVlIGluZGV4IGRpY3Qga2V5X2xlbikgIkRJQ1RVU0VUUkVGIjsKKGNl" + + "bGwsICgpKSB+dWRpY3Rfc2V0X3JlZihjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBpbnQgaW5kZXgsIGNlbGwgdmFsdWUpIGFzbSh2YWx1ZSBpbmRleCBkaWN0IGtleV9s" + + "ZW4pICJESUNUVVNFVFJFRiI7CgpjZWxsIGlkaWN0X2dldF9yZWYoY2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgaW50IGluZGV4KSBhc20oaW5kZXggZGljdCBrZXlfbGVu" + + "KSAiRElDVElHRVRPUFRSRUYiOwooY2VsbCwgaW50KSBpZGljdF9nZXRfcmVmPyhjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBpbnQgaW5kZXgpIGFzbShpbmRleCBkaWN0" + + "IGtleV9sZW4pICJESUNUSUdFVFJFRiIgIk5VTExTV0FQSUZOT1QiOwooY2VsbCwgaW50KSB1ZGljdF9nZXRfcmVmPyhjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBpbnQg" + + "aW5kZXgpIGFzbShpbmRleCBkaWN0IGtleV9sZW4pICJESUNUVUdFVFJFRiIgIk5VTExTV0FQSUZOT1QiOwooY2VsbCwgY2VsbCkgaWRpY3Rfc2V0X2dldF9yZWYoY2Vs" + + "bCBkaWN0LCBpbnQga2V5X2xlbiwgaW50IGluZGV4LCBjZWxsIHZhbHVlKSBhc20odmFsdWUgaW5kZXggZGljdCBrZXlfbGVuKSAiRElDVElTRVRHRVRPUFRSRUYiOwoo" + + "Y2VsbCwgY2VsbCkgdWRpY3Rfc2V0X2dldF9yZWYoY2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgaW50IGluZGV4LCBjZWxsIHZhbHVlKSBhc20odmFsdWUgaW5kZXggZGlj" + + "dCBrZXlfbGVuKSAiRElDVFVTRVRHRVRPUFRSRUYiOwooY2VsbCwgaW50KSBpZGljdF9kZWxldGU/KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIGludCBpbmRleCkgYXNt" + + "KGluZGV4IGRpY3Qga2V5X2xlbikgIkRJQ1RJREVMIjsKKGNlbGwsIGludCkgdWRpY3RfZGVsZXRlPyhjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBpbnQgaW5kZXgpIGFz" + + "bShpbmRleCBkaWN0IGtleV9sZW4pICJESUNUVURFTCI7CihzbGljZSwgaW50KSBpZGljdF9nZXQ/KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIGludCBpbmRleCkgYXNt" + + "KGluZGV4IGRpY3Qga2V5X2xlbikgIkRJQ1RJR0VUIiAiTlVMTFNXQVBJRk5PVCI7CihzbGljZSwgaW50KSB1ZGljdF9nZXQ/KGNlbGwgZGljdCwgaW50IGtleV9sZW4s" + + "IGludCBpbmRleCkgYXNtKGluZGV4IGRpY3Qga2V5X2xlbikgIkRJQ1RVR0VUIiAiTlVMTFNXQVBJRk5PVCI7CihjZWxsLCBzbGljZSwgaW50KSBpZGljdF9kZWxldGVf" + + "Z2V0PyhjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBpbnQgaW5kZXgpIGFzbShpbmRleCBkaWN0IGtleV9sZW4pICJESUNUSURFTEdFVCIgIk5VTExTV0FQSUZOT1QiOwoo" + + "Y2VsbCwgc2xpY2UsIGludCkgdWRpY3RfZGVsZXRlX2dldD8oY2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgaW50IGluZGV4KSBhc20oaW5kZXggZGljdCBrZXlfbGVuKSAi" + + "RElDVFVERUxHRVQiICJOVUxMU1dBUElGTk9UIjsKKGNlbGwsIChzbGljZSwgaW50KSkgfmlkaWN0X2RlbGV0ZV9nZXQ/KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIGlu" + + "dCBpbmRleCkgYXNtKGluZGV4IGRpY3Qga2V5X2xlbikgIkRJQ1RJREVMR0VUIiAiTlVMTFNXQVBJRk5PVCI7CihjZWxsLCAoc2xpY2UsIGludCkpIH51ZGljdF9kZWxl" + + "dGVfZ2V0PyhjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBpbnQgaW5kZXgpIGFzbShpbmRleCBkaWN0IGtleV9sZW4pICJESUNUVURFTEdFVCIgIk5VTExTV0FQSUZOT1Qi" + + "OwooY2VsbCwgY2VsbCwgaW50KSBpZGljdF9kZWxldGVfZ2V0X3JlZj8oY2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgaW50IGluZGV4KSBhc20oaW5kZXggZGljdCBrZXlf" + + "bGVuKSAiRElDVElERUxHRVRSRUYiICJOVUxMU1dBUElGTk9UIjsKKGNlbGwsIGNlbGwsIGludCkgdWRpY3RfZGVsZXRlX2dldF9yZWY/KGNlbGwgZGljdCwgaW50IGtl" + + "eV9sZW4sIGludCBpbmRleCkgYXNtKGluZGV4IGRpY3Qga2V5X2xlbikgIkRJQ1RVREVMR0VUUkVGIiAiTlVMTFNXQVBJRk5PVCI7CihjZWxsLCAoY2VsbCwgaW50KSkg" + + "fmlkaWN0X2RlbGV0ZV9nZXRfcmVmPyhjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBpbnQgaW5kZXgpIGFzbShpbmRleCBkaWN0IGtleV9sZW4pICJESUNUSURFTEdFVFJF" + + "RiIgIk5VTExTV0FQSUZOT1QiOwooY2VsbCwgKGNlbGwsIGludCkpIH51ZGljdF9kZWxldGVfZ2V0X3JlZj8oY2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgaW50IGluZGV4" + + "KSBhc20oaW5kZXggZGljdCBrZXlfbGVuKSAiRElDVFVERUxHRVRSRUYiICJOVUxMU1dBUElGTk9UIjsKY2VsbCB1ZGljdF9zZXQoY2VsbCBkaWN0LCBpbnQga2V5X2xl" + + "biwgaW50IGluZGV4LCBzbGljZSB2YWx1ZSkgYXNtKHZhbHVlIGluZGV4IGRpY3Qga2V5X2xlbikgIkRJQ1RVU0VUIjsKKGNlbGwsICgpKSB+dWRpY3Rfc2V0KGNlbGwg" + + "ZGljdCwgaW50IGtleV9sZW4sIGludCBpbmRleCwgc2xpY2UgdmFsdWUpIGFzbSh2YWx1ZSBpbmRleCBkaWN0IGtleV9sZW4pICJESUNUVVNFVCI7CmNlbGwgaWRpY3Rf" + + "c2V0KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIGludCBpbmRleCwgc2xpY2UgdmFsdWUpIGFzbSh2YWx1ZSBpbmRleCBkaWN0IGtleV9sZW4pICJESUNUSVNFVCI7Cihj" + + "ZWxsLCAoKSkgfmlkaWN0X3NldChjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBpbnQgaW5kZXgsIHNsaWNlIHZhbHVlKSBhc20odmFsdWUgaW5kZXggZGljdCBrZXlfbGVu" + + "KSAiRElDVElTRVQiOwpjZWxsIGRpY3Rfc2V0KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIHNsaWNlIGluZGV4LCBzbGljZSB2YWx1ZSkgYXNtKHZhbHVlIGluZGV4IGRp" + + "Y3Qga2V5X2xlbikgIkRJQ1RTRVQiOwooY2VsbCwgKCkpIH5kaWN0X3NldChjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBzbGljZSBpbmRleCwgc2xpY2UgdmFsdWUpIGFz" + + "bSh2YWx1ZSBpbmRleCBkaWN0IGtleV9sZW4pICJESUNUU0VUIjsKKGNlbGwsIGludCkgdWRpY3RfYWRkPyhjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBpbnQgaW5kZXgs" + + "IHNsaWNlIHZhbHVlKSBhc20odmFsdWUgaW5kZXggZGljdCBrZXlfbGVuKSAiRElDVFVBREQiOwooY2VsbCwgaW50KSB1ZGljdF9yZXBsYWNlPyhjZWxsIGRpY3QsIGlu" + + "dCBrZXlfbGVuLCBpbnQgaW5kZXgsIHNsaWNlIHZhbHVlKSBhc20odmFsdWUgaW5kZXggZGljdCBrZXlfbGVuKSAiRElDVFVSRVBMQUNFIjsKKGNlbGwsIGludCkgdWRp" + + "Y3RfcmVwbGFjZV9yZWY/KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIGludCBpbmRleCwgY2VsbCB2YWx1ZSkgYXNtKHZhbHVlIGluZGV4IGRpY3Qga2V5X2xlbikgIkRJ" + + "Q1RVUkVQTEFDRVJFRiI7CihjZWxsLCBzbGljZSwgaW50KSB1ZGljdF9yZXBsYWNlZ2V0PyhjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBpbnQgaW5kZXgsIHNsaWNlIHZh" + + "bHVlKSBhc20odmFsdWUgaW5kZXggZGljdCBrZXlfbGVuKSAiRElDVFVSRVBMQUNFR0VUIiAiTlVMTFNXQVBJRk5PVCI7CihjZWxsLCBjZWxsLCBpbnQpIHVkaWN0X3Jl" + + "cGxhY2VnZXRfcmVmPyhjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBpbnQgaW5kZXgsIGNlbGwgdmFsdWUpIGFzbSh2YWx1ZSBpbmRleCBkaWN0IGtleV9sZW4pICJESUNU" + + "VVJFUExBQ0VHRVRSRUYiICJOVUxMU1dBUElGTk9UIjsKKGNlbGwsIChzbGljZSwgaW50KSkgfnVkaWN0X3JlcGxhY2VnZXQ/KGNlbGwgZGljdCwgaW50IGtleV9sZW4s" + + "IGludCBpbmRleCwgc2xpY2UgdmFsdWUpIGFzbSh2YWx1ZSBpbmRleCBkaWN0IGtleV9sZW4pICJESUNUVVJFUExBQ0VHRVQiICJOVUxMU1dBUElGTk9UIjsKKGNlbGws" + + "IChjZWxsLCBpbnQpKSB+dWRpY3RfcmVwbGFjZWdldF9yZWY/KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIGludCBpbmRleCwgY2VsbCB2YWx1ZSkgYXNtKHZhbHVlIGlu" + + "ZGV4IGRpY3Qga2V5X2xlbikgIkRJQ1RVUkVQTEFDRUdFVFJFRiIgIk5VTExTV0FQSUZOT1QiOwooY2VsbCwgaW50KSBpZGljdF9hZGQ/KGNlbGwgZGljdCwgaW50IGtl" + + "eV9sZW4sIGludCBpbmRleCwgc2xpY2UgdmFsdWUpIGFzbSh2YWx1ZSBpbmRleCBkaWN0IGtleV9sZW4pICJESUNUSUFERCI7CihjZWxsLCBpbnQpIGlkaWN0X3JlcGxh" + + "Y2U/KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIGludCBpbmRleCwgc2xpY2UgdmFsdWUpIGFzbSh2YWx1ZSBpbmRleCBkaWN0IGtleV9sZW4pICJESUNUSVJFUExBQ0Ui" + + "OwooY2VsbCwgaW50KSBpZGljdF9yZXBsYWNlX3JlZj8oY2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgaW50IGluZGV4LCBjZWxsIHZhbHVlKSBhc20odmFsdWUgaW5kZXgg" + + "ZGljdCBrZXlfbGVuKSAiRElDVElSRVBMQUNFUkVGIjsKKGNlbGwsIHNsaWNlLCBpbnQpIGlkaWN0X3JlcGxhY2VnZXQ/KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIGlu" + + "dCBpbmRleCwgc2xpY2UgdmFsdWUpIGFzbSh2YWx1ZSBpbmRleCBkaWN0IGtleV9sZW4pICJESUNUSVJFUExBQ0VHRVQiICJOVUxMU1dBUElGTk9UIjsKKGNlbGwsIGNl" + + "bGwsIGludCkgaWRpY3RfcmVwbGFjZWdldF9yZWY/KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIGludCBpbmRleCwgY2VsbCB2YWx1ZSkgYXNtKHZhbHVlIGluZGV4IGRp" + + "Y3Qga2V5X2xlbikgIkRJQ1RJUkVQTEFDRUdFVFJFRiIgIk5VTExTV0FQSUZOT1QiOwooY2VsbCwgKHNsaWNlLCBpbnQpKSB+aWRpY3RfcmVwbGFjZWdldD8oY2VsbCBk" + + "aWN0LCBpbnQga2V5X2xlbiwgaW50IGluZGV4LCBzbGljZSB2YWx1ZSkgYXNtKHZhbHVlIGluZGV4IGRpY3Qga2V5X2xlbikgIkRJQ1RJUkVQTEFDRUdFVCIgIk5VTExT" + + "V0FQSUZOT1QiOwooY2VsbCwgKGNlbGwsIGludCkpIH5pZGljdF9yZXBsYWNlZ2V0X3JlZj8oY2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgaW50IGluZGV4LCBjZWxsIHZh" + + "bHVlKSBhc20odmFsdWUgaW5kZXggZGljdCBrZXlfbGVuKSAiRElDVElSRVBMQUNFR0VUUkVGIiAiTlVMTFNXQVBJRk5PVCI7CmNlbGwgdWRpY3Rfc2V0X2J1aWxkZXIo" + + "Y2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgaW50IGluZGV4LCBidWlsZGVyIHZhbHVlKSBhc20odmFsdWUgaW5kZXggZGljdCBrZXlfbGVuKSAiRElDVFVTRVRCIjsKKGNl" + + "bGwsICgpKSB+dWRpY3Rfc2V0X2J1aWxkZXIoY2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgaW50IGluZGV4LCBidWlsZGVyIHZhbHVlKSBhc20odmFsdWUgaW5kZXggZGlj" + + "dCBrZXlfbGVuKSAiRElDVFVTRVRCIjsKY2VsbCBpZGljdF9zZXRfYnVpbGRlcihjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBpbnQgaW5kZXgsIGJ1aWxkZXIgdmFsdWUp" + + "IGFzbSh2YWx1ZSBpbmRleCBkaWN0IGtleV9sZW4pICJESUNUSVNFVEIiOwooY2VsbCwgKCkpIH5pZGljdF9zZXRfYnVpbGRlcihjZWxsIGRpY3QsIGludCBrZXlfbGVu" + + "LCBpbnQgaW5kZXgsIGJ1aWxkZXIgdmFsdWUpIGFzbSh2YWx1ZSBpbmRleCBkaWN0IGtleV9sZW4pICJESUNUSVNFVEIiOwpjZWxsIGRpY3Rfc2V0X2J1aWxkZXIoY2Vs" + + "bCBkaWN0LCBpbnQga2V5X2xlbiwgc2xpY2UgaW5kZXgsIGJ1aWxkZXIgdmFsdWUpIGFzbSh2YWx1ZSBpbmRleCBkaWN0IGtleV9sZW4pICJESUNUU0VUQiI7CihjZWxs" + + "LCAoKSkgfmRpY3Rfc2V0X2J1aWxkZXIoY2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgc2xpY2UgaW5kZXgsIGJ1aWxkZXIgdmFsdWUpIGFzbSh2YWx1ZSBpbmRleCBkaWN0" + + "IGtleV9sZW4pICJESUNUU0VUQiI7CihjZWxsLCBpbnQpIGRpY3RfcmVwbGFjZV9idWlsZGVyPyhjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBzbGljZSBpbmRleCwgYnVp" + + "bGRlciB2YWx1ZSkgYXNtKHZhbHVlIGluZGV4IGRpY3Qga2V5X2xlbikgIkRJQ1RSRVBMQUNFQiI7CihjZWxsLCBidWlsZGVyLCBpbnQpIGRpY3RfcmVwbGFjZWdldF9i" + + "dWlsZGVyPyhjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBzbGljZSBpbmRleCwgYnVpbGRlciB2YWx1ZSkgYXNtKHZhbHVlIGluZGV4IGRpY3Qga2V5X2xlbikgIkRJQ1RS" + + "RVBMQUNFR0VUQiIgIk5VTExTV0FQSUZOT1QiOwooY2VsbCwgc2xpY2UsIGludCkgZGljdF9yZXBsYWNlZ2V0PyhjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBzbGljZSBp" + + "bmRleCwgc2xpY2UgdmFsdWUpIGFzbSh2YWx1ZSBpbmRleCBkaWN0IGtleV9sZW4pICJESUNUUkVQTEFDRUdFVCIgIk5VTExTV0FQSUZOT1QiOwooY2VsbCwgKGJ1aWxk" + + "ZXIsIGludCkpIH5kaWN0X3JlcGxhY2VnZXRfYnVpbGRlcj8oY2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgc2xpY2UgaW5kZXgsIGJ1aWxkZXIgdmFsdWUpIGFzbSh2YWx1" + + "ZSBpbmRleCBkaWN0IGtleV9sZW4pICJESUNUUkVQTEFDRUdFVEIiICJOVUxMU1dBUElGTk9UIjsKKGNlbGwsIChzbGljZSwgaW50KSkgfmRpY3RfcmVwbGFjZWdldD8o" + + "Y2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgc2xpY2UgaW5kZXgsIHNsaWNlIHZhbHVlKSBhc20odmFsdWUgaW5kZXggZGljdCBrZXlfbGVuKSAiRElDVFJFUExBQ0VHRVQi" + + "ICJOVUxMU1dBUElGTk9UIjsKKGNlbGwsIGludCkgdWRpY3RfYWRkX2J1aWxkZXI/KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIGludCBpbmRleCwgYnVpbGRlciB2YWx1" + + "ZSkgYXNtKHZhbHVlIGluZGV4IGRpY3Qga2V5X2xlbikgIkRJQ1RVQUREQiI7CihjZWxsLCBpbnQpIHVkaWN0X3JlcGxhY2VfYnVpbGRlcj8oY2VsbCBkaWN0LCBpbnQg" + + "a2V5X2xlbiwgaW50IGluZGV4LCBidWlsZGVyIHZhbHVlKSBhc20odmFsdWUgaW5kZXggZGljdCBrZXlfbGVuKSAiRElDVFVSRVBMQUNFQiI7CihjZWxsLCBidWlsZGVy" + + "LCBpbnQpIHVkaWN0X3JlcGxhY2VnZXRfYnVpbGRlcj8oY2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgaW50IGluZGV4LCBidWlsZGVyIHZhbHVlKSBhc20odmFsdWUgaW5k" + + "ZXggZGljdCBrZXlfbGVuKSAiRElDVFVSRVBMQUNFR0VUQiIgIk5VTExTV0FQSUZOT1QiOwooY2VsbCwgKGJ1aWxkZXIsIGludCkpIH51ZGljdF9yZXBsYWNlZ2V0X2J1" + + "aWxkZXI/KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIGludCBpbmRleCwgYnVpbGRlciB2YWx1ZSkgYXNtKHZhbHVlIGluZGV4IGRpY3Qga2V5X2xlbikgIkRJQ1RVUkVQ" + + "TEFDRUdFVEIiICJOVUxMU1dBUElGTk9UIjsKKGNlbGwsIGludCkgaWRpY3RfYWRkX2J1aWxkZXI/KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIGludCBpbmRleCwgYnVp" + + "bGRlciB2YWx1ZSkgYXNtKHZhbHVlIGluZGV4IGRpY3Qga2V5X2xlbikgIkRJQ1RJQUREQiI7CihjZWxsLCBpbnQpIGlkaWN0X3JlcGxhY2VfYnVpbGRlcj8oY2VsbCBk" + + "aWN0LCBpbnQga2V5X2xlbiwgaW50IGluZGV4LCBidWlsZGVyIHZhbHVlKSBhc20odmFsdWUgaW5kZXggZGljdCBrZXlfbGVuKSAiRElDVElSRVBMQUNFQiI7CihjZWxs" + + "LCBidWlsZGVyLCBpbnQpIGlkaWN0X3JlcGxhY2VnZXRfYnVpbGRlcj8oY2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgaW50IGluZGV4LCBidWlsZGVyIHZhbHVlKSBhc20o" + + "dmFsdWUgaW5kZXggZGljdCBrZXlfbGVuKSAiRElDVElSRVBMQUNFR0VUQiIgIk5VTExTV0FQSUZOT1QiOwooY2VsbCwgKGJ1aWxkZXIsIGludCkpIH5pZGljdF9yZXBs" + + "YWNlZ2V0X2J1aWxkZXI/KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIGludCBpbmRleCwgYnVpbGRlciB2YWx1ZSkgYXNtKHZhbHVlIGluZGV4IGRpY3Qga2V5X2xlbikg" + + "IkRJQ1RJUkVQTEFDRUdFVEIiICJOVUxMU1dBUElGTk9UIjsKKGNlbGwsIGludCwgc2xpY2UsIGludCkgdWRpY3RfZGVsZXRlX2dldF9taW4oY2VsbCBkaWN0LCBpbnQg" + + "a2V5X2xlbikgYXNtKC0+IDAgMiAxIDMpICJESUNUVVJFTU1JTiIgIk5VTExTV0FQSUZOT1QyIjsKKGNlbGwsIChpbnQsIHNsaWNlLCBpbnQpKSB+dWRpY3Q6OmRlbGV0" + + "ZV9nZXRfbWluKGNlbGwgZGljdCwgaW50IGtleV9sZW4pIGFzbSgtPiAwIDIgMSAzKSAiRElDVFVSRU1NSU4iICJOVUxMU1dBUElGTk9UMiI7CihjZWxsLCBpbnQsIHNs" + + "aWNlLCBpbnQpIGlkaWN0X2RlbGV0ZV9nZXRfbWluKGNlbGwgZGljdCwgaW50IGtleV9sZW4pIGFzbSgtPiAwIDIgMSAzKSAiRElDVElSRU1NSU4iICJOVUxMU1dBUElG" + + "Tk9UMiI7CihjZWxsLCAoaW50LCBzbGljZSwgaW50KSkgfmlkaWN0OjpkZWxldGVfZ2V0X21pbihjZWxsIGRpY3QsIGludCBrZXlfbGVuKSBhc20oLT4gMCAyIDEgMykg" + + "IkRJQ1RJUkVNTUlOIiAiTlVMTFNXQVBJRk5PVDIiOwooY2VsbCwgc2xpY2UsIHNsaWNlLCBpbnQpIGRpY3RfZGVsZXRlX2dldF9taW4oY2VsbCBkaWN0LCBpbnQga2V5" + + "X2xlbikgYXNtKC0+IDAgMiAxIDMpICJESUNUUkVNTUlOIiAiTlVMTFNXQVBJRk5PVDIiOwooY2VsbCwgKHNsaWNlLCBzbGljZSwgaW50KSkgfmRpY3Q6OmRlbGV0ZV9n" + + "ZXRfbWluKGNlbGwgZGljdCwgaW50IGtleV9sZW4pIGFzbSgtPiAwIDIgMSAzKSAiRElDVFJFTU1JTiIgIk5VTExTV0FQSUZOT1QyIjsKKGNlbGwsIGludCwgc2xpY2Us" + + "IGludCkgdWRpY3RfZGVsZXRlX2dldF9tYXgoY2VsbCBkaWN0LCBpbnQga2V5X2xlbikgYXNtKC0+IDAgMiAxIDMpICJESUNUVVJFTU1BWCIgIk5VTExTV0FQSUZOT1Qy" + + "IjsKKGNlbGwsIChpbnQsIHNsaWNlLCBpbnQpKSB+dWRpY3Q6OmRlbGV0ZV9nZXRfbWF4KGNlbGwgZGljdCwgaW50IGtleV9sZW4pIGFzbSgtPiAwIDIgMSAzKSAiRElD" + + "VFVSRU1NQVgiICJOVUxMU1dBUElGTk9UMiI7CihjZWxsLCBpbnQsIHNsaWNlLCBpbnQpIGlkaWN0X2RlbGV0ZV9nZXRfbWF4KGNlbGwgZGljdCwgaW50IGtleV9sZW4p" + + "IGFzbSgtPiAwIDIgMSAzKSAiRElDVElSRU1NQVgiICJOVUxMU1dBUElGTk9UMiI7CihjZWxsLCAoaW50LCBzbGljZSwgaW50KSkgfmlkaWN0OjpkZWxldGVfZ2V0X21h" + + "eChjZWxsIGRpY3QsIGludCBrZXlfbGVuKSBhc20oLT4gMCAyIDEgMykgIkRJQ1RJUkVNTUFYIiAiTlVMTFNXQVBJRk5PVDIiOwooY2VsbCwgc2xpY2UsIHNsaWNlLCBp" + + "bnQpIGRpY3RfZGVsZXRlX2dldF9tYXgoY2VsbCBkaWN0LCBpbnQga2V5X2xlbikgYXNtKC0+IDAgMiAxIDMpICJESUNUUkVNTUFYIiAiTlVMTFNXQVBJRk5PVDIiOwoo" + + "Y2VsbCwgKHNsaWNlLCBzbGljZSwgaW50KSkgfmRpY3Q6OmRlbGV0ZV9nZXRfbWF4KGNlbGwgZGljdCwgaW50IGtleV9sZW4pIGFzbSgtPiAwIDIgMSAzKSAiRElDVFJF" + + "TU1BWCIgIk5VTExTV0FQSUZOT1QyIjsKKGludCwgc2xpY2UsIGludCkgdWRpY3RfZ2V0X21pbj8oY2VsbCBkaWN0LCBpbnQga2V5X2xlbikgYXNtICgtPiAxIDAgMikg" + + "IkRJQ1RVTUlOIiAiTlVMTFNXQVBJRk5PVDIiOwooaW50LCBzbGljZSwgaW50KSB1ZGljdF9nZXRfbWF4PyhjZWxsIGRpY3QsIGludCBrZXlfbGVuKSBhc20gKC0+IDEg" + + "MCAyKSAiRElDVFVNQVgiICJOVUxMU1dBUElGTk9UMiI7CihpbnQsIGNlbGwsIGludCkgdWRpY3RfZ2V0X21pbl9yZWY/KGNlbGwgZGljdCwgaW50IGtleV9sZW4pIGFz" + + "bSAoLT4gMSAwIDIpICJESUNUVU1JTlJFRiIgIk5VTExTV0FQSUZOT1QyIjsKKGludCwgY2VsbCwgaW50KSB1ZGljdF9nZXRfbWF4X3JlZj8oY2VsbCBkaWN0LCBpbnQg" + + "a2V5X2xlbikgYXNtICgtPiAxIDAgMikgIkRJQ1RVTUFYUkVGIiAiTlVMTFNXQVBJRk5PVDIiOwooaW50LCBzbGljZSwgaW50KSBpZGljdF9nZXRfbWluPyhjZWxsIGRp" + + "Y3QsIGludCBrZXlfbGVuKSBhc20gKC0+IDEgMCAyKSAiRElDVElNSU4iICJOVUxMU1dBUElGTk9UMiI7CihpbnQsIHNsaWNlLCBpbnQpIGlkaWN0X2dldF9tYXg/KGNl" + + "bGwgZGljdCwgaW50IGtleV9sZW4pIGFzbSAoLT4gMSAwIDIpICJESUNUSU1BWCIgIk5VTExTV0FQSUZOT1QyIjsKKGludCwgY2VsbCwgaW50KSBpZGljdF9nZXRfbWlu" + + "X3JlZj8oY2VsbCBkaWN0LCBpbnQga2V5X2xlbikgYXNtICgtPiAxIDAgMikgIkRJQ1RJTUlOUkVGIiAiTlVMTFNXQVBJRk5PVDIiOwooaW50LCBjZWxsLCBpbnQpIGlk" + + "aWN0X2dldF9tYXhfcmVmPyhjZWxsIGRpY3QsIGludCBrZXlfbGVuKSBhc20gKC0+IDEgMCAyKSAiRElDVElNQVhSRUYiICJOVUxMU1dBUElGTk9UMiI7CihpbnQsIHNs" + + "aWNlLCBpbnQpIHVkaWN0X2dldF9uZXh0PyhjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBpbnQgcGl2b3QpIGFzbShwaXZvdCBkaWN0IGtleV9sZW4gLT4gMSAwIDIpICJE" + + "SUNUVUdFVE5FWFQiICJOVUxMU1dBUElGTk9UMiI7CihpbnQsIHNsaWNlLCBpbnQpIHVkaWN0X2dldF9uZXh0ZXE/KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIGludCBw" + + "aXZvdCkgYXNtKHBpdm90IGRpY3Qga2V5X2xlbiAtPiAxIDAgMikgIkRJQ1RVR0VUTkVYVEVRIiAiTlVMTFNXQVBJRk5PVDIiOwooaW50LCBzbGljZSwgaW50KSB1ZGlj" + + "dF9nZXRfcHJldj8oY2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgaW50IHBpdm90KSBhc20ocGl2b3QgZGljdCBrZXlfbGVuIC0+IDEgMCAyKSAiRElDVFVHRVRQUkVWIiAi" + + "TlVMTFNXQVBJRk5PVDIiOwooaW50LCBzbGljZSwgaW50KSB1ZGljdF9nZXRfcHJldmVxPyhjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBpbnQgcGl2b3QpIGFzbShwaXZv" + + "dCBkaWN0IGtleV9sZW4gLT4gMSAwIDIpICJESUNUVUdFVFBSRVZFUSIgIk5VTExTV0FQSUZOT1QyIjsKKGludCwgc2xpY2UsIGludCkgaWRpY3RfZ2V0X25leHQ/KGNl" + + "bGwgZGljdCwgaW50IGtleV9sZW4sIGludCBwaXZvdCkgYXNtKHBpdm90IGRpY3Qga2V5X2xlbiAtPiAxIDAgMikgIkRJQ1RJR0VUTkVYVCIgIk5VTExTV0FQSUZOT1Qy" + + "IjsKKGludCwgc2xpY2UsIGludCkgaWRpY3RfZ2V0X25leHRlcT8oY2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgaW50IHBpdm90KSBhc20ocGl2b3QgZGljdCBrZXlfbGVu" + + "IC0+IDEgMCAyKSAiRElDVElHRVRORVhURVEiICJOVUxMU1dBUElGTk9UMiI7CihpbnQsIHNsaWNlLCBpbnQpIGlkaWN0X2dldF9wcmV2PyhjZWxsIGRpY3QsIGludCBr" + + "ZXlfbGVuLCBpbnQgcGl2b3QpIGFzbShwaXZvdCBkaWN0IGtleV9sZW4gLT4gMSAwIDIpICJESUNUSUdFVFBSRVYiICJOVUxMU1dBUElGTk9UMiI7CihpbnQsIHNsaWNl" + + "LCBpbnQpIGlkaWN0X2dldF9wcmV2ZXE/KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIGludCBwaXZvdCkgYXNtKHBpdm90IGRpY3Qga2V5X2xlbiAtPiAxIDAgMikgIkRJ" + + "Q1RJR0VUUFJFVkVRIiAiTlVMTFNXQVBJRk5PVDIiOwoKOzs7IENyZWF0ZXMgYW4gZW1wdHkgZGljdGlvbmFyeSwgd2hpY2ggaXMgYWN0dWFsbHkgYSBudWxsIHZhbHVl" + + "LiBFcXVpdmFsZW50IHRvIFBVU0hOVUxMCmNlbGwgbmV3X2RpY3QoKSBhc20gIk5FV0RJQ1QiOwo7OzsgQ2hlY2tzIHdoZXRoZXIgYSBkaWN0aW9uYXJ5IGlzIGVtcHR5" + + "LiBFcXVpdmFsZW50IHRvIGNlbGxfbnVsbD8uCmludCBkaWN0X2VtcHR5PyhjZWxsIGMpIGFzbSAiRElDVEVNUFRZIjsKCgp7LSBQcmVmaXggZGljdGlvbmFyeSBwcmlt" + + "aXRpdmVzIC19CihzbGljZSwgc2xpY2UsIHNsaWNlLCBpbnQpIHBmeGRpY3RfZ2V0PyhjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBzbGljZSBrZXkpIGFzbShrZXkgZGlj" + + "dCBrZXlfbGVuKSAiUEZYRElDVEdFVFEiICJOVUxMU1dBUElGTk9UMiI7CihjZWxsLCBpbnQpIHBmeGRpY3Rfc2V0PyhjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBzbGlj" + + "ZSBrZXksIHNsaWNlIHZhbHVlKSBhc20odmFsdWUga2V5IGRpY3Qga2V5X2xlbikgIlBGWERJQ1RTRVQiOwooY2VsbCwgaW50KSBwZnhkaWN0X2RlbGV0ZT8oY2VsbCBk" + + "aWN0LCBpbnQga2V5X2xlbiwgc2xpY2Uga2V5KSBhc20oa2V5IGRpY3Qga2V5X2xlbikgIlBGWERJQ1RERUwiOwoKOzs7IFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBn" + + "bG9iYWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgd2l0aCBpbnRlZ2VyIGluZGV4IGBpYCBhcyBhIGBjZWxsYCBvciBgbnVsbGAgdmFsdWUuCmNlbGwgY29uZmlnX3Bh" + + "cmFtKGludCB4KSBhc20gIkNPTkZJR09QVFBBUkFNIjsKOzs7IENoZWNrcyB3aGV0aGVyIGMgaXMgYSBudWxsLiBOb3RlLCB0aGF0IEZ1bkMgYWxzbyBoYXMgcG9seW1v" + + "cnBoaWMgbnVsbD8gYnVpbHQtaW4uCmludCBjZWxsX251bGw/KGNlbGwgYykgYXNtICJJU05VTEwiOwoKOzs7IENyZWF0ZXMgYW4gb3V0cHV0IGFjdGlvbiB3aGljaCB3" + + "b3VsZCByZXNlcnZlIGV4YWN0bHkgYW1vdW50IG5hbm90b25jb2lucyAoaWYgbW9kZSA9IDApLCBhdCBtb3N0IGFtb3VudCBuYW5vdG9uY29pbnMgKGlmIG1vZGUgPSAy" + + "KSwgb3IgYWxsIGJ1dCBhbW91bnQgbmFub3RvbmNvaW5zIChpZiBtb2RlID0gMSBvciBtb2RlID0gMyksIGZyb20gdGhlIHJlbWFpbmluZyBiYWxhbmNlIG9mIHRoZSBh" + + "Y2NvdW50LiBJdCBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gY3JlYXRpbmcgYW4gb3V0Ym91bmQgbWVzc2FnZSBjYXJyeWluZyBhbW91bnQgbmFub3RvbmNvaW5zIChv" + + "ciBiIOKIkiBhbW91bnQgbmFub3RvbmNvaW5zLCB3aGVyZSBiIGlzIHRoZSByZW1haW5pbmcgYmFsYW5jZSkgdG8gb25lc2VsZiwgc28gdGhhdCB0aGUgc3Vic2VxdWVu" + + "dCBvdXRwdXQgYWN0aW9ucyB3b3VsZCBub3QgYmUgYWJsZSB0byBzcGVuZCBtb3JlIG1vbmV5IHRoYW4gdGhlIHJlbWFpbmRlci4gQml0ICsyIGluIG1vZGUgbWVhbnMg" + + "dGhhdCB0aGUgZXh0ZXJuYWwgYWN0aW9uIGRvZXMgbm90IGZhaWwgaWYgdGhlIHNwZWNpZmllZCBhbW91bnQgY2Fubm90IGJlIHJlc2VydmVkOyBpbnN0ZWFkLCBhbGwg" + + "cmVtYWluaW5nIGJhbGFuY2UgaXMgcmVzZXJ2ZWQuIEJpdCArOCBpbiBtb2RlIG1lYW5zIGBhbW91bnQgPC0gLWFtb3VudGAgYmVmb3JlIHBlcmZvcm1pbmcgYW55IGZ1" + + "cnRoZXIgYWN0aW9ucy4gQml0ICs0IGluIG1vZGUgbWVhbnMgdGhhdCBhbW91bnQgaXMgaW5jcmVhc2VkIGJ5IHRoZSBvcmlnaW5hbCBiYWxhbmNlIG9mIHRoZSBjdXJy" + + "ZW50IGFjY291bnQgKGJlZm9yZSB0aGUgY29tcHV0ZSBwaGFzZSksIGluY2x1ZGluZyBhbGwgZXh0cmEgY3VycmVuY2llcywgYmVmb3JlIHBlcmZvcm1pbmcgYW55IG90" + + "aGVyIGNoZWNrcyBhbmQgYWN0aW9ucy4gQ3VycmVudGx5LCBhbW91bnQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLCBhbmQgbW9kZSBtdXN0IGJlIGluIHRo" + + "ZSByYW5nZSAwLi4xNS4KKCkgcmF3X3Jlc2VydmUoaW50IGFtb3VudCwgaW50IG1vZGUpIGltcHVyZSBhc20gIlJBV1JFU0VSVkUiOwo7OzsgU2ltaWxhciB0byByYXdf" + + "cmVzZXJ2ZSwgYnV0IGFsc28gYWNjZXB0cyBhIGRpY3Rpb25hcnkgZXh0cmFfYW1vdW50IChyZXByZXNlbnRlZCBieSBhIGNlbGwgb3IgbnVsbCkgd2l0aCBleHRyYSBj" + + "dXJyZW5jaWVzLiBJbiB0aGlzIHdheSBjdXJyZW5jaWVzIG90aGVyIHRoYW4gVG9uQ29pbiBjYW4gYmUgcmVzZXJ2ZWQuCigpIHJhd19yZXNlcnZlX2V4dHJhKGludCBh" + + "bW91bnQsIGNlbGwgZXh0cmFfYW1vdW50LCBpbnQgbW9kZSkgaW1wdXJlIGFzbSAiUkFXUkVTRVJWRVgiOwo7OzsgU2VuZHMgYSByYXcgbWVzc2FnZSBjb250YWluZWQg" + + "aW4gbXNnLCB3aGljaCBzaG91bGQgY29udGFpbiBhIGNvcnJlY3RseSBzZXJpYWxpemVkIG9iamVjdCBNZXNzYWdlIFgsIHdpdGggdGhlIG9ubHkgZXhjZXB0aW9uIHRo" + + "YXQgdGhlIHNvdXJjZSBhZGRyZXNzIGlzIGFsbG93ZWQgdG8gaGF2ZSBkdW1teSB2YWx1ZSBhZGRyX25vbmUgKHRvIGJlIGF1dG9tYXRpY2FsbHkgcmVwbGFjZWQgd2l0" + + "aCB0aGUgY3VycmVudCBzbWFydCBjb250cmFjdCBhZGRyZXNzKSwgYW5kIGlocl9mZWUsIGZ3ZF9mZWUsIGNyZWF0ZWRfbHQgYW5kIGNyZWF0ZWRfYXQgZmllbGRzIGNh" + + "biBoYXZlIGFyYml0cmFyeSB2YWx1ZXMgKHRvIGJlIHJld3JpdHRlbiB3aXRoIGNvcnJlY3QgdmFsdWVzIGR1cmluZyB0aGUgYWN0aW9uIHBoYXNlIG9mIHRoZSBjdXJy" + + "ZW50IHRyYW5zYWN0aW9uKS4gSW50ZWdlciBwYXJhbWV0ZXIgbW9kZSBjb250YWlucyB0aGUgZmxhZ3MuIEN1cnJlbnRseSBtb2RlID0gMCBpcyB1c2VkIGZvciBvcmRp" + + "bmFyeSBtZXNzYWdlczsgbW9kZSA9IDEyOCBpcyB1c2VkIGZvciBtZXNzYWdlcyB0aGF0IGFyZSB0byBjYXJyeSBhbGwgdGhlIHJlbWFpbmluZyBiYWxhbmNlIG9mIHRo" + + "ZSBjdXJyZW50IHNtYXJ0IGNvbnRyYWN0IChpbnN0ZWFkIG9mIHRoZSB2YWx1ZSBvcmlnaW5hbGx5IGluZGljYXRlZCBpbiB0aGUgbWVzc2FnZSk7IG1vZGUgPSA2NCBp" + + "cyB1c2VkIGZvciBtZXNzYWdlcyB0aGF0IGNhcnJ5IGFsbCB0aGUgcmVtYWluaW5nIHZhbHVlIG9mIHRoZSBpbmJvdW5kIG1lc3NhZ2UgaW4gYWRkaXRpb24gdG8gdGhl" + + "IHZhbHVlIGluaXRpYWxseSBpbmRpY2F0ZWQgaW4gdGhlIG5ldyBtZXNzYWdlIChpZiBiaXQgMCBpcyBub3Qgc2V0LCB0aGUgZ2FzIGZlZXMgYXJlIGRlZHVjdGVkIGZy" + + "b20gdGhpcyBhbW91bnQpOyBtb2RlJyA9IG1vZGUgKyAxIG1lYW5zIHRoYXQgdGhlIHNlbmRlciB3YW50cyB0byBwYXkgdHJhbnNmZXIgZmVlcyBzZXBhcmF0ZWx5OyBt" + + "b2RlJyA9IG1vZGUgKyAyIG1lYW5zIHRoYXQgYW55IGVycm9ycyBhcmlzaW5nIHdoaWxlIHByb2Nlc3NpbmcgdGhpcyBtZXNzYWdlIGR1cmluZyB0aGUgYWN0aW9uIHBo" + + "YXNlIHNob3VsZCBiZSBpZ25vcmVkLiBGaW5hbGx5LCBtb2RlJyA9IG1vZGUgKyAzMiBtZWFucyB0aGF0IHRoZSBjdXJyZW50IGFjY291bnQgbXVzdCBiZSBkZXN0cm95" + + "ZWQgaWYgaXRzIHJlc3VsdGluZyBiYWxhbmNlIGlzIHplcm8uIFRoaXMgZmxhZyBpcyB1c3VhbGx5IGVtcGxveWVkIHRvZ2V0aGVyIHdpdGggKzEyOC4KKCkgc2VuZF9y" + + "YXdfbWVzc2FnZShjZWxsIG1zZywgaW50IG1vZGUpIGltcHVyZSBhc20gIlNFTkRSQVdNU0ciOwo7OzsgQ3JlYXRlcyBhbiBvdXRwdXQgYWN0aW9uIHRoYXQgd291bGQg" + + "Y2hhbmdlIHRoaXMgc21hcnQgY29udHJhY3QgY29kZSB0byB0aGF0IGdpdmVuIGJ5IGNlbGwgbmV3X2NvZGUuIE5vdGljZSB0aGF0IHRoaXMgY2hhbmdlIHdpbGwgdGFr" + + "ZSBlZmZlY3Qgb25seSBhZnRlciB0aGUgc3VjY2Vzc2Z1bCB0ZXJtaW5hdGlvbiBvZiB0aGUgY3VycmVudCBydW4gb2YgdGhlIHNtYXJ0IGNvbnRyYWN0CigpIHNldF9j" + + "b2RlKGNlbGwgbmV3X2NvZGUpIGltcHVyZSBhc20gIlNFVENPREUiOwoKOzs7IEdlbmVyYXRlcyBhIG5ldyBwc2V1ZG8tcmFuZG9tIHVuc2lnbmVkIDI1Ni1iaXQgaW50" + + "ZWdlciB4LiBUaGUgYWxnb3JpdGhtIGlzIGFzIGZvbGxvd3M6IGlmIHIgaXMgdGhlIG9sZCB2YWx1ZSBvZiB0aGUgcmFuZG9tIHNlZWQsIGNvbnNpZGVyZWQgYXMgYSAz" + + "Mi1ieXRlIGFycmF5IChieSBjb25zdHJ1Y3RpbmcgdGhlIGJpZy1lbmRpYW4gcmVwcmVzZW50YXRpb24gb2YgYW4gdW5zaWduZWQgMjU2LWJpdCBpbnRlZ2VyKSwgdGhl" + + "biBpdHMgc2hhNTEyKHIpIGlzIGNvbXB1dGVkOyB0aGUgZmlyc3QgMzIgYnl0ZXMgb2YgdGhpcyBoYXNoIGFyZSBzdG9yZWQgYXMgdGhlIG5ldyB2YWx1ZSByJyBvZiB0" + + "aGUgcmFuZG9tIHNlZWQsIGFuZCB0aGUgcmVtYWluaW5nIDMyIGJ5dGVzIGFyZSByZXR1cm5lZCBhcyB0aGUgbmV4dCByYW5kb20gdmFsdWUgeC4KaW50IHJhbmRvbSgp" + + "IGltcHVyZSBhc20gIlJBTkRVMjU2IjsKOzs7IEdlbmVyYXRlcyBhIG5ldyBwc2V1ZG8tcmFuZG9tIGludGVnZXIgeiBpbiB0aGUgcmFuZ2UgMC4ucmFuZ2XiiJIxIChv" + + "ciByYW5nZS4u4oiSMSwgaWYgcmFuZ2UgPCAwKS4gTW9yZSBwcmVjaXNlbHksIGFuIHVuc2lnbmVkIHJhbmRvbSB2YWx1ZSB4IGlzIGdlbmVyYXRlZCBhcyBpbiByYW5k" + + "b207IHRoZW4geiA6PSB4ICogcmFuZ2UgLyAyXjI1NiBpcyBjb21wdXRlZC4KaW50IHJhbmQoaW50IHJhbmdlKSBpbXB1cmUgYXNtICJSQU5EIjsKOzs7IFJldHVybnMg" + + "dGhlIGN1cnJlbnQgcmFuZG9tIHNlZWQgYXMgYW4gdW5zaWduZWQgMjU2LWJpdCBJbnRlZ2VyLgppbnQgZ2V0X3NlZWQoKSBpbXB1cmUgYXNtICJSQU5EU0VFRCI7Cjs7" + + "OyBTZXRzIHRoZSByYW5kb20gc2VlZCB0byB1bnNpZ25lZCAyNTYtYml0IHNlZWQuCigpIHNldF9zZWVkKGludCB4KSBpbXB1cmUgYXNtICJTRVRSQU5EIjsKOzs7IE1p" + + "eGVzIHVuc2lnbmVkIDI1Ni1iaXQgaW50ZWdlciB4IGludG8gdGhlIHJhbmRvbSBzZWVkIHIgYnkgc2V0dGluZyB0aGUgcmFuZG9tIHNlZWQgdG8gc2hhMjU2IG9mIHRo" + + "ZSBjb25jYXRlbmF0aW9uIG9mIHR3byAzMi1ieXRlIHN0cmluZ3M6IHRoZSBmaXJzdCB3aXRoIHRoZSBiaWctZW5kaWFuIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvbGQg" + + "c2VlZCByLCBhbmQgdGhlIHNlY29uZCB3aXRoIHRoZSBiaWctZW5kaWFuIHJlcHJlc2VudGF0aW9uIG9mIHguCigpIHJhbmRvbWl6ZShpbnQgeCkgaW1wdXJlIGFzbSAi" + + "QUREUkFORCI7Cjs7OyBFcXVpdmFsZW50IHRvIHJhbmRvbWl6ZShjdXJfbHQoKSk7LgooKSByYW5kb21pemVfbHQoKSBpbXB1cmUgYXNtICJMVElNRSIgIkFERFJBTkQi" + + "OwoKOzs7IENoZWNrcyB3aGV0aGVyIHRoZSBkYXRhIHBhcnRzIG9mIHR3byBzbGljZXMgY29pbnNpZGUKaW50IGVxdWFsX3NsaWNlc19iaXRzKHNsaWNlIGEsIHNsaWNl" + + "IGIpIGFzbSAiU0RFUSI7Cjs7OyBDaGVja3Mgd2hldGhlciBiIGlzIGEgbnVsbC4gTm90ZSwgdGhhdCBGdW5DIGFsc28gaGFzIHBvbHltb3JwaGljIG51bGw/IGJ1aWx0" + + "LWluLgppbnQgYnVpbGRlcl9udWxsPyhidWlsZGVyIGIpIGFzbSAiSVNOVUxMIjsKOzs7IENvbmNhdGVuYXRlcyB0d28gYnVpbGRlcnMKYnVpbGRlciBzdG9yZV9idWls" + + "ZGVyKGJ1aWxkZXIgdG8sIGJ1aWxkZXIgZnJvbSkgYXNtICJTVEJSIjsKCjs7IENVU1RPTToKCjs7IFRWTSBVUEdSQURFIDIwMjMtMDcgaHR0cHM6Ly9kb2NzLnRvbi5v" + + "cmcvbGVhcm4vdHZtLWluc3RydWN0aW9ucy90dm0tdXBncmFkZS0yMDIzLTA3Cjs7IEluIG1haW5uZXQgc2luY2UgMjAgRGVjIDIwMjMgaHR0cHM6Ly90Lm1lL3RvbmJs" + + "b2NrY2hhaW4vMjI2Cgo7OzsgUmV0cmlldmVzIGNvZGUgb2Ygc21hcnQtY29udHJhY3QgZnJvbSBjNwpjZWxsIG15X2NvZGUoKSBhc20gIk1ZQ09ERSI7Cg=="; +files["stdlib.tact"] = + "aW1wb3J0ICIuL3N0ZC9wcmltaXRpdmVzIjsKaW1wb3J0ICIuL3N0ZC9jZWxscyI7CmltcG9ydCAiLi9zdGQvY3J5cHRvIjsKaW1wb3J0ICIuL3N0ZC90ZXh0IjsKaW1w" + + "b3J0ICIuL3N0ZC9tYXRoIjsKaW1wb3J0ICIuL3N0ZC9jb250cmFjdCI7CmltcG9ydCAiLi9zdGQvZGVidWciOwppbXBvcnQgIi4vc3RkL2NvbnRleHQiOwppbXBvcnQg" + + "Ii4vc3RkL3Jlc2VydmUiOwppbXBvcnQgIi4vc3RkL3NlbmQiOwppbXBvcnQgIi4vc3RkL2NvbmZpZyI7CmltcG9ydCAiLi9zdGQvYmFzZSI7"; +export default files; diff --git a/stdlib/libs/config.tact b/src/040-imports/stdlib/libs/config.tact similarity index 100% rename from stdlib/libs/config.tact rename to src/040-imports/stdlib/libs/config.tact diff --git a/stdlib/libs/content.tact b/src/040-imports/stdlib/libs/content.tact similarity index 100% rename from stdlib/libs/content.tact rename to src/040-imports/stdlib/libs/content.tact diff --git a/stdlib/libs/deploy.tact b/src/040-imports/stdlib/libs/deploy.tact similarity index 100% rename from stdlib/libs/deploy.tact rename to src/040-imports/stdlib/libs/deploy.tact diff --git a/stdlib/libs/dns.fc b/src/040-imports/stdlib/libs/dns.fc similarity index 100% rename from stdlib/libs/dns.fc rename to src/040-imports/stdlib/libs/dns.fc diff --git a/stdlib/libs/dns.tact b/src/040-imports/stdlib/libs/dns.tact similarity index 100% rename from stdlib/libs/dns.tact rename to src/040-imports/stdlib/libs/dns.tact diff --git a/stdlib/libs/ownable.tact b/src/040-imports/stdlib/libs/ownable.tact similarity index 100% rename from stdlib/libs/ownable.tact rename to src/040-imports/stdlib/libs/ownable.tact diff --git a/stdlib/libs/stoppable.tact b/src/040-imports/stdlib/libs/stoppable.tact similarity index 100% rename from stdlib/libs/stoppable.tact rename to src/040-imports/stdlib/libs/stoppable.tact diff --git a/stdlib/std/base.tact b/src/040-imports/stdlib/std/base.tact similarity index 100% rename from stdlib/std/base.tact rename to src/040-imports/stdlib/std/base.tact diff --git a/stdlib/std/cells.tact b/src/040-imports/stdlib/std/cells.tact similarity index 100% rename from stdlib/std/cells.tact rename to src/040-imports/stdlib/std/cells.tact diff --git a/stdlib/std/config.tact b/src/040-imports/stdlib/std/config.tact similarity index 100% rename from stdlib/std/config.tact rename to src/040-imports/stdlib/std/config.tact diff --git a/stdlib/std/context.tact b/src/040-imports/stdlib/std/context.tact similarity index 100% rename from stdlib/std/context.tact rename to src/040-imports/stdlib/std/context.tact diff --git a/stdlib/std/contract.tact b/src/040-imports/stdlib/std/contract.tact similarity index 100% rename from stdlib/std/contract.tact rename to src/040-imports/stdlib/std/contract.tact diff --git a/stdlib/std/crypto.tact b/src/040-imports/stdlib/std/crypto.tact similarity index 100% rename from stdlib/std/crypto.tact rename to src/040-imports/stdlib/std/crypto.tact diff --git a/stdlib/std/debug.tact b/src/040-imports/stdlib/std/debug.tact similarity index 100% rename from stdlib/std/debug.tact rename to src/040-imports/stdlib/std/debug.tact diff --git a/stdlib/std/math.tact b/src/040-imports/stdlib/std/math.tact similarity index 100% rename from stdlib/std/math.tact rename to src/040-imports/stdlib/std/math.tact diff --git a/stdlib/std/primitives.tact b/src/040-imports/stdlib/std/primitives.tact similarity index 100% rename from stdlib/std/primitives.tact rename to src/040-imports/stdlib/std/primitives.tact diff --git a/stdlib/std/reserve.tact b/src/040-imports/stdlib/std/reserve.tact similarity index 100% rename from stdlib/std/reserve.tact rename to src/040-imports/stdlib/std/reserve.tact diff --git a/stdlib/std/send.tact b/src/040-imports/stdlib/std/send.tact similarity index 100% rename from stdlib/std/send.tact rename to src/040-imports/stdlib/std/send.tact diff --git a/stdlib/std/text.tact b/src/040-imports/stdlib/std/text.tact similarity index 100% rename from stdlib/std/text.tact rename to src/040-imports/stdlib/std/text.tact diff --git a/stdlib/stdlib.fc b/src/040-imports/stdlib/stdlib.fc similarity index 100% rename from stdlib/stdlib.fc rename to src/040-imports/stdlib/stdlib.fc diff --git a/stdlib/stdlib.tact b/src/040-imports/stdlib/stdlib.tact similarity index 100% rename from stdlib/stdlib.tact rename to src/040-imports/stdlib/stdlib.tact diff --git a/stdlib/stdlib_ex.fc b/src/040-imports/stdlib/stdlib_ex.fc similarity index 100% rename from stdlib/stdlib_ex.fc rename to src/040-imports/stdlib/stdlib_ex.fc diff --git a/src/grammar/ast-typed.ts b/src/050-grammar/ast-typed.ts similarity index 100% rename from src/grammar/ast-typed.ts rename to src/050-grammar/ast-typed.ts diff --git a/src/grammar/ast.ts b/src/050-grammar/ast.ts similarity index 100% rename from src/grammar/ast.ts rename to src/050-grammar/ast.ts diff --git a/src/grammar/clone.ts b/src/050-grammar/clone.ts similarity index 99% rename from src/grammar/clone.ts rename to src/050-grammar/clone.ts index 48e8a8a79..d9d114f17 100644 --- a/src/grammar/clone.ts +++ b/src/050-grammar/clone.ts @@ -1,5 +1,5 @@ import { AstNode, FactoryAst } from "./ast"; -import { throwInternalCompilerError } from "../errors"; +import { throwInternalCompilerError } from "../030-error/errors"; export function cloneNode( src: T, diff --git a/src/grammar/compare.ts b/src/050-grammar/compare.ts similarity index 99% rename from src/grammar/compare.ts rename to src/050-grammar/compare.ts index d744caecc..4fe3b7428 100644 --- a/src/grammar/compare.ts +++ b/src/050-grammar/compare.ts @@ -56,7 +56,7 @@ import { AstStatementDestruct, } from "./ast"; import { AstRenamer } from "./rename"; -import { throwInternalCompilerError } from "../errors"; +import { throwInternalCompilerError } from "../030-error/errors"; import JSONbig from "json-bigint"; /** diff --git a/src/grammar/grammar.ts b/src/050-grammar/grammar.ts similarity index 100% rename from src/grammar/grammar.ts rename to src/050-grammar/grammar.ts diff --git a/src/grammar/hash.ts b/src/050-grammar/hash.ts similarity index 99% rename from src/grammar/hash.ts rename to src/050-grammar/hash.ts index a4ac5c616..b7da0770a 100644 --- a/src/grammar/hash.ts +++ b/src/050-grammar/hash.ts @@ -26,7 +26,7 @@ import { AstAsmInstruction, } from "./ast"; import { createHash } from "crypto"; -import { throwInternalCompilerError } from "../errors"; +import { throwInternalCompilerError } from "../030-error/errors"; import JSONbig from "json-bigint"; export type AstHash = string; diff --git a/src/grammar/index.ts b/src/050-grammar/index.ts similarity index 100% rename from src/grammar/index.ts rename to src/050-grammar/index.ts diff --git a/src/grammar/iterators.ts b/src/050-grammar/iterators.ts similarity index 100% rename from src/grammar/iterators.ts rename to src/050-grammar/iterators.ts diff --git a/src/grammar/next/__snapshots__/grammar.spec.ts.snap b/src/050-grammar/next/__snapshots__/grammar.spec.ts.snap similarity index 100% rename from src/grammar/next/__snapshots__/grammar.spec.ts.snap rename to src/050-grammar/next/__snapshots__/grammar.spec.ts.snap diff --git a/src/grammar/next/grammar.gg b/src/050-grammar/next/grammar.gg similarity index 100% rename from src/grammar/next/grammar.gg rename to src/050-grammar/next/grammar.gg diff --git a/src/grammar/next/grammar.spec.ts b/src/050-grammar/next/grammar.spec.ts similarity index 100% rename from src/grammar/next/grammar.spec.ts rename to src/050-grammar/next/grammar.spec.ts diff --git a/src/grammar/next/grammar.ts b/src/050-grammar/next/grammar.ts similarity index 100% rename from src/grammar/next/grammar.ts rename to src/050-grammar/next/grammar.ts diff --git a/src/grammar/next/index.ts b/src/050-grammar/next/index.ts similarity index 99% rename from src/grammar/next/index.ts rename to src/050-grammar/next/index.ts index 6a1341c7e..65acb2340 100644 --- a/src/grammar/next/index.ts +++ b/src/050-grammar/next/index.ts @@ -2,11 +2,14 @@ import * as $ from "@tonstudio/parser-runtime"; import * as A from "../ast"; import * as G from "./grammar"; import type { $ast } from "./grammar"; -import { TactCompilationError, throwInternalCompilerError } from "../../errors"; +import { + TactCompilationError, + throwInternalCompilerError, +} from "../../030-error/errors"; import { SyntaxErrors, syntaxErrorSchema } from "../parser-error"; import { AstSchema, getAstSchema } from "../ast-typed"; import { getSrcInfo, ItemOrigin } from "../src-info"; -import { displayToString } from "../../error/display-to-string"; +import { displayToString } from "../../030-error/display-to-string"; import { makeMakeVisitor } from "../../utils/tricks"; const makeVisitor = makeMakeVisitor("$"); diff --git a/src/grammar/parser-error.ts b/src/050-grammar/parser-error.ts similarity index 98% rename from src/grammar/parser-error.ts rename to src/050-grammar/parser-error.ts index ebd73847f..43327acef 100644 --- a/src/grammar/parser-error.ts +++ b/src/050-grammar/parser-error.ts @@ -1,4 +1,4 @@ -import { ErrorDisplay } from "../error/display"; +import { ErrorDisplay } from "../030-error/display"; const attributeSchema = (name: string) => diff --git a/src/grammar/prev/__snapshots__/grammar.spec.ts.snap b/src/050-grammar/prev/__snapshots__/grammar.spec.ts.snap similarity index 100% rename from src/grammar/prev/__snapshots__/grammar.spec.ts.snap rename to src/050-grammar/prev/__snapshots__/grammar.spec.ts.snap diff --git a/src/050-grammar/prev/copy.build.ts b/src/050-grammar/prev/copy.build.ts new file mode 100644 index 000000000..ef6076509 --- /dev/null +++ b/src/050-grammar/prev/copy.build.ts @@ -0,0 +1,24 @@ +import * as fs from "fs/promises"; +import * as path from "path"; +import * as glob from "glob"; + +const cp = async (fromGlob: string, toPath: string) => { + const files = glob.sync(fromGlob); + for (const file of files) { + await fs.copyFile(file, path.join(toPath, path.basename(file))); + } +}; + +const fromPath = path.join(__dirname, "/grammar.ohm*"); +const toPath = path.join(__dirname, "../../../dist/050-grammar/prev/"); + +const main = async () => { + try { + await cp(fromPath, toPath); + } catch (e) { + console.error(e); + process.exit(1); + } +}; + +void main(); diff --git a/src/grammar/prev/grammar.ohm b/src/050-grammar/prev/grammar.ohm similarity index 100% rename from src/grammar/prev/grammar.ohm rename to src/050-grammar/prev/grammar.ohm diff --git a/src/grammar/prev/grammar.spec.ts b/src/050-grammar/prev/grammar.spec.ts similarity index 100% rename from src/grammar/prev/grammar.spec.ts rename to src/050-grammar/prev/grammar.spec.ts diff --git a/src/grammar/prev/grammar.ts b/src/050-grammar/prev/grammar.ts similarity index 99% rename from src/grammar/prev/grammar.ts rename to src/050-grammar/prev/grammar.ts index 4964f03ce..8b5bc0050 100644 --- a/src/grammar/prev/grammar.ts +++ b/src/050-grammar/prev/grammar.ts @@ -1,6 +1,6 @@ import { Node, IterationNode, NonterminalNode } from "ohm-js"; import tactGrammar from "./grammar.ohm-bundle"; -import { throwInternalCompilerError } from "../../errors"; +import { throwInternalCompilerError } from "../../030-error/errors"; import { AstAugmentedAssignOperation, AstConstantAttribute, @@ -19,7 +19,7 @@ import { FactoryAst, } from "../ast"; import { ItemOrigin, SrcInfo } from "../src-info"; -import { displayToString } from "../../error/display-to-string"; +import { displayToString } from "../../030-error/display-to-string"; import { ParserErrors, parserErrorSchema } from "./parser-error"; import { getSrcInfoFromOhm } from "./src-info"; diff --git a/src/grammar/prev/parser-error.ts b/src/050-grammar/prev/parser-error.ts similarity index 89% rename from src/grammar/prev/parser-error.ts rename to src/050-grammar/prev/parser-error.ts index b5cf31015..8c0709003 100644 --- a/src/grammar/prev/parser-error.ts +++ b/src/050-grammar/prev/parser-error.ts @@ -1,6 +1,6 @@ import { MatchResult } from "ohm-js"; -import { ErrorDisplay } from "../../error/display"; -import { TactCompilationError } from "../../errors"; +import { ErrorDisplay } from "../../030-error/display"; +import { TactCompilationError } from "../../030-error/errors"; import { syntaxErrorSchema } from "../parser-error"; import { ItemOrigin, SrcInfo } from "../src-info"; import { getSrcInfoFromOhm } from "./src-info"; diff --git a/src/grammar/prev/src-info.ts b/src/050-grammar/prev/src-info.ts similarity index 100% rename from src/grammar/prev/src-info.ts rename to src/050-grammar/prev/src-info.ts diff --git a/src/grammar/rename.ts b/src/050-grammar/rename.ts similarity index 100% rename from src/grammar/rename.ts rename to src/050-grammar/rename.ts diff --git a/src/grammar/sort.ts b/src/050-grammar/sort.ts similarity index 95% rename from src/grammar/sort.ts rename to src/050-grammar/sort.ts index 41af072eb..3ae3eccce 100644 --- a/src/grammar/sort.ts +++ b/src/050-grammar/sort.ts @@ -5,7 +5,7 @@ import { AstContractAttribute, AstNode, } from "./ast"; -import { throwInternalCompilerError } from "../errors"; +import { throwInternalCompilerError } from "../030-error/errors"; /** * Provides utilities to sort lists of AST nodes. diff --git a/src/grammar/src-info.ts b/src/050-grammar/src-info.ts similarity index 99% rename from src/grammar/src-info.ts rename to src/050-grammar/src-info.ts index 296a29d3f..6e5747db7 100644 --- a/src/grammar/src-info.ts +++ b/src/050-grammar/src-info.ts @@ -1,4 +1,4 @@ -import { throwInternalCompilerError } from "../errors"; +import { throwInternalCompilerError } from "../030-error/errors"; export type ItemOrigin = "stdlib" | "user"; diff --git a/src/grammar/store.ts b/src/050-grammar/store.ts similarity index 96% rename from src/grammar/store.ts rename to src/050-grammar/store.ts index 651a13e4c..301a65198 100644 --- a/src/grammar/store.ts +++ b/src/050-grammar/store.ts @@ -6,8 +6,8 @@ import { AstTypeDecl, AstAsmFunctionDef, } from "./ast"; -import { throwInternalCompilerError } from "../errors"; -import { CompilerContext, createContextStore } from "../context"; +import { throwInternalCompilerError } from "../030-error/errors"; +import { CompilerContext, createContextStore } from "../010-pipeline/context"; import { ItemOrigin } from "./src-info"; import { Parser } from "./grammar"; diff --git a/src/grammar/test-failed/abstract-const-without-modifier.tact b/src/050-grammar/test-failed/abstract-const-without-modifier.tact similarity index 100% rename from src/grammar/test-failed/abstract-const-without-modifier.tact rename to src/050-grammar/test-failed/abstract-const-without-modifier.tact diff --git a/src/grammar/test-failed/const-abstract-abstract.tact b/src/050-grammar/test-failed/const-abstract-abstract.tact similarity index 100% rename from src/grammar/test-failed/const-abstract-abstract.tact rename to src/050-grammar/test-failed/const-abstract-abstract.tact diff --git a/src/grammar/test-failed/const-override-override.tact b/src/050-grammar/test-failed/const-override-override.tact similarity index 100% rename from src/grammar/test-failed/const-override-override.tact rename to src/050-grammar/test-failed/const-override-override.tact diff --git a/src/grammar/test-failed/const-override-virtual.tact b/src/050-grammar/test-failed/const-override-virtual.tact similarity index 100% rename from src/grammar/test-failed/const-override-virtual.tact rename to src/050-grammar/test-failed/const-override-virtual.tact diff --git a/src/grammar/test-failed/const-override.tact b/src/050-grammar/test-failed/const-override.tact similarity index 100% rename from src/grammar/test-failed/const-override.tact rename to src/050-grammar/test-failed/const-override.tact diff --git a/src/grammar/test-failed/const-virtual-override.tact b/src/050-grammar/test-failed/const-virtual-override.tact similarity index 100% rename from src/grammar/test-failed/const-virtual-override.tact rename to src/050-grammar/test-failed/const-virtual-override.tact diff --git a/src/grammar/test-failed/const-virtual-virtual.tact b/src/050-grammar/test-failed/const-virtual-virtual.tact similarity index 100% rename from src/grammar/test-failed/const-virtual-virtual.tact rename to src/050-grammar/test-failed/const-virtual-virtual.tact diff --git a/src/grammar/test-failed/const-virtual.tact b/src/050-grammar/test-failed/const-virtual.tact similarity index 100% rename from src/grammar/test-failed/const-virtual.tact rename to src/050-grammar/test-failed/const-virtual.tact diff --git a/src/grammar/test-failed/contract-const-abstract-abstract.tact b/src/050-grammar/test-failed/contract-const-abstract-abstract.tact similarity index 100% rename from src/grammar/test-failed/contract-const-abstract-abstract.tact rename to src/050-grammar/test-failed/contract-const-abstract-abstract.tact diff --git a/src/grammar/test-failed/contract-const-abstract-with-initializer.tact b/src/050-grammar/test-failed/contract-const-abstract-with-initializer.tact similarity index 100% rename from src/grammar/test-failed/contract-const-abstract-with-initializer.tact rename to src/050-grammar/test-failed/contract-const-abstract-with-initializer.tact diff --git a/src/grammar/test-failed/contract-const-abstract.tact b/src/050-grammar/test-failed/contract-const-abstract.tact similarity index 100% rename from src/grammar/test-failed/contract-const-abstract.tact rename to src/050-grammar/test-failed/contract-const-abstract.tact diff --git a/src/grammar/test-failed/contract-const-override-override.tact b/src/050-grammar/test-failed/contract-const-override-override.tact similarity index 100% rename from src/grammar/test-failed/contract-const-override-override.tact rename to src/050-grammar/test-failed/contract-const-override-override.tact diff --git a/src/grammar/test-failed/contract-const-virtual-virtual.tact b/src/050-grammar/test-failed/contract-const-virtual-virtual.tact similarity index 100% rename from src/grammar/test-failed/contract-const-virtual-virtual.tact rename to src/050-grammar/test-failed/contract-const-virtual-virtual.tact diff --git a/src/grammar/test-failed/contract-empty-traits-list-with-keyword.tact b/src/050-grammar/test-failed/contract-empty-traits-list-with-keyword.tact similarity index 100% rename from src/grammar/test-failed/contract-empty-traits-list-with-keyword.tact rename to src/050-grammar/test-failed/contract-empty-traits-list-with-keyword.tact diff --git a/src/grammar/test-failed/contract-getter-parens-no-method-id.tact b/src/050-grammar/test-failed/contract-getter-parens-no-method-id.tact similarity index 100% rename from src/grammar/test-failed/contract-getter-parens-no-method-id.tact rename to src/050-grammar/test-failed/contract-getter-parens-no-method-id.tact diff --git a/src/grammar/test-failed/contract-init-trailing-comma-empty-params.tact b/src/050-grammar/test-failed/contract-init-trailing-comma-empty-params.tact similarity index 100% rename from src/grammar/test-failed/contract-init-trailing-comma-empty-params.tact rename to src/050-grammar/test-failed/contract-init-trailing-comma-empty-params.tact diff --git a/src/grammar/test-failed/contract-trailing-comma-empty-traits-list.tact b/src/050-grammar/test-failed/contract-trailing-comma-empty-traits-list.tact similarity index 100% rename from src/grammar/test-failed/contract-trailing-comma-empty-traits-list.tact rename to src/050-grammar/test-failed/contract-trailing-comma-empty-traits-list.tact diff --git a/src/grammar/test-failed/contract-with-imports.tact b/src/050-grammar/test-failed/contract-with-imports.tact similarity index 100% rename from src/grammar/test-failed/contract-with-imports.tact rename to src/050-grammar/test-failed/contract-with-imports.tact diff --git a/src/grammar/test-failed/destructuring-duplicate-source-id.tact b/src/050-grammar/test-failed/destructuring-duplicate-source-id.tact similarity index 100% rename from src/grammar/test-failed/destructuring-duplicate-source-id.tact rename to src/050-grammar/test-failed/destructuring-duplicate-source-id.tact diff --git a/src/grammar/test-failed/expr-fun-call-trailing-comma-no-args.tact b/src/050-grammar/test-failed/expr-fun-call-trailing-comma-no-args.tact similarity index 100% rename from src/grammar/test-failed/expr-fun-call-trailing-comma-no-args.tact rename to src/050-grammar/test-failed/expr-fun-call-trailing-comma-no-args.tact diff --git a/src/grammar/test-failed/expr-method-call-trailing-comma-no-args.tact b/src/050-grammar/test-failed/expr-method-call-trailing-comma-no-args.tact similarity index 100% rename from src/grammar/test-failed/expr-method-call-trailing-comma-no-args.tact rename to src/050-grammar/test-failed/expr-method-call-trailing-comma-no-args.tact diff --git a/src/grammar/test-failed/funcid-native-fun-arith-operator.tact b/src/050-grammar/test-failed/funcid-native-fun-arith-operator.tact similarity index 100% rename from src/grammar/test-failed/funcid-native-fun-arith-operator.tact rename to src/050-grammar/test-failed/funcid-native-fun-arith-operator.tact diff --git a/src/grammar/test-failed/funcid-native-fun-assign-operator.tact b/src/050-grammar/test-failed/funcid-native-fun-assign-operator.tact similarity index 100% rename from src/grammar/test-failed/funcid-native-fun-assign-operator.tact rename to src/050-grammar/test-failed/funcid-native-fun-assign-operator.tact diff --git a/src/grammar/test-failed/funcid-native-fun-bitwise-operator.tact b/src/050-grammar/test-failed/funcid-native-fun-bitwise-operator.tact similarity index 100% rename from src/grammar/test-failed/funcid-native-fun-bitwise-operator.tact rename to src/050-grammar/test-failed/funcid-native-fun-bitwise-operator.tact diff --git a/src/grammar/test-failed/funcid-native-fun-comma.tact b/src/050-grammar/test-failed/funcid-native-fun-comma.tact similarity index 100% rename from src/grammar/test-failed/funcid-native-fun-comma.tact rename to src/050-grammar/test-failed/funcid-native-fun-comma.tact diff --git a/src/grammar/test-failed/funcid-native-fun-comparison-operator.tact b/src/050-grammar/test-failed/funcid-native-fun-comparison-operator.tact similarity index 100% rename from src/grammar/test-failed/funcid-native-fun-comparison-operator.tact rename to src/050-grammar/test-failed/funcid-native-fun-comparison-operator.tact diff --git a/src/grammar/test-failed/funcid-native-fun-control-keyword.tact b/src/050-grammar/test-failed/funcid-native-fun-control-keyword.tact similarity index 100% rename from src/grammar/test-failed/funcid-native-fun-control-keyword.tact rename to src/050-grammar/test-failed/funcid-native-fun-control-keyword.tact diff --git a/src/grammar/test-failed/funcid-native-fun-delimiter.tact b/src/050-grammar/test-failed/funcid-native-fun-delimiter.tact similarity index 100% rename from src/grammar/test-failed/funcid-native-fun-delimiter.tact rename to src/050-grammar/test-failed/funcid-native-fun-delimiter.tact diff --git a/src/grammar/test-failed/funcid-native-fun-directive.tact b/src/050-grammar/test-failed/funcid-native-fun-directive.tact similarity index 100% rename from src/grammar/test-failed/funcid-native-fun-directive.tact rename to src/050-grammar/test-failed/funcid-native-fun-directive.tact diff --git a/src/grammar/test-failed/funcid-native-fun-dot.tact b/src/050-grammar/test-failed/funcid-native-fun-dot.tact similarity index 100% rename from src/grammar/test-failed/funcid-native-fun-dot.tact rename to src/050-grammar/test-failed/funcid-native-fun-dot.tact diff --git a/src/grammar/test-failed/funcid-native-fun-keyword.tact b/src/050-grammar/test-failed/funcid-native-fun-keyword.tact similarity index 100% rename from src/grammar/test-failed/funcid-native-fun-keyword.tact rename to src/050-grammar/test-failed/funcid-native-fun-keyword.tact diff --git a/src/grammar/test-failed/funcid-native-fun-multiline-comments.tact b/src/050-grammar/test-failed/funcid-native-fun-multiline-comments.tact similarity index 100% rename from src/grammar/test-failed/funcid-native-fun-multiline-comments.tact rename to src/050-grammar/test-failed/funcid-native-fun-multiline-comments.tact diff --git a/src/grammar/test-failed/funcid-native-fun-number-decimal.tact b/src/050-grammar/test-failed/funcid-native-fun-number-decimal.tact similarity index 100% rename from src/grammar/test-failed/funcid-native-fun-number-decimal.tact rename to src/050-grammar/test-failed/funcid-native-fun-number-decimal.tact diff --git a/src/grammar/test-failed/funcid-native-fun-number-hexadecimal-2.tact b/src/050-grammar/test-failed/funcid-native-fun-number-hexadecimal-2.tact similarity index 100% rename from src/grammar/test-failed/funcid-native-fun-number-hexadecimal-2.tact rename to src/050-grammar/test-failed/funcid-native-fun-number-hexadecimal-2.tact diff --git a/src/grammar/test-failed/funcid-native-fun-number-hexadecimal.tact b/src/050-grammar/test-failed/funcid-native-fun-number-hexadecimal.tact similarity index 100% rename from src/grammar/test-failed/funcid-native-fun-number-hexadecimal.tact rename to src/050-grammar/test-failed/funcid-native-fun-number-hexadecimal.tact diff --git a/src/grammar/test-failed/funcid-native-fun-number-neg-decimal.tact b/src/050-grammar/test-failed/funcid-native-fun-number-neg-decimal.tact similarity index 100% rename from src/grammar/test-failed/funcid-native-fun-number-neg-decimal.tact rename to src/050-grammar/test-failed/funcid-native-fun-number-neg-decimal.tact diff --git a/src/grammar/test-failed/funcid-native-fun-number-neg-hexadecimal.tact b/src/050-grammar/test-failed/funcid-native-fun-number-neg-hexadecimal.tact similarity index 100% rename from src/grammar/test-failed/funcid-native-fun-number-neg-hexadecimal.tact rename to src/050-grammar/test-failed/funcid-native-fun-number-neg-hexadecimal.tact diff --git a/src/grammar/test-failed/funcid-native-fun-number.tact b/src/050-grammar/test-failed/funcid-native-fun-number.tact similarity index 100% rename from src/grammar/test-failed/funcid-native-fun-number.tact rename to src/050-grammar/test-failed/funcid-native-fun-number.tact diff --git a/src/grammar/test-failed/funcid-native-fun-only-underscore.tact b/src/050-grammar/test-failed/funcid-native-fun-only-underscore.tact similarity index 100% rename from src/grammar/test-failed/funcid-native-fun-only-underscore.tact rename to src/050-grammar/test-failed/funcid-native-fun-only-underscore.tact diff --git a/src/grammar/test-failed/funcid-native-fun-parens.tact b/src/050-grammar/test-failed/funcid-native-fun-parens.tact similarity index 100% rename from src/grammar/test-failed/funcid-native-fun-parens.tact rename to src/050-grammar/test-failed/funcid-native-fun-parens.tact diff --git a/src/grammar/test-failed/funcid-native-fun-semicolons.tact b/src/050-grammar/test-failed/funcid-native-fun-semicolons.tact similarity index 100% rename from src/grammar/test-failed/funcid-native-fun-semicolons.tact rename to src/050-grammar/test-failed/funcid-native-fun-semicolons.tact diff --git a/src/grammar/test-failed/funcid-native-fun-space.tact b/src/050-grammar/test-failed/funcid-native-fun-space.tact similarity index 100% rename from src/grammar/test-failed/funcid-native-fun-space.tact rename to src/050-grammar/test-failed/funcid-native-fun-space.tact diff --git a/src/grammar/test-failed/funcid-native-fun-square-brackets.tact b/src/050-grammar/test-failed/funcid-native-fun-square-brackets.tact similarity index 100% rename from src/grammar/test-failed/funcid-native-fun-square-brackets.tact rename to src/050-grammar/test-failed/funcid-native-fun-square-brackets.tact diff --git a/src/grammar/test-failed/funcid-native-fun-string.tact b/src/050-grammar/test-failed/funcid-native-fun-string.tact similarity index 100% rename from src/grammar/test-failed/funcid-native-fun-string.tact rename to src/050-grammar/test-failed/funcid-native-fun-string.tact diff --git a/src/grammar/test-failed/funcid-native-fun-type-keyword.tact b/src/050-grammar/test-failed/funcid-native-fun-type-keyword.tact similarity index 100% rename from src/grammar/test-failed/funcid-native-fun-type-keyword.tact rename to src/050-grammar/test-failed/funcid-native-fun-type-keyword.tact diff --git a/src/grammar/test-failed/funcid-native-fun-unclosed-parens.tact b/src/050-grammar/test-failed/funcid-native-fun-unclosed-parens.tact similarity index 100% rename from src/grammar/test-failed/funcid-native-fun-unclosed-parens.tact rename to src/050-grammar/test-failed/funcid-native-fun-unclosed-parens.tact diff --git a/src/grammar/test-failed/ident-cannot-be-if-reserved-word.tact b/src/050-grammar/test-failed/ident-cannot-be-if-reserved-word.tact similarity index 100% rename from src/grammar/test-failed/ident-cannot-be-if-reserved-word.tact rename to src/050-grammar/test-failed/ident-cannot-be-if-reserved-word.tact diff --git a/src/grammar/test-failed/ident-contract-cannot-start-with-__gen.tact b/src/050-grammar/test-failed/ident-contract-cannot-start-with-__gen.tact similarity index 100% rename from src/grammar/test-failed/ident-contract-cannot-start-with-__gen.tact rename to src/050-grammar/test-failed/ident-contract-cannot-start-with-__gen.tact diff --git a/src/grammar/test-failed/ident-fun-cannot-start-with-__gen.tact b/src/050-grammar/test-failed/ident-fun-cannot-start-with-__gen.tact similarity index 100% rename from src/grammar/test-failed/ident-fun-cannot-start-with-__gen.tact rename to src/050-grammar/test-failed/ident-fun-cannot-start-with-__gen.tact diff --git a/src/grammar/test-failed/ident-fun-param-cannot-start-with-__gen.tact b/src/050-grammar/test-failed/ident-fun-param-cannot-start-with-__gen.tact similarity index 100% rename from src/grammar/test-failed/ident-fun-param-cannot-start-with-__gen.tact rename to src/050-grammar/test-failed/ident-fun-param-cannot-start-with-__gen.tact diff --git a/src/grammar/test-failed/ident-fun-param-cannot-start-with-__tact.tact b/src/050-grammar/test-failed/ident-fun-param-cannot-start-with-__tact.tact similarity index 100% rename from src/grammar/test-failed/ident-fun-param-cannot-start-with-__tact.tact rename to src/050-grammar/test-failed/ident-fun-param-cannot-start-with-__tact.tact diff --git a/src/grammar/test-failed/ident-init-param-cannot-start-with-__tact.tact b/src/050-grammar/test-failed/ident-init-param-cannot-start-with-__tact.tact similarity index 100% rename from src/grammar/test-failed/ident-init-param-cannot-start-with-__tact.tact rename to src/050-grammar/test-failed/ident-init-param-cannot-start-with-__tact.tact diff --git a/src/grammar/test-failed/ident-let-cannot-start-with-__gen.tact b/src/050-grammar/test-failed/ident-let-cannot-start-with-__gen.tact similarity index 100% rename from src/grammar/test-failed/ident-let-cannot-start-with-__gen.tact rename to src/050-grammar/test-failed/ident-let-cannot-start-with-__gen.tact diff --git a/src/grammar/test-failed/ident-let-cannot-start-with-__tact.tact b/src/050-grammar/test-failed/ident-let-cannot-start-with-__tact.tact similarity index 100% rename from src/grammar/test-failed/ident-let-cannot-start-with-__tact.tact rename to src/050-grammar/test-failed/ident-let-cannot-start-with-__tact.tact diff --git a/src/grammar/test-failed/ident-struct-cannot-start-with-__gen.tact b/src/050-grammar/test-failed/ident-struct-cannot-start-with-__gen.tact similarity index 100% rename from src/grammar/test-failed/ident-struct-cannot-start-with-__gen.tact rename to src/050-grammar/test-failed/ident-struct-cannot-start-with-__gen.tact diff --git a/src/grammar/test-failed/item-fun-non-void-trailing-comma-no-params.tact b/src/050-grammar/test-failed/item-fun-non-void-trailing-comma-no-params.tact similarity index 100% rename from src/grammar/test-failed/item-fun-non-void-trailing-comma-no-params.tact rename to src/050-grammar/test-failed/item-fun-non-void-trailing-comma-no-params.tact diff --git a/src/grammar/test-failed/item-fun-void-trailing-comma-no-params.tact b/src/050-grammar/test-failed/item-fun-void-trailing-comma-no-params.tact similarity index 100% rename from src/grammar/test-failed/item-fun-void-trailing-comma-no-params.tact rename to src/050-grammar/test-failed/item-fun-void-trailing-comma-no-params.tact diff --git a/src/grammar/test-failed/item-fun-without-body.tact b/src/050-grammar/test-failed/item-fun-without-body.tact similarity index 100% rename from src/grammar/test-failed/item-fun-without-body.tact rename to src/050-grammar/test-failed/item-fun-without-body.tact diff --git a/src/grammar/test-failed/item-native-fun-not-void-decl-trailing-comma-no-params.tact b/src/050-grammar/test-failed/item-native-fun-not-void-decl-trailing-comma-no-params.tact similarity index 100% rename from src/grammar/test-failed/item-native-fun-not-void-decl-trailing-comma-no-params.tact rename to src/050-grammar/test-failed/item-native-fun-not-void-decl-trailing-comma-no-params.tact diff --git a/src/grammar/test-failed/item-native-fun-void-decl-trailing-comma-no-params.tact b/src/050-grammar/test-failed/item-native-fun-void-decl-trailing-comma-no-params.tact similarity index 100% rename from src/grammar/test-failed/item-native-fun-void-decl-trailing-comma-no-params.tact rename to src/050-grammar/test-failed/item-native-fun-void-decl-trailing-comma-no-params.tact diff --git a/src/grammar/test-failed/items-asm-fun-1.tact b/src/050-grammar/test-failed/items-asm-fun-1.tact similarity index 100% rename from src/grammar/test-failed/items-asm-fun-1.tact rename to src/050-grammar/test-failed/items-asm-fun-1.tact diff --git a/src/grammar/test-failed/items-asm-fun-2.tact b/src/050-grammar/test-failed/items-asm-fun-2.tact similarity index 100% rename from src/grammar/test-failed/items-asm-fun-2.tact rename to src/050-grammar/test-failed/items-asm-fun-2.tact diff --git a/src/grammar/test-failed/items-asm-fun-3.tact b/src/050-grammar/test-failed/items-asm-fun-3.tact similarity index 100% rename from src/grammar/test-failed/items-asm-fun-3.tact rename to src/050-grammar/test-failed/items-asm-fun-3.tact diff --git a/src/grammar/test-failed/items-asm-fun-4.tact b/src/050-grammar/test-failed/items-asm-fun-4.tact similarity index 100% rename from src/grammar/test-failed/items-asm-fun-4.tact rename to src/050-grammar/test-failed/items-asm-fun-4.tact diff --git a/src/grammar/test-failed/items-asm-fun-5.tact b/src/050-grammar/test-failed/items-asm-fun-5.tact similarity index 100% rename from src/grammar/test-failed/items-asm-fun-5.tact rename to src/050-grammar/test-failed/items-asm-fun-5.tact diff --git a/src/grammar/test-failed/literal-dec-trailing-underscore.tact b/src/050-grammar/test-failed/literal-dec-trailing-underscore.tact similarity index 100% rename from src/grammar/test-failed/literal-dec-trailing-underscore.tact rename to src/050-grammar/test-failed/literal-dec-trailing-underscore.tact diff --git a/src/grammar/test-failed/literal-double-underscore.tact b/src/050-grammar/test-failed/literal-double-underscore.tact similarity index 100% rename from src/grammar/test-failed/literal-double-underscore.tact rename to src/050-grammar/test-failed/literal-double-underscore.tact diff --git a/src/grammar/test-failed/literal-hex-trailing-underscore.tact b/src/050-grammar/test-failed/literal-hex-trailing-underscore.tact similarity index 100% rename from src/grammar/test-failed/literal-hex-trailing-underscore.tact rename to src/050-grammar/test-failed/literal-hex-trailing-underscore.tact diff --git a/src/grammar/test-failed/literal-no-underscore-after-0b.tact b/src/050-grammar/test-failed/literal-no-underscore-after-0b.tact similarity index 100% rename from src/grammar/test-failed/literal-no-underscore-after-0b.tact rename to src/050-grammar/test-failed/literal-no-underscore-after-0b.tact diff --git a/src/grammar/test-failed/literal-no-underscores-if-leading-zero.tact b/src/050-grammar/test-failed/literal-no-underscores-if-leading-zero.tact similarity index 100% rename from src/grammar/test-failed/literal-no-underscores-if-leading-zero.tact rename to src/050-grammar/test-failed/literal-no-underscores-if-leading-zero.tact diff --git a/src/grammar/test-failed/literal-non-binary-digits.tact b/src/050-grammar/test-failed/literal-non-binary-digits.tact similarity index 100% rename from src/grammar/test-failed/literal-non-binary-digits.tact rename to src/050-grammar/test-failed/literal-non-binary-digits.tact diff --git a/src/grammar/test-failed/literal-underscore-after-leading-zero.tact b/src/050-grammar/test-failed/literal-underscore-after-leading-zero.tact similarity index 100% rename from src/grammar/test-failed/literal-underscore-after-leading-zero.tact rename to src/050-grammar/test-failed/literal-underscore-after-leading-zero.tact diff --git a/src/grammar/test-failed/struct-double-semicolon.tact b/src/050-grammar/test-failed/struct-double-semicolon.tact similarity index 100% rename from src/grammar/test-failed/struct-double-semicolon.tact rename to src/050-grammar/test-failed/struct-double-semicolon.tact diff --git a/src/grammar/test-failed/struct-missing-semicolon-between-fields-with-initializer.tact b/src/050-grammar/test-failed/struct-missing-semicolon-between-fields-with-initializer.tact similarity index 100% rename from src/grammar/test-failed/struct-missing-semicolon-between-fields-with-initializer.tact rename to src/050-grammar/test-failed/struct-missing-semicolon-between-fields-with-initializer.tact diff --git a/src/grammar/test-failed/struct-missing-semicolon-between-fields.tact b/src/050-grammar/test-failed/struct-missing-semicolon-between-fields.tact similarity index 100% rename from src/grammar/test-failed/struct-missing-semicolon-between-fields.tact rename to src/050-grammar/test-failed/struct-missing-semicolon-between-fields.tact diff --git a/src/grammar/test-failed/trait-const-abstract-with-initializer.tact b/src/050-grammar/test-failed/trait-const-abstract-with-initializer.tact similarity index 100% rename from src/grammar/test-failed/trait-const-abstract-with-initializer.tact rename to src/050-grammar/test-failed/trait-const-abstract-with-initializer.tact diff --git a/src/grammar/test-failed/trait-empty-traits-list-with-keyword.tact b/src/050-grammar/test-failed/trait-empty-traits-list-with-keyword.tact similarity index 100% rename from src/grammar/test-failed/trait-empty-traits-list-with-keyword.tact rename to src/050-grammar/test-failed/trait-empty-traits-list-with-keyword.tact diff --git a/src/grammar/test-failed/trait-fun-non-void-trailing-comma-no-params.tact b/src/050-grammar/test-failed/trait-fun-non-void-trailing-comma-no-params.tact similarity index 100% rename from src/grammar/test-failed/trait-fun-non-void-trailing-comma-no-params.tact rename to src/050-grammar/test-failed/trait-fun-non-void-trailing-comma-no-params.tact diff --git a/src/grammar/test-failed/trait-fun-void-trailing-comma-no-params.tact b/src/050-grammar/test-failed/trait-fun-void-trailing-comma-no-params.tact similarity index 100% rename from src/grammar/test-failed/trait-fun-void-trailing-comma-no-params.tact rename to src/050-grammar/test-failed/trait-fun-void-trailing-comma-no-params.tact diff --git a/src/grammar/test-failed/trait-trailing-comma-empty-traits-list.tact b/src/050-grammar/test-failed/trait-trailing-comma-empty-traits-list.tact similarity index 100% rename from src/grammar/test-failed/trait-trailing-comma-empty-traits-list.tact rename to src/050-grammar/test-failed/trait-trailing-comma-empty-traits-list.tact diff --git a/src/grammar/test-failed/type-ident-msg-should-be-capitalized.tact b/src/050-grammar/test-failed/type-ident-msg-should-be-capitalized.tact similarity index 100% rename from src/grammar/test-failed/type-ident-msg-should-be-capitalized.tact rename to src/050-grammar/test-failed/type-ident-msg-should-be-capitalized.tact diff --git a/src/grammar/test-failed/type-ident-struct-should-be-capitalized.tact b/src/050-grammar/test-failed/type-ident-struct-should-be-capitalized.tact similarity index 100% rename from src/grammar/test-failed/type-ident-struct-should-be-capitalized.tact rename to src/050-grammar/test-failed/type-ident-struct-should-be-capitalized.tact diff --git a/src/grammar/test/abstract-const.tact b/src/050-grammar/test/abstract-const.tact similarity index 100% rename from src/grammar/test/abstract-const.tact rename to src/050-grammar/test/abstract-const.tact diff --git a/src/grammar/test/case-35.tact b/src/050-grammar/test/case-35.tact similarity index 100% rename from src/grammar/test/case-35.tact rename to src/050-grammar/test/case-35.tact diff --git a/src/grammar/test/contract-getter-with-method-id.tact b/src/050-grammar/test/contract-getter-with-method-id.tact similarity index 100% rename from src/grammar/test/contract-getter-with-method-id.tact rename to src/050-grammar/test/contract-getter-with-method-id.tact diff --git a/src/grammar/test/contract-optional-semicolon-for-last-const-def.tact b/src/050-grammar/test/contract-optional-semicolon-for-last-const-def.tact similarity index 100% rename from src/grammar/test/contract-optional-semicolon-for-last-const-def.tact rename to src/050-grammar/test/contract-optional-semicolon-for-last-const-def.tact diff --git a/src/grammar/test/contract-optional-semicolon-for-last-storage-var.tact b/src/050-grammar/test/contract-optional-semicolon-for-last-storage-var.tact similarity index 100% rename from src/grammar/test/contract-optional-semicolon-for-last-storage-var.tact rename to src/050-grammar/test/contract-optional-semicolon-for-last-storage-var.tact diff --git a/src/grammar/test/contract-with-const-override.tact b/src/050-grammar/test/contract-with-const-override.tact similarity index 100% rename from src/grammar/test/contract-with-const-override.tact rename to src/050-grammar/test/contract-with-const-override.tact diff --git a/src/grammar/test/contract-with-imports.tact b/src/050-grammar/test/contract-with-imports.tact similarity index 100% rename from src/grammar/test/contract-with-imports.tact rename to src/050-grammar/test/contract-with-imports.tact diff --git a/src/grammar/test/contract-with-init.tact b/src/050-grammar/test/contract-with-init.tact similarity index 100% rename from src/grammar/test/contract-with-init.tact rename to src/050-grammar/test/contract-with-init.tact diff --git a/src/grammar/test/contract-with-trait-string-literal.tact b/src/050-grammar/test/contract-with-trait-string-literal.tact similarity index 100% rename from src/grammar/test/contract-with-trait-string-literal.tact rename to src/050-grammar/test/contract-with-trait-string-literal.tact diff --git a/src/grammar/test/contract-with-trait.tact b/src/050-grammar/test/contract-with-trait.tact similarity index 100% rename from src/grammar/test/contract-with-trait.tact rename to src/050-grammar/test/contract-with-trait.tact diff --git a/src/grammar/test/expr-arith-and-cmp.tact b/src/050-grammar/test/expr-arith-and-cmp.tact similarity index 100% rename from src/grammar/test/expr-arith-and-cmp.tact rename to src/050-grammar/test/expr-arith-and-cmp.tact diff --git a/src/grammar/test/expr-arith-bool-cmp-method-call.tact b/src/050-grammar/test/expr-arith-bool-cmp-method-call.tact similarity index 100% rename from src/grammar/test/expr-arith-bool-cmp-method-call.tact rename to src/050-grammar/test/expr-arith-bool-cmp-method-call.tact diff --git a/src/grammar/test/expr-arith-bool-var.tact b/src/050-grammar/test/expr-arith-bool-var.tact similarity index 100% rename from src/grammar/test/expr-arith-bool-var.tact rename to src/050-grammar/test/expr-arith-bool-var.tact diff --git a/src/grammar/test/expr-arith.tact b/src/050-grammar/test/expr-arith.tact similarity index 100% rename from src/grammar/test/expr-arith.tact rename to src/050-grammar/test/expr-arith.tact diff --git a/src/grammar/test/expr-chaining-unbox.tact b/src/050-grammar/test/expr-chaining-unbox.tact similarity index 100% rename from src/grammar/test/expr-chaining-unbox.tact rename to src/050-grammar/test/expr-chaining-unbox.tact diff --git a/src/grammar/test/expr-condition-with-or.tact b/src/050-grammar/test/expr-condition-with-or.tact similarity index 100% rename from src/grammar/test/expr-condition-with-or.tact rename to src/050-grammar/test/expr-condition-with-or.tact diff --git a/src/grammar/test/expr-conditional-with-let.tact b/src/050-grammar/test/expr-conditional-with-let.tact similarity index 100% rename from src/grammar/test/expr-conditional-with-let.tact rename to src/050-grammar/test/expr-conditional-with-let.tact diff --git a/src/grammar/test/expr-conditional.tact b/src/050-grammar/test/expr-conditional.tact similarity index 100% rename from src/grammar/test/expr-conditional.tact rename to src/050-grammar/test/expr-conditional.tact diff --git a/src/grammar/test/expr-equality.spec.ts b/src/050-grammar/test/expr-equality.spec.ts similarity index 100% rename from src/grammar/test/expr-equality.spec.ts rename to src/050-grammar/test/expr-equality.spec.ts diff --git a/src/grammar/test/expr-fun-call.tact b/src/050-grammar/test/expr-fun-call.tact similarity index 100% rename from src/grammar/test/expr-fun-call.tact rename to src/050-grammar/test/expr-fun-call.tact diff --git a/src/grammar/test/expr-int-literal.tact b/src/050-grammar/test/expr-int-literal.tact similarity index 100% rename from src/grammar/test/expr-int-literal.tact rename to src/050-grammar/test/expr-int-literal.tact diff --git a/src/grammar/test/expr-is-value.spec.ts b/src/050-grammar/test/expr-is-value.spec.ts similarity index 100% rename from src/grammar/test/expr-is-value.spec.ts rename to src/050-grammar/test/expr-is-value.spec.ts diff --git a/src/grammar/test/expr-nested-conditional.tact b/src/050-grammar/test/expr-nested-conditional.tact similarity index 100% rename from src/grammar/test/expr-nested-conditional.tact rename to src/050-grammar/test/expr-nested-conditional.tact diff --git a/src/grammar/test/expr-parens.tact b/src/050-grammar/test/expr-parens.tact similarity index 100% rename from src/grammar/test/expr-parens.tact rename to src/050-grammar/test/expr-parens.tact diff --git a/src/grammar/test/expr-with-unbox.tact b/src/050-grammar/test/expr-with-unbox.tact similarity index 100% rename from src/grammar/test/expr-with-unbox.tact rename to src/050-grammar/test/expr-with-unbox.tact diff --git a/src/grammar/test/expr-with-var.tact b/src/050-grammar/test/expr-with-var.tact similarity index 100% rename from src/grammar/test/expr-with-var.tact rename to src/050-grammar/test/expr-with-var.tact diff --git a/src/grammar/test/items-asm-funs.tact b/src/050-grammar/test/items-asm-funs.tact similarity index 100% rename from src/grammar/test/items-asm-funs.tact rename to src/050-grammar/test/items-asm-funs.tact diff --git a/src/grammar/test/items-method-def-initof-trailing-comma-shifts.tact b/src/050-grammar/test/items-method-def-initof-trailing-comma-shifts.tact similarity index 100% rename from src/grammar/test/items-method-def-initof-trailing-comma-shifts.tact rename to src/050-grammar/test/items-method-def-initof-trailing-comma-shifts.tact diff --git a/src/grammar/test/items-multi-funs.tact b/src/050-grammar/test/items-multi-funs.tact similarity index 100% rename from src/grammar/test/items-multi-funs.tact rename to src/050-grammar/test/items-multi-funs.tact diff --git a/src/grammar/test/items-native-fun-decls.tact b/src/050-grammar/test/items-native-fun-decls.tact similarity index 100% rename from src/grammar/test/items-native-fun-decls.tact rename to src/050-grammar/test/items-native-fun-decls.tact diff --git a/src/grammar/test/items-native-fun-funcid.tact b/src/050-grammar/test/items-native-fun-funcid.tact similarity index 100% rename from src/grammar/test/items-native-fun-funcid.tact rename to src/050-grammar/test/items-native-fun-funcid.tact diff --git a/src/grammar/test/items-struct-msg-fun-const.tact b/src/050-grammar/test/items-struct-msg-fun-const.tact similarity index 100% rename from src/grammar/test/items-struct-msg-fun-const.tact rename to src/050-grammar/test/items-struct-msg-fun-const.tact diff --git a/src/grammar/test/literals-int-underscores-bin-dec-hex-oct.tact b/src/050-grammar/test/literals-int-underscores-bin-dec-hex-oct.tact similarity index 100% rename from src/grammar/test/literals-int-underscores-bin-dec-hex-oct.tact rename to src/050-grammar/test/literals-int-underscores-bin-dec-hex-oct.tact diff --git a/src/grammar/test/stmt-augmented-assign-arith.tact b/src/050-grammar/test/stmt-augmented-assign-arith.tact similarity index 100% rename from src/grammar/test/stmt-augmented-assign-arith.tact rename to src/050-grammar/test/stmt-augmented-assign-arith.tact diff --git a/src/grammar/test/stmt-augmented-assign-bitwise.tact b/src/050-grammar/test/stmt-augmented-assign-bitwise.tact similarity index 100% rename from src/grammar/test/stmt-augmented-assign-bitwise.tact rename to src/050-grammar/test/stmt-augmented-assign-bitwise.tact diff --git a/src/grammar/test/stmt-augmented-assign-logic.tact b/src/050-grammar/test/stmt-augmented-assign-logic.tact similarity index 100% rename from src/grammar/test/stmt-augmented-assign-logic.tact rename to src/050-grammar/test/stmt-augmented-assign-logic.tact diff --git a/src/grammar/test/stmt-destructuring.tact b/src/050-grammar/test/stmt-destructuring.tact similarity index 100% rename from src/grammar/test/stmt-destructuring.tact rename to src/050-grammar/test/stmt-destructuring.tact diff --git a/src/grammar/test/stmt-if-else.tact b/src/050-grammar/test/stmt-if-else.tact similarity index 100% rename from src/grammar/test/stmt-if-else.tact rename to src/050-grammar/test/stmt-if-else.tact diff --git a/src/grammar/test/stmt-if.tact b/src/050-grammar/test/stmt-if.tact similarity index 100% rename from src/grammar/test/stmt-if.tact rename to src/050-grammar/test/stmt-if.tact diff --git a/src/grammar/test/stmt-optional-semicolon-for-last-statement.tact b/src/050-grammar/test/stmt-optional-semicolon-for-last-statement.tact similarity index 100% rename from src/grammar/test/stmt-optional-semicolon-for-last-statement.tact rename to src/050-grammar/test/stmt-optional-semicolon-for-last-statement.tact diff --git a/src/grammar/test/stmt-while-loop.tact b/src/050-grammar/test/stmt-while-loop.tact similarity index 100% rename from src/grammar/test/stmt-while-loop.tact rename to src/050-grammar/test/stmt-while-loop.tact diff --git a/src/grammar/test/stmt-while-repeat-do-loops.tact b/src/050-grammar/test/stmt-while-repeat-do-loops.tact similarity index 100% rename from src/grammar/test/stmt-while-repeat-do-loops.tact rename to src/050-grammar/test/stmt-while-repeat-do-loops.tact diff --git a/src/grammar/test/struct-field-punning.tact b/src/050-grammar/test/struct-field-punning.tact similarity index 100% rename from src/grammar/test/struct-field-punning.tact rename to src/050-grammar/test/struct-field-punning.tact diff --git a/src/grammar/test/struct-msg-as.tact b/src/050-grammar/test/struct-msg-as.tact similarity index 100% rename from src/grammar/test/struct-msg-as.tact rename to src/050-grammar/test/struct-msg-as.tact diff --git a/src/grammar/test/struct-msg-initializers.tact b/src/050-grammar/test/struct-msg-initializers.tact similarity index 100% rename from src/grammar/test/struct-msg-initializers.tact rename to src/050-grammar/test/struct-msg-initializers.tact diff --git a/src/grammar/test/struct-msg-trailing-semicolon.tact b/src/050-grammar/test/struct-msg-trailing-semicolon.tact similarity index 100% rename from src/grammar/test/struct-msg-trailing-semicolon.tact rename to src/050-grammar/test/struct-msg-trailing-semicolon.tact diff --git a/src/grammar/test/trait-optional-semicolon-for-last-const-decl.tact b/src/050-grammar/test/trait-optional-semicolon-for-last-const-decl.tact similarity index 100% rename from src/grammar/test/trait-optional-semicolon-for-last-const-decl.tact rename to src/050-grammar/test/trait-optional-semicolon-for-last-const-decl.tact diff --git a/src/grammar/test/trait-optional-semicolon-for-last-fun-decl.tact b/src/050-grammar/test/trait-optional-semicolon-for-last-fun-decl.tact similarity index 100% rename from src/grammar/test/trait-optional-semicolon-for-last-fun-decl.tact rename to src/050-grammar/test/trait-optional-semicolon-for-last-fun-decl.tact diff --git a/src/grammar/test/traits-inheritance-trailing-comma.tact b/src/050-grammar/test/traits-inheritance-trailing-comma.tact similarity index 100% rename from src/grammar/test/traits-inheritance-trailing-comma.tact rename to src/050-grammar/test/traits-inheritance-trailing-comma.tact diff --git a/src/grammar/test/type-struct-with-map.tact b/src/050-grammar/test/type-struct-with-map.tact similarity index 100% rename from src/grammar/test/type-struct-with-map.tact rename to src/050-grammar/test/type-struct-with-map.tact diff --git a/src/grammar/test/types-optional.tact b/src/050-grammar/test/types-optional.tact similarity index 100% rename from src/grammar/test/types-optional.tact rename to src/050-grammar/test/types-optional.tact diff --git a/src/storage/StorageAllocation.ts b/src/060-types/StorageAllocation.ts similarity index 100% rename from src/storage/StorageAllocation.ts rename to src/060-types/StorageAllocation.ts diff --git a/src/storage/__snapshots__/resolveAllocation.spec.ts.snap b/src/060-types/__snapshots__/resolveAllocation.spec.ts.snap similarity index 100% rename from src/storage/__snapshots__/resolveAllocation.spec.ts.snap rename to src/060-types/__snapshots__/resolveAllocation.spec.ts.snap diff --git a/src/types/__snapshots__/resolveDescriptors.spec.ts.snap b/src/060-types/__snapshots__/resolveDescriptors.spec.ts.snap similarity index 100% rename from src/types/__snapshots__/resolveDescriptors.spec.ts.snap rename to src/060-types/__snapshots__/resolveDescriptors.spec.ts.snap diff --git a/src/types/__snapshots__/resolveStatements.spec.ts.snap b/src/060-types/__snapshots__/resolveStatements.spec.ts.snap similarity index 100% rename from src/types/__snapshots__/resolveStatements.spec.ts.snap rename to src/060-types/__snapshots__/resolveStatements.spec.ts.snap diff --git a/src/storage/allocator.ts b/src/060-types/allocator.ts similarity index 99% rename from src/storage/allocator.ts rename to src/060-types/allocator.ts index d12374389..fe34d9dd5 100644 --- a/src/storage/allocator.ts +++ b/src/060-types/allocator.ts @@ -4,7 +4,7 @@ import { AllocationOperation, AllocationOperationType, } from "./operation"; -import { throwInternalCompilerError } from "../errors"; +import { throwInternalCompilerError } from "../030-error/errors"; const ALLOCATOR_RESERVE_BIT = 1; const ALLOCATOR_RESERVE_REF = 1; diff --git a/src/types/getSupportedInterfaces.ts b/src/060-types/getSupportedInterfaces.ts similarity index 79% rename from src/types/getSupportedInterfaces.ts rename to src/060-types/getSupportedInterfaces.ts index 2ac15702f..0acbbe3e6 100644 --- a/src/types/getSupportedInterfaces.ts +++ b/src/060-types/getSupportedInterfaces.ts @@ -1,5 +1,5 @@ -import { enabledDebug } from "../config/features"; -import { CompilerContext } from "../context"; +import { enabledDebug } from "../000-config/features"; +import { CompilerContext } from "../010-pipeline/context"; import { TypeDescription } from "./types"; export function getSupportedInterfaces( diff --git a/src/types/isRuntimeType.ts b/src/060-types/isRuntimeType.ts similarity index 100% rename from src/types/isRuntimeType.ts rename to src/060-types/isRuntimeType.ts diff --git a/src/storage/operation.ts b/src/060-types/operation.ts similarity index 100% rename from src/storage/operation.ts rename to src/060-types/operation.ts diff --git a/src/types/resolveABITypeRef.ts b/src/060-types/resolveABITypeRef.ts similarity index 99% rename from src/types/resolveABITypeRef.ts rename to src/060-types/resolveABITypeRef.ts index b2cf8e731..362718db5 100644 --- a/src/types/resolveABITypeRef.ts +++ b/src/060-types/resolveABITypeRef.ts @@ -12,16 +12,16 @@ import { isSlice, isString, isStringBuilder, -} from "../grammar/ast"; +} from "../050-grammar/ast"; import { idTextErr, throwCompilationError, throwInternalCompilerError, -} from "../errors"; +} from "../030-error/errors"; import { TypeRef } from "./types"; -import { CompilerContext } from "../context"; +import { CompilerContext } from "../010-pipeline/context"; import { getType } from "./resolveDescriptors"; -import { SrcInfo } from "../grammar"; +import { SrcInfo } from "../050-grammar"; type FormatDef = Record< string, diff --git a/src/storage/resolveAllocation.spec.ts b/src/060-types/resolveAllocation.spec.ts similarity index 62% rename from src/storage/resolveAllocation.spec.ts rename to src/060-types/resolveAllocation.spec.ts index e784bb90c..41c97aff0 100644 --- a/src/storage/resolveAllocation.spec.ts +++ b/src/060-types/resolveAllocation.spec.ts @@ -1,17 +1,18 @@ import fs from "fs"; -import { resolveDescriptors } from "../types/resolveDescriptors"; +import { resolveDescriptors } from "./resolveDescriptors"; import { getAllocations, resolveAllocations } from "./resolveAllocation"; -import { openContext } from "../grammar/store"; -import { resolveStatements } from "../types/resolveStatements"; -import { CompilerContext } from "../context"; -import { resolveSignatures } from "../types/resolveSignatures"; +import { openContext } from "../050-grammar/store"; +import { resolveStatements } from "./resolveStatements"; +import { CompilerContext } from "../010-pipeline/context"; +import { resolveSignatures } from "./resolveSignatures"; import path from "path"; -import { getParser } from "../grammar"; -import { getAstFactory } from "../grammar/ast"; -import { defaultParser } from "../grammar/grammar"; +import { getParser } from "../050-grammar"; +import { getAstFactory } from "../050-grammar/ast"; +import { defaultParser } from "../050-grammar/grammar"; +import { stdlibPath } from "../040-imports/path"; -const stdlibPath = path.resolve(__dirname, "../../stdlib/std/primitives.tact"); -const stdlib = fs.readFileSync(stdlibPath, "utf-8"); +const primitivesPath = path.resolve(stdlibPath, "std/primitives.tact"); +const stdlib = fs.readFileSync(primitivesPath, "utf-8"); const src = ` trait BaseTrait { @@ -68,7 +69,7 @@ describe("resolveAllocation", () => { let ctx = openContext( new CompilerContext(), [ - { code: stdlib, path: stdlibPath, origin: "stdlib" }, + { code: stdlib, path: primitivesPath, origin: "stdlib" }, { code: src, path: "", origin: "user" }, ], [], diff --git a/src/storage/resolveAllocation.ts b/src/060-types/resolveAllocation.ts similarity index 92% rename from src/storage/resolveAllocation.ts rename to src/060-types/resolveAllocation.ts index 483b98b51..9ee45443f 100644 --- a/src/storage/resolveAllocation.ts +++ b/src/060-types/resolveAllocation.ts @@ -1,14 +1,14 @@ -import { CompilerContext, createContextStore } from "../context"; -import { getType, toBounced, getAllTypes } from "../types/resolveDescriptors"; -import { TypeDescription } from "../types/types"; +import { CompilerContext, createContextStore } from "../010-pipeline/context"; +import { getType, toBounced, getAllTypes } from "./resolveDescriptors"; +import { TypeDescription } from "./types"; import { topologicalSort } from "../utils/utils"; import { StorageAllocation } from "./StorageAllocation"; import { AllocationOperation } from "./operation"; import { allocate, getAllocationOperationFromField } from "./allocator"; -import { createABITypeRefFromTypeRef } from "../types/resolveABITypeRef"; -import { funcInitIdOf } from "../generator/writers/id"; -import { throwInternalCompilerError } from "../errors"; -import { idText } from "../grammar/ast"; +import { createABITypeRefFromTypeRef } from "./resolveABITypeRef"; +import { funcInitIdOf } from "../080-generator/writers/id"; +import { throwInternalCompilerError } from "../030-error/errors"; +import { idText } from "../050-grammar/ast"; const store = createContextStore(); diff --git a/src/types/resolveDescriptors.spec.ts b/src/060-types/resolveDescriptors.spec.ts similarity index 81% rename from src/types/resolveDescriptors.spec.ts rename to src/060-types/resolveDescriptors.spec.ts index c662b9cf7..bee6d9a4b 100644 --- a/src/types/resolveDescriptors.spec.ts +++ b/src/060-types/resolveDescriptors.spec.ts @@ -1,4 +1,4 @@ -import { CompilerContext } from "../context"; +import { CompilerContext } from "../010-pipeline/context"; import { getAllStaticFunctions, getAllTypes, @@ -6,12 +6,12 @@ import { } from "./resolveDescriptors"; import { resolveSignatures } from "./resolveSignatures"; import { loadCases } from "../utils/loadCases"; -import { openContext } from "../grammar/store"; -import { featureEnable } from "../config/features"; -import { getParser, SrcInfo } from "../grammar"; -import { getAstFactory } from "../grammar/ast"; -import { isSrcInfo } from "../grammar/src-info"; -import { defaultParser } from "../grammar/grammar"; +import { openContext } from "../050-grammar/store"; +import { featureEnable } from "../000-config/features"; +import { getParser, SrcInfo } from "../050-grammar"; +import { getAstFactory } from "../050-grammar/ast"; +import { isSrcInfo } from "../050-grammar/src-info"; +import { defaultParser } from "../050-grammar/grammar"; expect.addSnapshotSerializer({ test: (src) => isSrcInfo(src), diff --git a/src/types/resolveDescriptors.ts b/src/060-types/resolveDescriptors.ts similarity index 99% rename from src/types/resolveDescriptors.ts rename to src/060-types/resolveDescriptors.ts index 2f01f4c9e..1dcf61c65 100644 --- a/src/types/resolveDescriptors.ts +++ b/src/060-types/resolveDescriptors.ts @@ -18,14 +18,18 @@ import { AstTypeId, AstAsmFunctionDef, FactoryAst, -} from "../grammar/ast"; -import { traverse } from "../grammar/iterators"; +} from "../050-grammar/ast"; +import { traverse } from "../050-grammar/iterators"; import { idTextErr, throwCompilationError, throwInternalCompilerError, -} from "../errors"; -import { CompilerContext, Store, createContextStore } from "../context"; +} from "../030-error/errors"; +import { + CompilerContext, + Store, + createContextStore, +} from "../010-pipeline/context"; import { ConstantDescription, FieldDescription, @@ -40,20 +44,20 @@ import { TypeRef, typeRefEquals, } from "./types"; -import { getRawAST } from "../grammar/store"; -import { cloneNode } from "../grammar/clone"; +import { getRawAST } from "../050-grammar/store"; +import { cloneNode } from "../050-grammar/clone"; import { crc16 } from "../utils/crc16"; import { isSubsetOf } from "../utils/isSubsetOf"; -import { evalConstantExpression } from "../constEval"; +import { evalConstantExpression } from "../070-optimizer/constEval"; import { resolveABIType, intMapKeyFormats, intMapValFormats, } from "./resolveABITypeRef"; -import { enabledExternals } from "../config/features"; +import { enabledExternals } from "../000-config/features"; import { isRuntimeType } from "./isRuntimeType"; -import { GlobalFunctions } from "../abi/global"; -import { ItemOrigin } from "../grammar"; +import { GlobalFunctions } from "../080-generator/builtins/global"; +import { ItemOrigin } from "../050-grammar"; import { getExpType, resolveExpression } from "./resolveExpression"; import { emptyContext } from "./resolveStatements"; import { isAssignable } from "./subtyping"; diff --git a/src/types/resolveErrors.ts b/src/060-types/resolveErrors.ts similarity index 89% rename from src/types/resolveErrors.ts rename to src/060-types/resolveErrors.ts index 29e3e00d3..b39a42960 100644 --- a/src/types/resolveErrors.ts +++ b/src/060-types/resolveErrors.ts @@ -1,9 +1,9 @@ import { sha256_sync } from "@ton/crypto"; -import { CompilerContext, createContextStore } from "../context"; -import { AstNode, isRequire } from "../grammar/ast"; -import { traverse } from "../grammar/iterators"; -import { evalConstantExpression } from "../constEval"; -import { throwInternalCompilerError } from "../errors"; +import { CompilerContext, createContextStore } from "../010-pipeline/context"; +import { AstNode, isRequire } from "../050-grammar/ast"; +import { traverse } from "../050-grammar/iterators"; +import { evalConstantExpression } from "../070-optimizer/constEval"; +import { throwInternalCompilerError } from "../030-error/errors"; import { getAllStaticFunctions, getAllTypes, diff --git a/src/types/resolveExpression.ts b/src/060-types/resolveExpression.ts similarity index 98% rename from src/types/resolveExpression.ts rename to src/060-types/resolveExpression.ts index f3d3e9c6e..0e5d1a6a6 100644 --- a/src/types/resolveExpression.ts +++ b/src/060-types/resolveExpression.ts @@ -15,9 +15,9 @@ import { eqNames, idText, isWildcard, -} from "../grammar/ast"; -import { idTextErr, throwCompilationError } from "../errors"; -import { CompilerContext, createContextStore } from "../context"; +} from "../050-grammar/ast"; +import { idTextErr, throwCompilationError } from "../030-error/errors"; +import { CompilerContext, createContextStore } from "../010-pipeline/context"; import { getAllTypes, getStaticConstant, @@ -28,11 +28,11 @@ import { } from "./resolveDescriptors"; import { printTypeRef, TypeRef, typeRefEquals } from "./types"; import { StatementContext } from "./resolveStatements"; -import { MapFunctions } from "../abi/map"; -import { GlobalFunctions } from "../abi/global"; +import { MapFunctions } from "../080-generator/builtins/map"; +import { GlobalFunctions } from "../080-generator/builtins/global"; import { isAssignable, moreGeneralType } from "./subtyping"; -import { throwInternalCompilerError } from "../errors"; -import { StructFunctions } from "../abi/struct"; +import { throwInternalCompilerError } from "../030-error/errors"; +import { StructFunctions } from "../080-generator/builtins/struct"; import { prettyPrint } from "../prettyPrinter"; const store = createContextStore<{ diff --git a/src/types/resolveSignatures.ts b/src/060-types/resolveSignatures.ts similarity index 96% rename from src/types/resolveSignatures.ts rename to src/060-types/resolveSignatures.ts index e940bfe47..4f5c03d23 100644 --- a/src/types/resolveSignatures.ts +++ b/src/060-types/resolveSignatures.ts @@ -1,25 +1,25 @@ import * as changeCase from "change-case"; import { ABIField, beginCell } from "@ton/core"; -import { CompilerContext } from "../context"; +import { CompilerContext } from "../010-pipeline/context"; import { idToHex } from "../utils/idToHex"; import { idTextErr, throwConstEvalError, throwInternalCompilerError, -} from "../errors"; +} from "../030-error/errors"; import { getType, getAllTypes } from "./resolveDescriptors"; import { BinaryReceiverSelector, CommentReceiverSelector, ReceiverDescription, } from "./types"; -import { throwCompilationError } from "../errors"; -import { AstNumber, AstReceiver } from "../grammar/ast"; -import { commentPseudoOpcode } from "../generator/writers/writeRouter"; +import { throwCompilationError } from "../030-error/errors"; +import { AstNumber, AstReceiver } from "../050-grammar/ast"; +import { commentPseudoOpcode } from "../080-generator/writers/writeRouter"; import { sha256_sync } from "@ton/crypto"; -import { dummySrcInfo } from "../grammar"; -import { ensureInt } from "../interpreter"; -import { evalConstantExpression } from "../constEval"; +import { dummySrcInfo } from "../050-grammar"; +import { ensureInt } from "../070-optimizer/interpreter"; +import { evalConstantExpression } from "../070-optimizer/constEval"; export function resolveSignatures(ctx: CompilerContext) { const signatures: Map< diff --git a/src/types/resolveStatements.spec.ts b/src/060-types/resolveStatements.spec.ts similarity index 82% rename from src/types/resolveStatements.spec.ts rename to src/060-types/resolveStatements.spec.ts index 90c2c0d81..9ec237ab3 100644 --- a/src/types/resolveStatements.spec.ts +++ b/src/060-types/resolveStatements.spec.ts @@ -1,13 +1,13 @@ import { getAllExpressionTypes } from "./resolveExpression"; import { resolveDescriptors } from "./resolveDescriptors"; import { loadCases } from "../utils/loadCases"; -import { openContext } from "../grammar/store"; +import { openContext } from "../050-grammar/store"; import { resolveStatements } from "./resolveStatements"; -import { CompilerContext } from "../context"; -import { featureEnable } from "../config/features"; -import { getParser } from "../grammar"; -import { getAstFactory } from "../grammar/ast"; -import { defaultParser } from "../grammar/grammar"; +import { CompilerContext } from "../010-pipeline/context"; +import { featureEnable } from "../000-config/features"; +import { getParser } from "../050-grammar"; +import { getAstFactory } from "../050-grammar/ast"; +import { defaultParser } from "../050-grammar/grammar"; describe("resolveStatements", () => { for (const r of loadCases(__dirname + "/stmts/")) { diff --git a/src/types/resolveStatements.ts b/src/060-types/resolveStatements.ts similarity index 99% rename from src/types/resolveStatements.ts rename to src/060-types/resolveStatements.ts index e5ca22bbf..6822c744f 100644 --- a/src/types/resolveStatements.ts +++ b/src/060-types/resolveStatements.ts @@ -1,4 +1,4 @@ -import { CompilerContext } from "../context"; +import { CompilerContext } from "../010-pipeline/context"; import { AstCondition, AstStatement, @@ -9,14 +9,14 @@ import { selfId, isSelfId, eqNames, -} from "../grammar/ast"; +} from "../050-grammar/ast"; import { isAssignable } from "./subtyping"; import { idTextErr, throwCompilationError, throwConstEvalError, throwInternalCompilerError, -} from "../errors"; +} from "../030-error/errors"; import { getAllStaticFunctions, getStaticConstant, @@ -27,10 +27,10 @@ import { } from "./resolveDescriptors"; import { getExpType, resolveExpression } from "./resolveExpression"; import { FunctionDescription, printTypeRef, TypeRef } from "./types"; -import { evalConstantExpression } from "../constEval"; -import { ensureInt } from "../interpreter"; +import { evalConstantExpression } from "../070-optimizer/constEval"; +import { ensureInt } from "../070-optimizer/interpreter"; import { crc16 } from "../utils/crc16"; -import { SrcInfo } from "../grammar"; +import { SrcInfo } from "../050-grammar"; export type StatementContext = { root: SrcInfo; diff --git a/src/types/stmts-failed/assign-augmented-const-contract.tact b/src/060-types/stmts-failed/assign-augmented-const-contract.tact similarity index 100% rename from src/types/stmts-failed/assign-augmented-const-contract.tact rename to src/060-types/stmts-failed/assign-augmented-const-contract.tact diff --git a/src/types/stmts-failed/assign-augmented-const-global.tact b/src/060-types/stmts-failed/assign-augmented-const-global.tact similarity index 100% rename from src/types/stmts-failed/assign-augmented-const-global.tact rename to src/060-types/stmts-failed/assign-augmented-const-global.tact diff --git a/src/types/stmts-failed/assign-augmented-const-struct-contract.tact b/src/060-types/stmts-failed/assign-augmented-const-struct-contract.tact similarity index 100% rename from src/types/stmts-failed/assign-augmented-const-struct-contract.tact rename to src/060-types/stmts-failed/assign-augmented-const-struct-contract.tact diff --git a/src/types/stmts-failed/assign-augmented-const-struct-global.tact b/src/060-types/stmts-failed/assign-augmented-const-struct-global.tact similarity index 100% rename from src/types/stmts-failed/assign-augmented-const-struct-global.tact rename to src/060-types/stmts-failed/assign-augmented-const-struct-global.tact diff --git a/src/types/stmts-failed/assign-const-contract.tact b/src/060-types/stmts-failed/assign-const-contract.tact similarity index 100% rename from src/types/stmts-failed/assign-const-contract.tact rename to src/060-types/stmts-failed/assign-const-contract.tact diff --git a/src/types/stmts-failed/assign-const-global.tact b/src/060-types/stmts-failed/assign-const-global.tact similarity index 100% rename from src/types/stmts-failed/assign-const-global.tact rename to src/060-types/stmts-failed/assign-const-global.tact diff --git a/src/types/stmts-failed/assign-const-struct-contract.tact b/src/060-types/stmts-failed/assign-const-struct-contract.tact similarity index 100% rename from src/types/stmts-failed/assign-const-struct-contract.tact rename to src/060-types/stmts-failed/assign-const-struct-contract.tact diff --git a/src/types/stmts-failed/assign-const-struct-global.tact b/src/060-types/stmts-failed/assign-const-struct-global.tact similarity index 100% rename from src/types/stmts-failed/assign-const-struct-global.tact rename to src/060-types/stmts-failed/assign-const-struct-global.tact diff --git a/src/types/stmts-failed/bounced-type-is-smaller.tact b/src/060-types/stmts-failed/bounced-type-is-smaller.tact similarity index 100% rename from src/types/stmts-failed/bounced-type-is-smaller.tact rename to src/060-types/stmts-failed/bounced-type-is-smaller.tact diff --git a/src/types/stmts-failed/contract-getter-with-method-id-1.tact b/src/060-types/stmts-failed/contract-getter-with-method-id-1.tact similarity index 100% rename from src/types/stmts-failed/contract-getter-with-method-id-1.tact rename to src/060-types/stmts-failed/contract-getter-with-method-id-1.tact diff --git a/src/types/stmts-failed/contract-getter-with-method-id-2.tact b/src/060-types/stmts-failed/contract-getter-with-method-id-2.tact similarity index 100% rename from src/types/stmts-failed/contract-getter-with-method-id-2.tact rename to src/060-types/stmts-failed/contract-getter-with-method-id-2.tact diff --git a/src/types/stmts-failed/contract-initof-wrong-arg.tact b/src/060-types/stmts-failed/contract-initof-wrong-arg.tact similarity index 100% rename from src/types/stmts-failed/contract-initof-wrong-arg.tact rename to src/060-types/stmts-failed/contract-initof-wrong-arg.tact diff --git a/src/types/stmts-failed/expr-bitwise-not-bool.tact b/src/060-types/stmts-failed/expr-bitwise-not-bool.tact similarity index 100% rename from src/types/stmts-failed/expr-bitwise-not-bool.tact rename to src/060-types/stmts-failed/expr-bitwise-not-bool.tact diff --git a/src/types/stmts-failed/expr-conditional-branch-mismatch-nested1.tact b/src/060-types/stmts-failed/expr-conditional-branch-mismatch-nested1.tact similarity index 100% rename from src/types/stmts-failed/expr-conditional-branch-mismatch-nested1.tact rename to src/060-types/stmts-failed/expr-conditional-branch-mismatch-nested1.tact diff --git a/src/types/stmts-failed/expr-conditional-branch-mismatch-nested2.tact b/src/060-types/stmts-failed/expr-conditional-branch-mismatch-nested2.tact similarity index 100% rename from src/types/stmts-failed/expr-conditional-branch-mismatch-nested2.tact rename to src/060-types/stmts-failed/expr-conditional-branch-mismatch-nested2.tact diff --git a/src/types/stmts-failed/expr-conditional-branch-mismatch.tact b/src/060-types/stmts-failed/expr-conditional-branch-mismatch.tact similarity index 100% rename from src/types/stmts-failed/expr-conditional-branch-mismatch.tact rename to src/060-types/stmts-failed/expr-conditional-branch-mismatch.tact diff --git a/src/types/stmts-failed/expr-conditional-non-optional-result-expected1.tact b/src/060-types/stmts-failed/expr-conditional-non-optional-result-expected1.tact similarity index 100% rename from src/types/stmts-failed/expr-conditional-non-optional-result-expected1.tact rename to src/060-types/stmts-failed/expr-conditional-non-optional-result-expected1.tact diff --git a/src/types/stmts-failed/expr-conditional-non-optional-result-expected2.tact b/src/060-types/stmts-failed/expr-conditional-non-optional-result-expected2.tact similarity index 100% rename from src/types/stmts-failed/expr-conditional-non-optional-result-expected2.tact rename to src/060-types/stmts-failed/expr-conditional-non-optional-result-expected2.tact diff --git a/src/types/stmts-failed/expr-conditional-non-optional-result-expected3.tact b/src/060-types/stmts-failed/expr-conditional-non-optional-result-expected3.tact similarity index 100% rename from src/types/stmts-failed/expr-conditional-non-optional-result-expected3.tact rename to src/060-types/stmts-failed/expr-conditional-non-optional-result-expected3.tact diff --git a/src/types/stmts-failed/expr-conditional-result-mismatch.tact b/src/060-types/stmts-failed/expr-conditional-result-mismatch.tact similarity index 100% rename from src/types/stmts-failed/expr-conditional-result-mismatch.tact rename to src/060-types/stmts-failed/expr-conditional-result-mismatch.tact diff --git a/src/types/stmts-failed/expr-conditional-void-branches copy.tact b/src/060-types/stmts-failed/expr-conditional-void-branches copy.tact similarity index 100% rename from src/types/stmts-failed/expr-conditional-void-branches copy.tact rename to src/060-types/stmts-failed/expr-conditional-void-branches copy.tact diff --git a/src/types/stmts-failed/expr-eq-bounced.tact b/src/060-types/stmts-failed/expr-eq-bounced.tact similarity index 100% rename from src/types/stmts-failed/expr-eq-bounced.tact rename to src/060-types/stmts-failed/expr-eq-bounced.tact diff --git a/src/types/stmts-failed/expr-eq-builder.tact b/src/060-types/stmts-failed/expr-eq-builder.tact similarity index 100% rename from src/types/stmts-failed/expr-eq-builder.tact rename to src/060-types/stmts-failed/expr-eq-builder.tact diff --git a/src/types/stmts-failed/expr-eq-contract.tact b/src/060-types/stmts-failed/expr-eq-contract.tact similarity index 100% rename from src/types/stmts-failed/expr-eq-contract.tact rename to src/060-types/stmts-failed/expr-eq-contract.tact diff --git a/src/types/stmts-failed/expr-eq-int-bool.tact b/src/060-types/stmts-failed/expr-eq-int-bool.tact similarity index 100% rename from src/types/stmts-failed/expr-eq-int-bool.tact rename to src/060-types/stmts-failed/expr-eq-int-bool.tact diff --git a/src/types/stmts-failed/expr-eq-map-map.tact b/src/060-types/stmts-failed/expr-eq-map-map.tact similarity index 100% rename from src/types/stmts-failed/expr-eq-map-map.tact rename to src/060-types/stmts-failed/expr-eq-map-map.tact diff --git a/src/types/stmts-failed/expr-eq-null-1.tact b/src/060-types/stmts-failed/expr-eq-null-1.tact similarity index 100% rename from src/types/stmts-failed/expr-eq-null-1.tact rename to src/060-types/stmts-failed/expr-eq-null-1.tact diff --git a/src/types/stmts-failed/expr-eq-null-2.tact b/src/060-types/stmts-failed/expr-eq-null-2.tact similarity index 100% rename from src/types/stmts-failed/expr-eq-null-2.tact rename to src/060-types/stmts-failed/expr-eq-null-2.tact diff --git a/src/types/stmts-failed/expr-eq-null-3.tact b/src/060-types/stmts-failed/expr-eq-null-3.tact similarity index 100% rename from src/types/stmts-failed/expr-eq-null-3.tact rename to src/060-types/stmts-failed/expr-eq-null-3.tact diff --git a/src/types/stmts-failed/expr-eq-null-bounced.tact b/src/060-types/stmts-failed/expr-eq-null-bounced.tact similarity index 100% rename from src/types/stmts-failed/expr-eq-null-bounced.tact rename to src/060-types/stmts-failed/expr-eq-null-bounced.tact diff --git a/src/types/stmts-failed/expr-eq-optional-builder.tact b/src/060-types/stmts-failed/expr-eq-optional-builder.tact similarity index 100% rename from src/types/stmts-failed/expr-eq-optional-builder.tact rename to src/060-types/stmts-failed/expr-eq-optional-builder.tact diff --git a/src/types/stmts-failed/expr-eq-optional-stringbuilder.tact b/src/060-types/stmts-failed/expr-eq-optional-stringbuilder.tact similarity index 100% rename from src/types/stmts-failed/expr-eq-optional-stringbuilder.tact rename to src/060-types/stmts-failed/expr-eq-optional-stringbuilder.tact diff --git a/src/types/stmts-failed/expr-eq-optional-struct-null.tact b/src/060-types/stmts-failed/expr-eq-optional-struct-null.tact similarity index 100% rename from src/types/stmts-failed/expr-eq-optional-struct-null.tact rename to src/060-types/stmts-failed/expr-eq-optional-struct-null.tact diff --git a/src/types/stmts-failed/expr-eq-optional-struct.tact b/src/060-types/stmts-failed/expr-eq-optional-struct.tact similarity index 100% rename from src/types/stmts-failed/expr-eq-optional-struct.tact rename to src/060-types/stmts-failed/expr-eq-optional-struct.tact diff --git a/src/types/stmts-failed/expr-eq-stringbuilder.tact b/src/060-types/stmts-failed/expr-eq-stringbuilder.tact similarity index 100% rename from src/types/stmts-failed/expr-eq-stringbuilder.tact rename to src/060-types/stmts-failed/expr-eq-stringbuilder.tact diff --git a/src/types/stmts-failed/expr-eq-struct.tact b/src/060-types/stmts-failed/expr-eq-struct.tact similarity index 100% rename from src/types/stmts-failed/expr-eq-struct.tact rename to src/060-types/stmts-failed/expr-eq-struct.tact diff --git a/src/types/stmts-failed/expr-eq-void-null.tact b/src/060-types/stmts-failed/expr-eq-void-null.tact similarity index 100% rename from src/types/stmts-failed/expr-eq-void-null.tact rename to src/060-types/stmts-failed/expr-eq-void-null.tact diff --git a/src/types/stmts-failed/expr-eq-void1.tact b/src/060-types/stmts-failed/expr-eq-void1.tact similarity index 100% rename from src/types/stmts-failed/expr-eq-void1.tact rename to src/060-types/stmts-failed/expr-eq-void1.tact diff --git a/src/types/stmts-failed/expr-eq-void2.tact b/src/060-types/stmts-failed/expr-eq-void2.tact similarity index 100% rename from src/types/stmts-failed/expr-eq-void2.tact rename to src/060-types/stmts-failed/expr-eq-void2.tact diff --git a/src/types/stmts-failed/expr-field-does-not-exist-but-method-does.tact b/src/060-types/stmts-failed/expr-field-does-not-exist-but-method-does.tact similarity index 100% rename from src/types/stmts-failed/expr-field-does-not-exist-but-method-does.tact rename to src/060-types/stmts-failed/expr-field-does-not-exist-but-method-does.tact diff --git a/src/types/stmts-failed/expr-field-does-not-exist.tact b/src/060-types/stmts-failed/expr-field-does-not-exist.tact similarity index 100% rename from src/types/stmts-failed/expr-field-does-not-exist.tact rename to src/060-types/stmts-failed/expr-field-does-not-exist.tact diff --git a/src/types/stmts-failed/expr-internal-fun-call-bool-param.tact.tact b/src/060-types/stmts-failed/expr-internal-fun-call-bool-param.tact.tact similarity index 100% rename from src/types/stmts-failed/expr-internal-fun-call-bool-param.tact.tact rename to src/060-types/stmts-failed/expr-internal-fun-call-bool-param.tact.tact diff --git a/src/types/stmts-failed/expr-map-del-method-is-non-void.tact b/src/060-types/stmts-failed/expr-map-del-method-is-non-void.tact similarity index 100% rename from src/types/stmts-failed/expr-map-del-method-is-non-void.tact rename to src/060-types/stmts-failed/expr-map-del-method-is-non-void.tact diff --git a/src/types/stmts-failed/expr-map-exists-method-not-bool.tact b/src/060-types/stmts-failed/expr-map-exists-method-not-bool.tact similarity index 100% rename from src/types/stmts-failed/expr-map-exists-method-not-bool.tact rename to src/060-types/stmts-failed/expr-map-exists-method-not-bool.tact diff --git a/src/types/stmts-failed/expr-map-exists-method-on-not-map.tact b/src/060-types/stmts-failed/expr-map-exists-method-on-not-map.tact similarity index 100% rename from src/types/stmts-failed/expr-map-exists-method-on-not-map.tact rename to src/060-types/stmts-failed/expr-map-exists-method-on-not-map.tact diff --git a/src/types/stmts-failed/expr-method-does-not-exist-but-field-does.tact b/src/060-types/stmts-failed/expr-method-does-not-exist-but-field-does.tact similarity index 100% rename from src/types/stmts-failed/expr-method-does-not-exist-but-field-does.tact rename to src/060-types/stmts-failed/expr-method-does-not-exist-but-field-does.tact diff --git a/src/types/stmts-failed/expr-module-fun-call-bool-param.tact b/src/060-types/stmts-failed/expr-module-fun-call-bool-param.tact similarity index 100% rename from src/types/stmts-failed/expr-module-fun-call-bool-param.tact rename to src/060-types/stmts-failed/expr-module-fun-call-bool-param.tact diff --git a/src/types/stmts-failed/expr-struct-duplicate-field.tact b/src/060-types/stmts-failed/expr-struct-duplicate-field.tact similarity index 100% rename from src/types/stmts-failed/expr-struct-duplicate-field.tact rename to src/060-types/stmts-failed/expr-struct-duplicate-field.tact diff --git a/src/types/stmts-failed/expr-struct-impossible-field-punning.tact b/src/060-types/stmts-failed/expr-struct-impossible-field-punning.tact similarity index 100% rename from src/types/stmts-failed/expr-struct-impossible-field-punning.tact rename to src/060-types/stmts-failed/expr-struct-impossible-field-punning.tact diff --git a/src/types/stmts-failed/expr-struct-missing-field.tact b/src/060-types/stmts-failed/expr-struct-missing-field.tact similarity index 100% rename from src/types/stmts-failed/expr-struct-missing-field.tact rename to src/060-types/stmts-failed/expr-struct-missing-field.tact diff --git a/src/types/stmts-failed/expr-struct-wrong-field-type.tact b/src/060-types/stmts-failed/expr-struct-wrong-field-type.tact similarity index 100% rename from src/types/stmts-failed/expr-struct-wrong-field-type.tact rename to src/060-types/stmts-failed/expr-struct-wrong-field-type.tact diff --git a/src/types/stmts-failed/expr-var-int-bool.tact b/src/060-types/stmts-failed/expr-var-int-bool.tact similarity index 100% rename from src/types/stmts-failed/expr-var-int-bool.tact rename to src/060-types/stmts-failed/expr-var-int-bool.tact diff --git a/src/types/stmts-failed/expr-wrong-arity-internal-fun.tact b/src/060-types/stmts-failed/expr-wrong-arity-internal-fun.tact similarity index 100% rename from src/types/stmts-failed/expr-wrong-arity-internal-fun.tact rename to src/060-types/stmts-failed/expr-wrong-arity-internal-fun.tact diff --git a/src/types/stmts-failed/expr-wrong-arity-module-fun.tact b/src/060-types/stmts-failed/expr-wrong-arity-module-fun.tact similarity index 100% rename from src/types/stmts-failed/expr-wrong-arity-module-fun.tact rename to src/060-types/stmts-failed/expr-wrong-arity-module-fun.tact diff --git a/src/types/stmts-failed/getter-collision-trait.tact b/src/060-types/stmts-failed/getter-collision-trait.tact similarity index 100% rename from src/types/stmts-failed/getter-collision-trait.tact rename to src/060-types/stmts-failed/getter-collision-trait.tact diff --git a/src/types/stmts-failed/getter-collision-with-reserved1.tact b/src/060-types/stmts-failed/getter-collision-with-reserved1.tact similarity index 100% rename from src/types/stmts-failed/getter-collision-with-reserved1.tact rename to src/060-types/stmts-failed/getter-collision-with-reserved1.tact diff --git a/src/types/stmts-failed/getter-collision-with-reserved2.tact b/src/060-types/stmts-failed/getter-collision-with-reserved2.tact similarity index 100% rename from src/types/stmts-failed/getter-collision-with-reserved2.tact rename to src/060-types/stmts-failed/getter-collision-with-reserved2.tact diff --git a/src/types/stmts-failed/getter-collision-with-reserved3.tact b/src/060-types/stmts-failed/getter-collision-with-reserved3.tact similarity index 100% rename from src/types/stmts-failed/getter-collision-with-reserved3.tact rename to src/060-types/stmts-failed/getter-collision-with-reserved3.tact diff --git a/src/types/stmts-failed/getter-collision-with-reserved_opt1.tact b/src/060-types/stmts-failed/getter-collision-with-reserved_opt1.tact similarity index 100% rename from src/types/stmts-failed/getter-collision-with-reserved_opt1.tact rename to src/060-types/stmts-failed/getter-collision-with-reserved_opt1.tact diff --git a/src/types/stmts-failed/getter-collision-with-reserved_opt2.tact b/src/060-types/stmts-failed/getter-collision-with-reserved_opt2.tact similarity index 100% rename from src/types/stmts-failed/getter-collision-with-reserved_opt2.tact rename to src/060-types/stmts-failed/getter-collision-with-reserved_opt2.tact diff --git a/src/types/stmts-failed/getter-collision-with-reserved_opt3.tact b/src/060-types/stmts-failed/getter-collision-with-reserved_opt3.tact similarity index 100% rename from src/types/stmts-failed/getter-collision-with-reserved_opt3.tact rename to src/060-types/stmts-failed/getter-collision-with-reserved_opt3.tact diff --git a/src/types/stmts-failed/getter-collision-with-trait.tact b/src/060-types/stmts-failed/getter-collision-with-trait.tact similarity index 100% rename from src/types/stmts-failed/getter-collision-with-trait.tact rename to src/060-types/stmts-failed/getter-collision-with-trait.tact diff --git a/src/types/stmts-failed/getter-collision.tact b/src/060-types/stmts-failed/getter-collision.tact similarity index 100% rename from src/types/stmts-failed/getter-collision.tact rename to src/060-types/stmts-failed/getter-collision.tact diff --git a/src/types/stmts-failed/init-vars-analysis-if.tact b/src/060-types/stmts-failed/init-vars-analysis-if.tact similarity index 100% rename from src/types/stmts-failed/init-vars-analysis-if.tact rename to src/060-types/stmts-failed/init-vars-analysis-if.tact diff --git a/src/types/stmts-failed/init-vars-analysis-implicit-init.tact b/src/060-types/stmts-failed/init-vars-analysis-implicit-init.tact similarity index 100% rename from src/types/stmts-failed/init-vars-analysis-implicit-init.tact rename to src/060-types/stmts-failed/init-vars-analysis-implicit-init.tact diff --git a/src/types/stmts-failed/init-vars-analysis-missing-storage-var.tact b/src/060-types/stmts-failed/init-vars-analysis-missing-storage-var.tact similarity index 100% rename from src/types/stmts-failed/init-vars-analysis-missing-storage-var.tact rename to src/060-types/stmts-failed/init-vars-analysis-missing-storage-var.tact diff --git a/src/types/stmts-failed/init-vars-analysis-used-uninit-storage-augmented-assign1.tact b/src/060-types/stmts-failed/init-vars-analysis-used-uninit-storage-augmented-assign1.tact similarity index 100% rename from src/types/stmts-failed/init-vars-analysis-used-uninit-storage-augmented-assign1.tact rename to src/060-types/stmts-failed/init-vars-analysis-used-uninit-storage-augmented-assign1.tact diff --git a/src/types/stmts-failed/init-vars-analysis-used-uninit-storage-augmented-assign2.tact b/src/060-types/stmts-failed/init-vars-analysis-used-uninit-storage-augmented-assign2.tact similarity index 100% rename from src/types/stmts-failed/init-vars-analysis-used-uninit-storage-augmented-assign2.tact rename to src/060-types/stmts-failed/init-vars-analysis-used-uninit-storage-augmented-assign2.tact diff --git a/src/types/stmts-failed/init-vars-analysis-used-uninit-storage-override-fun-call.tact b/src/060-types/stmts-failed/init-vars-analysis-used-uninit-storage-override-fun-call.tact similarity index 100% rename from src/types/stmts-failed/init-vars-analysis-used-uninit-storage-override-fun-call.tact rename to src/060-types/stmts-failed/init-vars-analysis-used-uninit-storage-override-fun-call.tact diff --git a/src/types/stmts-failed/init-vars-analysis-used-uninit-storage-struct1.tact b/src/060-types/stmts-failed/init-vars-analysis-used-uninit-storage-struct1.tact similarity index 100% rename from src/types/stmts-failed/init-vars-analysis-used-uninit-storage-struct1.tact rename to src/060-types/stmts-failed/init-vars-analysis-used-uninit-storage-struct1.tact diff --git a/src/types/stmts-failed/init-vars-analysis-used-uninit-storage-struct2.tact b/src/060-types/stmts-failed/init-vars-analysis-used-uninit-storage-struct2.tact similarity index 100% rename from src/types/stmts-failed/init-vars-analysis-used-uninit-storage-struct2.tact rename to src/060-types/stmts-failed/init-vars-analysis-used-uninit-storage-struct2.tact diff --git a/src/types/stmts-failed/init-vars-analysis-used-uninit-storage-var-fun-call.tact b/src/060-types/stmts-failed/init-vars-analysis-used-uninit-storage-var-fun-call.tact similarity index 100% rename from src/types/stmts-failed/init-vars-analysis-used-uninit-storage-var-fun-call.tact rename to src/060-types/stmts-failed/init-vars-analysis-used-uninit-storage-var-fun-call.tact diff --git a/src/types/stmts-failed/init-vars-analysis-used-uninit-storage-var.tact b/src/060-types/stmts-failed/init-vars-analysis-used-uninit-storage-var.tact similarity index 100% rename from src/types/stmts-failed/init-vars-analysis-used-uninit-storage-var.tact rename to src/060-types/stmts-failed/init-vars-analysis-used-uninit-storage-var.tact diff --git a/src/types/stmts-failed/init-vars-analysis-with-if-else.tact b/src/060-types/stmts-failed/init-vars-analysis-with-if-else.tact similarity index 100% rename from src/types/stmts-failed/init-vars-analysis-with-if-else.tact rename to src/060-types/stmts-failed/init-vars-analysis-with-if-else.tact diff --git a/src/types/stmts-failed/init-vars-analysis-with-if-elseif.tact b/src/060-types/stmts-failed/init-vars-analysis-with-if-elseif.tact similarity index 100% rename from src/types/stmts-failed/init-vars-analysis-with-if-elseif.tact rename to src/060-types/stmts-failed/init-vars-analysis-with-if-elseif.tact diff --git a/src/types/stmts-failed/return-analysis-catch-if.tact b/src/060-types/stmts-failed/return-analysis-catch-if.tact similarity index 100% rename from src/types/stmts-failed/return-analysis-catch-if.tact rename to src/060-types/stmts-failed/return-analysis-catch-if.tact diff --git a/src/types/stmts-failed/return-analysis-do-if.tact b/src/060-types/stmts-failed/return-analysis-do-if.tact similarity index 100% rename from src/types/stmts-failed/return-analysis-do-if.tact rename to src/060-types/stmts-failed/return-analysis-do-if.tact diff --git a/src/types/stmts-failed/return-analysis-if.tact b/src/060-types/stmts-failed/return-analysis-if.tact similarity index 100% rename from src/types/stmts-failed/return-analysis-if.tact rename to src/060-types/stmts-failed/return-analysis-if.tact diff --git a/src/types/stmts-failed/return-analysis-non-void1.tact b/src/060-types/stmts-failed/return-analysis-non-void1.tact similarity index 100% rename from src/types/stmts-failed/return-analysis-non-void1.tact rename to src/060-types/stmts-failed/return-analysis-non-void1.tact diff --git a/src/types/stmts-failed/return-analysis-non-void2.tact b/src/060-types/stmts-failed/return-analysis-non-void2.tact similarity index 100% rename from src/types/stmts-failed/return-analysis-non-void2.tact rename to src/060-types/stmts-failed/return-analysis-non-void2.tact diff --git a/src/types/stmts-failed/return-analysis-repeat.tact b/src/060-types/stmts-failed/return-analysis-repeat.tact similarity index 100% rename from src/types/stmts-failed/return-analysis-repeat.tact rename to src/060-types/stmts-failed/return-analysis-repeat.tact diff --git a/src/types/stmts-failed/return-analysis-separate-ifs.tact b/src/060-types/stmts-failed/return-analysis-separate-ifs.tact similarity index 100% rename from src/types/stmts-failed/return-analysis-separate-ifs.tact rename to src/060-types/stmts-failed/return-analysis-separate-ifs.tact diff --git a/src/types/stmts-failed/return-analysis-throw-wrapped.tact b/src/060-types/stmts-failed/return-analysis-throw-wrapped.tact similarity index 100% rename from src/types/stmts-failed/return-analysis-throw-wrapped.tact rename to src/060-types/stmts-failed/return-analysis-throw-wrapped.tact diff --git a/src/types/stmts-failed/return-analysis-try1.tact b/src/060-types/stmts-failed/return-analysis-try1.tact similarity index 100% rename from src/types/stmts-failed/return-analysis-try1.tact rename to src/060-types/stmts-failed/return-analysis-try1.tact diff --git a/src/types/stmts-failed/return-analysis-try2.tact b/src/060-types/stmts-failed/return-analysis-try2.tact similarity index 100% rename from src/types/stmts-failed/return-analysis-try2.tact rename to src/060-types/stmts-failed/return-analysis-try2.tact diff --git a/src/types/stmts-failed/return-analysis-while.tact b/src/060-types/stmts-failed/return-analysis-while.tact similarity index 100% rename from src/types/stmts-failed/return-analysis-while.tact rename to src/060-types/stmts-failed/return-analysis-while.tact diff --git a/src/types/stmts-failed/stmt-assgn-int-string.tact b/src/060-types/stmts-failed/stmt-assgn-int-string.tact similarity index 100% rename from src/types/stmts-failed/stmt-assgn-int-string.tact rename to src/060-types/stmts-failed/stmt-assgn-int-string.tact diff --git a/src/types/stmts-failed/stmt-augmented-assgn-bool-int.tact b/src/060-types/stmts-failed/stmt-augmented-assgn-bool-int.tact similarity index 100% rename from src/types/stmts-failed/stmt-augmented-assgn-bool-int.tact rename to src/060-types/stmts-failed/stmt-augmented-assgn-bool-int.tact diff --git a/src/types/stmts-failed/stmt-augmented-assgn-bool.tact b/src/060-types/stmts-failed/stmt-augmented-assgn-bool.tact similarity index 100% rename from src/types/stmts-failed/stmt-augmented-assgn-bool.tact rename to src/060-types/stmts-failed/stmt-augmented-assgn-bool.tact diff --git a/src/types/stmts-failed/stmt-augmented-assgn-int-bool.tact b/src/060-types/stmts-failed/stmt-augmented-assgn-int-bool.tact similarity index 100% rename from src/types/stmts-failed/stmt-augmented-assgn-int-bool.tact rename to src/060-types/stmts-failed/stmt-augmented-assgn-int-bool.tact diff --git a/src/types/stmts-failed/stmt-augmented-assgn-int.tact b/src/060-types/stmts-failed/stmt-augmented-assgn-int.tact similarity index 100% rename from src/types/stmts-failed/stmt-augmented-assgn-int.tact rename to src/060-types/stmts-failed/stmt-augmented-assgn-int.tact diff --git a/src/types/stmts-failed/stmt-augmented-assgn-not-matching.tact b/src/060-types/stmts-failed/stmt-augmented-assgn-not-matching.tact similarity index 100% rename from src/types/stmts-failed/stmt-augmented-assgn-not-matching.tact rename to src/060-types/stmts-failed/stmt-augmented-assgn-not-matching.tact diff --git a/src/types/stmts-failed/stmt-augmented-assgn-string.tact b/src/060-types/stmts-failed/stmt-augmented-assgn-string.tact similarity index 100% rename from src/types/stmts-failed/stmt-augmented-assgn-string.tact rename to src/060-types/stmts-failed/stmt-augmented-assgn-string.tact diff --git a/src/types/stmts-failed/stmt-conditional-expr-stmt-void1.tact b/src/060-types/stmts-failed/stmt-conditional-expr-stmt-void1.tact similarity index 100% rename from src/types/stmts-failed/stmt-conditional-expr-stmt-void1.tact rename to src/060-types/stmts-failed/stmt-conditional-expr-stmt-void1.tact diff --git a/src/types/stmts-failed/stmt-destructuring-fields-duplicate-id.tact b/src/060-types/stmts-failed/stmt-destructuring-fields-duplicate-id.tact similarity index 100% rename from src/types/stmts-failed/stmt-destructuring-fields-duplicate-id.tact rename to src/060-types/stmts-failed/stmt-destructuring-fields-duplicate-id.tact diff --git a/src/types/stmts-failed/stmt-destructuring-fields-non-destructable-opt.tact b/src/060-types/stmts-failed/stmt-destructuring-fields-non-destructable-opt.tact similarity index 100% rename from src/types/stmts-failed/stmt-destructuring-fields-non-destructable-opt.tact rename to src/060-types/stmts-failed/stmt-destructuring-fields-non-destructable-opt.tact diff --git a/src/types/stmts-failed/stmt-destructuring-fields-non-destructable.tact b/src/060-types/stmts-failed/stmt-destructuring-fields-non-destructable.tact similarity index 100% rename from src/types/stmts-failed/stmt-destructuring-fields-non-destructable.tact rename to src/060-types/stmts-failed/stmt-destructuring-fields-non-destructable.tact diff --git a/src/types/stmts-failed/stmt-destructuring-fields-non-destructable2.tact b/src/060-types/stmts-failed/stmt-destructuring-fields-non-destructable2.tact similarity index 100% rename from src/types/stmts-failed/stmt-destructuring-fields-non-destructable2.tact rename to src/060-types/stmts-failed/stmt-destructuring-fields-non-destructable2.tact diff --git a/src/types/stmts-failed/stmt-destructuring-fields-non-existing-punned.tact b/src/060-types/stmts-failed/stmt-destructuring-fields-non-existing-punned.tact similarity index 100% rename from src/types/stmts-failed/stmt-destructuring-fields-non-existing-punned.tact rename to src/060-types/stmts-failed/stmt-destructuring-fields-non-existing-punned.tact diff --git a/src/types/stmts-failed/stmt-destructuring-fields-non-existing-punned2.tact b/src/060-types/stmts-failed/stmt-destructuring-fields-non-existing-punned2.tact similarity index 100% rename from src/types/stmts-failed/stmt-destructuring-fields-non-existing-punned2.tact rename to src/060-types/stmts-failed/stmt-destructuring-fields-non-existing-punned2.tact diff --git a/src/types/stmts-failed/stmt-destructuring-fields-non-existing-underscore.tact b/src/060-types/stmts-failed/stmt-destructuring-fields-non-existing-underscore.tact similarity index 100% rename from src/types/stmts-failed/stmt-destructuring-fields-non-existing-underscore.tact rename to src/060-types/stmts-failed/stmt-destructuring-fields-non-existing-underscore.tact diff --git a/src/types/stmts-failed/stmt-destructuring-fields-non-existing.tact b/src/060-types/stmts-failed/stmt-destructuring-fields-non-existing.tact similarity index 100% rename from src/types/stmts-failed/stmt-destructuring-fields-non-existing.tact rename to src/060-types/stmts-failed/stmt-destructuring-fields-non-existing.tact diff --git a/src/types/stmts-failed/stmt-destructuring-fields-shadowed-const-id.tact b/src/060-types/stmts-failed/stmt-destructuring-fields-shadowed-const-id.tact similarity index 100% rename from src/types/stmts-failed/stmt-destructuring-fields-shadowed-const-id.tact rename to src/060-types/stmts-failed/stmt-destructuring-fields-shadowed-const-id.tact diff --git a/src/types/stmts-failed/stmt-destructuring-fields-shadowed-id.tact b/src/060-types/stmts-failed/stmt-destructuring-fields-shadowed-id.tact similarity index 100% rename from src/types/stmts-failed/stmt-destructuring-fields-shadowed-id.tact rename to src/060-types/stmts-failed/stmt-destructuring-fields-shadowed-id.tact diff --git a/src/types/stmts-failed/stmt-destructuring-fields-wrong-count.tact b/src/060-types/stmts-failed/stmt-destructuring-fields-wrong-count.tact similarity index 100% rename from src/types/stmts-failed/stmt-destructuring-fields-wrong-count.tact rename to src/060-types/stmts-failed/stmt-destructuring-fields-wrong-count.tact diff --git a/src/types/stmts-failed/stmt-destructuring-fields-wrong-count2.tact b/src/060-types/stmts-failed/stmt-destructuring-fields-wrong-count2.tact similarity index 100% rename from src/types/stmts-failed/stmt-destructuring-fields-wrong-count2.tact rename to src/060-types/stmts-failed/stmt-destructuring-fields-wrong-count2.tact diff --git a/src/types/stmts-failed/stmt-destructuring-fields-wrong-type.tact b/src/060-types/stmts-failed/stmt-destructuring-fields-wrong-type.tact similarity index 100% rename from src/types/stmts-failed/stmt-destructuring-fields-wrong-type.tact rename to src/060-types/stmts-failed/stmt-destructuring-fields-wrong-type.tact diff --git a/src/types/stmts-failed/stmt-do-int.tact b/src/060-types/stmts-failed/stmt-do-int.tact similarity index 100% rename from src/types/stmts-failed/stmt-do-int.tact rename to src/060-types/stmts-failed/stmt-do-int.tact diff --git a/src/types/stmts-failed/stmt-foreach-non-map.tact b/src/060-types/stmts-failed/stmt-foreach-non-map.tact similarity index 100% rename from src/types/stmts-failed/stmt-foreach-non-map.tact rename to src/060-types/stmts-failed/stmt-foreach-non-map.tact diff --git a/src/types/stmts-failed/stmt-foreach-non-path-map.tact b/src/060-types/stmts-failed/stmt-foreach-non-path-map.tact similarity index 100% rename from src/types/stmts-failed/stmt-foreach-non-path-map.tact rename to src/060-types/stmts-failed/stmt-foreach-non-path-map.tact diff --git a/src/types/stmts-failed/stmt-if-int.tact b/src/060-types/stmts-failed/stmt-if-int.tact similarity index 100% rename from src/types/stmts-failed/stmt-if-int.tact rename to src/060-types/stmts-failed/stmt-if-int.tact diff --git a/src/types/stmts-failed/stmt-let-unknown-type-inference.tact b/src/060-types/stmts-failed/stmt-let-unknown-type-inference.tact similarity index 100% rename from src/types/stmts-failed/stmt-let-unknown-type-inference.tact rename to src/060-types/stmts-failed/stmt-let-unknown-type-inference.tact diff --git a/src/types/stmts-failed/stmt-let-unknown-type-inference2.tact b/src/060-types/stmts-failed/stmt-let-unknown-type-inference2.tact similarity index 100% rename from src/types/stmts-failed/stmt-let-unknown-type-inference2.tact rename to src/060-types/stmts-failed/stmt-let-unknown-type-inference2.tact diff --git a/src/types/stmts-failed/stmt-let-void-inference.tact b/src/060-types/stmts-failed/stmt-let-void-inference.tact similarity index 100% rename from src/types/stmts-failed/stmt-let-void-inference.tact rename to src/060-types/stmts-failed/stmt-let-void-inference.tact diff --git a/src/types/stmts-failed/stmt-let-wrong-rhs.tact b/src/060-types/stmts-failed/stmt-let-wrong-rhs.tact similarity index 100% rename from src/types/stmts-failed/stmt-let-wrong-rhs.tact rename to src/060-types/stmts-failed/stmt-let-wrong-rhs.tact diff --git a/src/types/stmts-failed/stmt-repeat-bool.tact b/src/060-types/stmts-failed/stmt-repeat-bool.tact similarity index 100% rename from src/types/stmts-failed/stmt-repeat-bool.tact rename to src/060-types/stmts-failed/stmt-repeat-bool.tact diff --git a/src/types/stmts-failed/stmt-return-from-try-and-catch.tact b/src/060-types/stmts-failed/stmt-return-from-try-and-catch.tact similarity index 100% rename from src/types/stmts-failed/stmt-return-from-try-and-catch.tact rename to src/060-types/stmts-failed/stmt-return-from-try-and-catch.tact diff --git a/src/types/stmts-failed/stmt-return-void1.tact b/src/060-types/stmts-failed/stmt-return-void1.tact similarity index 100% rename from src/types/stmts-failed/stmt-return-void1.tact rename to src/060-types/stmts-failed/stmt-return-void1.tact diff --git a/src/types/stmts-failed/stmt-return-void2.tact b/src/060-types/stmts-failed/stmt-return-void2.tact similarity index 100% rename from src/types/stmts-failed/stmt-return-void2.tact rename to src/060-types/stmts-failed/stmt-return-void2.tact diff --git a/src/types/stmts-failed/stmt-return-void3.tact b/src/060-types/stmts-failed/stmt-return-void3.tact similarity index 100% rename from src/types/stmts-failed/stmt-return-void3.tact rename to src/060-types/stmts-failed/stmt-return-void3.tact diff --git a/src/types/stmts-failed/stmt-unboxing-expr-stmt-void.tact b/src/060-types/stmts-failed/stmt-unboxing-expr-stmt-void.tact similarity index 100% rename from src/types/stmts-failed/stmt-unboxing-expr-stmt-void.tact rename to src/060-types/stmts-failed/stmt-unboxing-expr-stmt-void.tact diff --git a/src/types/stmts-failed/stmt-while-int.tact b/src/060-types/stmts-failed/stmt-while-int.tact similarity index 100% rename from src/types/stmts-failed/stmt-while-int.tact rename to src/060-types/stmts-failed/stmt-while-int.tact diff --git a/src/types/stmts-failed/usage-of-bounced-field-in-type-that-is-too-big-2.tact b/src/060-types/stmts-failed/usage-of-bounced-field-in-type-that-is-too-big-2.tact similarity index 100% rename from src/types/stmts-failed/usage-of-bounced-field-in-type-that-is-too-big-2.tact rename to src/060-types/stmts-failed/usage-of-bounced-field-in-type-that-is-too-big-2.tact diff --git a/src/types/stmts-failed/usage-of-bounced-field-in-type-that-is-too-big.tact b/src/060-types/stmts-failed/usage-of-bounced-field-in-type-that-is-too-big.tact similarity index 100% rename from src/types/stmts-failed/usage-of-bounced-field-in-type-that-is-too-big.tact rename to src/060-types/stmts-failed/usage-of-bounced-field-in-type-that-is-too-big.tact diff --git a/src/types/stmts-failed/usage-of-bounced-field-that-is-too-big.tact b/src/060-types/stmts-failed/usage-of-bounced-field-that-is-too-big.tact similarity index 100% rename from src/types/stmts-failed/usage-of-bounced-field-that-is-too-big.tact rename to src/060-types/stmts-failed/usage-of-bounced-field-that-is-too-big.tact diff --git a/src/types/stmts-failed/var-does-not-exist.tact b/src/060-types/stmts-failed/var-does-not-exist.tact similarity index 100% rename from src/types/stmts-failed/var-does-not-exist.tact rename to src/060-types/stmts-failed/var-does-not-exist.tact diff --git a/src/types/stmts-failed/var-does-not-exist2.tact b/src/060-types/stmts-failed/var-does-not-exist2.tact similarity index 100% rename from src/types/stmts-failed/var-does-not-exist2.tact rename to src/060-types/stmts-failed/var-does-not-exist2.tact diff --git a/src/types/stmts-failed/var-does-not-exist3.tact b/src/060-types/stmts-failed/var-does-not-exist3.tact similarity index 100% rename from src/types/stmts-failed/var-does-not-exist3.tact rename to src/060-types/stmts-failed/var-does-not-exist3.tact diff --git a/src/types/stmts-failed/var-does-not-exist4.tact b/src/060-types/stmts-failed/var-does-not-exist4.tact similarity index 100% rename from src/types/stmts-failed/var-does-not-exist4.tact rename to src/060-types/stmts-failed/var-does-not-exist4.tact diff --git a/src/types/stmts-failed/var-scope-catch-does-not-shadow-outer-const.tact b/src/060-types/stmts-failed/var-scope-catch-does-not-shadow-outer-const.tact similarity index 100% rename from src/types/stmts-failed/var-scope-catch-does-not-shadow-outer-const.tact rename to src/060-types/stmts-failed/var-scope-catch-does-not-shadow-outer-const.tact diff --git a/src/types/stmts-failed/var-scope-catch-does-not-shadow-outer-var.tact b/src/060-types/stmts-failed/var-scope-catch-does-not-shadow-outer-var.tact similarity index 100% rename from src/types/stmts-failed/var-scope-catch-does-not-shadow-outer-var.tact rename to src/060-types/stmts-failed/var-scope-catch-does-not-shadow-outer-var.tact diff --git a/src/types/stmts-failed/var-scope-catch-param-does-not-shadow-outer-var.tact b/src/060-types/stmts-failed/var-scope-catch-param-does-not-shadow-outer-var.tact similarity index 100% rename from src/types/stmts-failed/var-scope-catch-param-does-not-shadow-outer-var.tact rename to src/060-types/stmts-failed/var-scope-catch-param-does-not-shadow-outer-var.tact diff --git a/src/types/stmts-failed/var-scope-catch-param-is-not-visible-in-try.tact b/src/060-types/stmts-failed/var-scope-catch-param-is-not-visible-in-try.tact similarity index 100% rename from src/types/stmts-failed/var-scope-catch-param-is-not-visible-in-try.tact rename to src/060-types/stmts-failed/var-scope-catch-param-is-not-visible-in-try.tact diff --git a/src/types/stmts-failed/var-scope-const-shadowing-catch.tact b/src/060-types/stmts-failed/var-scope-const-shadowing-catch.tact similarity index 100% rename from src/types/stmts-failed/var-scope-const-shadowing-catch.tact rename to src/060-types/stmts-failed/var-scope-const-shadowing-catch.tact diff --git a/src/types/stmts-failed/var-scope-const-shadowing-external-param.tact b/src/060-types/stmts-failed/var-scope-const-shadowing-external-param.tact similarity index 100% rename from src/types/stmts-failed/var-scope-const-shadowing-external-param.tact rename to src/060-types/stmts-failed/var-scope-const-shadowing-external-param.tact diff --git a/src/types/stmts-failed/var-scope-const-shadowing-foreach.tact b/src/060-types/stmts-failed/var-scope-const-shadowing-foreach.tact similarity index 100% rename from src/types/stmts-failed/var-scope-const-shadowing-foreach.tact rename to src/060-types/stmts-failed/var-scope-const-shadowing-foreach.tact diff --git a/src/types/stmts-failed/var-scope-const-shadowing-fun-param.tact b/src/060-types/stmts-failed/var-scope-const-shadowing-fun-param.tact similarity index 100% rename from src/types/stmts-failed/var-scope-const-shadowing-fun-param.tact rename to src/060-types/stmts-failed/var-scope-const-shadowing-fun-param.tact diff --git a/src/types/stmts-failed/var-scope-const-shadowing-let.tact b/src/060-types/stmts-failed/var-scope-const-shadowing-let.tact similarity index 100% rename from src/types/stmts-failed/var-scope-const-shadowing-let.tact rename to src/060-types/stmts-failed/var-scope-const-shadowing-let.tact diff --git a/src/types/stmts-failed/var-scope-const-shadowing-receiver-param.tact b/src/060-types/stmts-failed/var-scope-const-shadowing-receiver-param.tact similarity index 100% rename from src/types/stmts-failed/var-scope-const-shadowing-receiver-param.tact rename to src/060-types/stmts-failed/var-scope-const-shadowing-receiver-param.tact diff --git a/src/types/stmts-failed/var-scope-do-until-shadows-outer-const.tact b/src/060-types/stmts-failed/var-scope-do-until-shadows-outer-const.tact similarity index 100% rename from src/types/stmts-failed/var-scope-do-until-shadows-outer-const.tact rename to src/060-types/stmts-failed/var-scope-do-until-shadows-outer-const.tact diff --git a/src/types/stmts-failed/var-scope-do-until-shadows-outer-var.tact b/src/060-types/stmts-failed/var-scope-do-until-shadows-outer-var.tact similarity index 100% rename from src/types/stmts-failed/var-scope-do-until-shadows-outer-var.tact rename to src/060-types/stmts-failed/var-scope-do-until-shadows-outer-var.tact diff --git a/src/types/stmts-failed/var-scope-external-shadows-param.tact b/src/060-types/stmts-failed/var-scope-external-shadows-param.tact similarity index 100% rename from src/types/stmts-failed/var-scope-external-shadows-param.tact rename to src/060-types/stmts-failed/var-scope-external-shadows-param.tact diff --git a/src/types/stmts-failed/var-scope-foreach-internal-var-does-not-escape.tact b/src/060-types/stmts-failed/var-scope-foreach-internal-var-does-not-escape.tact similarity index 100% rename from src/types/stmts-failed/var-scope-foreach-internal-var-does-not-escape.tact rename to src/060-types/stmts-failed/var-scope-foreach-internal-var-does-not-escape.tact diff --git a/src/types/stmts-failed/var-scope-foreach-key-does-not-escape.tact b/src/060-types/stmts-failed/var-scope-foreach-key-does-not-escape.tact similarity index 100% rename from src/types/stmts-failed/var-scope-foreach-key-does-not-escape.tact rename to src/060-types/stmts-failed/var-scope-foreach-key-does-not-escape.tact diff --git a/src/types/stmts-failed/var-scope-foreach-key-shadows-map.tact b/src/060-types/stmts-failed/var-scope-foreach-key-shadows-map.tact similarity index 100% rename from src/types/stmts-failed/var-scope-foreach-key-shadows-map.tact rename to src/060-types/stmts-failed/var-scope-foreach-key-shadows-map.tact diff --git a/src/types/stmts-failed/var-scope-foreach-key-shadows-outer-var.tact b/src/060-types/stmts-failed/var-scope-foreach-key-shadows-outer-var.tact similarity index 100% rename from src/types/stmts-failed/var-scope-foreach-key-shadows-outer-var.tact rename to src/060-types/stmts-failed/var-scope-foreach-key-shadows-outer-var.tact diff --git a/src/types/stmts-failed/var-scope-foreach-shadows-outer-const.tact b/src/060-types/stmts-failed/var-scope-foreach-shadows-outer-const.tact similarity index 100% rename from src/types/stmts-failed/var-scope-foreach-shadows-outer-const.tact rename to src/060-types/stmts-failed/var-scope-foreach-shadows-outer-const.tact diff --git a/src/types/stmts-failed/var-scope-foreach-shadows-outer-map.tact b/src/060-types/stmts-failed/var-scope-foreach-shadows-outer-map.tact similarity index 100% rename from src/types/stmts-failed/var-scope-foreach-shadows-outer-map.tact rename to src/060-types/stmts-failed/var-scope-foreach-shadows-outer-map.tact diff --git a/src/types/stmts-failed/var-scope-foreach-shadows-outer-var.tact b/src/060-types/stmts-failed/var-scope-foreach-shadows-outer-var.tact similarity index 100% rename from src/types/stmts-failed/var-scope-foreach-shadows-outer-var.tact rename to src/060-types/stmts-failed/var-scope-foreach-shadows-outer-var.tact diff --git a/src/types/stmts-failed/var-scope-foreach-val-does-not-escape.tact b/src/060-types/stmts-failed/var-scope-foreach-val-does-not-escape.tact similarity index 100% rename from src/types/stmts-failed/var-scope-foreach-val-does-not-escape.tact rename to src/060-types/stmts-failed/var-scope-foreach-val-does-not-escape.tact diff --git a/src/types/stmts-failed/var-scope-foreach-val-shadows-const-map.tact b/src/060-types/stmts-failed/var-scope-foreach-val-shadows-const-map.tact similarity index 100% rename from src/types/stmts-failed/var-scope-foreach-val-shadows-const-map.tact rename to src/060-types/stmts-failed/var-scope-foreach-val-shadows-const-map.tact diff --git a/src/types/stmts-failed/var-scope-foreach-val-shadows-key.tact b/src/060-types/stmts-failed/var-scope-foreach-val-shadows-key.tact similarity index 100% rename from src/types/stmts-failed/var-scope-foreach-val-shadows-key.tact rename to src/060-types/stmts-failed/var-scope-foreach-val-shadows-key.tact diff --git a/src/types/stmts-failed/var-scope-foreach-val-shadows-map.tact b/src/060-types/stmts-failed/var-scope-foreach-val-shadows-map.tact similarity index 100% rename from src/types/stmts-failed/var-scope-foreach-val-shadows-map.tact rename to src/060-types/stmts-failed/var-scope-foreach-val-shadows-map.tact diff --git a/src/types/stmts-failed/var-scope-foreach-val-shadows-outer-var.tact b/src/060-types/stmts-failed/var-scope-foreach-val-shadows-outer-var.tact similarity index 100% rename from src/types/stmts-failed/var-scope-foreach-val-shadows-outer-var.tact rename to src/060-types/stmts-failed/var-scope-foreach-val-shadows-outer-var.tact diff --git a/src/types/stmts-failed/var-scope-function-shadows-local-var.tact b/src/060-types/stmts-failed/var-scope-function-shadows-local-var.tact similarity index 100% rename from src/types/stmts-failed/var-scope-function-shadows-local-var.tact rename to src/060-types/stmts-failed/var-scope-function-shadows-local-var.tact diff --git a/src/types/stmts-failed/var-scope-function-shadows-param.tact b/src/060-types/stmts-failed/var-scope-function-shadows-param.tact similarity index 100% rename from src/types/stmts-failed/var-scope-function-shadows-param.tact rename to src/060-types/stmts-failed/var-scope-function-shadows-param.tact diff --git a/src/types/stmts-failed/var-scope-if-else-shadows-outer-const.tact b/src/060-types/stmts-failed/var-scope-if-else-shadows-outer-const.tact similarity index 100% rename from src/types/stmts-failed/var-scope-if-else-shadows-outer-const.tact rename to src/060-types/stmts-failed/var-scope-if-else-shadows-outer-const.tact diff --git a/src/types/stmts-failed/var-scope-if-else-shadows-outer-var.tact b/src/060-types/stmts-failed/var-scope-if-else-shadows-outer-var.tact similarity index 100% rename from src/types/stmts-failed/var-scope-if-else-shadows-outer-var.tact rename to src/060-types/stmts-failed/var-scope-if-else-shadows-outer-var.tact diff --git a/src/types/stmts-failed/var-scope-if-then-shadows-outer-const.tact b/src/060-types/stmts-failed/var-scope-if-then-shadows-outer-const.tact similarity index 100% rename from src/types/stmts-failed/var-scope-if-then-shadows-outer-const.tact rename to src/060-types/stmts-failed/var-scope-if-then-shadows-outer-const.tact diff --git a/src/types/stmts-failed/var-scope-if-then-shadows-outer-var.tact b/src/060-types/stmts-failed/var-scope-if-then-shadows-outer-var.tact similarity index 100% rename from src/types/stmts-failed/var-scope-if-then-shadows-outer-var.tact rename to src/060-types/stmts-failed/var-scope-if-then-shadows-outer-var.tact diff --git a/src/types/stmts-failed/var-scope-local-catch-param-does-not-escape.tact b/src/060-types/stmts-failed/var-scope-local-catch-param-does-not-escape.tact similarity index 100% rename from src/types/stmts-failed/var-scope-local-catch-param-does-not-escape.tact rename to src/060-types/stmts-failed/var-scope-local-catch-param-does-not-escape.tact diff --git a/src/types/stmts-failed/var-scope-local-loop-var-does-not-escape.tact b/src/060-types/stmts-failed/var-scope-local-loop-var-does-not-escape.tact similarity index 100% rename from src/types/stmts-failed/var-scope-local-loop-var-does-not-escape.tact rename to src/060-types/stmts-failed/var-scope-local-loop-var-does-not-escape.tact diff --git a/src/types/stmts-failed/var-scope-missing-storage-var.tact b/src/060-types/stmts-failed/var-scope-missing-storage-var.tact similarity index 100% rename from src/types/stmts-failed/var-scope-missing-storage-var.tact rename to src/060-types/stmts-failed/var-scope-missing-storage-var.tact diff --git a/src/types/stmts-failed/var-scope-no-toString-global-fun1.tact b/src/060-types/stmts-failed/var-scope-no-toString-global-fun1.tact similarity index 100% rename from src/types/stmts-failed/var-scope-no-toString-global-fun1.tact rename to src/060-types/stmts-failed/var-scope-no-toString-global-fun1.tact diff --git a/src/types/stmts-failed/var-scope-no-toString-global-fun2.tact b/src/060-types/stmts-failed/var-scope-no-toString-global-fun2.tact similarity index 100% rename from src/types/stmts-failed/var-scope-no-toString-global-fun2.tact rename to src/060-types/stmts-failed/var-scope-no-toString-global-fun2.tact diff --git a/src/types/stmts-failed/var-scope-no-valueOf-global-fun.tact b/src/060-types/stmts-failed/var-scope-no-valueOf-global-fun.tact similarity index 100% rename from src/types/stmts-failed/var-scope-no-valueOf-global-fun.tact rename to src/060-types/stmts-failed/var-scope-no-valueOf-global-fun.tact diff --git a/src/types/stmts-failed/var-scope-rec-fun-shadowing-catch.tact b/src/060-types/stmts-failed/var-scope-rec-fun-shadowing-catch.tact similarity index 100% rename from src/types/stmts-failed/var-scope-rec-fun-shadowing-catch.tact rename to src/060-types/stmts-failed/var-scope-rec-fun-shadowing-catch.tact diff --git a/src/types/stmts-failed/var-scope-rec-fun-shadowing-foreach.tact b/src/060-types/stmts-failed/var-scope-rec-fun-shadowing-foreach.tact similarity index 100% rename from src/types/stmts-failed/var-scope-rec-fun-shadowing-foreach.tact rename to src/060-types/stmts-failed/var-scope-rec-fun-shadowing-foreach.tact diff --git a/src/types/stmts-failed/var-scope-rec-fun-shadowing-fun-param.tact b/src/060-types/stmts-failed/var-scope-rec-fun-shadowing-fun-param.tact similarity index 100% rename from src/types/stmts-failed/var-scope-rec-fun-shadowing-fun-param.tact rename to src/060-types/stmts-failed/var-scope-rec-fun-shadowing-fun-param.tact diff --git a/src/types/stmts-failed/var-scope-rec-fun-shadowing-let.tact b/src/060-types/stmts-failed/var-scope-rec-fun-shadowing-let.tact similarity index 100% rename from src/types/stmts-failed/var-scope-rec-fun-shadowing-let.tact rename to src/060-types/stmts-failed/var-scope-rec-fun-shadowing-let.tact diff --git a/src/types/stmts-failed/var-scope-receiver-shadows-param.tact b/src/060-types/stmts-failed/var-scope-receiver-shadows-param.tact similarity index 100% rename from src/types/stmts-failed/var-scope-receiver-shadows-param.tact rename to src/060-types/stmts-failed/var-scope-receiver-shadows-param.tact diff --git a/src/types/stmts-failed/var-scope-repeat-shadows-outer-const.tact b/src/060-types/stmts-failed/var-scope-repeat-shadows-outer-const.tact similarity index 100% rename from src/types/stmts-failed/var-scope-repeat-shadows-outer-const.tact rename to src/060-types/stmts-failed/var-scope-repeat-shadows-outer-const.tact diff --git a/src/types/stmts-failed/var-scope-repeat-shadows-outer-var.tact b/src/060-types/stmts-failed/var-scope-repeat-shadows-outer-var.tact similarity index 100% rename from src/types/stmts-failed/var-scope-repeat-shadows-outer-var.tact rename to src/060-types/stmts-failed/var-scope-repeat-shadows-outer-var.tact diff --git a/src/types/stmts-failed/var-scope-try-does-not-shadow-outer-const.tact b/src/060-types/stmts-failed/var-scope-try-does-not-shadow-outer-const.tact similarity index 100% rename from src/types/stmts-failed/var-scope-try-does-not-shadow-outer-const.tact rename to src/060-types/stmts-failed/var-scope-try-does-not-shadow-outer-const.tact diff --git a/src/types/stmts-failed/var-scope-try-does-not-shadow-outer-var.tact b/src/060-types/stmts-failed/var-scope-try-does-not-shadow-outer-var.tact similarity index 100% rename from src/types/stmts-failed/var-scope-try-does-not-shadow-outer-var.tact rename to src/060-types/stmts-failed/var-scope-try-does-not-shadow-outer-var.tact diff --git a/src/types/stmts-failed/var-scope-while-shadows-outer-const.tact b/src/060-types/stmts-failed/var-scope-while-shadows-outer-const.tact similarity index 100% rename from src/types/stmts-failed/var-scope-while-shadows-outer-const.tact rename to src/060-types/stmts-failed/var-scope-while-shadows-outer-const.tact diff --git a/src/types/stmts-failed/var-scope-while-shadows-outer-var.tact b/src/060-types/stmts-failed/var-scope-while-shadows-outer-var.tact similarity index 100% rename from src/types/stmts-failed/var-scope-while-shadows-outer-var.tact rename to src/060-types/stmts-failed/var-scope-while-shadows-outer-var.tact diff --git a/src/types/stmts-failed/var-underscore-name-access.tact b/src/060-types/stmts-failed/var-underscore-name-access.tact similarity index 100% rename from src/types/stmts-failed/var-underscore-name-access.tact rename to src/060-types/stmts-failed/var-underscore-name-access.tact diff --git a/src/types/stmts-failed/var-underscore-name-access2.tact b/src/060-types/stmts-failed/var-underscore-name-access2.tact similarity index 100% rename from src/types/stmts-failed/var-underscore-name-access2.tact rename to src/060-types/stmts-failed/var-underscore-name-access2.tact diff --git a/src/types/stmts-failed/var-underscore-name-access3.tact b/src/060-types/stmts-failed/var-underscore-name-access3.tact similarity index 100% rename from src/types/stmts-failed/var-underscore-name-access3.tact rename to src/060-types/stmts-failed/var-underscore-name-access3.tact diff --git a/src/types/stmts-failed/wf-type-let.tact b/src/060-types/stmts-failed/wf-type-let.tact similarity index 100% rename from src/types/stmts-failed/wf-type-let.tact rename to src/060-types/stmts-failed/wf-type-let.tact diff --git a/src/types/stmts/assign-self-mutating-method.tact b/src/060-types/stmts/assign-self-mutating-method.tact similarity index 100% rename from src/types/stmts/assign-self-mutating-method.tact rename to src/060-types/stmts/assign-self-mutating-method.tact diff --git a/src/types/stmts/contract-getter-with-method-id-1.tact b/src/060-types/stmts/contract-getter-with-method-id-1.tact similarity index 100% rename from src/types/stmts/contract-getter-with-method-id-1.tact rename to src/060-types/stmts/contract-getter-with-method-id-1.tact diff --git a/src/types/stmts/contract-getter-with-method-id-2.tact b/src/060-types/stmts/contract-getter-with-method-id-2.tact similarity index 100% rename from src/types/stmts/contract-getter-with-method-id-2.tact rename to src/060-types/stmts/contract-getter-with-method-id-2.tact diff --git a/src/types/stmts/contract-getter-with-method-id-3.tact b/src/060-types/stmts/contract-getter-with-method-id-3.tact similarity index 100% rename from src/types/stmts/contract-getter-with-method-id-3.tact rename to src/060-types/stmts/contract-getter-with-method-id-3.tact diff --git a/src/types/stmts/contract-receiver-bounced.tact b/src/060-types/stmts/contract-receiver-bounced.tact similarity index 100% rename from src/types/stmts/contract-receiver-bounced.tact rename to src/060-types/stmts/contract-receiver-bounced.tact diff --git a/src/types/stmts/expr-arith-bool-cmp.tact b/src/060-types/stmts/expr-arith-bool-cmp.tact similarity index 100% rename from src/types/stmts/expr-arith-bool-cmp.tact rename to src/060-types/stmts/expr-arith-bool-cmp.tact diff --git a/src/types/stmts/expr-conditional-with-subtyping.tact b/src/060-types/stmts/expr-conditional-with-subtyping.tact similarity index 100% rename from src/types/stmts/expr-conditional-with-subtyping.tact rename to src/060-types/stmts/expr-conditional-with-subtyping.tact diff --git a/src/types/stmts/expr-eq-arith.tact b/src/060-types/stmts/expr-eq-arith.tact similarity index 100% rename from src/types/stmts/expr-eq-arith.tact rename to src/060-types/stmts/expr-eq-arith.tact diff --git a/src/types/stmts/expr-eq-int-optional-int.tact b/src/060-types/stmts/expr-eq-int-optional-int.tact similarity index 100% rename from src/types/stmts/expr-eq-int-optional-int.tact rename to src/060-types/stmts/expr-eq-int-optional-int.tact diff --git a/src/types/stmts/expr-eq-literal.tact b/src/060-types/stmts/expr-eq-literal.tact similarity index 100% rename from src/types/stmts/expr-eq-literal.tact rename to src/060-types/stmts/expr-eq-literal.tact diff --git a/src/types/stmts/expr-eq-map-map.tact b/src/060-types/stmts/expr-eq-map-map.tact similarity index 100% rename from src/types/stmts/expr-eq-map-map.tact rename to src/060-types/stmts/expr-eq-map-map.tact diff --git a/src/types/stmts/expr-eq-map-null.tact b/src/060-types/stmts/expr-eq-map-null.tact similarity index 100% rename from src/types/stmts/expr-eq-map-null.tact rename to src/060-types/stmts/expr-eq-map-null.tact diff --git a/src/types/stmts/expr-eq-null-null.tact b/src/060-types/stmts/expr-eq-null-null.tact similarity index 100% rename from src/types/stmts/expr-eq-null-null.tact rename to src/060-types/stmts/expr-eq-null-null.tact diff --git a/src/types/stmts/expr-eq-optional-int-null.tact b/src/060-types/stmts/expr-eq-optional-int-null.tact similarity index 100% rename from src/types/stmts/expr-eq-optional-int-null.tact rename to src/060-types/stmts/expr-eq-optional-int-null.tact diff --git a/src/types/stmts/expr-eq-optional-struct-null.tact b/src/060-types/stmts/expr-eq-optional-struct-null.tact similarity index 100% rename from src/types/stmts/expr-eq-optional-struct-null.tact rename to src/060-types/stmts/expr-eq-optional-struct-null.tact diff --git a/src/types/stmts/expr-field-access-method-call.tact b/src/060-types/stmts/expr-field-access-method-call.tact similarity index 100% rename from src/types/stmts/expr-field-access-method-call.tact rename to src/060-types/stmts/expr-field-access-method-call.tact diff --git a/src/types/stmts/expr-maps-del-method.tact b/src/060-types/stmts/expr-maps-del-method.tact similarity index 100% rename from src/types/stmts/expr-maps-del-method.tact rename to src/060-types/stmts/expr-maps-del-method.tact diff --git a/src/types/stmts/expr-maps-exists-method.tact b/src/060-types/stmts/expr-maps-exists-method.tact similarity index 100% rename from src/types/stmts/expr-maps-exists-method.tact rename to src/060-types/stmts/expr-maps-exists-method.tact diff --git a/src/types/stmts/expr-struct-construction.tact b/src/060-types/stmts/expr-struct-construction.tact similarity index 100% rename from src/types/stmts/expr-struct-construction.tact rename to src/060-types/stmts/expr-struct-construction.tact diff --git a/src/types/stmts/fun-extends-optional.tact b/src/060-types/stmts/fun-extends-optional.tact similarity index 100% rename from src/types/stmts/fun-extends-optional.tact rename to src/060-types/stmts/fun-extends-optional.tact diff --git a/src/types/stmts/init-vars-analysis-with-if.tact b/src/060-types/stmts/init-vars-analysis-with-if.tact similarity index 100% rename from src/types/stmts/init-vars-analysis-with-if.tact rename to src/060-types/stmts/init-vars-analysis-with-if.tact diff --git a/src/types/stmts/return-analysis-if-elseif.tact b/src/060-types/stmts/return-analysis-if-elseif.tact similarity index 100% rename from src/types/stmts/return-analysis-if-elseif.tact rename to src/060-types/stmts/return-analysis-if-elseif.tact diff --git a/src/types/stmts/return-analysis-if-try-catch-do-loop.tact b/src/060-types/stmts/return-analysis-if-try-catch-do-loop.tact similarity index 100% rename from src/types/stmts/return-analysis-if-try-catch-do-loop.tact rename to src/060-types/stmts/return-analysis-if-try-catch-do-loop.tact diff --git a/src/types/stmts/return-analysis-no-return-in-void1.tact b/src/060-types/stmts/return-analysis-no-return-in-void1.tact similarity index 100% rename from src/types/stmts/return-analysis-no-return-in-void1.tact rename to src/060-types/stmts/return-analysis-no-return-in-void1.tact diff --git a/src/types/stmts/return-analysis-no-return-in-void2.tact b/src/060-types/stmts/return-analysis-no-return-in-void2.tact similarity index 100% rename from src/types/stmts/return-analysis-no-return-in-void2.tact rename to src/060-types/stmts/return-analysis-no-return-in-void2.tact diff --git a/src/types/stmts/return-analysis-throw1.tact b/src/060-types/stmts/return-analysis-throw1.tact similarity index 100% rename from src/types/stmts/return-analysis-throw1.tact rename to src/060-types/stmts/return-analysis-throw1.tact diff --git a/src/types/stmts/return-analysis-throw2.tact b/src/060-types/stmts/return-analysis-throw2.tact similarity index 100% rename from src/types/stmts/return-analysis-throw2.tact rename to src/060-types/stmts/return-analysis-throw2.tact diff --git a/src/types/stmts/return-analysis-try-catch.tact b/src/060-types/stmts/return-analysis-try-catch.tact similarity index 100% rename from src/types/stmts/return-analysis-try-catch.tact rename to src/060-types/stmts/return-analysis-try-catch.tact diff --git a/src/types/stmts/stmt-augmented-assgn-bool.tact b/src/060-types/stmts/stmt-augmented-assgn-bool.tact similarity index 100% rename from src/types/stmts/stmt-augmented-assgn-bool.tact rename to src/060-types/stmts/stmt-augmented-assgn-bool.tact diff --git a/src/types/stmts/stmt-augmented-assgn-numerical-type.tact b/src/060-types/stmts/stmt-augmented-assgn-numerical-type.tact similarity index 100% rename from src/types/stmts/stmt-augmented-assgn-numerical-type.tact rename to src/060-types/stmts/stmt-augmented-assgn-numerical-type.tact diff --git a/src/types/stmts/stmt-destructuring.tact b/src/060-types/stmts/stmt-destructuring.tact similarity index 100% rename from src/types/stmts/stmt-destructuring.tact rename to src/060-types/stmts/stmt-destructuring.tact diff --git a/src/types/stmts/stmt-let-assgn-unbox.tact b/src/060-types/stmts/stmt-let-assgn-unbox.tact similarity index 100% rename from src/types/stmts/stmt-let-assgn-unbox.tact rename to src/060-types/stmts/stmt-let-assgn-unbox.tact diff --git a/src/types/stmts/stmt-let-assgn.tact b/src/060-types/stmts/stmt-let-assgn.tact similarity index 100% rename from src/types/stmts/stmt-let-assgn.tact rename to src/060-types/stmts/stmt-let-assgn.tact diff --git a/src/types/stmts/stmt-let-if-elseif.tact b/src/060-types/stmts/stmt-let-if-elseif.tact similarity index 100% rename from src/types/stmts/stmt-let-if-elseif.tact rename to src/060-types/stmts/stmt-let-if-elseif.tact diff --git a/src/types/stmts/stmt-let-map-type-inference.tact b/src/060-types/stmts/stmt-let-map-type-inference.tact similarity index 100% rename from src/types/stmts/stmt-let-map-type-inference.tact rename to src/060-types/stmts/stmt-let-map-type-inference.tact diff --git a/src/types/stmts/stmt-let-nullable-type-inference.tact b/src/060-types/stmts/stmt-let-nullable-type-inference.tact similarity index 100% rename from src/types/stmts/stmt-let-nullable-type-inference.tact rename to src/060-types/stmts/stmt-let-nullable-type-inference.tact diff --git a/src/types/stmts/var-scope-let-toString.tact b/src/060-types/stmts/var-scope-let-toString.tact similarity index 100% rename from src/types/stmts/var-scope-let-toString.tact rename to src/060-types/stmts/var-scope-let-toString.tact diff --git a/src/types/stmts/var-scope-repeat.tact b/src/060-types/stmts/var-scope-repeat.tact similarity index 100% rename from src/types/stmts/var-scope-repeat.tact rename to src/060-types/stmts/var-scope-repeat.tact diff --git a/src/types/stmts/var-scope-repeat2.tact b/src/060-types/stmts/var-scope-repeat2.tact similarity index 100% rename from src/types/stmts/var-scope-repeat2.tact rename to src/060-types/stmts/var-scope-repeat2.tact diff --git a/src/types/stmts/var-scope-toString-non-method.tact b/src/060-types/stmts/var-scope-toString-non-method.tact similarity index 100% rename from src/types/stmts/var-scope-toString-non-method.tact rename to src/060-types/stmts/var-scope-toString-non-method.tact diff --git a/src/types/stmts/var-scope-valueOf-fun.tact b/src/060-types/stmts/var-scope-valueOf-fun.tact similarity index 100% rename from src/types/stmts/var-scope-valueOf-fun.tact rename to src/060-types/stmts/var-scope-valueOf-fun.tact diff --git a/src/types/stmts/var-underscore-name-in-foreach.tact b/src/060-types/stmts/var-underscore-name-in-foreach.tact similarity index 100% rename from src/types/stmts/var-underscore-name-in-foreach.tact rename to src/060-types/stmts/var-underscore-name-in-foreach.tact diff --git a/src/types/stmts/var-underscore-name-in-foreach2.tact b/src/060-types/stmts/var-underscore-name-in-foreach2.tact similarity index 100% rename from src/types/stmts/var-underscore-name-in-foreach2.tact rename to src/060-types/stmts/var-underscore-name-in-foreach2.tact diff --git a/src/types/stmts/var-underscore-name-in-let.tact b/src/060-types/stmts/var-underscore-name-in-let.tact similarity index 100% rename from src/types/stmts/var-underscore-name-in-let.tact rename to src/060-types/stmts/var-underscore-name-in-let.tact diff --git a/src/types/subtyping.ts b/src/060-types/subtyping.ts similarity index 100% rename from src/types/subtyping.ts rename to src/060-types/subtyping.ts diff --git a/src/types/test-failed/asm-fun-shuffle-arg-duplicate.tact b/src/060-types/test-failed/asm-fun-shuffle-arg-duplicate.tact similarity index 100% rename from src/types/test-failed/asm-fun-shuffle-arg-duplicate.tact rename to src/060-types/test-failed/asm-fun-shuffle-arg-duplicate.tact diff --git a/src/types/test-failed/asm-fun-shuffle-arg-missing-and-non-existent-param.tact b/src/060-types/test-failed/asm-fun-shuffle-arg-missing-and-non-existent-param.tact similarity index 100% rename from src/types/test-failed/asm-fun-shuffle-arg-missing-and-non-existent-param.tact rename to src/060-types/test-failed/asm-fun-shuffle-arg-missing-and-non-existent-param.tact diff --git a/src/types/test-failed/asm-fun-shuffle-arg-missing-param.tact b/src/060-types/test-failed/asm-fun-shuffle-arg-missing-param.tact similarity index 100% rename from src/types/test-failed/asm-fun-shuffle-arg-missing-param.tact rename to src/060-types/test-failed/asm-fun-shuffle-arg-missing-param.tact diff --git a/src/types/test-failed/asm-fun-shuffle-arg-non-existent-param.tact b/src/060-types/test-failed/asm-fun-shuffle-arg-non-existent-param.tact similarity index 100% rename from src/types/test-failed/asm-fun-shuffle-arg-non-existent-param.tact rename to src/060-types/test-failed/asm-fun-shuffle-arg-non-existent-param.tact diff --git a/src/types/test-failed/asm-fun-shuffle-ret-duplicate.tact b/src/060-types/test-failed/asm-fun-shuffle-ret-duplicate.tact similarity index 100% rename from src/types/test-failed/asm-fun-shuffle-ret-duplicate.tact rename to src/060-types/test-failed/asm-fun-shuffle-ret-duplicate.tact diff --git a/src/types/test-failed/asm-fun-shuffle-ret-missing-position.tact b/src/060-types/test-failed/asm-fun-shuffle-ret-missing-position.tact similarity index 100% rename from src/types/test-failed/asm-fun-shuffle-ret-missing-position.tact rename to src/060-types/test-failed/asm-fun-shuffle-ret-missing-position.tact diff --git a/src/types/test-failed/asm-fun-shuffle-ret-non-existent-position.tact b/src/060-types/test-failed/asm-fun-shuffle-ret-non-existent-position.tact similarity index 100% rename from src/types/test-failed/asm-fun-shuffle-ret-non-existent-position.tact rename to src/060-types/test-failed/asm-fun-shuffle-ret-non-existent-position.tact diff --git a/src/types/test-failed/const-decl-default-field-wrong-initializer-type copy.tact b/src/060-types/test-failed/const-decl-default-field-wrong-initializer-type copy.tact similarity index 100% rename from src/types/test-failed/const-decl-default-field-wrong-initializer-type copy.tact rename to src/060-types/test-failed/const-decl-default-field-wrong-initializer-type copy.tact diff --git a/src/types/test-failed/const-eval-overflow.tact b/src/060-types/test-failed/const-eval-overflow.tact similarity index 100% rename from src/types/test-failed/const-eval-overflow.tact rename to src/060-types/test-failed/const-eval-overflow.tact diff --git a/src/types/test-failed/contract-bounced-receiver-int.tact b/src/060-types/test-failed/contract-bounced-receiver-int.tact similarity index 100% rename from src/types/test-failed/contract-bounced-receiver-int.tact rename to src/060-types/test-failed/contract-bounced-receiver-int.tact diff --git a/src/types/test-failed/contract-bounced-receiver-missing-type-1.tact b/src/060-types/test-failed/contract-bounced-receiver-missing-type-1.tact similarity index 100% rename from src/types/test-failed/contract-bounced-receiver-missing-type-1.tact rename to src/060-types/test-failed/contract-bounced-receiver-missing-type-1.tact diff --git a/src/types/test-failed/contract-bounced-receiver-missing-type-2.tact b/src/060-types/test-failed/contract-bounced-receiver-missing-type-2.tact similarity index 100% rename from src/types/test-failed/contract-bounced-receiver-missing-type-2.tact rename to src/060-types/test-failed/contract-bounced-receiver-missing-type-2.tact diff --git a/src/types/test-failed/contract-bounced-storage-var.tact b/src/060-types/test-failed/contract-bounced-storage-var.tact similarity index 100% rename from src/types/test-failed/contract-bounced-storage-var.tact rename to src/060-types/test-failed/contract-bounced-storage-var.tact diff --git a/src/types/test-failed/contract-const-decl-default-field-wrong-initializer-type.tact b/src/060-types/test-failed/contract-const-decl-default-field-wrong-initializer-type.tact similarity index 100% rename from src/types/test-failed/contract-const-decl-default-field-wrong-initializer-type.tact rename to src/060-types/test-failed/contract-const-decl-default-field-wrong-initializer-type.tact diff --git a/src/types/test-failed/contract-const-override-virtual-no-keyword.tact b/src/060-types/test-failed/contract-const-override-virtual-no-keyword.tact similarity index 100% rename from src/types/test-failed/contract-const-override-virtual-no-keyword.tact rename to src/060-types/test-failed/contract-const-override-virtual-no-keyword.tact diff --git a/src/types/test-failed/contract-does-not-override-abstract-const.tact b/src/060-types/test-failed/contract-does-not-override-abstract-const.tact similarity index 100% rename from src/types/test-failed/contract-does-not-override-abstract-const.tact rename to src/060-types/test-failed/contract-does-not-override-abstract-const.tact diff --git a/src/types/test-failed/contract-does-not-override-abstract-getter.tact b/src/060-types/test-failed/contract-does-not-override-abstract-getter.tact similarity index 100% rename from src/types/test-failed/contract-does-not-override-abstract-getter.tact rename to src/060-types/test-failed/contract-does-not-override-abstract-getter.tact diff --git a/src/types/test-failed/contract-duplicate-bounced-fallback.tact b/src/060-types/test-failed/contract-duplicate-bounced-fallback.tact similarity index 100% rename from src/types/test-failed/contract-duplicate-bounced-fallback.tact rename to src/060-types/test-failed/contract-duplicate-bounced-fallback.tact diff --git a/src/types/test-failed/contract-duplicate-bounced1.tact b/src/060-types/test-failed/contract-duplicate-bounced1.tact similarity index 100% rename from src/types/test-failed/contract-duplicate-bounced1.tact rename to src/060-types/test-failed/contract-duplicate-bounced1.tact diff --git a/src/types/test-failed/contract-duplicate-bounced2.tact b/src/060-types/test-failed/contract-duplicate-bounced2.tact similarity index 100% rename from src/types/test-failed/contract-duplicate-bounced2.tact rename to src/060-types/test-failed/contract-duplicate-bounced2.tact diff --git a/src/types/test-failed/contract-duplicate-external-fallback.tact b/src/060-types/test-failed/contract-duplicate-external-fallback.tact similarity index 100% rename from src/types/test-failed/contract-duplicate-external-fallback.tact rename to src/060-types/test-failed/contract-duplicate-external-fallback.tact diff --git a/src/types/test-failed/contract-duplicate-external.tact b/src/060-types/test-failed/contract-duplicate-external.tact similarity index 100% rename from src/types/test-failed/contract-duplicate-external.tact rename to src/060-types/test-failed/contract-duplicate-external.tact diff --git a/src/types/test-failed/contract-duplicate-init.tact b/src/060-types/test-failed/contract-duplicate-init.tact similarity index 100% rename from src/types/test-failed/contract-duplicate-init.tact rename to src/060-types/test-failed/contract-duplicate-init.tact diff --git a/src/types/test-failed/contract-duplicate-receiver.tact b/src/060-types/test-failed/contract-duplicate-receiver.tact similarity index 100% rename from src/types/test-failed/contract-duplicate-receiver.tact rename to src/060-types/test-failed/contract-duplicate-receiver.tact diff --git a/src/types/test-failed/contract-duplicate-storage-var.tact b/src/060-types/test-failed/contract-duplicate-storage-var.tact similarity index 100% rename from src/types/test-failed/contract-duplicate-storage-var.tact rename to src/060-types/test-failed/contract-duplicate-storage-var.tact diff --git a/src/types/test-failed/contract-duplicates-in-trait-list.tact b/src/060-types/test-failed/contract-duplicates-in-trait-list.tact similarity index 100% rename from src/types/test-failed/contract-duplicates-in-trait-list.tact rename to src/060-types/test-failed/contract-duplicates-in-trait-list.tact diff --git a/src/types/test-failed/contract-getter-override-virtual-no-keyword.tact b/src/060-types/test-failed/contract-getter-override-virtual-no-keyword.tact similarity index 100% rename from src/types/test-failed/contract-getter-override-virtual-no-keyword.tact rename to src/060-types/test-failed/contract-getter-override-virtual-no-keyword.tact diff --git a/src/types/test-failed/contract-missing-type.tact b/src/060-types/test-failed/contract-missing-type.tact similarity index 100% rename from src/types/test-failed/contract-missing-type.tact rename to src/060-types/test-failed/contract-missing-type.tact diff --git a/src/types/test-failed/contract-receiver-int.tact b/src/060-types/test-failed/contract-receiver-int.tact similarity index 100% rename from src/types/test-failed/contract-receiver-int.tact rename to src/060-types/test-failed/contract-receiver-int.tact diff --git a/src/types/test-failed/contract-receiver-optional-msg.tact b/src/060-types/test-failed/contract-receiver-optional-msg.tact similarity index 100% rename from src/types/test-failed/contract-receiver-optional-msg.tact rename to src/060-types/test-failed/contract-receiver-optional-msg.tact diff --git a/src/types/test-failed/contract-receiver-struct.tact b/src/060-types/test-failed/contract-receiver-struct.tact similarity index 100% rename from src/types/test-failed/contract-receiver-struct.tact rename to src/060-types/test-failed/contract-receiver-struct.tact diff --git a/src/types/test-failed/expr-bitwise-not-bool-in-const1.tact b/src/060-types/test-failed/expr-bitwise-not-bool-in-const1.tact similarity index 100% rename from src/types/test-failed/expr-bitwise-not-bool-in-const1.tact rename to src/060-types/test-failed/expr-bitwise-not-bool-in-const1.tact diff --git a/src/types/test-failed/expr-bitwise-not-bool-in-const2.tact b/src/060-types/test-failed/expr-bitwise-not-bool-in-const2.tact similarity index 100% rename from src/types/test-failed/expr-bitwise-not-bool-in-const2.tact rename to src/060-types/test-failed/expr-bitwise-not-bool-in-const2.tact diff --git a/src/types/test-failed/getter-outside-contract.tact b/src/060-types/test-failed/getter-outside-contract.tact similarity index 100% rename from src/types/test-failed/getter-outside-contract.tact rename to src/060-types/test-failed/getter-outside-contract.tact diff --git a/src/types/test-failed/message-negative-opcode-1.tact b/src/060-types/test-failed/message-negative-opcode-1.tact similarity index 100% rename from src/types/test-failed/message-negative-opcode-1.tact rename to src/060-types/test-failed/message-negative-opcode-1.tact diff --git a/src/types/test-failed/message-negative-opcode-2.tact b/src/060-types/test-failed/message-negative-opcode-2.tact similarity index 100% rename from src/types/test-failed/message-negative-opcode-2.tact rename to src/060-types/test-failed/message-negative-opcode-2.tact diff --git a/src/types/test-failed/message-opcode-div-by-zero.tact b/src/060-types/test-failed/message-opcode-div-by-zero.tact similarity index 100% rename from src/types/test-failed/message-opcode-div-by-zero.tact rename to src/060-types/test-failed/message-opcode-div-by-zero.tact diff --git a/src/types/test-failed/message-opcode-too-large-1.tact b/src/060-types/test-failed/message-opcode-too-large-1.tact similarity index 100% rename from src/types/test-failed/message-opcode-too-large-1.tact rename to src/060-types/test-failed/message-opcode-too-large-1.tact diff --git a/src/types/test-failed/message-opcode-too-large-2.tact b/src/060-types/test-failed/message-opcode-too-large-2.tact similarity index 100% rename from src/types/test-failed/message-opcode-too-large-2.tact rename to src/060-types/test-failed/message-opcode-too-large-2.tact diff --git a/src/types/test-failed/message-opcode-zero-1.tact b/src/060-types/test-failed/message-opcode-zero-1.tact similarity index 100% rename from src/types/test-failed/message-opcode-zero-1.tact rename to src/060-types/test-failed/message-opcode-zero-1.tact diff --git a/src/types/test-failed/message-opcode-zero-2.tact b/src/060-types/test-failed/message-opcode-zero-2.tact similarity index 100% rename from src/types/test-failed/message-opcode-zero-2.tact rename to src/060-types/test-failed/message-opcode-zero-2.tact diff --git a/src/types/test-failed/method-first-param-not-self1.tact b/src/060-types/test-failed/method-first-param-not-self1.tact similarity index 100% rename from src/types/test-failed/method-first-param-not-self1.tact rename to src/060-types/test-failed/method-first-param-not-self1.tact diff --git a/src/types/test-failed/method-first-param-not-self2.tact b/src/060-types/test-failed/method-first-param-not-self2.tact similarity index 100% rename from src/types/test-failed/method-first-param-not-self2.tact rename to src/060-types/test-failed/method-first-param-not-self2.tact diff --git a/src/types/test-failed/native-fun-getter.tact b/src/060-types/test-failed/native-fun-getter.tact similarity index 100% rename from src/types/test-failed/native-fun-getter.tact rename to src/060-types/test-failed/native-fun-getter.tact diff --git a/src/types/test-failed/scope-contract-shadows-contract.tact b/src/060-types/test-failed/scope-contract-shadows-contract.tact similarity index 100% rename from src/types/test-failed/scope-contract-shadows-contract.tact rename to src/060-types/test-failed/scope-contract-shadows-contract.tact diff --git a/src/types/test-failed/scope-duplicate-method.tact b/src/060-types/test-failed/scope-duplicate-method.tact similarity index 100% rename from src/types/test-failed/scope-duplicate-method.tact rename to src/060-types/test-failed/scope-duplicate-method.tact diff --git a/src/types/test-failed/scope-fun-shadows-builtin-dumpStack.tact b/src/060-types/test-failed/scope-fun-shadows-builtin-dumpStack.tact similarity index 100% rename from src/types/test-failed/scope-fun-shadows-builtin-dumpStack.tact rename to src/060-types/test-failed/scope-fun-shadows-builtin-dumpStack.tact diff --git a/src/types/test-failed/scope-fun-shadows-builtin-ton.tact b/src/060-types/test-failed/scope-fun-shadows-builtin-ton.tact similarity index 100% rename from src/types/test-failed/scope-fun-shadows-builtin-ton.tact rename to src/060-types/test-failed/scope-fun-shadows-builtin-ton.tact diff --git a/src/types/test-failed/scope-fun-shadows-fun.tact b/src/060-types/test-failed/scope-fun-shadows-fun.tact similarity index 100% rename from src/types/test-failed/scope-fun-shadows-fun.tact rename to src/060-types/test-failed/scope-fun-shadows-fun.tact diff --git a/src/types/test-failed/scope-internal-fun-shadows-internal-fun.tact b/src/060-types/test-failed/scope-internal-fun-shadows-internal-fun.tact similarity index 100% rename from src/types/test-failed/scope-internal-fun-shadows-internal-fun.tact rename to src/060-types/test-failed/scope-internal-fun-shadows-internal-fun.tact diff --git a/src/types/test-failed/scope-param-shadows-param.tact b/src/060-types/test-failed/scope-param-shadows-param.tact similarity index 100% rename from src/types/test-failed/scope-param-shadows-param.tact rename to src/060-types/test-failed/scope-param-shadows-param.tact diff --git a/src/types/test-failed/scope-storage-var-shadows-trait-const.tact b/src/060-types/test-failed/scope-storage-var-shadows-trait-const.tact similarity index 100% rename from src/types/test-failed/scope-storage-var-shadows-trait-const.tact rename to src/060-types/test-failed/scope-storage-var-shadows-trait-const.tact diff --git a/src/types/test-failed/scope-struct-shadows-contract.tact b/src/060-types/test-failed/scope-struct-shadows-contract.tact similarity index 100% rename from src/types/test-failed/scope-struct-shadows-contract.tact rename to src/060-types/test-failed/scope-struct-shadows-contract.tact diff --git a/src/types/test-failed/scope-struct-shadows-struct.tact b/src/060-types/test-failed/scope-struct-shadows-struct.tact similarity index 100% rename from src/types/test-failed/scope-struct-shadows-struct.tact rename to src/060-types/test-failed/scope-struct-shadows-struct.tact diff --git a/src/types/test-failed/struct-decl-clash-with-int.tact b/src/060-types/test-failed/struct-decl-clash-with-int.tact similarity index 100% rename from src/types/test-failed/struct-decl-clash-with-int.tact rename to src/060-types/test-failed/struct-decl-clash-with-int.tact diff --git a/src/types/test-failed/struct-decl-default-field-wrong-initializer-type.tact b/src/060-types/test-failed/struct-decl-default-field-wrong-initializer-type.tact similarity index 100% rename from src/types/test-failed/struct-decl-default-field-wrong-initializer-type.tact rename to src/060-types/test-failed/struct-decl-default-field-wrong-initializer-type.tact diff --git a/src/types/test-failed/struct-decl-duplicate-decl.tact b/src/060-types/test-failed/struct-decl-duplicate-decl.tact similarity index 100% rename from src/types/test-failed/struct-decl-duplicate-decl.tact rename to src/060-types/test-failed/struct-decl-duplicate-decl.tact diff --git a/src/types/test-failed/struct-decl-duplicate-field.tact b/src/060-types/test-failed/struct-decl-duplicate-field.tact similarity index 100% rename from src/types/test-failed/struct-decl-duplicate-field.tact rename to src/060-types/test-failed/struct-decl-duplicate-field.tact diff --git a/src/types/test-failed/struct-decl-empty-not-allowed.tact b/src/060-types/test-failed/struct-decl-empty-not-allowed.tact similarity index 100% rename from src/types/test-failed/struct-decl-empty-not-allowed.tact rename to src/060-types/test-failed/struct-decl-empty-not-allowed.tact diff --git a/src/types/test-failed/struct-decl-mutually-recursive.tact b/src/060-types/test-failed/struct-decl-mutually-recursive.tact similarity index 100% rename from src/types/test-failed/struct-decl-mutually-recursive.tact rename to src/060-types/test-failed/struct-decl-mutually-recursive.tact diff --git a/src/types/test-failed/struct-decl-remainder-in-the-middle.tact b/src/060-types/test-failed/struct-decl-remainder-in-the-middle.tact similarity index 100% rename from src/types/test-failed/struct-decl-remainder-in-the-middle.tact rename to src/060-types/test-failed/struct-decl-remainder-in-the-middle.tact diff --git a/src/types/test-failed/struct-decl-self-reference-map.tact b/src/060-types/test-failed/struct-decl-self-reference-map.tact similarity index 100% rename from src/types/test-failed/struct-decl-self-reference-map.tact rename to src/060-types/test-failed/struct-decl-self-reference-map.tact diff --git a/src/types/test-failed/struct-decl-self-reference.tact b/src/060-types/test-failed/struct-decl-self-reference.tact similarity index 100% rename from src/types/test-failed/struct-decl-self-reference.tact rename to src/060-types/test-failed/struct-decl-self-reference.tact diff --git a/src/types/test-failed/trait-duplicates-in-trait-list.tact b/src/060-types/test-failed/trait-duplicates-in-trait-list.tact similarity index 100% rename from src/types/test-failed/trait-duplicates-in-trait-list.tact rename to src/060-types/test-failed/trait-duplicates-in-trait-list.tact diff --git a/src/types/test-failed/trait-field-initialized.tact b/src/060-types/test-failed/trait-field-initialized.tact similarity index 100% rename from src/types/test-failed/trait-field-initialized.tact rename to src/060-types/test-failed/trait-field-initialized.tact diff --git a/src/types/test-failed/wf-type-const.tact b/src/060-types/test-failed/wf-type-const.tact similarity index 100% rename from src/types/test-failed/wf-type-const.tact rename to src/060-types/test-failed/wf-type-const.tact diff --git a/src/types/test-failed/wf-type-contract-const-incorrect-annotation.tact b/src/060-types/test-failed/wf-type-contract-const-incorrect-annotation.tact similarity index 100% rename from src/types/test-failed/wf-type-contract-const-incorrect-annotation.tact rename to src/060-types/test-failed/wf-type-contract-const-incorrect-annotation.tact diff --git a/src/types/test-failed/wf-type-contract-const.tact b/src/060-types/test-failed/wf-type-contract-const.tact similarity index 100% rename from src/types/test-failed/wf-type-contract-const.tact rename to src/060-types/test-failed/wf-type-contract-const.tact diff --git a/src/types/test-failed/wf-type-contract-getter.tact b/src/060-types/test-failed/wf-type-contract-getter.tact similarity index 100% rename from src/types/test-failed/wf-type-contract-getter.tact rename to src/060-types/test-failed/wf-type-contract-getter.tact diff --git a/src/types/test-failed/wf-type-contract-incorrect-map-key-annotation-coins.tact b/src/060-types/test-failed/wf-type-contract-incorrect-map-key-annotation-coins.tact similarity index 100% rename from src/types/test-failed/wf-type-contract-incorrect-map-key-annotation-coins.tact rename to src/060-types/test-failed/wf-type-contract-incorrect-map-key-annotation-coins.tact diff --git a/src/types/test-failed/wf-type-contract-incorrect-map-key-annotation-varint16.tact b/src/060-types/test-failed/wf-type-contract-incorrect-map-key-annotation-varint16.tact similarity index 100% rename from src/types/test-failed/wf-type-contract-incorrect-map-key-annotation-varint16.tact rename to src/060-types/test-failed/wf-type-contract-incorrect-map-key-annotation-varint16.tact diff --git a/src/types/test-failed/wf-type-contract-incorrect-map-key-annotation-varint32.tact b/src/060-types/test-failed/wf-type-contract-incorrect-map-key-annotation-varint32.tact similarity index 100% rename from src/types/test-failed/wf-type-contract-incorrect-map-key-annotation-varint32.tact rename to src/060-types/test-failed/wf-type-contract-incorrect-map-key-annotation-varint32.tact diff --git a/src/types/test-failed/wf-type-contract-incorrect-map-key-annotation-varuint16.tact b/src/060-types/test-failed/wf-type-contract-incorrect-map-key-annotation-varuint16.tact similarity index 100% rename from src/types/test-failed/wf-type-contract-incorrect-map-key-annotation-varuint16.tact rename to src/060-types/test-failed/wf-type-contract-incorrect-map-key-annotation-varuint16.tact diff --git a/src/types/test-failed/wf-type-contract-incorrect-map-key-annotation-varuint32.tact b/src/060-types/test-failed/wf-type-contract-incorrect-map-key-annotation-varuint32.tact similarity index 100% rename from src/types/test-failed/wf-type-contract-incorrect-map-key-annotation-varuint32.tact rename to src/060-types/test-failed/wf-type-contract-incorrect-map-key-annotation-varuint32.tact diff --git a/src/types/test-failed/wf-type-fun-param.tact b/src/060-types/test-failed/wf-type-fun-param.tact similarity index 100% rename from src/types/test-failed/wf-type-fun-param.tact rename to src/060-types/test-failed/wf-type-fun-param.tact diff --git a/src/types/test/asm-extends-fun.tact b/src/060-types/test/asm-extends-fun.tact similarity index 100% rename from src/types/test/asm-extends-fun.tact rename to src/060-types/test/asm-extends-fun.tact diff --git a/src/types/test/asm-fun-no-arg-shuffle.tact b/src/060-types/test/asm-fun-no-arg-shuffle.tact similarity index 100% rename from src/types/test/asm-fun-no-arg-shuffle.tact rename to src/060-types/test/asm-fun-no-arg-shuffle.tact diff --git a/src/types/test/asm-fun-no-ret-shuffle.tact b/src/060-types/test/asm-fun-no-ret-shuffle.tact similarity index 100% rename from src/types/test/asm-fun-no-ret-shuffle.tact rename to src/060-types/test/asm-fun-no-ret-shuffle.tact diff --git a/src/types/test/asm-fun-no-shuffle.tact b/src/060-types/test/asm-fun-no-shuffle.tact similarity index 100% rename from src/types/test/asm-fun-no-shuffle.tact rename to src/060-types/test/asm-fun-no-shuffle.tact diff --git a/src/types/test/asm-fun-shuffle-pair.tact b/src/060-types/test/asm-fun-shuffle-pair.tact similarity index 100% rename from src/types/test/asm-fun-shuffle-pair.tact rename to src/060-types/test/asm-fun-shuffle-pair.tact diff --git a/src/types/test/const-decl-struct-with-default-field.tact b/src/060-types/test/const-decl-struct-with-default-field.tact similarity index 100% rename from src/types/test/const-decl-struct-with-default-field.tact rename to src/060-types/test/const-decl-struct-with-default-field.tact diff --git a/src/types/test/const-decl-struct-with-optional-field.tact b/src/060-types/test/const-decl-struct-with-optional-field.tact similarity index 100% rename from src/types/test/const-decl-struct-with-optional-field.tact rename to src/060-types/test/const-decl-struct-with-optional-field.tact diff --git a/src/types/test/contract-bounced-slice.tact b/src/060-types/test/contract-bounced-slice.tact similarity index 100% rename from src/types/test/contract-bounced-slice.tact rename to src/060-types/test/contract-bounced-slice.tact diff --git a/src/types/test/contract-bounced-too-small-not-detected.tact b/src/060-types/test/contract-bounced-too-small-not-detected.tact similarity index 100% rename from src/types/test/contract-bounced-too-small-not-detected.tact rename to src/060-types/test/contract-bounced-too-small-not-detected.tact diff --git a/src/types/test/contract-const-override-abstract.tact b/src/060-types/test/contract-const-override-abstract.tact similarity index 100% rename from src/types/test/contract-const-override-abstract.tact rename to src/060-types/test/contract-const-override-abstract.tact diff --git a/src/types/test/contract-const-override-virtual.tact b/src/060-types/test/contract-const-override-virtual.tact similarity index 100% rename from src/types/test/contract-const-override-virtual.tact rename to src/060-types/test/contract-const-override-virtual.tact diff --git a/src/types/test/contract-external-fallback-receiver.tact b/src/060-types/test/contract-external-fallback-receiver.tact similarity index 100% rename from src/types/test/contract-external-fallback-receiver.tact rename to src/060-types/test/contract-external-fallback-receiver.tact diff --git a/src/types/test/contract-getter-override-abstract.tact b/src/060-types/test/contract-getter-override-abstract.tact similarity index 100% rename from src/types/test/contract-getter-override-abstract.tact rename to src/060-types/test/contract-getter-override-abstract.tact diff --git a/src/types/test/contract-getter-override-virtual.tact b/src/060-types/test/contract-getter-override-virtual.tact similarity index 100% rename from src/types/test/contract-getter-override-virtual.tact rename to src/060-types/test/contract-getter-override-virtual.tact diff --git a/src/types/test/fun-extends-opt-self.tact b/src/060-types/test/fun-extends-opt-self.tact similarity index 100% rename from src/types/test/fun-extends-opt-self.tact rename to src/060-types/test/fun-extends-opt-self.tact diff --git a/src/types/test/init-vars-analysis-uninit-storage-vars.tact b/src/060-types/test/init-vars-analysis-uninit-storage-vars.tact similarity index 100% rename from src/types/test/init-vars-analysis-uninit-storage-vars.tact rename to src/060-types/test/init-vars-analysis-uninit-storage-vars.tact diff --git a/src/types/test/item-funs-with-errors-in-bodies1.tact b/src/060-types/test/item-funs-with-errors-in-bodies1.tact similarity index 100% rename from src/types/test/item-funs-with-errors-in-bodies1.tact rename to src/060-types/test/item-funs-with-errors-in-bodies1.tact diff --git a/src/types/test/item-funs-with-errors-in-bodies2.tact b/src/060-types/test/item-funs-with-errors-in-bodies2.tact similarity index 100% rename from src/types/test/item-funs-with-errors-in-bodies2.tact rename to src/060-types/test/item-funs-with-errors-in-bodies2.tact diff --git a/src/types/test/item-method.tact b/src/060-types/test/item-method.tact similarity index 100% rename from src/types/test/item-method.tact rename to src/060-types/test/item-method.tact diff --git a/src/types/test/item-native-decl.tact b/src/060-types/test/item-native-decl.tact similarity index 100% rename from src/types/test/item-native-decl.tact rename to src/060-types/test/item-native-decl.tact diff --git a/src/types/test/item-native-mutating-method.tact b/src/060-types/test/item-native-mutating-method.tact similarity index 100% rename from src/types/test/item-native-mutating-method.tact rename to src/060-types/test/item-native-mutating-method.tact diff --git a/src/types/test/map-value-as-coins.tact b/src/060-types/test/map-value-as-coins.tact similarity index 100% rename from src/types/test/map-value-as-coins.tact rename to src/060-types/test/map-value-as-coins.tact diff --git a/src/types/test/map-value-as-varint.tact b/src/060-types/test/map-value-as-varint.tact similarity index 100% rename from src/types/test/map-value-as-varint.tact rename to src/060-types/test/map-value-as-varint.tact diff --git a/src/types/test/map-value-as-varuint.tact b/src/060-types/test/map-value-as-varuint.tact similarity index 100% rename from src/types/test/map-value-as-varuint.tact rename to src/060-types/test/map-value-as-varuint.tact diff --git a/src/types/test/message-opcode-expr.tact b/src/060-types/test/message-opcode-expr.tact similarity index 100% rename from src/types/test/message-opcode-expr.tact rename to src/060-types/test/message-opcode-expr.tact diff --git a/src/types/test/scope-loops.tact b/src/060-types/test/scope-loops.tact similarity index 100% rename from src/types/test/scope-loops.tact rename to src/060-types/test/scope-loops.tact diff --git a/src/types/test/struct-decl-default-field.tact b/src/060-types/test/struct-decl-default-field.tact similarity index 100% rename from src/types/test/struct-decl-default-field.tact rename to src/060-types/test/struct-decl-default-field.tact diff --git a/src/types/test/struct-decl-nested.tact b/src/060-types/test/struct-decl-nested.tact similarity index 100% rename from src/types/test/struct-decl-nested.tact rename to src/060-types/test/struct-decl-nested.tact diff --git a/src/types/test/struct-decl-non-rec-types.tact b/src/060-types/test/struct-decl-non-rec-types.tact similarity index 100% rename from src/types/test/struct-decl-non-rec-types.tact rename to src/060-types/test/struct-decl-non-rec-types.tact diff --git a/src/types/test/struct-decl-remainder.tact b/src/060-types/test/struct-decl-remainder.tact similarity index 100% rename from src/types/test/struct-decl-remainder.tact rename to src/060-types/test/struct-decl-remainder.tact diff --git a/src/types/test/trait-base.tact b/src/060-types/test/trait-base.tact similarity index 100% rename from src/types/test/trait-base.tact rename to src/060-types/test/trait-base.tact diff --git a/src/types/test/trait-foreach.tact b/src/060-types/test/trait-foreach.tact similarity index 100% rename from src/types/test/trait-foreach.tact rename to src/060-types/test/trait-foreach.tact diff --git a/src/types/types.ts b/src/060-types/types.ts similarity index 97% rename from src/types/types.ts rename to src/060-types/types.ts index 4bcdd65fa..f14206d4c 100644 --- a/src/types/types.ts +++ b/src/060-types/types.ts @@ -1,5 +1,5 @@ import { ABIField, Address, Cell, Slice } from "@ton/core"; -import { throwInternalCompilerError } from "../errors"; +import { throwInternalCompilerError } from "../030-error/errors"; import { AstConstantDef, AstFunctionDef, @@ -13,8 +13,8 @@ import { AstFieldDecl, AstAsmFunctionDef, AstNumber, -} from "../grammar/ast"; -import { dummySrcInfo, ItemOrigin, SrcInfo } from "../grammar"; +} from "../050-grammar/ast"; +import { dummySrcInfo, ItemOrigin, SrcInfo } from "../050-grammar"; export type TypeDescription = { kind: "struct" | "primitive_type_decl" | "contract" | "trait"; diff --git a/src/optimizer/algebraic.ts b/src/070-optimizer/algebraic.ts similarity index 99% rename from src/optimizer/algebraic.ts rename to src/070-optimizer/algebraic.ts index bfde705b7..249e9fb5c 100644 --- a/src/optimizer/algebraic.ts +++ b/src/070-optimizer/algebraic.ts @@ -5,7 +5,7 @@ import { AstOpUnary, eqExpressions, isValue, -} from "../grammar/ast"; +} from "../050-grammar/ast"; import { ExpressionTransformer, Rule } from "./types"; import { checkIsBinaryOpNode, diff --git a/src/optimizer/associative.ts b/src/070-optimizer/associative.ts similarity index 99% rename from src/optimizer/associative.ts rename to src/070-optimizer/associative.ts index bdb26e4d9..837d01e03 100644 --- a/src/optimizer/associative.ts +++ b/src/070-optimizer/associative.ts @@ -6,9 +6,9 @@ import { AstOpBinary, AstValue, isValue, -} from "../grammar/ast"; -import * as interpreterModule from "../interpreter"; -import { Value } from "../types/types"; +} from "../050-grammar/ast"; +import * as interpreterModule from "./interpreter"; +import { Value } from "../060-types/types"; import { ExpressionTransformer, Rule } from "./types"; import { abs, diff --git a/src/constEval.ts b/src/070-optimizer/constEval.ts similarity index 95% rename from src/constEval.ts rename to src/070-optimizer/constEval.ts index 630c901a7..32ac2b840 100644 --- a/src/constEval.ts +++ b/src/070-optimizer/constEval.ts @@ -1,16 +1,16 @@ -import { CompilerContext } from "./context"; +import { CompilerContext } from "../010-pipeline/context"; import { AstBinaryOperation, AstExpression, AstUnaryOperation, AstValue, isValue, -} from "./grammar/ast"; -import { TactConstEvalError } from "./errors"; -import { Value } from "./types/types"; -import { AstUtil, extractValue } from "./optimizer/util"; -import { ExpressionTransformer } from "./optimizer/types"; -import { StandardOptimizer } from "./optimizer/standardOptimizer"; +} from "../050-grammar/ast"; +import { TactConstEvalError } from "../030-error/errors"; +import { Value } from "../060-types/types"; +import { AstUtil, extractValue } from "./util"; +import { ExpressionTransformer } from "./types"; +import { StandardOptimizer } from "./standardOptimizer"; import { Interpreter, InterpreterConfig, @@ -19,7 +19,7 @@ import { evalUnaryOp, throwNonFatalErrorConstEval, } from "./interpreter"; -import { SrcInfo } from "./grammar"; +import { SrcInfo } from "../050-grammar"; // Utility Exception class to interrupt the execution // of functions that cannot evaluate a tree fully into a value. diff --git a/src/interpreter.ts b/src/070-optimizer/interpreter.ts similarity index 99% rename from src/interpreter.ts rename to src/070-optimizer/interpreter.ts index be27bee88..d859cea9b 100644 --- a/src/interpreter.ts +++ b/src/070-optimizer/interpreter.ts @@ -2,14 +2,14 @@ import { Address, beginCell, BitString, Cell, Slice, toNano } from "@ton/core"; import { paddedBufferToBits } from "@ton/core/dist/boc/utils/paddedBits"; import * as crc32 from "crc-32"; import { evalConstantExpression } from "./constEval"; -import { CompilerContext } from "./context"; +import { CompilerContext } from "../010-pipeline/context"; import { TactCompilationError, TactConstEvalError, idTextErr, throwConstEvalError, throwInternalCompilerError, -} from "./errors"; +} from "../030-error/errors"; import { AstBinaryOperation, AstBoolean, @@ -55,26 +55,26 @@ import { getAstFactory, idText, isSelfId, -} from "./grammar/ast"; -import { SrcInfo, dummySrcInfo, Parser, getParser } from "./grammar"; -import { divFloor, modFloor } from "./optimizer/util"; +} from "../050-grammar/ast"; +import { SrcInfo, dummySrcInfo, Parser, getParser } from "../050-grammar"; +import { divFloor, modFloor } from "./util"; import { getStaticConstant, getStaticFunction, getType, hasStaticConstant, hasStaticFunction, -} from "./types/resolveDescriptors"; -import { getExpType } from "./types/resolveExpression"; +} from "../060-types/resolveDescriptors"; +import { getExpType } from "../060-types/resolveExpression"; import { CommentValue, StructValue, TypeRef, Value, showValue, -} from "./types/types"; +} from "../060-types/types"; import { sha256_sync } from "@ton/crypto"; -import { defaultParser } from "./grammar/grammar"; +import { defaultParser } from "../050-grammar/grammar"; // TVM integers are signed 257-bit integers const minTvmInt: bigint = -(2n ** 256n); diff --git a/src/optimizer/standardOptimizer.ts b/src/070-optimizer/standardOptimizer.ts similarity index 97% rename from src/optimizer/standardOptimizer.ts rename to src/070-optimizer/standardOptimizer.ts index 7df2b4ed9..eebae24aa 100644 --- a/src/optimizer/standardOptimizer.ts +++ b/src/070-optimizer/standardOptimizer.ts @@ -1,4 +1,4 @@ -import { AstExpression } from "../grammar/ast"; +import { AstExpression } from "../050-grammar/ast"; import { AddSelf, AddZero, diff --git a/src/optimizer/test/partial-eval.spec.ts b/src/070-optimizer/test/partial-eval.spec.ts similarity index 98% rename from src/optimizer/test/partial-eval.spec.ts rename to src/070-optimizer/test/partial-eval.spec.ts index 8a23f4f0a..7c13c6628 100644 --- a/src/optimizer/test/partial-eval.spec.ts +++ b/src/070-optimizer/test/partial-eval.spec.ts @@ -5,15 +5,15 @@ import { eqExpressions, getAstFactory, isValue, -} from "../../grammar/ast"; +} from "../../050-grammar/ast"; import { AstUtil, extractValue, getAstUtil } from "../util"; -import { getOptimizer } from "../../constEval"; -import { CompilerContext } from "../../context"; +import { getOptimizer } from "../constEval"; +import { CompilerContext } from "../../010-pipeline/context"; import { ExpressionTransformer, Rule } from "../types"; import { AssociativeRule3 } from "../associative"; -import { evalBinaryOp, evalUnaryOp } from "../../interpreter"; -import { getParser } from "../../grammar"; -import { defaultParser } from "../../grammar/grammar"; +import { evalBinaryOp, evalUnaryOp } from "../interpreter"; +import { getParser } from "../../050-grammar"; +import { defaultParser } from "../../050-grammar/grammar"; const MAX: string = "115792089237316195423570985008687907853269984665640564039457584007913129639935"; diff --git a/src/optimizer/types.ts b/src/070-optimizer/types.ts similarity index 85% rename from src/optimizer/types.ts rename to src/070-optimizer/types.ts index d4011c138..37642ab5c 100644 --- a/src/optimizer/types.ts +++ b/src/070-optimizer/types.ts @@ -1,4 +1,4 @@ -import { AstExpression } from "../grammar/ast"; +import { AstExpression } from "../050-grammar/ast"; import { AstUtil } from "./util"; export interface ExpressionTransformer { diff --git a/src/optimizer/util.ts b/src/070-optimizer/util.ts similarity index 96% rename from src/optimizer/util.ts rename to src/070-optimizer/util.ts index dc6ff85bd..7ff1541d5 100644 --- a/src/optimizer/util.ts +++ b/src/070-optimizer/util.ts @@ -5,10 +5,10 @@ import { AstValue, isValue, FactoryAst, -} from "../grammar/ast"; -import { dummySrcInfo } from "../grammar"; -import { throwInternalCompilerError } from "../errors"; -import { Value } from "../types/types"; +} from "../050-grammar/ast"; +import { dummySrcInfo } from "../050-grammar"; +import { throwInternalCompilerError } from "../030-error/errors"; +import { Value } from "../060-types/types"; export function extractValue(ast: AstValue): Value { switch ( diff --git a/src/generator/Writer.ts b/src/080-generator/Writer.ts similarity index 99% rename from src/generator/Writer.ts rename to src/080-generator/Writer.ts index 7c13eca6d..898e9b570 100644 --- a/src/generator/Writer.ts +++ b/src/080-generator/Writer.ts @@ -1,4 +1,4 @@ -import { CompilerContext } from "../context"; +import { CompilerContext } from "../010-pipeline/context"; import { escapeUnicodeControlCodes, trimIndent } from "../utils/text"; import { topologicalSort } from "../utils/utils"; import { Writer } from "../utils/Writer"; diff --git a/src/abi/AbiFunction.ts b/src/080-generator/builtins/AbiFunction.ts similarity index 51% rename from src/abi/AbiFunction.ts rename to src/080-generator/builtins/AbiFunction.ts index 00faa5f73..a590a7499 100644 --- a/src/abi/AbiFunction.ts +++ b/src/080-generator/builtins/AbiFunction.ts @@ -1,8 +1,8 @@ -import { AstExpression } from "../grammar/ast"; -import { CompilerContext } from "../context"; -import { WriterContext } from "../generator/Writer"; -import { TypeRef } from "../types/types"; -import { SrcInfo } from "../grammar"; +import { AstExpression } from "../../050-grammar/ast"; +import { CompilerContext } from "../../010-pipeline/context"; +import { WriterContext } from "../Writer"; +import { TypeRef } from "../../060-types/types"; +import { SrcInfo } from "../../050-grammar"; export type AbiFunction = { name: string; diff --git a/src/abi/errors.ts b/src/080-generator/builtins/errors.ts similarity index 100% rename from src/abi/errors.ts rename to src/080-generator/builtins/errors.ts diff --git a/src/abi/global.ts b/src/080-generator/builtins/global.ts similarity index 97% rename from src/abi/global.ts rename to src/080-generator/builtins/global.ts index 87ef019df..674937599 100644 --- a/src/abi/global.ts +++ b/src/080-generator/builtins/global.ts @@ -1,22 +1,18 @@ import { Address, beginCell, Cell, toNano } from "@ton/core"; -import { enabledDebug } from "../config/features"; +import { enabledDebug } from "../../000-config/features"; +import { writeAddress, writeCell, writeSlice } from "../writers/writeConstant"; +import { writeExpression, writeValue } from "../writers/writeExpression"; import { - writeAddress, - writeCell, - writeSlice, -} from "../generator/writers/writeConstant"; -import { - writeExpression, - writeValue, -} from "../generator/writers/writeExpression"; -import { TactConstEvalError, throwCompilationError } from "../errors"; -import { evalConstantExpression } from "../constEval"; -import { getErrorId } from "../types/resolveErrors"; + TactConstEvalError, + throwCompilationError, +} from "../../030-error/errors"; +import { evalConstantExpression } from "../../070-optimizer/constEval"; +import { getErrorId } from "../../060-types/resolveErrors"; import { AbiFunction } from "./AbiFunction"; import { sha256_sync } from "@ton/crypto"; import path from "path"; import { cwd } from "process"; -import { posixNormalize } from "../utils/filePath"; +import { posixNormalize } from "../../utils/filePath"; export const GlobalFunctions: Map = new Map([ [ diff --git a/src/abi/map.ts b/src/080-generator/builtins/map.ts similarity index 98% rename from src/abi/map.ts rename to src/080-generator/builtins/map.ts index d2c52c783..151145574 100644 --- a/src/abi/map.ts +++ b/src/080-generator/builtins/map.ts @@ -1,13 +1,13 @@ -import { CompilerContext } from "../context"; -import { SrcInfo } from "../grammar"; -import { TypeRef } from "../types/types"; -import { WriterContext } from "../generator/Writer"; -import { ops } from "../generator/writers/ops"; -import { writeExpression } from "../generator/writers/writeExpression"; -import { throwCompilationError } from "../errors"; -import { getType } from "../types/resolveDescriptors"; +import { CompilerContext } from "../../010-pipeline/context"; +import { SrcInfo } from "../../050-grammar"; +import { TypeRef } from "../../060-types/types"; +import { WriterContext } from "../Writer"; +import { ops } from "../writers/ops"; +import { writeExpression } from "../writers/writeExpression"; +import { throwCompilationError } from "../../030-error/errors"; +import { getType } from "../../060-types/resolveDescriptors"; import { AbiFunction } from "./AbiFunction"; -import { AstExpression } from "../grammar/ast"; +import { AstExpression } from "../../050-grammar/ast"; // Helper functions to avoid redundancy function checkArgumentsLength( diff --git a/src/abi/struct.ts b/src/080-generator/builtins/struct.ts similarity index 97% rename from src/abi/struct.ts rename to src/080-generator/builtins/struct.ts index 48a24a135..882be7f7e 100644 --- a/src/abi/struct.ts +++ b/src/080-generator/builtins/struct.ts @@ -1,7 +1,7 @@ -import { ops } from "../generator/writers/ops"; -import { writeExpression } from "../generator/writers/writeExpression"; -import { throwCompilationError } from "../errors"; -import { getType } from "../types/resolveDescriptors"; +import { ops } from "../writers/ops"; +import { writeExpression } from "../writers/writeExpression"; +import { throwCompilationError } from "../../030-error/errors"; +import { getType } from "../../060-types/resolveDescriptors"; import { AbiFunction } from "./AbiFunction"; export const StructFunctions: Map = new Map([ diff --git a/src/generator/createABI.ts b/src/080-generator/createABI.ts similarity index 93% rename from src/generator/createABI.ts rename to src/080-generator/createABI.ts index 4aa7b4ff8..982cff619 100644 --- a/src/generator/createABI.ts +++ b/src/080-generator/createABI.ts @@ -1,11 +1,11 @@ import { ABIGetter, ABIReceiver, ABIType, ContractABI } from "@ton/core"; -import { contractErrors } from "../abi/errors"; -import { CompilerContext } from "../context"; -import { idText } from "../grammar/ast"; -import { getSupportedInterfaces } from "../types/getSupportedInterfaces"; -import { createABITypeRefFromTypeRef } from "../types/resolveABITypeRef"; -import { getAllTypes } from "../types/resolveDescriptors"; -import { getAllErrors } from "../types/resolveErrors"; +import { contractErrors } from "./builtins/errors"; +import { CompilerContext } from "../010-pipeline/context"; +import { idText } from "../050-grammar/ast"; +import { getSupportedInterfaces } from "../060-types/getSupportedInterfaces"; +import { createABITypeRefFromTypeRef } from "../060-types/resolveABITypeRef"; +import { getAllTypes } from "../060-types/resolveDescriptors"; +import { getAllErrors } from "../060-types/resolveErrors"; export function createABI(ctx: CompilerContext, name: string): ContractABI { const allTypes = getAllTypes(ctx); diff --git a/src/generator/emitter/createPadded.ts b/src/080-generator/emitter/createPadded.ts similarity index 100% rename from src/generator/emitter/createPadded.ts rename to src/080-generator/emitter/createPadded.ts diff --git a/src/generator/emitter/emit.ts b/src/080-generator/emitter/emit.ts similarity index 100% rename from src/generator/emitter/emit.ts rename to src/080-generator/emitter/emit.ts diff --git a/src/generator/writeProgram.ts b/src/080-generator/writeProgram.ts similarity index 97% rename from src/generator/writeProgram.ts rename to src/080-generator/writeProgram.ts index 7523c8385..872c5b1a7 100644 --- a/src/generator/writeProgram.ts +++ b/src/080-generator/writeProgram.ts @@ -1,10 +1,10 @@ -import { CompilerContext } from "../context"; -import { getAllocation, getSortedTypes } from "../storage/resolveAllocation"; +import { CompilerContext } from "../010-pipeline/context"; +import { getAllocation, getSortedTypes } from "../060-types/resolveAllocation"; import { getAllStaticFunctions, getAllTypes, toBounced, -} from "../types/resolveDescriptors"; +} from "../060-types/resolveDescriptors"; import { WriterContext, WrittenFunction } from "./Writer"; import { writeBouncedParser, @@ -18,7 +18,7 @@ import { writeAccessors } from "./writers/writeAccessors"; import { ContractABI } from "@ton/core"; import { writeFunction } from "./writers/writeFunction"; import { calculateIPFSlink } from "../utils/calculateIPFSlink"; -import { getRawAST } from "../grammar/store"; +import { getRawAST } from "../050-grammar/store"; import { emit } from "./emitter/emit"; import { writeInit, diff --git a/src/generator/writeReport.ts b/src/080-generator/writeReport.ts similarity index 91% rename from src/generator/writeReport.ts rename to src/080-generator/writeReport.ts index 62250f53d..81083b840 100644 --- a/src/generator/writeReport.ts +++ b/src/080-generator/writeReport.ts @@ -1,9 +1,9 @@ import { ContractABI } from "@ton/core"; -import { CompilerContext } from "../context"; -import { PackageFileFormat } from "../packaging/fileFormat"; -import { getType } from "../types/resolveDescriptors"; +import { CompilerContext } from "../010-pipeline/context"; +import { PackageFileFormat } from "../110-packaging/fileFormat"; +import { getType } from "../060-types/resolveDescriptors"; import { Writer } from "../utils/Writer"; -import { TypeDescription } from "../types/types"; +import { TypeDescription } from "../060-types/types"; export function writeReport(ctx: CompilerContext, pkg: PackageFileFormat) { const w = new Writer(); diff --git a/src/generator/writers/__snapshots__/writeSerialization.spec.ts.snap b/src/080-generator/writers/__snapshots__/writeSerialization.spec.ts.snap similarity index 100% rename from src/generator/writers/__snapshots__/writeSerialization.spec.ts.snap rename to src/080-generator/writers/__snapshots__/writeSerialization.spec.ts.snap diff --git a/src/generator/writers/cast.ts b/src/080-generator/writers/cast.ts similarity index 84% rename from src/generator/writers/cast.ts rename to src/080-generator/writers/cast.ts index 4c098e455..8f7c3cee3 100644 --- a/src/generator/writers/cast.ts +++ b/src/080-generator/writers/cast.ts @@ -1,5 +1,5 @@ -import { getType } from "../../types/resolveDescriptors"; -import { TypeRef } from "../../types/types"; +import { getType } from "../../060-types/resolveDescriptors"; +import { TypeRef } from "../../060-types/types"; import { WriterContext } from "../Writer"; import { ops } from "./ops"; diff --git a/src/generator/writers/freshIdentifier.ts b/src/080-generator/writers/freshIdentifier.ts similarity index 100% rename from src/generator/writers/freshIdentifier.ts rename to src/080-generator/writers/freshIdentifier.ts diff --git a/src/generator/writers/id.ts b/src/080-generator/writers/id.ts similarity index 86% rename from src/generator/writers/id.ts rename to src/080-generator/writers/id.ts index 50c55372d..ad400d9ad 100644 --- a/src/generator/writers/id.ts +++ b/src/080-generator/writers/id.ts @@ -1,4 +1,4 @@ -import { AstId, idText } from "../../grammar/ast"; +import { AstId, idText } from "../../050-grammar/ast"; export function funcIdOf(ident: AstId | string): string { if (typeof ident === "string") { diff --git a/src/generator/writers/ops.ts b/src/080-generator/writers/ops.ts similarity index 100% rename from src/generator/writers/ops.ts rename to src/080-generator/writers/ops.ts diff --git a/src/generator/writers/resolveFuncFlatPack.ts b/src/080-generator/writers/resolveFuncFlatPack.ts similarity index 92% rename from src/generator/writers/resolveFuncFlatPack.ts rename to src/080-generator/writers/resolveFuncFlatPack.ts index f0480bc5a..3c37859b5 100644 --- a/src/generator/writers/resolveFuncFlatPack.ts +++ b/src/080-generator/writers/resolveFuncFlatPack.ts @@ -1,5 +1,5 @@ -import { getType } from "../../types/resolveDescriptors"; -import { TypeDescription, TypeRef } from "../../types/types"; +import { getType } from "../../060-types/resolveDescriptors"; +import { TypeDescription, TypeRef } from "../../060-types/types"; import { WriterContext } from "../Writer"; export function resolveFuncFlatPack( diff --git a/src/generator/writers/resolveFuncFlatTypes.ts b/src/080-generator/writers/resolveFuncFlatTypes.ts similarity index 92% rename from src/generator/writers/resolveFuncFlatTypes.ts rename to src/080-generator/writers/resolveFuncFlatTypes.ts index 2f829a2ba..d7fc33d66 100644 --- a/src/generator/writers/resolveFuncFlatTypes.ts +++ b/src/080-generator/writers/resolveFuncFlatTypes.ts @@ -1,5 +1,5 @@ -import { getType } from "../../types/resolveDescriptors"; -import { TypeDescription, TypeRef } from "../../types/types"; +import { getType } from "../../060-types/resolveDescriptors"; +import { TypeDescription, TypeRef } from "../../060-types/types"; import { WriterContext } from "../Writer"; import { resolveFuncType } from "./resolveFuncType"; diff --git a/src/generator/writers/resolveFuncPrimitive.ts b/src/080-generator/writers/resolveFuncPrimitive.ts similarity index 92% rename from src/generator/writers/resolveFuncPrimitive.ts rename to src/080-generator/writers/resolveFuncPrimitive.ts index 0d815f358..490d24efb 100644 --- a/src/generator/writers/resolveFuncPrimitive.ts +++ b/src/080-generator/writers/resolveFuncPrimitive.ts @@ -1,5 +1,5 @@ -import { getType } from "../../types/resolveDescriptors"; -import { TypeDescription, TypeRef } from "../../types/types"; +import { getType } from "../../060-types/resolveDescriptors"; +import { TypeDescription, TypeRef } from "../../060-types/types"; import { WriterContext } from "../Writer"; export function resolveFuncPrimitive( diff --git a/src/generator/writers/resolveFuncTupleType.ts b/src/080-generator/writers/resolveFuncTupleType.ts similarity index 92% rename from src/generator/writers/resolveFuncTupleType.ts rename to src/080-generator/writers/resolveFuncTupleType.ts index 70483cebc..c0f0550ba 100644 --- a/src/generator/writers/resolveFuncTupleType.ts +++ b/src/080-generator/writers/resolveFuncTupleType.ts @@ -1,5 +1,5 @@ -import { getType } from "../../types/resolveDescriptors"; -import { TypeDescription, TypeRef } from "../../types/types"; +import { getType } from "../../060-types/resolveDescriptors"; +import { TypeDescription, TypeRef } from "../../060-types/types"; import { WriterContext } from "../Writer"; export function resolveFuncTupleType( diff --git a/src/generator/writers/resolveFuncType.spec.ts b/src/080-generator/writers/resolveFuncType.spec.ts similarity index 92% rename from src/generator/writers/resolveFuncType.spec.ts rename to src/080-generator/writers/resolveFuncType.spec.ts index d41fca3c6..f9325ae77 100644 --- a/src/generator/writers/resolveFuncType.spec.ts +++ b/src/080-generator/writers/resolveFuncType.spec.ts @@ -1,11 +1,11 @@ -import { getAstFactory } from "../../grammar/ast"; -import { resolveDescriptors } from "../../types/resolveDescriptors"; +import { getAstFactory } from "../../050-grammar/ast"; +import { resolveDescriptors } from "../../060-types/resolveDescriptors"; import { WriterContext } from "../Writer"; import { resolveFuncType } from "./resolveFuncType"; -import { openContext } from "../../grammar/store"; -import { CompilerContext } from "../../context"; -import { getParser } from "../../grammar"; -import { defaultParser } from "../../grammar/grammar"; +import { openContext } from "../../050-grammar/store"; +import { CompilerContext } from "../../010-pipeline/context"; +import { getParser } from "../../050-grammar"; +import { defaultParser } from "../../050-grammar/grammar"; const primitiveCode = ` primitive Int; diff --git a/src/generator/writers/resolveFuncType.ts b/src/080-generator/writers/resolveFuncType.ts similarity index 95% rename from src/generator/writers/resolveFuncType.ts rename to src/080-generator/writers/resolveFuncType.ts index a5b920636..365696752 100644 --- a/src/generator/writers/resolveFuncType.ts +++ b/src/080-generator/writers/resolveFuncType.ts @@ -1,5 +1,5 @@ -import { getType } from "../../types/resolveDescriptors"; -import { TypeDescription, TypeRef } from "../../types/types"; +import { getType } from "../../060-types/resolveDescriptors"; +import { TypeDescription, TypeRef } from "../../060-types/types"; import { WriterContext } from "../Writer"; export function resolveFuncType( diff --git a/src/generator/writers/resolveFuncTypeFromAbi.ts b/src/080-generator/writers/resolveFuncTypeFromAbi.ts similarity index 96% rename from src/generator/writers/resolveFuncTypeFromAbi.ts rename to src/080-generator/writers/resolveFuncTypeFromAbi.ts index c45b7b5da..24b5c1347 100644 --- a/src/generator/writers/resolveFuncTypeFromAbi.ts +++ b/src/080-generator/writers/resolveFuncTypeFromAbi.ts @@ -1,5 +1,5 @@ import { ABITypeRef } from "@ton/core"; -import { getType } from "../../types/resolveDescriptors"; +import { getType } from "../../060-types/resolveDescriptors"; import { WriterContext } from "../Writer"; export function resolveFuncTypeFromAbi( diff --git a/src/generator/writers/resolveFuncTypeFromAbiUnpack.ts b/src/080-generator/writers/resolveFuncTypeFromAbiUnpack.ts similarity index 97% rename from src/generator/writers/resolveFuncTypeFromAbiUnpack.ts rename to src/080-generator/writers/resolveFuncTypeFromAbiUnpack.ts index 4652570d7..2654dcc93 100644 --- a/src/generator/writers/resolveFuncTypeFromAbiUnpack.ts +++ b/src/080-generator/writers/resolveFuncTypeFromAbiUnpack.ts @@ -1,5 +1,5 @@ import { ABITypeRef } from "@ton/core"; -import { getType } from "../../types/resolveDescriptors"; +import { getType } from "../../060-types/resolveDescriptors"; import { WriterContext } from "../Writer"; export function resolveFuncTypeFromAbiUnpack( diff --git a/src/generator/writers/resolveFuncTypeUnpack.ts b/src/080-generator/writers/resolveFuncTypeUnpack.ts similarity index 95% rename from src/generator/writers/resolveFuncTypeUnpack.ts rename to src/080-generator/writers/resolveFuncTypeUnpack.ts index dd088d8b0..c9c731506 100644 --- a/src/generator/writers/resolveFuncTypeUnpack.ts +++ b/src/080-generator/writers/resolveFuncTypeUnpack.ts @@ -1,5 +1,5 @@ -import { getType } from "../../types/resolveDescriptors"; -import { TypeDescription, TypeRef } from "../../types/types"; +import { getType } from "../../060-types/resolveDescriptors"; +import { TypeDescription, TypeRef } from "../../060-types/types"; import { WriterContext } from "../Writer"; export function resolveFuncTypeUnpack( diff --git a/src/generator/writers/writeAccessors.ts b/src/080-generator/writers/writeAccessors.ts similarity index 97% rename from src/generator/writers/writeAccessors.ts rename to src/080-generator/writers/writeAccessors.ts index dab34430f..1bcabdec2 100644 --- a/src/generator/writers/writeAccessors.ts +++ b/src/080-generator/writers/writeAccessors.ts @@ -1,8 +1,8 @@ -import { contractErrors } from "../../abi/errors"; -import { maxTupleSize } from "../../bindings/typescript/writeStruct"; -import { ItemOrigin } from "../../grammar"; -import { getType } from "../../types/resolveDescriptors"; -import { TypeDescription } from "../../types/types"; +import { contractErrors } from "../builtins/errors"; +import { maxTupleSize } from "../../100-bindings/typescript/writeStruct"; +import { ItemOrigin } from "../../050-grammar"; +import { getType } from "../../060-types/resolveDescriptors"; +import { TypeDescription } from "../../060-types/types"; import { WriterContext } from "../Writer"; import { ops } from "./ops"; import { resolveFuncFlatPack } from "./resolveFuncFlatPack"; diff --git a/src/generator/writers/writeConstant.ts b/src/080-generator/writers/writeConstant.ts similarity index 100% rename from src/generator/writers/writeConstant.ts rename to src/080-generator/writers/writeConstant.ts diff --git a/src/generator/writers/writeContract.ts b/src/080-generator/writers/writeContract.ts similarity index 98% rename from src/generator/writers/writeContract.ts rename to src/080-generator/writers/writeContract.ts index b205e8c3b..9d76d0346 100644 --- a/src/generator/writers/writeContract.ts +++ b/src/080-generator/writers/writeContract.ts @@ -1,11 +1,11 @@ -import { contractErrors } from "../../abi/errors"; +import { contractErrors } from "../builtins/errors"; import { enabledInline, enabledInterfacesGetter, enabledIpfsAbiGetter, -} from "../../config/features"; -import { ItemOrigin } from "../../grammar"; -import { InitDescription, TypeDescription } from "../../types/types"; +} from "../../000-config/features"; +import { ItemOrigin } from "../../050-grammar"; +import { InitDescription, TypeDescription } from "../../060-types/types"; import { WriterContext } from "../Writer"; import { funcIdOf, funcInitIdOf } from "./id"; import { ops } from "./ops"; diff --git a/src/generator/writers/writeExpression.spec.ts b/src/080-generator/writers/writeExpression.spec.ts similarity index 86% rename from src/generator/writers/writeExpression.spec.ts rename to src/080-generator/writers/writeExpression.spec.ts index 2b12b8d95..e8dd82e44 100644 --- a/src/generator/writers/writeExpression.spec.ts +++ b/src/080-generator/writers/writeExpression.spec.ts @@ -1,15 +1,15 @@ import { getStaticFunction, resolveDescriptors, -} from "../../types/resolveDescriptors"; +} from "../../060-types/resolveDescriptors"; import { WriterContext } from "../Writer"; import { writeExpression } from "./writeExpression"; -import { openContext } from "../../grammar/store"; -import { resolveStatements } from "../../types/resolveStatements"; -import { CompilerContext } from "../../context"; -import { getParser } from "../../grammar"; -import { getAstFactory } from "../../grammar/ast"; -import { defaultParser } from "../../grammar/grammar"; +import { openContext } from "../../050-grammar/store"; +import { resolveStatements } from "../../060-types/resolveStatements"; +import { CompilerContext } from "../../010-pipeline/context"; +import { getParser } from "../../050-grammar"; +import { getAstFactory } from "../../050-grammar/ast"; +import { defaultParser } from "../../050-grammar/grammar"; const code = ` diff --git a/src/generator/writers/writeExpression.ts b/src/080-generator/writers/writeExpression.ts similarity index 97% rename from src/generator/writers/writeExpression.ts rename to src/080-generator/writers/writeExpression.ts index 398eba4c4..35fb560ea 100644 --- a/src/generator/writers/writeExpression.ts +++ b/src/080-generator/writers/writeExpression.ts @@ -4,32 +4,32 @@ import { eqNames, idText, tryExtractPath, -} from "../../grammar/ast"; +} from "../../050-grammar/ast"; import { idTextErr, TactConstEvalError, throwCompilationError, -} from "../../errors"; -import { getExpType } from "../../types/resolveExpression"; +} from "../../030-error/errors"; +import { getExpType } from "../../060-types/resolveExpression"; import { getStaticConstant, getStaticFunction, getType, hasStaticConstant, -} from "../../types/resolveDescriptors"; +} from "../../060-types/resolveDescriptors"; import { FieldDescription, printTypeRef, TypeDescription, CommentValue, Value, -} from "../../types/types"; +} from "../../060-types/types"; import { WriterContext } from "../Writer"; import { resolveFuncTypeUnpack } from "./resolveFuncTypeUnpack"; -import { MapFunctions } from "../../abi/map"; -import { GlobalFunctions } from "../../abi/global"; +import { MapFunctions } from "../builtins/map"; +import { GlobalFunctions } from "../builtins/global"; import { funcIdOf } from "./id"; -import { StructFunctions } from "../../abi/struct"; +import { StructFunctions } from "../builtins/struct"; import { resolveFuncType } from "./resolveFuncType"; import { Address, Cell, Slice } from "@ton/core"; import { @@ -41,8 +41,8 @@ import { } from "./writeConstant"; import { ops } from "./ops"; import { writeCastedExpression } from "./writeFunction"; -import { evalConstantExpression } from "../../constEval"; -import { isLvalue } from "../../types/resolveStatements"; +import { evalConstantExpression } from "../../070-optimizer/constEval"; +import { isLvalue } from "../../060-types/resolveStatements"; function isNull(wCtx: WriterContext, expr: AstExpression): boolean { return getExpType(wCtx.ctx, expr).kind === "null"; diff --git a/src/generator/writers/writeFunction.ts b/src/080-generator/writers/writeFunction.ts similarity index 98% rename from src/generator/writers/writeFunction.ts rename to src/080-generator/writers/writeFunction.ts index f897bd258..496808610 100644 --- a/src/generator/writers/writeFunction.ts +++ b/src/080-generator/writers/writeFunction.ts @@ -1,4 +1,4 @@ -import { enabledInline } from "../../config/features"; +import { enabledInline } from "../../000-config/features"; import { AstAsmShuffle, AstCondition, @@ -8,10 +8,10 @@ import { idText, isWildcard, tryExtractPath, -} from "../../grammar/ast"; -import { getType, resolveTypeRef } from "../../types/resolveDescriptors"; -import { getExpType } from "../../types/resolveExpression"; -import { FunctionDescription, TypeRef } from "../../types/types"; +} from "../../050-grammar/ast"; +import { getType, resolveTypeRef } from "../../060-types/resolveDescriptors"; +import { getExpType } from "../../060-types/resolveExpression"; +import { FunctionDescription, TypeRef } from "../../060-types/types"; import { WriterContext } from "../Writer"; import { resolveFuncPrimitive } from "./resolveFuncPrimitive"; import { resolveFuncType } from "./resolveFuncType"; @@ -22,7 +22,7 @@ import { cast } from "./cast"; import { resolveFuncTupleType } from "./resolveFuncTupleType"; import { ops } from "./ops"; import { freshIdentifier } from "./freshIdentifier"; -import { idTextErr, throwInternalCompilerError } from "../../errors"; +import { idTextErr, throwInternalCompilerError } from "../../030-error/errors"; import { ppAsmShuffle } from "../../prettyPrinter"; export function writeCastedExpression( diff --git a/src/generator/writers/writeInterfaces.ts b/src/080-generator/writers/writeInterfaces.ts similarity index 85% rename from src/generator/writers/writeInterfaces.ts rename to src/080-generator/writers/writeInterfaces.ts index 5173461ae..8c23cc4f7 100644 --- a/src/generator/writers/writeInterfaces.ts +++ b/src/080-generator/writers/writeInterfaces.ts @@ -1,5 +1,5 @@ -import { getSupportedInterfaces } from "../../types/getSupportedInterfaces"; -import { TypeDescription } from "../../types/types"; +import { getSupportedInterfaces } from "../../060-types/getSupportedInterfaces"; +import { TypeDescription } from "../../060-types/types"; import { WriterContext } from "../Writer"; export function writeInterfaces(type: TypeDescription, ctx: WriterContext) { diff --git a/src/generator/writers/writeRouter.ts b/src/080-generator/writers/writeRouter.ts similarity index 98% rename from src/generator/writers/writeRouter.ts rename to src/080-generator/writers/writeRouter.ts index 82f2e3861..f5683acc5 100644 --- a/src/generator/writers/writeRouter.ts +++ b/src/080-generator/writers/writeRouter.ts @@ -1,13 +1,13 @@ import { beginCell } from "@ton/core"; -import { getType } from "../../types/resolveDescriptors"; -import { ReceiverDescription, TypeDescription } from "../../types/types"; +import { getType } from "../../060-types/resolveDescriptors"; +import { ReceiverDescription, TypeDescription } from "../../060-types/types"; import { WriterContext } from "../Writer"; import { funcIdOf } from "./id"; import { ops } from "./ops"; import { resolveFuncType } from "./resolveFuncType"; import { resolveFuncTypeUnpack } from "./resolveFuncTypeUnpack"; import { writeStatement } from "./writeFunction"; -import { AstNumber } from "../../grammar/ast"; +import { AstNumber } from "../../050-grammar/ast"; export function commentPseudoOpcode(comment: string): string { return beginCell() diff --git a/src/generator/writers/writeSerialization.spec.ts b/src/080-generator/writers/writeSerialization.spec.ts similarity index 84% rename from src/generator/writers/writeSerialization.spec.ts rename to src/080-generator/writers/writeSerialization.spec.ts index 11279ee7d..59913ae98 100644 --- a/src/generator/writers/writeSerialization.spec.ts +++ b/src/080-generator/writers/writeSerialization.spec.ts @@ -1,21 +1,21 @@ -import { CompilerContext } from "../../context"; +import { CompilerContext } from "../../010-pipeline/context"; import { getAllocation, resolveAllocations, -} from "../../storage/resolveAllocation"; +} from "../../060-types/resolveAllocation"; import { getAllTypes, getType, resolveDescriptors, -} from "../../types/resolveDescriptors"; +} from "../../060-types/resolveDescriptors"; import { WriterContext } from "../Writer"; import { writeParser, writeSerializer } from "./writeSerialization"; import { writeStdlib } from "./writeStdlib"; -import { openContext } from "../../grammar/store"; +import { openContext } from "../../050-grammar/store"; import { writeAccessors } from "./writeAccessors"; -import { getParser } from "../../grammar"; -import { getAstFactory } from "../../grammar/ast"; -import { defaultParser } from "../../grammar/grammar"; +import { getParser } from "../../050-grammar"; +import { getAstFactory } from "../../050-grammar/ast"; +import { defaultParser } from "../../050-grammar/grammar"; const code = ` primitive Int; diff --git a/src/generator/writers/writeSerialization.ts b/src/080-generator/writers/writeSerialization.ts similarity index 98% rename from src/generator/writers/writeSerialization.ts rename to src/080-generator/writers/writeSerialization.ts index a9b593a80..54bd96f3c 100644 --- a/src/generator/writers/writeSerialization.ts +++ b/src/080-generator/writers/writeSerialization.ts @@ -1,9 +1,9 @@ -import { contractErrors } from "../../abi/errors"; -import { throwInternalCompilerError } from "../../errors"; -import { dummySrcInfo, ItemOrigin } from "../../grammar"; -import { AllocationCell, AllocationOperation } from "../../storage/operation"; -import { StorageAllocation } from "../../storage/StorageAllocation"; -import { getType } from "../../types/resolveDescriptors"; +import { contractErrors } from "../builtins/errors"; +import { throwInternalCompilerError } from "../../030-error/errors"; +import { dummySrcInfo, ItemOrigin } from "../../050-grammar"; +import { AllocationCell, AllocationOperation } from "../../060-types/operation"; +import { StorageAllocation } from "../../060-types/StorageAllocation"; +import { getType } from "../../060-types/resolveDescriptors"; import { WriterContext } from "../Writer"; import { ops } from "./ops"; import { resolveFuncTypeFromAbi } from "./resolveFuncTypeFromAbi"; diff --git a/src/generator/writers/writeStdlib.ts b/src/080-generator/writers/writeStdlib.ts similarity index 99% rename from src/generator/writers/writeStdlib.ts rename to src/080-generator/writers/writeStdlib.ts index 0872ff474..8cf5ef292 100644 --- a/src/generator/writers/writeStdlib.ts +++ b/src/080-generator/writers/writeStdlib.ts @@ -1,5 +1,5 @@ -import { contractErrors } from "../../abi/errors"; -import { maxTupleSize } from "../../bindings/typescript/writeStruct"; +import { contractErrors } from "../builtins/errors"; +import { maxTupleSize } from "../../100-bindings/typescript/writeStruct"; import { match } from "../../utils/tricks"; import { WriterContext } from "../Writer"; diff --git a/src/090-func/.gitignore b/src/090-func/.gitignore new file mode 100644 index 000000000..f5918109c --- /dev/null +++ b/src/090-func/.gitignore @@ -0,0 +1 @@ +funcfiftlib.wasm.js diff --git a/src/func/__testdata__/small.fc b/src/090-func/__testdata__/small.fc similarity index 100% rename from src/func/__testdata__/small.fc rename to src/090-func/__testdata__/small.fc diff --git a/src/090-func/bin.build.ts b/src/090-func/bin.build.ts new file mode 100644 index 000000000..3cb709623 --- /dev/null +++ b/src/090-func/bin.build.ts @@ -0,0 +1,10 @@ +import fs from "fs"; +import path from "path"; + +const fromPath = path.resolve(__dirname, "funcfiftlib.wasm"); +const toPath = path.resolve(__dirname, "funcfiftlib.wasm.js"); + +// Pack func +const wasmBase64 = fs.readFileSync(fromPath).toString("base64"); +const wasmBase64js = `module.exports = { FuncFiftLibWasm: '${wasmBase64}' };`; +fs.writeFileSync(toPath, wasmBase64js); diff --git a/scripts/copy-files.ts b/src/090-func/copy.build.ts similarity index 63% rename from scripts/copy-files.ts rename to src/090-func/copy.build.ts index 39fd923c3..0a4b5f7fa 100644 --- a/scripts/copy-files.ts +++ b/src/090-func/copy.build.ts @@ -1,5 +1,5 @@ -import * as fs from "node:fs/promises"; -import * as path from "node:path"; +import * as fs from "fs/promises"; +import * as path from "path"; import * as glob from "glob"; const cp = async (fromGlob: string, toPath: string) => { @@ -11,8 +11,7 @@ const cp = async (fromGlob: string, toPath: string) => { const main = async () => { try { - await cp("./src/grammar/prev/grammar.ohm*", "./dist/grammar/prev/"); - await cp("./src/func/funcfiftlib.*", "./dist/func/"); + await cp("./src/090-func/funcfiftlib.*", "./dist/090-func/"); } catch (e) { console.error(e); process.exit(1); diff --git a/src/func/funcCompile.spec.ts b/src/090-func/funcCompile.spec.ts similarity index 89% rename from src/func/funcCompile.spec.ts rename to src/090-func/funcCompile.spec.ts index 60e937b10..80ebb81b4 100644 --- a/src/func/funcCompile.spec.ts +++ b/src/090-func/funcCompile.spec.ts @@ -1,8 +1,8 @@ import fs from "fs"; import path from "path"; -import { Logger } from "../logger"; +import { Logger } from "../010-pipeline/logger"; import { funcCompile } from "./funcCompile"; -import files from "../imports/stdlib"; +import files from "../040-imports/stdlib"; describe("funcCompile", () => { it("should compile small contract", async () => { diff --git a/src/func/funcCompile.ts b/src/090-func/funcCompile.ts similarity index 99% rename from src/func/funcCompile.ts rename to src/090-func/funcCompile.ts index d6fb400db..811322e79 100644 --- a/src/func/funcCompile.ts +++ b/src/090-func/funcCompile.ts @@ -1,4 +1,4 @@ -import { ILogger } from "../logger"; +import { ILogger } from "../010-pipeline/logger"; // Wasm Imports // eslint-disable-next-line @typescript-eslint/no-var-requires diff --git a/src/func/funcfiftlib.js b/src/090-func/funcfiftlib.js similarity index 100% rename from src/func/funcfiftlib.js rename to src/090-func/funcfiftlib.js diff --git a/src/func/funcfiftlib.wasm b/src/090-func/funcfiftlib.wasm similarity index 100% rename from src/func/funcfiftlib.wasm rename to src/090-func/funcfiftlib.wasm diff --git a/src/bindings/typescript/serializers.ts b/src/100-bindings/typescript/serializers.ts similarity index 99% rename from src/bindings/typescript/serializers.ts rename to src/100-bindings/typescript/serializers.ts index 268ae6474..4770d87dd 100644 --- a/src/bindings/typescript/serializers.ts +++ b/src/100-bindings/typescript/serializers.ts @@ -1,6 +1,6 @@ import { ABITypeRef } from "@ton/core"; import { Writer } from "../../utils/Writer"; -import { throwInternalCompilerError } from "../../errors"; +import { throwInternalCompilerError } from "../../030-error/errors"; const primitiveTypes = [ "int", diff --git a/src/bindings/typescript/writeStruct.ts b/src/100-bindings/typescript/writeStruct.ts similarity index 97% rename from src/bindings/typescript/writeStruct.ts rename to src/100-bindings/typescript/writeStruct.ts index 477b534e7..e50d4ce30 100644 --- a/src/bindings/typescript/writeStruct.ts +++ b/src/100-bindings/typescript/writeStruct.ts @@ -1,7 +1,7 @@ import { ABIType, ABITypeRef } from "@ton/core"; import { serializers } from "./serializers"; -import { AllocationCell, AllocationOperation } from "../../storage/operation"; -import { throwInternalCompilerError } from "../../errors"; +import { AllocationCell, AllocationOperation } from "../../060-types/operation"; +import { throwInternalCompilerError } from "../../030-error/errors"; import { Writer } from "../../utils/Writer"; export const maxTupleSize = 15; diff --git a/src/bindings/writeTypescript.ts b/src/100-bindings/writeTypescript.ts similarity index 99% rename from src/bindings/writeTypescript.ts rename to src/100-bindings/writeTypescript.ts index b179f9bf0..4d11e2e94 100644 --- a/src/bindings/writeTypescript.ts +++ b/src/100-bindings/writeTypescript.ts @@ -13,15 +13,15 @@ import { writeTupleParser, writeTupleSerializer, } from "./typescript/writeStruct"; -import { AllocationCell } from "../storage/operation"; -import { throwInternalCompilerError } from "../errors"; +import { AllocationCell } from "../060-types/operation"; +import { throwInternalCompilerError } from "../030-error/errors"; import { topologicalSort } from "../utils/utils"; import { allocate, getAllocationOperationFromField, -} from "../storage/allocator"; +} from "../060-types/allocator"; import { serializers } from "./typescript/serializers"; -import { eqNames } from "../grammar/ast"; +import { eqNames } from "../050-grammar/ast"; function writeArguments(args: ABIArgument[]) { const res: string[] = []; diff --git a/src/packaging/fileFormat.ts b/src/110-packaging/fileFormat.ts similarity index 100% rename from src/packaging/fileFormat.ts rename to src/110-packaging/fileFormat.ts diff --git a/src/packaging/packageCode.ts b/src/110-packaging/packageCode.ts similarity index 100% rename from src/packaging/packageCode.ts rename to src/110-packaging/packageCode.ts diff --git a/src/browser.ts b/src/browser.ts index 84cd88e10..2e8e8da2f 100644 --- a/src/browser.ts +++ b/src/browser.ts @@ -1,7 +1,7 @@ -import { Config, verifyConfig } from "./config/parseConfig"; -import { ILogger } from "./logger"; -import { build } from "./pipeline/build"; -import { createVirtualFileSystem } from "./vfs/createVirtualFileSystem"; +import { Config, verifyConfig } from "./000-config/parseConfig"; +import { ILogger } from "./010-pipeline/logger"; +import { build } from "./010-pipeline/build"; +import { createVirtualFileSystem } from "./020-vfs/createVirtualFileSystem"; export async function run(args: { config: Config; diff --git a/src/check.ts b/src/check.ts deleted file mode 100644 index ce5a19253..000000000 --- a/src/check.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { featureEnable } from "./config/features"; -import { CompilerContext } from "./context"; -import { getAstFactory } from "./grammar/ast"; -import { getParser } from "./grammar"; -import files from "./imports/stdlib"; -import { createVirtualFileSystem, TactError, VirtualFileSystem } from "./main"; -import { precompile } from "./pipeline/precompile"; -import { defaultParser } from "./grammar/grammar"; - -export type CheckResultItem = { - type: "error" | "warning"; - message: string; - location?: { - file: string; - line: number; - column: number; - length: number; - }; -}; - -export type CheckResult = - | { - ok: true; - } - | { - ok: false; - messages: CheckResultItem[]; - }; - -export function check(args: { - project: VirtualFileSystem; - entrypoint: string; -}): CheckResult { - // Create context - const stdlib = createVirtualFileSystem("@stdlib/", files); - let ctx: CompilerContext = new CompilerContext(); - ctx = featureEnable(ctx, "debug"); // Enable debug flag (does not affect type checking in practice) - ctx = featureEnable(ctx, "external"); // Enable external messages flag to avoid external-specific errors - - const ast = getAstFactory(); - const parser = getParser(ast, defaultParser); - - // Execute check - const items: CheckResultItem[] = []; - try { - precompile(ctx, args.project, stdlib, args.entrypoint, parser, ast); - } catch (e) { - if (e instanceof TactError) { - items.push({ - type: "error", - message: e.message, - location: - e.loc === undefined - ? undefined - : e.loc.file - ? { - file: e.loc.file, - line: e.loc.interval.getLineAndColumn().lineNum, - column: e.loc.interval.getLineAndColumn() - .colNum, - length: - e.loc.interval.endIdx - - e.loc.interval.startIdx, - } - : { - file: args.entrypoint, - line: 0, - column: 0, - length: 0, - }, - }); - } else { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const msg = (e as any).message; - if (typeof msg === "string") { - items.push({ - type: "error", - message: msg, - location: { - file: args.entrypoint, - line: 0, - column: 0, - length: 0, - }, - }); - } else { - items.push({ - type: "error", - message: "Unknown internal message", - location: { - file: args.entrypoint, - line: 0, - column: 0, - length: 0, - }, - }); - } - } - } - - if (items.length > 0) { - return { - ok: false, - messages: items, - }; - } - return { - ok: true, - }; -} diff --git a/src/imports/stdlib.ts b/src/imports/stdlib.ts deleted file mode 100644 index 27563ec77..000000000 --- a/src/imports/stdlib.ts +++ /dev/null @@ -1,853 +0,0 @@ -const files: Record = {}; -files['libs/config.tact'] = - 'ZnVuIGdldENvbmZpZ0FkZHJlc3MoKTogQWRkcmVzcyB7CiAgICBsZXQgY2VsbDogQ2VsbCA9IGdldENvbmZpZ1BhcmFtKDApISE7CiAgICBsZXQgc2M6IFNsaWNlID0g' + - 'Y2VsbC5iZWdpblBhcnNlKCk7CiAgICByZXR1cm4gbmV3QWRkcmVzcygtMSwgc2MubG9hZFVpbnQoMjU2KSk7Cn0KCmZ1biBnZXRFbGVjdG9yQWRkcmVzcygpOiBBZGRy' + - 'ZXNzIHsKICAgIGxldCBjZWxsOiBDZWxsID0gZ2V0Q29uZmlnUGFyYW0oMSkhITsKICAgIGxldCBzYzogU2xpY2UgPSBjZWxsLmJlZ2luUGFyc2UoKTsKICAgIHJldHVy' + - 'biBuZXdBZGRyZXNzKC0xLCBzYy5sb2FkVWludCgyNTYpKTsKfQ=='; -files['libs/content.tact'] = - 'ZnVuIGNyZWF0ZU9mZmNoYWluQ29udGVudChsaW5rOiBTdHJpbmcpOiBDZWxsIHsKICAgIGxldCBidWlsZGVyOiBTdHJpbmdCdWlsZGVyID0gYmVnaW5TdHJpbmdGcm9t' + - 'QnVpbGRlcihiZWdpbkNlbGwoKS5zdG9yZVVpbnQoMHgwMSwgOCkpOwogICAgYnVpbGRlci5hcHBlbmQobGluayk7CiAgICByZXR1cm4gYnVpbGRlci50b0NlbGwoKTsK' + - 'fQ=='; -files['libs/deploy.tact'] = - 'Cm1lc3NhZ2UgRGVwbG95IHsKICAgIHF1ZXJ5SWQ6IEludCBhcyB1aW50NjQ7Cn0KCm1lc3NhZ2UgRGVwbG95T2sgewogICAgcXVlcnlJZDogSW50IGFzIHVpbnQ2NDsK' + - 'fQoKdHJhaXQgRGVwbG95YWJsZSB7CiAgICByZWNlaXZlKGRlcGxveTogRGVwbG95KSB7CiAgICAgICAgc2VsZi5ub3RpZnkoRGVwbG95T2t7cXVlcnlJZDogZGVwbG95' + - 'LnF1ZXJ5SWR9LnRvQ2VsbCgpKTsKICAgIH0KfQoKbWVzc2FnZSBGYWN0b3J5RGVwbG95IHsKICAgIHF1ZXJ5SWQ6IEludCBhcyB1aW50NjQ7CiAgICBjYXNoYmFjazog' + - 'QWRkcmVzczsKfQoKdHJhaXQgRmFjdG9yeURlcGxveWFibGUgIHsKICAgIHJlY2VpdmUoZGVwbG95OiBGYWN0b3J5RGVwbG95KSB7CiAgICAgICAgc2VsZi5mb3J3YXJk' + - 'KGRlcGxveS5jYXNoYmFjaywgRGVwbG95T2t7cXVlcnlJZDogZGVwbG95LnF1ZXJ5SWR9LnRvQ2VsbCgpLCBmYWxzZSwgbnVsbCk7CiAgICB9Cn0='; -files['libs/dns.fc'] = - 'c2xpY2UgZG5zX3N0cmluZ190b19pbnRlcm5hbChzbGljZSBkb21haW4pIGlubGluZV9yZWYgewoKICAgIDs7IFNwZWNpYWwgY2FzZSBmb3Igcm9vdCBkb21haW4KICAg' + - 'IGlmICgoZG9tYWluLnNsaWNlX2JpdHMoKSA9PSA4KSAmIChkb21haW4uc2xpY2VfcmVmcygpID09IDApKSB7CiAgICAgICAgaWYgKGRvbWFpbi5wcmVsb2FkX3VpbnQo' + - 'OCkgPT0gNDYpIHsKICAgICAgICAgICAgcmV0dXJuIGJlZ2luX2NlbGwoKS5zdG9yZV91aW50KDAsIDgpLmVuZF9jZWxsKCkuYmVnaW5fcGFyc2UoKTsKICAgICAgICB9' + - 'CiAgICB9CiAgICAKICAgIDs7IFNwbGl0IGRvbWFpbiBpbnRvIHNlZ21lbnRzCiAgICB0dXBsZSBzZWdtZW50cyA9IG51bGwoKTsKICAgIGJ1aWxkZXIgY3VycmVudCA9' + - 'IGJlZ2luX2NlbGwoKTsKICAgIGludCBpc0N1cnJlbnRFbXB0eSA9IHRydWU7CiAgICBpbnQgaXNGaXJzdCA9IHRydWU7CiAgICBpbnQgaXNIeXBoZW4gPSBmYWxzZTsK' + - 'ICAgIHNsaWNlIGNzID0gZG9tYWluOwogICAgaW50IGNvbnRpbnVlID0gdHJ1ZTsKICAgIGRvIHsKCiAgICAgICAgOzsgUHJlcGFyZSBmb3IgbG9hZGluZyBuZXh0IGNo' + - 'YXJhY3RlcgogICAgICAgIGlmIChjcy5zbGljZV9iaXRzKCkgPT0gMCkgewogICAgICAgICAgICBpbnQgcmVmcyA9IGNzLnNsaWNlX3JlZnMoKTsKICAgICAgICAgICAg' + - 'aWYgKHJlZnMgPT0gMSkgewogICAgICAgICAgICAgICAgY3MgPSBjc35sb2FkX3JlZigpLmJlZ2luX3BhcnNlKCk7CiAgICAgICAgICAgIH0gZWxzZWlmIChyZWZzID4g' + - 'MSkgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGwoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlID0gZmFsc2U7CiAgICAg' + - 'ICAgICAgIH0KICAgICAgICAgICAgY29udGludWUgPSBmYWxzZTsKICAgICAgICB9CgogICAgICAgIDs7IENvbnRpbnVlIGxvYWRpbmcgbmV4dCBjaGFyYWN0ZXIKICAg' + - 'ICAgICBpZiAoY29udGludWUpIHsKICAgICAgICAgICAgaW50IGNoYXIgPSBjc35sb2FkX3VpbnQoOCk7CiAgICAgICAgICAgIDs7IHdlIGNhbiBkbyBpdCBiZWNhdXNl' + - 'IGFkZGl0aW9uYWwgVVRGLTggY2hhcmFjdGVyJ3Mgb2N0ZXRzID49IDEyOCAtLSBodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMzYyOS50eHQKICAgICAgICAgICAg' + - 'aW50IGlzX2h5cGhlbiA9IChjaGFyID09IDQ1KTsKICAgICAgICAgICAgaW50IGlzX2RvdCAgPSAoY2hhciA9PSA0Nik7CiAgICAgICAgICAgIGludCB2YWxpZF9jaGFy' + - 'ID0gaXNfaHlwaGVuIHwgaXNfZG90IHwgKChjaGFyID49IDQ4KSAmIChjaGFyIDw9IDU3KSkgfCAoKGNoYXIgPj0gOTcpICYgKGNoYXIgPD0gMTIyKSk7IDs7ICctJyBv' + - 'ciAwLTkgb3IgYS16CiAgICAgICAgICAgIGlmICh+IHZhbGlkX2NoYXIgfCAoaXNGaXJzdCAmIGlzX2h5cGhlbikpIHsKICAgICAgICAgICAgICAgIHJldHVybiBudWxs' + - 'KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaXNIeXBoZW4gPSBpc19oeXBoZW47CiAgICAgICAgICAgIGlmIChpc19kb3QpIHsKICAgICAgICAgICAgICAgIGlm' + - 'IChpc0ZpcnN0IHwgaXNIeXBoZW4pIHsgOzsgRW1wdHkgb3IgZW5kcyB3aXRoIGh5cGhlbgogICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsKCk7CiAgICAgICAg' + - 'ICAgICAgICB9CiAgICAgICAgICAgICAgICBzZWdtZW50cyA9IGNvbnMoY3VycmVudCwgc2VnbWVudHMpOwogICAgICAgICAgICAgICAgY3VycmVudCA9IGJlZ2luX2Nl' + - 'bGwoKTsKICAgICAgICAgICAgICAgIGlzSHlwaGVuID0gZmFsc2U7CiAgICAgICAgICAgICAgICBpc0ZpcnN0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGlzQ3VycmVu' + - 'dEVtcHR5ID0gdHJ1ZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlzRmlyc3QgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGlzQ3VycmVudEVt' + - 'cHR5ID0gZmFsc2U7CiAgICAgICAgICAgICAgICBjdXJyZW50fnN0b3JlX3VpbnQoY2hhciwgOCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgfSB1bnRpbCAo' + - 'fiBjb250aW51ZSk7CiAgICBpZiAoaXNIeXBoZW4pIHsgOzsgZW5kcyB3aXRoIGh5cGhlbgogICAgICAgIHJldHVybiBudWxsKCk7CiAgICB9CiAgICBpZiAofiBpc0N1' + - 'cnJlbnRFbXB0eSkgewogICAgICAgIHNlZ21lbnRzID0gY29ucyhjdXJyZW50LCBzZWdtZW50cyk7CiAgICB9CgogICAgOzsgQ29uY2F0ZW5hdGUgc2VnbWVudHMKICAg' + - 'IGJ1aWxkZXIgcmVzID0gYmVnaW5fY2VsbCgpOwogICAgKGJ1aWxkZXIgYiwgdHVwbGUgdGFpbCkgPSB1bmNvbnMoc2VnbWVudHMpOwogICAgcmVzID0gcmVzLnN0b3Jl' + - 'X2J1aWxkZXIoYik7CiAgICB3aGlsZSh+IG51bGw/KHRhaWwpKSB7CiAgICAgICAgKGIsIHRhaWwpID0gdW5jb25zKHRhaWwpOwogICAgICAgIHJlcyA9IHJlcy5zdG9y' + - 'ZV91aW50KDAsIDgpOyA7OyBBZGQgXDAgc2VwYXJhdG9yCiAgICAgICAgcmVzID0gcmVzLnN0b3JlX2J1aWxkZXIoYik7CiAgICB9CiAgICByZXMgPSByZXMuc3RvcmVf' + - 'dWludCgwLCA4KTsgOzsgQWRkIFwwIHNlcGFyYXRvcgogICAgcmV0dXJuIHJlcy5lbmRfY2VsbCgpLmJlZ2luX3BhcnNlKCk7Cn0KCmludCBkbnNfaW50ZXJuYWxfdmVy' + - 'aWZ5KHNsaWNlIHNjKSBpbmxpbmVfcmVmIHsKICAgIGlmIChzYy5zbGljZV9yZWZzKCkgIT0gMCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGludCBi' + - 'aXRzID0gc2Muc2xpY2VfYml0cygpOwogICAgaWYgKGJpdHMgJSA4ICE9IDApIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAoYml0cyA9PSAwKSB7' + - 'IDs7IENhc2UgZm9yIHJvb3QgZG9tYWluCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpbnQgbGVuID0gYml0cyAvIDg7CiAgICBpbnQgY291bnRlciA9IDA7' + - 'CiAgICBpbnQgaXNGaXJzdCA9IHRydWU7CiAgICBpbnQgaXNIeXBoZW4gPSBmYWxzZTsKICAgIHJlcGVhdChsZW4pIHsKICAgICAgICBpbnQgY2hhciA9IHNjfmxvYWRf' + - 'dWludCg4KTsKICAgICAgICBpZiAoY2hhciA9PSAwKSB7CiAgICAgICAgICAgIGlmIChjb3VudGVyID09IDApIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK' + - 'ICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoaXNIeXBoZW4pIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAg' + - 'ICBjb3VudGVyID0gMDsKICAgICAgICAgICAgaXNIeXBoZW4gPSBmYWxzZTsKICAgICAgICAgICAgaXNGaXJzdCA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAg' + - 'ICAgICAgaW50IGNoYXJJc0h5cGhlbiA9IChjaGFyID09IDQ1KTsKICAgICAgICAgICAgaW50IGlzVmFsaWQgPSBjaGFySXNIeXBoZW4gfCAoKGNoYXIgPj0gNDgpICYg' + - 'KGNoYXIgPD0gNTcpKSB8ICgoY2hhciA+PSA5NykgJiAoY2hhciA8PSAxMjIpKTsKICAgICAgICAgICAgaWYgKH4gaXNWYWxpZCkgewogICAgICAgICAgICAgICAgcmV0' + - 'dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChjaGFySXNIeXBoZW4gJiBpc0ZpcnN0KSAgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl' + - 'OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlzSHlwaGVuID0gY2hhcklzSHlwaGVuOwogICAgICAgICAgICBpc0ZpcnN0ID0gZmFsc2U7CiAgICAgICAgICAgIGNv' + - 'dW50ZXIgPSBjb3VudGVyICsgMTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gY291bnRlciA9PSAwICYgfiBpc0h5cGhlbjsKfQoKc2xpY2UgZG5zX2ludGVybmFs' + - 'X25vcm1hbGl6ZShzbGljZSBzcmMpIGltcHVyZSBpbmxpbmVfcmVmIHsKICAgIHRocm93X3VubGVzcygxMzQsIHNyYy5zbGljZV9yZWZzKCkgPT0gMCk7IDs7IEludmFs' + - 'aWQgYXJndW1lbnQgZXJyb3IKICAgIGJ1aWxkZXIgdGFyZ2V0ID0gYmVnaW5fY2VsbCgpOwogICAgcmVwZWF0KHNyYy5zbGljZV9iaXRzKCkgLyA4KSB7CiAgICAgICAg' + - 'aW50IGNoYXIgPSBzcmN+bG9hZF91aW50KDgpOwoKICAgICAgICA7OyBiID0+IDYKICAgICAgICBpZiAoY2hhciA9PSA5OCkgewogICAgICAgICAgICBjaGFyID0gNTQ7' + - 'CiAgICAgICAgfQoKICAgICAgICA7OyBnLCBxID0+IDkKICAgICAgICBpZiAoKGNoYXIgPT0gMTAzKSB8IChjaGFyID09IDExMykpIHsKICAgICAgICAgICAgY2hhciA9' + - 'IDU3OyAgICAKICAgICAgICB9CgogICAgICAgIDs7IGwgPT4gMQogICAgICAgIGlmIChjaGFyID09IDEwOCkgewogICAgICAgICAgICBjaGFyID0gNDk7CiAgICAgICAg' + - 'fQoKICAgICAgICA7OyBvID0+IDAKICAgICAgICBpZiAoY2hhciA9PSAxMTEpIHsKICAgICAgICAgICAgY2hhciA9IDQ4OwogICAgICAgIH0KCiAgICAgICAgOzsgcyA9' + - 'PiA1CiAgICAgICAgaWYgKGNoYXIgPT0gMTE1KSB7CiAgICAgICAgICAgIGNoYXIgPSA1MzsKICAgICAgICB9CgogICAgICAgIDs7IHUgPT4gdgogICAgICAgIGlmIChj' + - 'aGFyID09IDExNykgewogICAgICAgICAgICBjaGFyID0gMTE4OwogICAgICAgIH0KCiAgICAgICAgOzsgeiA9PiAyCiAgICAgICAgaWYgKGNoYXIgPT0gMTIyKSB7CiAg' + - 'ICAgICAgICAgIGNoYXIgPSA1MDsKICAgICAgICB9CgogICAgICAgIHRhcmdldCA9IHRhcmdldC5zdG9yZV91aW50KGNoYXIsIDgpOwogICAgfQogICAgcmV0dXJuIHRh' + - 'cmdldC5lbmRfY2VsbCgpLmJlZ2luX3BhcnNlKCk7Cn0K'; -files['libs/dns.tact'] = - 'aW1wb3J0ICIuL2Rucy5mYyI7CgpzdHJ1Y3QgRE5TUmVzb2x2ZVJlc3VsdCB7CiAgICBwcmVmaXg6IEludDsgCiAgICByZWNvcmQ6IENlbGw/OyAKfQoKQG5hbWUoZG5z' + - 'X3N0cmluZ190b19pbnRlcm5hbCkKbmF0aXZlIGRuc1N0cmluZ1RvSW50ZXJuYWwoc3RyOiBTdHJpbmcpOiBTbGljZT87CgpAbmFtZShkbnNfaW50ZXJuYWxfbm9ybWFs' + - 'aXplKQpuYXRpdmUgZG5zSW50ZXJuYWxOb3JtYWxpemUoc3JjOiBTbGljZSk6IFNsaWNlOwoKQG5hbWUoZG5zX2ludGVybmFsX3ZlcmlmeSkKbmF0aXZlIGRuc0ludGVy' + - 'bmFsVmVyaWZ5KHN1YmRvbWFpbjogU2xpY2UpOiBCb29sOwoKZnVuIGRuc0V4dHJhY3RUb3BEb21haW5MZW5ndGgoc3ViZG9tYWluOiBTbGljZSk6IEludCB7CiAgICBs' + - 'ZXQgaTogSW50ID0gMDsKICAgIGxldCBuZWVkQnJlYWs6IEJvb2wgPSBmYWxzZTsKICAgIGRvIHsKICAgICAgICBsZXQgY2hhcjogSW50ID0gc3ViZG9tYWluLmxvYWRV' + - 'aW50KDgpOyAvLyB3ZSBkbyBub3QgY2hlY2sgZG9tYWluLmxlbmd0aCBiZWNhdXNlIGl0IE1VU1QgY29udGFpbnMgXDAgY2hhcmFjdGVyCiAgICAgICAgbmVlZEJyZWFr' + - 'ID0gY2hhciA9PSAwOwogICAgICAgIGlmICghbmVlZEJyZWFrKSB7CiAgICAgICAgICAgIGkgPSBpICsgODsKICAgICAgICB9CiAgICB9IHVudGlsIChuZWVkQnJlYWsp' + - 'OwogICAgcmVxdWlyZShpICE9IDAsICJJbnZhbGlkIEROUyBuYW1lIik7CiAgICByZXR1cm4gaTsKfQoKZnVuIGRuc0V4dHJhY3RUb3BEb21haW4oc3ViZG9tYWluOiBT' + - 'bGljZSk6IFNsaWNlIHsKICAgIGxldCBsZW46IEludCA9IGRuc0V4dHJhY3RUb3BEb21haW5MZW5ndGgoc3ViZG9tYWluKTsKICAgIHJldHVybiBzdWJkb21haW4ubG9h' + - 'ZEJpdHMobGVuKTsKfQoKZnVuIGRuc1Jlc29sdmVOZXh0KGFkZHJlc3M6IEFkZHJlc3MpOiBDZWxsIHsKICAgIHJldHVybiBiZWdpbkNlbGwoKQogICAgICAgIC5zdG9y' + - 'ZVVpbnQoMHhiYTkzLCAxNikKICAgICAgICAuc3RvcmVBZGRyZXNzKGFkZHJlc3MpCiAgICAgICAgLmVuZENlbGwoKTsKfQoKZnVuIGRuc1Jlc29sdmVXYWxsZXQoYWRk' + - 'cmVzczogQWRkcmVzcyk6IENlbGwgewogICAgcmV0dXJuIGJlZ2luQ2VsbCgpCiAgICAgICAgLnN0b3JlVWludCgweDlmZDMsIDE2KQogICAgICAgIC5zdG9yZUFkZHJl' + - 'c3MoYWRkcmVzcykKICAgICAgICAuc3RvcmVVaW50KDAsIDgpCiAgICAgICAgLmVuZENlbGwoKTsKfQoKdHJhaXQgRE5TUmVzb2x2ZXIgewoKICAgIGdldCBmdW4gZG5z' + - 'cmVzb2x2ZShzdWJkb21haW46IFNsaWNlLCBjYXRlZ29yeTogSW50KTogRE5TUmVzb2x2ZVJlc3VsdCB7CgogICAgICAgIC8vIE5vcm1hbGl6ZQogICAgICAgIGxldCBk' + - 'ZWx0YTogSW50ID0gMDsKICAgICAgICBpZiAoc3ViZG9tYWluLnByZWxvYWRVaW50KDgpID09IDApIHsKICAgICAgICAgICAgc3ViZG9tYWluLmxvYWRVaW50KDgpOyAv' + - 'LyBTa2lwIGZpcnN0IGJ5dGUKICAgICAgICAgICAgZGVsdGEgPSBkZWx0YSArIDg7CiAgICAgICAgfQoKICAgICAgICAvLyBDaGVja3MgY29ycmVjdG5lc3MKICAgICAg' + - 'ICByZXF1aXJlKGRuc0ludGVybmFsVmVyaWZ5KHN1YmRvbWFpbiksICJJbnZhbGlkIEROUyBuYW1lIik7CgogICAgICAgIC8vIFJlc29sdmUKICAgICAgICBsZXQgcmVz' + - 'OiBETlNSZXNvbHZlUmVzdWx0ID0gc2VsZi5kb1Jlc29sdmVETlMoc3ViZG9tYWluLCBjYXRlZ29yeSk7CiAgICAgICAgcmV0dXJuIEROU1Jlc29sdmVSZXN1bHR7cHJl' + - 'Zml4OiByZXMucHJlZml4ICsgZGVsdGEsIHJlY29yZDogcmVzLnJlY29yZH07CiAgICB9CgogICAgdmlydHVhbCBmdW4gZG9SZXNvbHZlRE5TKHN1YmRvbWFpbjogU2xp' + - 'Y2UsIGNhdGVnb3J5OiBJbnQpOiBETlNSZXNvbHZlUmVzdWx0IHsKICAgICAgICByZXR1cm4gRE5TUmVzb2x2ZVJlc3VsdHtwcmVmaXg6IHN1YmRvbWFpbi5iaXRzKCks' + - 'IHJlY29yZDogbnVsbH07CiAgICB9Cn0='; -files['libs/ownable.tact'] = - 'bWVzc2FnZSBDaGFuZ2VPd25lciB7CiAgICBxdWVyeUlkOiBJbnQgYXMgdWludDY0OwogICAgbmV3T3duZXI6IEFkZHJlc3M7Cn0KCm1lc3NhZ2UgQ2hhbmdlT3duZXJP' + - 'ayB7CiAgICBxdWVyeUlkOiBJbnQgYXMgdWludDY0OwogICAgbmV3T3duZXI6IEFkZHJlc3M7Cn0KCkBpbnRlcmZhY2UoIm9yZy50b24ub3duYWJsZSIpCnRyYWl0IE93' + - 'bmFibGUgewogICAgb3duZXI6IEFkZHJlc3M7CgogICAgZnVuIHJlcXVpcmVPd25lcigpIHsKICAgICAgICBuYXRpdmVUaHJvd1VubGVzcygxMzIsIHNlbmRlcigpID09' + - 'IHNlbGYub3duZXIpOwogICAgfQoKICAgIGdldCBmdW4gb3duZXIoKTogQWRkcmVzcyB7CiAgICAgICAgcmV0dXJuIHNlbGYub3duZXI7CiAgICB9Cn0KCkBpbnRlcmZh' + - 'Y2UoIm9yZy50b24ub3duYWJsZS50cmFuc2ZlcmFibGUudjIiKQp0cmFpdCBPd25hYmxlVHJhbnNmZXJhYmxlIHdpdGggT3duYWJsZSB7CgogICAgb3duZXI6IEFkZHJl' + - 'c3M7CgogICAgcmVjZWl2ZShtc2c6IENoYW5nZU93bmVyKSB7CiAgICAgICAgCiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHNlbmRlciBpcyB0aGUgb3duZXIKICAgICAg' + - 'ICBzZWxmLnJlcXVpcmVPd25lcigpOwoKICAgICAgICAvLyBVcGRhdGUgb3duZXIKICAgICAgICBzZWxmLm93bmVyID0gbXNnLm5ld093bmVyOwoKICAgICAgICAvLyBS' + - 'ZXBseSByZXN1bHQKICAgICAgICBzZWxmLnJlcGx5KENoYW5nZU93bmVyT2t7IHF1ZXJ5SWQ6IG1zZy5xdWVyeUlkLCBuZXdPd25lcjptc2cubmV3T3duZXIgfS50b0Nl' + - 'bGwoKSk7CiAgICB9Cn0='; -files['libs/stoppable.tact'] = - 'aW1wb3J0ICIuL293bmFibGUiOwoKQGludGVyZmFjZSgib3JnLnRvbi5zdG9wcGFibGUiKQp0cmFpdCBTdG9wcGFibGUgd2l0aCBPd25hYmxlIHsKICAgIAogICAgc3Rv' + - 'cHBlZDogQm9vbDsKICAgIG93bmVyOiBBZGRyZXNzOwoKICAgIGZ1biByZXF1aXJlTm90U3RvcHBlZCgpIHsKICAgICAgICByZXF1aXJlKCFzZWxmLnN0b3BwZWQsICJD' + - 'b250cmFjdCBzdG9wcGVkIik7CiAgICB9CgogICAgZnVuIHJlcXVpcmVTdG9wcGVkKCkgewogICAgICAgIHJlcXVpcmUoc2VsZi5zdG9wcGVkLCAiQ29udHJhY3Qgbm90' + - 'IHN0b3BwZWQiKTsKICAgIH0KCiAgICByZWNlaXZlKCJTdG9wIikgewogICAgICAgIHNlbGYucmVxdWlyZU93bmVyKCk7CiAgICAgICAgc2VsZi5yZXF1aXJlTm90U3Rv' + - 'cHBlZCgpOwogICAgICAgIHNlbGYuc3RvcHBlZCA9IHRydWU7CiAgICAgICAgc2VsZi5yZXBseSgiU3RvcHBlZCIuYXNDb21tZW50KCkpOwogICAgfQoKICAgIGdldCBm' + - 'dW4gc3RvcHBlZCgpOiBCb29sIHsKICAgICAgICByZXR1cm4gc2VsZi5zdG9wcGVkOwogICAgfQp9CgpAaW50ZXJmYWNlKCJvcmcudG9uLnJlc3VtYWJsZSIpCnRyYWl0' + - 'IFJlc3VtYWJsZSB3aXRoIFN0b3BwYWJsZSB7CiAgICBzdG9wcGVkOiBCb29sOwogICAgb3duZXI6IEFkZHJlc3M7CgogICAgcmVjZWl2ZSgiUmVzdW1lIikgewogICAg' + - 'ICAgIHNlbGYucmVxdWlyZU93bmVyKCk7CiAgICAgICAgc2VsZi5yZXF1aXJlU3RvcHBlZCgpOwogICAgICAgIHNlbGYuc3RvcHBlZCA9IGZhbHNlOwogICAgICAgIHNl' + - 'bGYucmVwbHkoIlJlc3VtZWQiLmFzQ29tbWVudCgpKTsKICAgIH0KfQ=='; -files['std/base.tact'] = - 'dHJhaXQgQmFzZVRyYWl0IHsKICAgIHZpcnR1YWwgY29uc3Qgc3RvcmFnZVJlc2VydmU6IEludCA9IDA7CiAgICAKICAgIHZpcnR1YWwgaW5saW5lIGZ1biByZXBseShi' + - 'b2R5OiBDZWxsPykgewogICAgICAgIHNlbGYuZm9yd2FyZChzZW5kZXIoKSwgYm9keSwgdHJ1ZSwgbnVsbCk7CiAgICB9CgogICAgdmlydHVhbCBpbmxpbmUgZnVuIG5v' + - 'dGlmeShib2R5OiBDZWxsPykgewogICAgICAgIHNlbGYuZm9yd2FyZChzZW5kZXIoKSwgYm9keSwgZmFsc2UsIG51bGwpOwogICAgfQoKICAgIHZpcnR1YWwgZnVuIGZv' + - 'cndhcmQodG86IEFkZHJlc3MsIGJvZHk6IENlbGw/LCBib3VuY2U6IEJvb2wsIGluaXQ6IFN0YXRlSW5pdD8pIHsKCiAgICAgICAgbGV0IGNvZGU6IENlbGw/ID0gbnVs' + - 'bDsKICAgICAgICBsZXQgZGF0YTogQ2VsbD8gPSBudWxsOwogICAgICAgIGlmIChpbml0ICE9IG51bGwpIHsKICAgICAgICAgICAgbGV0IGluaXQyOiBTdGF0ZUluaXQg' + - 'PSBpbml0ISE7CiAgICAgICAgICAgIGNvZGUgPSBpbml0Mi5jb2RlOwogICAgICAgICAgICBkYXRhID0gaW5pdDIuZGF0YTsKICAgICAgICB9CgogICAgICAgIC8vIExv' + - 'Y2sgc3RvcmFnZSBpZiBuZWVkZWQKICAgICAgICBpZiAoc2VsZi5zdG9yYWdlUmVzZXJ2ZSA+IDApIHsgLy8gT3B0aW1pemVkIGluIGNvbXBpbGUtdGltZQogICAgICAg' + - 'ICAgICBsZXQgY3R4OiBDb250ZXh0ID0gY29udGV4dCgpOwogICAgICAgICAgICBsZXQgYmFsYW5jZTogSW50ID0gbXlCYWxhbmNlKCk7CiAgICAgICAgICAgIGxldCBi' + - 'YWxhbmNlQmVmb3JlTWVzc2FnZTogSW50ID0gYmFsYW5jZSAtIGN0eC52YWx1ZTsKICAgICAgICAgICAgaWYgKGJhbGFuY2VCZWZvcmVNZXNzYWdlIDwgc2VsZi5zdG9y' + - 'YWdlUmVzZXJ2ZSkgewogICAgICAgICAgICAgICAgbmF0aXZlUmVzZXJ2ZShzZWxmLnN0b3JhZ2VSZXNlcnZlLCBSZXNlcnZlRXhhY3QpOwogICAgICAgICAgICAgICAg' + - 'c2VuZChTZW5kUGFyYW1ldGVyc3tib3VuY2U6IGJvdW5jZSwgdG86IHRvLCB2YWx1ZTogMCwgbW9kZTogU2VuZFJlbWFpbmluZ0JhbGFuY2UgfCBTZW5kSWdub3JlRXJy' + - 'b3JzLCBib2R5OiBib2R5LCBjb2RlOiBjb2RlLCBkYXRhOiBkYXRhIH0pOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAg' + - 'ICAgICAvLyBKdXN0IHNlbmQgd2l0aCByZW1haW5pbmcgYmFsYW5jZQogICAgICAgIHNlbmQoU2VuZFBhcmFtZXRlcnN7Ym91bmNlOiBib3VuY2UsIHRvOiB0bywgdmFs' + - 'dWU6IDAsIG1vZGU6IFNlbmRSZW1haW5pbmdWYWx1ZSB8IFNlbmRJZ25vcmVFcnJvcnMsIGJvZHk6IGJvZHksIGNvZGU6IGNvZGUsIGRhdGE6IGRhdGEgfSk7CiAgICB9' + - 'Cn0='; -files['std/cells.tact'] = - 'Ly8KLy8gQnVpbGRlcgovLwoKYXNtIGZ1biBiZWdpbkNlbGwoKTogQnVpbGRlciB7IE5FV0MgfQoKLy8gc3BlY2lhbCB0cmVhdG1lbnQgaW4gRnVuYyBjb21waWxlciwg' + - 'c28gbm90IHJlcGxhY2VkIHdpdGggYXNtICJTVElYIgpAbmFtZShzdG9yZV9pbnQpCmV4dGVuZHMgbmF0aXZlIHN0b3JlSW50KHNlbGY6IEJ1aWxkZXIsIHZhbHVlOiBJ' + - 'bnQsIGJpdHM6IEludCk6IEJ1aWxkZXI7CgovLyBzcGVjaWFsIHRyZWF0bWVudCBpbiBGdW5jIGNvbXBpbGVyLCBzbyBub3QgcmVwbGFjZWQgd2l0aCBhc20gIlNUVVgi' + - 'CkBuYW1lKHN0b3JlX3VpbnQpCmV4dGVuZHMgbmF0aXZlIHN0b3JlVWludChzZWxmOiBCdWlsZGVyLCB2YWx1ZTogSW50LCBiaXRzOiBJbnQpOiBCdWlsZGVyOwoKQG5h' + - 'bWUoX190YWN0X3N0b3JlX2Jvb2wpCmV4dGVuZHMgbmF0aXZlIHN0b3JlQm9vbChzZWxmOiBCdWlsZGVyLCB2YWx1ZTogQm9vbCk6IEJ1aWxkZXI7CgovLy8gRXh0ZW5z' + - 'aW9uIGZ1bmN0aW9uIGZvciB0aGUgYEJ1aWxkZXJgLiBBbGlhcyB0byBgQnVpbGRlci5zdG9yZUJvb2woKWAuIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNS4wLgovLy8K' + - 'Ly8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBiOiBCdWlsZGVyID0gYmVnaW5DZWxsKCk7Ci8vLyAgICAgbGV0IGZpeno6IEJ1aWxkZXIg' + - 'PSBiLnN0b3JlQml0KHRydWUpOyAgLy8gd3JpdGVzIDEKLy8vICAgICBsZXQgYnV6ejogQnVpbGRlciA9IGIuc3RvcmVCaXQoZmFsc2UpOyAvLyB3cml0ZXMgMAovLy8g' + - 'fQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNidWlsZGVyc3RvcmViaXQKLy8vCkBuYW1lKF9fdGFj' + - 'dF9zdG9yZV9ib29sKQpleHRlbmRzIG5hdGl2ZSBzdG9yZUJpdChzZWxmOiBCdWlsZGVyLCB2YWx1ZTogQm9vbCk6IEJ1aWxkZXI7Cgphc20gZXh0ZW5kcyBmdW4gc3Rv' + - 'cmVDb2lucyhzZWxmOiBCdWlsZGVyLCB2YWx1ZTogSW50KTogQnVpbGRlciB7IFNUVkFSVUlOVDE2IH0KCmFzbSBleHRlbmRzIGZ1biBzdG9yZVZhckludDE2KHNlbGY6' + - 'IEJ1aWxkZXIsIHZhbHVlOiBJbnQpOiBCdWlsZGVyIHsgU1RWQVJJTlQxNiB9Cgphc20gZXh0ZW5kcyBmdW4gc3RvcmVWYXJJbnQzMihzZWxmOiBCdWlsZGVyLCB2YWx1' + - 'ZTogSW50KTogQnVpbGRlciB7IFNUVkFSSU5UMzIgfQoKYXNtIGV4dGVuZHMgZnVuIHN0b3JlVmFyVWludDE2KHNlbGY6IEJ1aWxkZXIsIHZhbHVlOiBJbnQpOiBCdWls' + - 'ZGVyIHsgU1RWQVJVSU5UMTYgfQoKYXNtIGV4dGVuZHMgZnVuIHN0b3JlVmFyVWludDMyKHNlbGY6IEJ1aWxkZXIsIHZhbHVlOiBJbnQpOiBCdWlsZGVyIHsgU1RWQVJV' + - 'SU5UMzIgfQoKYXNtKGNlbGwgc2VsZikgZXh0ZW5kcyBmdW4gc3RvcmVSZWYoc2VsZjogQnVpbGRlciwgY2VsbDogQ2VsbCk6IEJ1aWxkZXIgeyBTVFJFRiB9Cgphc20g' + - 'ZXh0ZW5kcyBmdW4gc3RvcmVTbGljZShzZWxmOiBCdWlsZGVyLCBjZWxsOiBTbGljZSk6IEJ1aWxkZXIgeyBTVFNMSUNFUiB9CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9u' + - 'IGZvciB0aGUgYEJ1aWxkZXJgLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjUuMC4KLy8vCi8vLyBBcHBlbmRzIGFsbCBkYXRhIGZyb20gYSBgQnVpbGRlcmAgYGNlbGxg' + - 'IHRvIHRoZSBjb3B5IG9mIHRoZSBgQnVpbGRlcmAuIFJldHVybnMgdGhhdCBjb3B5LgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxl' + - 'dCBiOiBCdWlsZGVyID0gYmVnaW5DZWxsKCkuc3RvcmVDb2lucyg0Mik7Ci8vLyAgICAgbGV0IGZpeno6IEJ1aWxkZXIgPSBiZWdpbkNlbGwoKS5zdG9yZUJ1aWxkZXIo' + - 'Yik7Ci8vLyAgICAgYi5lbmRDZWxsKCkgPT0gZml6ei5lbmRDZWxsKCk7IC8vIHRydWUKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3Qt' + - 'bGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjYnVpbGRlcnN0b3JlYnVpbGRlcgovLy8KYXNtIGV4dGVuZHMgZnVuIHN0b3JlQnVpbGRlcihzZWxmOiBCdWlsZGVyLCBjZWxs' + - 'OiBCdWlsZGVyKTogQnVpbGRlciB7IFNUQlIgfQoKQG5hbWUoX190YWN0X3N0b3JlX2FkZHJlc3MpCmV4dGVuZHMgbmF0aXZlIHN0b3JlQWRkcmVzcyhzZWxmOiBCdWls' + - 'ZGVyLCBhZGRyZXNzOiBBZGRyZXNzKTogQnVpbGRlcjsKCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgQnVpbGRlcmAuIEF2YWlsYWJsZSBzaW5jZSBUYWN0' + - 'IDEuNS4wLgovLy8KLy8vIElmIHRoZSBgY2VsbGAgaXMgbm90IGBudWxsYCwgc3RvcmVzIDEgYXMgYSBzaW5nbGUgYml0IGFuZCB0aGVuIHJlZmVyZW5jZSBgY2VsbGAg' + - 'aW50byB0aGUgY29weSBvZiB0aGUgYEJ1aWxkZXJgLiBSZXR1cm5zIHRoYXQgY29weS4KLy8vCi8vLyBJZiB0aGUgYGNlbGxgIGlzIGBudWxsYCwgb25seSBzdG9yZXMg' + - 'MCBhcyBhIHNpbmdsZSBiaXQgaW50byB0aGUgY29weSBvZiB0aGUgYEJ1aWxkZXJgLiBSZXR1cm5zIHRoYXQgY29weS4KLy8vCi8vLyBBcyBhIHNpbmdsZSBgQ2VsbGAg' + - 'Y2FuIHN0b3JlIHVwIHRvIDQgcmVmZXJlbmNlcywgYXR0ZW1wdHMgdG8gc3RvcmUgbW9yZSB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgODogYENlbGwg' + - 'b3ZlcmZsb3dgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBiOiBCdWlsZGVyID0gYmVnaW5DZWxsKCk7Ci8vLyAgICAgbGV0' + - 'IGZpeno6IEJ1aWxkZXIgPSBiCi8vLyAgICAgICAgIC5zdG9yZU1heWJlUmVmKGVtcHR5Q2VsbCgpKSAvLyAxLCB0aGVuIGVtcHR5IGNlbGwKLy8vICAgICAgICAgLnN0' + - 'b3JlTWF5YmVSZWYobnVsbCk7ICAgICAgIC8vIDAKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2Vs' + - 'bHMjYnVpbGRlcnN0b3JlbWF5YmVyZWYKLy8vCmFzbShjZWxsIHNlbGYpIGV4dGVuZHMgZnVuIHN0b3JlTWF5YmVSZWYoc2VsZjogQnVpbGRlciwgY2VsbDogQ2VsbD8p' + - 'OiBCdWlsZGVyIHsgU1RPUFRSRUYgfQoKYXNtIGV4dGVuZHMgZnVuIGVuZENlbGwoc2VsZjogQnVpbGRlcik6IENlbGwgeyBFTkRDIH0KCmFzbSBleHRlbmRzIGZ1biBy' + - 'ZWZzKHNlbGY6IEJ1aWxkZXIpOiBJbnQgeyBCUkVGUyB9Cgphc20gZXh0ZW5kcyBmdW4gYml0cyhzZWxmOiBCdWlsZGVyKTogSW50IHsgQkJJVFMgfQoKLy8KLy8gU2xp' + - 'Y2UKLy8KCmFzbSBleHRlbmRzIGZ1biBiZWdpblBhcnNlKHNlbGY6IENlbGwpOiBTbGljZSB7IENUT1MgfQoKYXNtKC0+IDEgMCkgZXh0ZW5kcyBtdXRhdGVzIGZ1biBs' + - 'b2FkUmVmKHNlbGY6IFNsaWNlKTogQ2VsbCB7IExEUkVGIH0KCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgU2xpY2VgLiBBdmFpbGFibGUgc2luY2UgVGFj' + - 'dCAxLjUuMC4KLy8vCi8vLyBQcmVsb2FkcyB0aGUgbmV4dCByZWZlcmVuY2UgZnJvbSB0aGUgYFNsaWNlYCBhcyBhIGBDZWxsYC4gRG9lc24ndCBtb2RpZnkgdGhlIG9y' + - 'aWdpbmFsIGBTbGljZWAuCi8vLwovLy8gQXR0ZW1wdHMgdG8gcHJlbG9hZCBzdWNoIHJlZmVyZW5jZSBgQ2VsbGAgd2hlbiBgU2xpY2VgIGRvZXNuJ3QgY29udGFpbiBp' + - 'dCB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgODogYENlbGwgb3ZlcmZsb3dgLgovLy8KLy8vIEF0dGVtcHRzIHRvIHByZWxvYWQgbW9yZSBkYXRhIHRo' + - 'YW4gYFNsaWNlYCBjb250YWlucyB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgOTogYENlbGwgdW5kZXJmbG93YC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBm' + - 'dW4gZXhhbXBsZXMoKSB7Ci8vLyAgICAgbGV0IHMxOiBTbGljZSA9IGJlZ2luQ2VsbCgpLnN0b3JlUmVmKGVtcHR5Q2VsbCgpKS5hc1NsaWNlKCk7Ci8vLyAgICAgbGV0' + - 'IGZpeno6IENlbGwgPSBzMS5wcmVsb2FkUmVmKCk7IC8vIGRpZG4ndCBtb2RpZnkgczEKLy8vCi8vLyAgICAgbGV0IHMyOiBTbGljZSA9IGJlZ2luQ2VsbCgpCi8vLyAg' + - 'ICAgICAgIC5zdG9yZVJlZihlbXB0eUNlbGwoKSkKLy8vICAgICAgICAgLnN0b3JlUmVmKHMxLmFzQ2VsbCgpKQovLy8gICAgICAgICAuYXNTbGljZSgpOwovLy8gICAg' + - 'IGxldCByZWYxOiBDZWxsID0gczIucHJlbG9hZFJlZigpOwovLy8gICAgIGxldCByZWYyOiBDZWxsID0gczIucHJlbG9hZFJlZigpOwovLy8gICAgIHJlZjEgPT0gcmVm' + - 'MjsgLy8gdHJ1ZQovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZXByZWxv' + - 'YWRyZWYKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9leGl0LWNvZGVzCi8vLwphc20gZXh0ZW5kcyBmdW4gcHJlbG9hZFJlZihzZWxmOiBTbGlj' + - 'ZSk6IENlbGwgeyBQTERSRUYgfQoKLy8gc3BlY2lhbCB0cmVhdG1lbnQgaW4gRnVuYyBjb21waWxlciwgc28gbm90IHJlcGxhY2VkIHdpdGggYXNtICJMRFNMSUNFWCIK' + - 'QG5hbWUobG9hZF9iaXRzKQpleHRlbmRzIG11dGF0ZXMgbmF0aXZlIGxvYWRCaXRzKHNlbGY6IFNsaWNlLCBsOiBJbnQpOiBTbGljZTsKCi8vIHNwZWNpYWwgdHJlYXRt' + - 'ZW50IGluIEZ1bmMgY29tcGlsZXIsIHNvIG5vdCByZXBsYWNlZCB3aXRoIGFzbSAiUExEU0xJQ0VYIgpAbmFtZShwcmVsb2FkX2JpdHMpCmV4dGVuZHMgbmF0aXZlIHBy' + - 'ZWxvYWRCaXRzKHNlbGY6IFNsaWNlLCBsOiBJbnQpOiBTbGljZTsKCi8vIHNwZWNpYWwgdHJlYXRtZW50IGluIEZ1bmMgY29tcGlsZXIsIHNvIG5vdCByZXBsYWNlZCB3' + - 'aXRoIGFzbSAiTERJWCIKQG5hbWUobG9hZF9pbnQpCmV4dGVuZHMgbXV0YXRlcyBuYXRpdmUgbG9hZEludChzZWxmOiBTbGljZSwgbDogSW50KTogSW50OwoKLy8gc3Bl' + - 'Y2lhbCB0cmVhdG1lbnQgaW4gRnVuYyBjb21waWxlciwgc28gbm90IHJlcGxhY2VkIHdpdGggYXNtICJQTERJWCIKQG5hbWUocHJlbG9hZF9pbnQpCmV4dGVuZHMgbmF0' + - 'aXZlIHByZWxvYWRJbnQoc2VsZjogU2xpY2UsIGw6IEludCk6IEludDsKCi8vIHNwZWNpYWwgdHJlYXRtZW50IGluIEZ1bmMgY29tcGlsZXIsIHNvIG5vdCByZXBsYWNl' + - 'ZCB3aXRoIGFzbSAiTERVWCIKQG5hbWUobG9hZF91aW50KQpleHRlbmRzIG11dGF0ZXMgbmF0aXZlIGxvYWRVaW50KHNlbGY6IFNsaWNlLCBsOiBJbnQpOiBJbnQ7Cgov' + - 'LyBzcGVjaWFsIHRyZWF0bWVudCBpbiBGdW5jIGNvbXBpbGVyLCBzbyBub3QgcmVwbGFjZWQgd2l0aCBhc20gIlBMRFVYIgpAbmFtZShwcmVsb2FkX3VpbnQpCmV4dGVu' + - 'ZHMgbmF0aXZlIHByZWxvYWRVaW50KHNlbGY6IFNsaWNlLCBsOiBJbnQpOiBJbnQ7Cgphc20oLT4gMSAwKSBleHRlbmRzIG11dGF0ZXMgZnVuIGxvYWRCb29sKHNlbGY6' + - 'IFNsaWNlKTogQm9vbCB7IDEgTERJIH0KCi8vLyBFeHRlbnNpb24gbXV0YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBgU2xpY2VgLiBBbGlhcyB0byBgU2xpY2UubG9hZEJv' + - 'b2woKWAuIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNS4wLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBzOiBTbGljZSA9IGJl' + - 'Z2luQ2VsbCgpLnN0b3JlQm9vbCh0cnVlKS5hc1NsaWNlKCk7Ci8vLyAgICAgbGV0IGZpeno6IEJvb2wgPSBzLmxvYWRCaXQoKTsgLy8gdHJ1ZQovLy8gfQovLy8gYGBg' + - 'Ci8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZWxvYWRiaXQKLy8vCmFzbSgtPiAxIDApIGV4dGVuZHMgbXV0' + - 'YXRlcyBmdW4gbG9hZEJpdChzZWxmOiBTbGljZSk6IEJvb2wgeyAxIExESSB9Cgphc20oIC0+IDEgMCkgZXh0ZW5kcyBtdXRhdGVzIGZ1biBsb2FkQ29pbnMoc2VsZjog' + - 'U2xpY2UpOiBJbnQgeyBMRFZBUlVJTlQxNiB9CgpAbmFtZShfX3RhY3RfbG9hZF9hZGRyZXNzKQpleHRlbmRzIG11dGF0ZXMgbmF0aXZlIGxvYWRBZGRyZXNzKHNlbGY6' + - 'IFNsaWNlKTogQWRkcmVzczsKCmFzbSBleHRlbmRzIG11dGF0ZXMgZnVuIHNraXBCaXRzKHNlbGY6IFNsaWNlLCBsOiBJbnQpIHsgU0RTS0lQRklSU1QgfQoKYXNtIGV4' + - 'dGVuZHMgZnVuIGVuZFBhcnNlKHNlbGY6IFNsaWNlKSB7IEVORFMgfQoKLy8KLy8gU2xpY2Ugc2l6ZQovLwoKYXNtIGV4dGVuZHMgZnVuIHJlZnMoc2VsZjogU2xpY2Up' + - 'OiBJbnQgeyBTUkVGUyB9Cgphc20gZXh0ZW5kcyBmdW4gYml0cyhzZWxmOiBTbGljZSk6IEludCB7IFNCSVRTIH0KCmFzbSBleHRlbmRzIGZ1biBlbXB0eShzZWxmOiBT' + - 'bGljZSk6IEJvb2wgeyBTRU1QVFkgfQoKYXNtIGV4dGVuZHMgZnVuIGRhdGFFbXB0eShzZWxmOiBTbGljZSk6IEJvb2wgeyBTREVNUFRZIH0KCmFzbSBleHRlbmRzIGZ1' + - 'biByZWZzRW1wdHkoc2VsZjogU2xpY2UpOiBCb29sIHsgU1JFTVBUWSB9CgovLwovLyBDb252ZXJzaW9ucwovLwoKaW5saW5lIGV4dGVuZHMgZnVuIGFzU2xpY2Uoc2Vs' + - 'ZjogQnVpbGRlcik6IFNsaWNlIHsKICAgIHJldHVybiBzZWxmLmVuZENlbGwoKS5iZWdpblBhcnNlKCk7Cn0KCmlubGluZSBleHRlbmRzIGZ1biBhc1NsaWNlKHNlbGY6' + - 'IENlbGwpOiBTbGljZSB7CiAgICByZXR1cm4gc2VsZi5iZWdpblBhcnNlKCk7Cn0KCmlubGluZSBleHRlbmRzIGZ1biBhc0NlbGwoc2VsZjogU2xpY2UpOiBDZWxsIHsK' + - 'ICAgIHJldHVybiBiZWdpbkNlbGwoKQogICAgICAgIC5zdG9yZVNsaWNlKHNlbGYpCiAgICAgICAgLmVuZENlbGwoKTsKfQoKaW5saW5lIGV4dGVuZHMgZnVuIGFzQ2Vs' + - 'bChzZWxmOiBCdWlsZGVyKTogQ2VsbCB7CiAgICByZXR1cm4gc2VsZi5lbmRDZWxsKCk7Cn0KCmlubGluZSBmdW4gZW1wdHlDZWxsKCk6IENlbGwgewogICAgcmV0dXJu' + - 'IGJlZ2luQ2VsbCgpLmVuZENlbGwoKTsKfQoKaW5saW5lIGZ1biBlbXB0eVNsaWNlKCk6IFNsaWNlIHsKICAgIHJldHVybiBlbXB0eUNlbGwoKS5hc1NsaWNlKCk7Cn0K'; -files['std/config.tact'] = - 'YXNtIGZ1biBnZXRDb25maWdQYXJhbShpZDogSW50KTogQ2VsbD8geyBDT05GSUdPUFRQQVJBTSB9Cg=='; -files['std/context.tact'] = - 'c3RydWN0IENvbnRleHQgewogICAgYm91bmNlZDogQm9vbDsKICAgIHNlbmRlcjogQWRkcmVzczsKICAgIHZhbHVlOiBJbnQ7CiAgICByYXc6IFNsaWNlOwp9CgpAbmFt' + - 'ZShfX3RhY3RfY29udGV4dF9nZXQpCm5hdGl2ZSBjb250ZXh0KCk6IENvbnRleHQ7CgpAbmFtZShfX3RhY3RfY29udGV4dF9nZXRfc2VuZGVyKQpuYXRpdmUgc2VuZGVy' + - 'KCk6IEFkZHJlc3M7CgpleHRlbmRzIGZ1biByZWFkRm9yd2FyZEZlZShzZWxmOiBDb250ZXh0KTogSW50IHsKICAgIGxldCBzYzogU2xpY2UgPSBzZWxmLnJhdzsKICAg' + - 'IHNjLmxvYWRBZGRyZXNzKCk7IC8vIFNraXAgZGVzdGluYXRpb24KICAgIHNjLmxvYWRDb2lucygpOyAvLyBTa2lwIHZhbHVlCiAgICBzYy5za2lwQml0cygxKTsgLy8g' + - 'U2tpcCBleHRyYSBjdXJyZW5jeSBjb2xsZWN0aW9uCiAgICBzYy5sb2FkQ29pbnMoKTsgLy8gU2tpcCBpaHJfZmVlCiAgICByZXR1cm4gKHNjLmxvYWRDb2lucygpICog' + - 'MykgLyAyOwp9'; -files['std/contract.tact'] = - 'c3RydWN0IFN0YXRlSW5pdCB7CiAgICBjb2RlOiBDZWxsOwogICAgZGF0YTogQ2VsbDsKfQoKQG5hbWUoX190YWN0X2NvbXB1dGVfY29udHJhY3RfYWRkcmVzcykKbmF0' + - 'aXZlIGNvbnRyYWN0QWRkcmVzc0V4dChjaGFpbjogSW50LCBjb2RlOiBDZWxsLCBkYXRhOiBDZWxsKTogQWRkcmVzczsKCmlubGluZSBmdW4gY29udHJhY3RBZGRyZXNz' + - 'KHM6IFN0YXRlSW5pdCk6IEFkZHJlc3MgewogICAgcmV0dXJuIGNvbnRyYWN0QWRkcmVzc0V4dCgwLCBzLmNvZGUsIHMuZGF0YSk7Cn0KCkBuYW1lKF9fdGFjdF9hZGRy' + - 'ZXNzX3RvX3NsaWNlKQpleHRlbmRzIG5hdGl2ZSBhc1NsaWNlKHNlbGY6IEFkZHJlc3MpOiBTbGljZTsKCkBuYW1lKF9fdGFjdF9jcmVhdGVfYWRkcmVzcykKbmF0aXZl' + - 'IG5ld0FkZHJlc3MoY2hhaW46IEludCwgaGFzaDogSW50KTogQWRkcmVzczsKCmFzbSBmdW4gbXlBZGRyZXNzKCk6IEFkZHJlc3MgeyBNWUFERFIgfQoKYXNtIGZ1biBt' + - 'eUJhbGFuY2UoKTogSW50IHsgQkFMQU5DRSBGSVJTVCB9CgovLy8gR2xvYmFsIGZ1bmN0aW9uLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjUuMC4KLy8vCi8vLyBSZXR1' + - 'cm5zIHRoZSBuYW5vVG9uY29pbiBgSW50YCBhbW91bnQgb2YgZ2FzIGNvbnN1bWVkIGJ5IFRWTSBpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBzbyBmYXIuIFRoZSBy' + - 'ZXN1bHRpbmcgdmFsdWUgaW5jbHVkZXMgdGhlIGNvc3Qgb2YgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewov' + - 'Ly8gICAgIGxldCBnYXM6IEludCA9IGdhc0NvbnN1bWVkKCk7Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9j' + - 'b3JlLWFkdmFuY2VkI2dhc2NvbnN1bWVkCi8vLwphc20gZnVuIGdhc0NvbnN1bWVkKCk6IEludCB7IEdBU0NPTlNVTUVEIH0KCi8vLyBHbG9iYWwgZnVuY3Rpb24uIEF2' + - 'YWlsYWJsZSBzaW5jZSBUYWN0IDEuNS4wLgovLy8KLy8vIFJldHVybnMgdGhlIG5hbm9Ub25jb2luIGBJbnRgIGFtb3VudCBvZiB0aGUgYWNjdW11bGF0ZWQgc3RvcmFn' + - 'ZSBmZWUgZGVidC4gU3RvcmFnZSBmZWVzIGFyZSBkZWR1Y3RlZCBmcm9tIHRoZSBpbmNvbWluZyBtZXNzYWdlIHZhbHVlIGJlZm9yZSB0aGUgbmV3IGNvbnRyYWN0IGJh' + - 'bGFuY2UgaXMgY2FsY3VsYXRlZC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgZGVidDogSW50ID0gbXlTdG9yYWdlRHVlKCk7' + - 'Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWFkdmFuY2VkI215c3RvcmFnZWR1ZQovLy8KYXNtIGZ1' + - 'biBteVN0b3JhZ2VEdWUoKTogSW50IHsgRFVFUEFZTUVOVCB9CgovLy8gR2xvYmFsIGZ1bmN0aW9uLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjUuMC4KLy8vCi8vLyBD' + - 'YWxjdWxhdGVzIGFuZCByZXR1cm5zIHRoZSBzdG9yYWdlIGZlZSBpbiBuYW5vVG9uY29pbnMgYEludGAgZm9yIHN0b3JpbmcgYSBjb250cmFjdCB3aXRoIGEgZ2l2ZW4g' + - 'bnVtYmVyIG9mIGBjZWxsc2AgYW5kIGBiaXRzYCBmb3IgYSBudW1iZXIgb2YgYHNlY29uZHNgLiBVc2VzIHRoZSBwcmljZXMgb2YgdGhlIG1hc3RlcmNoYWluIGlmIGBp' + - 'c01hc3RlcmNoYWluYCBpcyBgdHJ1ZWAsIG90aGVyd2lzZSB0aGUgcHJpY2VzIG9mIHRoZSBiYXNlY2hhaW4uIFRoZSBjdXJyZW50IHByaWNlcyBhcmUgb2J0YWluZWQg' + - 'ZnJvbSB0aGUgY29uZmlnIHBhcmFtIDE4IG9mIFRPTiBCbG9ja2NoYWluLgovLy8KLy8vIE5vdGUsIHRoYXQgdGhlIHZhbHVlcyBvZiBgY2VsbHNgIGFuZCBgYml0c2Ag' + - 'YXJlIHRha2VuIG1vZHVsbyB0aGVpciBtYXhpbXVtIHZhbHVlcyBwbHVzIDEuIFRoYXQgaXMsIHNwZWNpZnlpbmcgdmFsdWVzIGhpZ2hlciB0aGFuIHRob3NlIGxpc3Rl' + - 'ZCBpbiBhY2NvdW50IHN0YXRlIGxpbWl0cyAoYG1heF9hY2Nfc3RhdGVfY2VsbHNgIGFuZCBgbWF4X2FjY19zdGF0ZV9iaXRzYCkgd2lsbCBoYXZlIHRoZSBzYW1lIHJl' + - 'c3VsdCBhcyB3aXRoIHNwZWNpZnlpbmcgdGhlIGV4YWN0IGxpbWl0cy4gSW4gYWRkaXRpb24sIG1ha2Ugc3VyZSB5b3UgdGFrZSBpbnRvIGFjY291bnQgdGhlIGRlZHVw' + - 'bGljYXRpb24gb2YgY2VsbHMgd2l0aCB0aGUgc2FtZSBoYXNoLgovLy8KLy8vIEF0dGVtcHRzIHRvIHNwZWNpZnkgbmVnYXRpdmUgbnVtYmVyIG9mIGBjZWxsc2AsIGBi' + - 'aXRzYCBvciBgc2Vjb25kc2AgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggZXhpdCBjb2RlIDU6IGBJbnRlZ2VyIG91dCBvZiBleHBlY3RlZCByYW5nZWAuCi8vLwovLy8g' + - 'YGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGZlZTogSW50ID0gZ2V0U3RvcmFnZUZlZSgxXzAwMCwgMV8wMDAsIDFfMDAwLCBmYWxzZSk7Ci8v' + - 'LyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWFkdmFuY2VkI2dldHN0b3JhZ2VmZWUKLy8vICog' + - 'aHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtYWR2YW5jZWQjZ2V0c2ltcGxlc3RvcmFnZWZlZQovLy8KYXNtIGZ1biBnZXRTdG9yYWdlRmVlKGNlbGxz' + - 'OiBJbnQsIGJpdHM6IEludCwgc2Vjb25kczogSW50LCBpc01hc3RlcmNoYWluOiBCb29sKTogSW50IHsgR0VUU1RPUkFHRUZFRSB9CgovLy8gR2xvYmFsIGZ1bmN0aW9u' + - 'LiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjUuMC4KLy8vCi8vLyBDYWxjdWxhdGVzIGFuZCByZXR1cm5zIHRoZSBjb21wdXRlIGZlZSBpbiBuYW5vVG9uY29pbnMgYElu' + - 'dGAgZm9yIGEgdHJhbnNhY3Rpb24gdGhhdCBjb25zdW1lZCBgZ2FzVXNlZGAgYW1vdW50IG9mIGdhcy4gVXNlcyB0aGUgcHJpY2VzIG9mIHRoZSBtYXN0ZXJjaGFpbiBp' + - 'ZiBgaXNNYXN0ZXJjaGFpbmAgaXMgYHRydWVgLCBvdGhlcndpc2UgdGhlIHByaWNlcyBvZiB0aGUgYmFzZWNoYWluLiBUaGUgY3VycmVudCBwcmljZXMgYXJlIG9idGFp' + - 'bmVkIGZyb20gdGhlIGNvbmZpZyBwYXJhbSAyMCBmb3IgdGhlIG1hc3RlcmNoYWluIGFuZCBjb25maWcgcGFyYW0gMjEgZm9yIHRoZSBiYXNlY2hhaW4gb2YgVE9OIEJs' + - 'b2NrY2hhaW4uCi8vLwovLy8gV2hlbiB0aGUgYGdhc1VzZWRgIGlzIGxlc3MgdGhhbiBhIGNlcnRhaW4gdGhyZXNob2xkIGNhbGxlZCBgZmxhdF9nYXNfbGltaXRgLCB0' + - 'aGVyZSdzIGEgbWluaW11bSBwcmljZSB0byBwYXkgYmFzZWQgb24gdGhlIHZhbHVlIG9mIGBmbGF0X2dhc19wcmljZWAuIFRoZSBsZXNzIGdhcyBpcyB1c2VkIGJlbG93' + - 'IHRoaXMgdGhyZXNob2xkLCB0aGUgaGlnaGVyIHRoZSBtaW5pbXVtIHByaWNlIHdpbGwgYmUuIFNlZSB0aGUgZXhhbXBsZSBmb3IgYGdldFNpbXBsZUNvbXB1dGVGZWUo' + - 'KWAgdG8gZGVyaXZlIHRoYXQgdGhyZXNob2xkLgovLy8KLy8vIEF0dGVtcHRzIHRvIHNwZWNpZnkgbmVnYXRpdmUgdmFsdWUgb2YgYGdhc1VzZWRgIHRocm93IGFuIGV4' + - 'Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA1OiBgSW50ZWdlciBvdXQgb2YgZXhwZWN0ZWQgcmFuZ2VgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewov' + - 'Ly8gICAgIGxldCBmZWU6IEludCA9IGdldENvbXB1dGVGZWUoMV8wMDAsIGZhbHNlKTsKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3Qt' + - 'bGFuZy5vcmcvcmVmL2NvcmUtYWR2YW5jZWQjZ2V0Y29tcHV0ZWZlZQovLy8KYXNtIGZ1biBnZXRDb21wdXRlRmVlKGdhc1VzZWQ6IEludCwgaXNNYXN0ZXJjaGFpbjog' + - 'Qm9vbCk6IEludCB7IEdFVEdBU0ZFRSB9CgovLy8gR2xvYmFsIGZ1bmN0aW9uLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjUuMC4KLy8vCi8vLyBTaW1pbGFyIHRvIGBn' + - 'ZXRDb21wdXRlRmVlKClgLCBidXQgd2l0aG91dCB0aGUgYGZsYXRfZ2FzX3ByaWNlYCwgaS5lLiB3aXRob3V0IGEgbWluaW11bSBwcmljZSB0byBwYXkgaWYgdGhlIGBn' + - 'YXNVc2VkYCBpcyBsZXNzIHRoYW4gYSBjZXJ0YWluIHRocmVzaG9sZCBjYWxsZWQgYGZsYXRfZ2FzX2xpbWl0YC4gQ2FsY3VsYXRlcyBhbmQgcmV0dXJucyBvbmx5IHRo' + - 'ZSBgZ2FzVXNlZGAgdGltZXMgdGhlIGN1cnJlbnQgZ2FzIHByaWNlLgovLy8KLy8vIEF0dGVtcHRzIHRvIHNwZWNpZnkgbmVnYXRpdmUgbnVtYmVyIG9mIGBjZWxsc2As' + - 'IGBiaXRzYCBvciBgc2Vjb25kc2AgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggZXhpdCBjb2RlIDU6IGBJbnRlZ2VyIG91dCBvZiBleHBlY3RlZCByYW5nZWAuCi8vLwov' + - 'Ly8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGZlZSA9IGdldENvbXB1dGVGZWUoMCwgZmFsc2UpOwovLy8gICAgIGxldCBmZWVOb0ZsYXQg' + - 'PSBnZXRTaW1wbGVDb21wdXRlRmVlKDAsIGZhbHNlKTsKLy8vICAgICBsZXQgbWF4RmxhdFByaWNlID0gZmVlIC0gZmVlTm9GbGF0OwovLy8gfQovLy8gYGBgCi8vLwov' + - 'Ly8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1hZHZhbmNlZCNnZXRzaW1wbGVzdG9yYWdlZmVlCi8vLyAqIGh0dHBzOi8vZG9j' + - 'cy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWFkdmFuY2VkI2dldHN0b3JhZ2VmZWUKLy8vCmFzbSBmdW4gZ2V0U2ltcGxlQ29tcHV0ZUZlZShnYXNVc2VkOiBJbnQsIGlz' + - 'TWFzdGVyY2hhaW46IEJvb2wpOiBJbnQgeyBHRVRHQVNGRUVTSU1QTEUgfQoKLy8vIEdsb2JhbCBmdW5jdGlvbi4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS41LjAuCi8v' + - 'LwovLy8gQ2FsY3VsYXRlcyBhbmQgcmV0dXJucyB0aGUgZm9yd2FyZCBmZWUgaW4gbmFub1RvbmNvaW5zIGBJbnRgIGZvciBhbiBvdXRnb2luZyBtZXNzYWdlIGNvbnNp' + - 'c3Rpbmcgb2YgYSBnaXZlbiBudW1iZXIgb2YgYGNlbGxzYCBhbmQgYGJpdHNgLiBVc2VzIHRoZSBwcmljZXMgb2YgdGhlIG1hc3RlcmNoYWluIGlmIGBpc01hc3RlcmNo' + - 'YWluYCBpcyBgdHJ1ZXs6dGFjdH1gLCBvdGhlcndpc2UgdGhlIHByaWNlcyBvZiB0aGUgYmFzZWNoYWluLiBUaGUgY3VycmVudCBwcmljZXMgYXJlIG9idGFpbmVkIGZy' + - 'b20gdGhlIGNvbmZpZyBwYXJhbSAyNCBmb3IgdGhlIG1hc3RlcmNoYWluIGFuZCBjb25maWcgcGFyYW0gMjUgZm9yIHRoZSBiYXNlY2hhaW4gb2YgVE9OIEJsb2NrY2hh' + - 'aW4uCi8vLwovLy8gSWYgYm90aCB0aGUgc291cmNlIGFuZCB0aGUgZGVzdGluYXRpb24gYWRkcmVzc2VzIGFyZSBpbiB0aGUgYmFzZWNoYWluLCB0aGVuIHNwZWNpZnkg' + - 'YGlzTWFzdGVyY2hhaW5gIGFzIGBmYWxzZWAuIE90aGVyd2lzZSwgc3BlY2lmeSBgdHJ1ZWAuCi8vLwovLy8gTm90ZSwgdGhhdCB0aGUgdmFsdWVzIG9mIGBjZWxsc2Ag' + - 'YW5kIGBiaXRzYCBhcmUgdGFrZW4gbW9kdWxvIHRoZWlyIG1heGltdW0gdmFsdWVzIHBsdXMgMS4gVGhhdCBpcywgc3BlY2lmeWluZyB2YWx1ZXMgaGlnaGVyIHRoYW4g' + - 'dGhvc2UgbGlzdGVkIGluIGFjY291bnQgc3RhdGUgbGltaXRzIChgbWF4X21zZ19jZWxsc2AgYW5kIGBtYXhfbXNnX2JpdHNgKSB3aWxsIGhhdmUgdGhlIHNhbWUgcmVz' + - 'dWx0IGFzIHdpdGggc3BlY2lmeWluZyB0aGUgZXhhY3QgbGltaXRzLgovLy8KLy8vIEhvd2V2ZXIsIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlcyBvZiBgY2VsbHNgIGFu' + - 'ZCBgYml0c2AsIHRoaXMgZnVuY3Rpb24gYWx3YXlzIGFkZHMgdGhlIG1pbmltdW0gcHJpY2UgYmFzZWQgb24gdGhlIHZhbHVlIG9mIGBsdW1wX3ByaWNlYC4gU2VlIHRo' + - 'ZSBleGFtcGxlIGZvciBbYGdldFNpbXBsZUZvcndhcmRGZWUoKXs6dGFjdH1gXSgjZ2V0c2ltcGxlZm9yd2FyZGZlZSkgdG8gZGVyaXZlIGl0LiBJbiBhZGRpdGlvbiwg' + - 'bWFrZSBzdXJlIHlvdSB0YWtlIGludG8gYWNjb3VudCB0aGUgZGVkdXBsaWNhdGlvbiBvZiBjZWxscyB3aXRoIHRoZSBzYW1lIGhhc2gsIHNpbmNlIGZvciBleGFtcGxl' + - 'IHRoZSByb290IGNlbGwgYW5kIGl0cyBkYXRhIGJpdHMgZG9uJ3QgY291bnQgdG93YXJkcyB0aGUgZm9yd2FyZCBmZWUgYW5kIGFyZSBjb3ZlcmVkIGJ5IHRoZSBgbHVt' + - 'cF9wcmljZWAuCi8vLwovLy8gQXR0ZW1wdHMgdG8gc3BlY2lmeSBuZWdhdGl2ZSBudW1iZXIgb2YgYGNlbGxzYCBvciBgYml0c2AgdGhyb3cgYW4gZXhjZXB0aW9uIHdp' + - 'dGggZXhpdCBjb2RlIDU6IGBJbnRlZ2VyIG91dCBvZiBleHBlY3RlZCByYW5nZWAuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0' + - 'IGZlZTogSW50ID0gZ2V0Rm9yd2FyZEZlZSgxXzAwMCwgMV8wMDAsIGZhbHNlKTsKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRh' + - 'Y3QtbGFuZy5vcmcvcmVmL2NvcmUtYWR2YW5jZWQjZ2V0Zm9yd2FyZGZlZQovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1hZHZhbmNlZCNn' + - 'ZXRzaW1wbGVmb3J3YXJkZmVlCi8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWFkdmFuY2VkI2dldG9yaWdpbmFsZndkZmVlCi8vLwphc20g' + - 'ZnVuIGdldEZvcndhcmRGZWUoY2VsbHM6IEludCwgYml0czogSW50LCBpc01hc3RlcmNoYWluOiBCb29sKTogSW50IHsgR0VURk9SV0FSREZFRSB9CgovLy8gR2xvYmFs' + - 'IGZ1bmN0aW9uLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjUuMC4KLy8vCi8vLyBTaW1pbGFyIHRvIGBnZXRGb3J3YXJkRmVlKClgLCBidXQgd2l0aG91dCB0aGUgYGx1' + - 'bXBfcHJpY2VgLCBpLmUuIHdpdGhvdXQgdGhlIG1pbmltdW0gcHJpY2UgdG8gcGF5IHJlZ2FyZGxlc3Mgb2YgdGhlIGFtb3VudCBvZiBgY2VsbHNgIG9yIGBiaXRzYC4g' + - 'Q2FsY3VsYXRlcyBhbmQgcmV0dXJucyBvbmx5IHRoZSBgY2VsbHNgIHRpbWVzIHRoZSBjdXJyZW50IGNlbGwgcHJpY2UgcGx1cyBgYml0c2AgdGltZXMgdGhlIGN1cnJl' + - 'bnQgYml0IHByaWNlLgovLy8KLy8vIEF0dGVtcHRzIHRvIHNwZWNpZnkgbmVnYXRpdmUgbnVtYmVyIG9mIGBjZWxsc2Agb3IgYGJpdHNgIHRocm93IGFuIGV4Y2VwdGlv' + - 'biB3aXRoIGV4aXQgY29kZSA1OiBgSW50ZWdlciBvdXQgb2YgZXhwZWN0ZWQgcmFuZ2VgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAg' + - 'IGxldCBmZWUgPSBnZXRGb3J3YXJkRmVlKDFfMDAwLCAxXzAwMCwgZmFsc2UpOwovLy8gICAgIGxldCBmZWVOb0x1bXAgPSBnZXRTaW1wbGVGb3J3YXJkRmVlKDFfMDAw' + - 'LCAxXzAwMCwgZmFsc2UpOwovLy8gICAgIGxldCBsdW1wUHJpY2UgPSBmZWUgLSBmZWVOb0x1bXA7Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6Ci8vLyAqIGh0dHBz' + - 'Oi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWFkdmFuY2VkI2dldHNpbXBsZWZvcndhcmRmZWUKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVm' + - 'L2NvcmUtYWR2YW5jZWQjZ2V0Zm9yd2FyZGZlZQovLy8KYXNtIGZ1biBnZXRTaW1wbGVGb3J3YXJkRmVlKGNlbGxzOiBJbnQsIGJpdHM6IEludCwgaXNNYXN0ZXJjaGFp' + - 'bjogQm9vbCk6IEludCB7IEdFVEZPUldBUkRGRUVTSU1QTEUgfQoKLy8vIEdsb2JhbCBmdW5jdGlvbi4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS41LjAuCi8vLwovLy8g' + - 'Q2FsY3VsYXRlcyBhbmQgcmV0dXJucyB0aGUgc28tY2FsbGVkIF9vcmlnaW5hbF8gZm9yd2FyZCBmZWUgaW4gbmFub1RvbmNvaW5zIGBJbnRgIGZvciBhbiBvdXRnb2lu' + - 'ZyBtZXNzYWdlIGJhc2VkIG9uIHRoZSBgZndkRmVlYCBvYnRhaW5lZCBmcm9tIHRoZSBpbmNvbWluZyBtZXNzYWdlLiBJZiBib3RoIHRoZSBzb3VyY2UgYW5kIHRoZSBk' + - 'ZXN0aW5hdGlvbiBhZGRyZXNzZXMgYXJlIGluIHRoZSBiYXNlY2hhaW4sIHRoZW4gc3BlY2lmeSBgaXNNYXN0ZXJjaGFpbmAgYXMgYGZhbHNlYC4gT3RoZXJ3aXNlLCBz' + - 'cGVjaWZ5IGB0cnVlYC4KLy8vCi8vLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCB3aGVuIHRoZSBvdXRnb2luZyBtZXNzYWdlIGRlcGVuZHMgaGVhdmlseSBvbiB0aGUg' + - 'c3RydWN0dXJlIG9mIHRoZSBpbmNvbWluZyBtZXNzYWdlLCBzbyBtdWNoIHNvIHRoYXQgeW91IGNhbm5vdCBmdWxseSBwcmVkaWN0IHRoZSBmZWUgdXNpbmcgYGdldEZv' + - 'cndhcmRGZWUoKWAgYWxvbmUuIEV2ZW4gaWYgeW91IGNvdWxkLCBjYWxjdWxhdGluZyB0aGUgZXhhY3QgZmVlIHdpdGggbmFub1RvbmNvaW4tbGV2ZWwgcHJlY2lzaW9u' + - 'IGNhbiBiZSB2ZXJ5IGV4cGVuc2l2ZSwgc28gdGhlIGFwcHJveGltYXRlIHZhbHVlIGdpdmVuIGJ5IHRoaXMgZnVuY3Rpb24gaXMgb2Z0ZW4gZ29vZCBlbm91Z2guCi8v' + - 'LwovLy8gQXR0ZW1wdHMgdG8gc3BlY2lmeSBhIG5lZ2F0aXZlIHZhbHVlIG9mIGBmd2RGZWVgIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA1OiBgSW50' + - 'ZWdlciBvdXQgb2YgZXhwZWN0ZWQgcmFuZ2VgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBmd2RGZWU6IEludCA9IGNvbnRl' + - 'eHQoKS5yZWFkRm9yd2FyZEZlZSgpOwovLy8gICAgIGxldCBvcmlnRmVlOiBJbnQgPSBnZXRPcmlnaW5hbEZ3ZEZlZShmZWUsIGZhbHNlKTsKLy8vIH0KLy8vIGBgYAov' + - 'Ly8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtYWR2YW5jZWQjZ2V0b3JpZ2luYWxmd2RmZWUKLy8vICogaHR0cHM6Ly9k' + - 'b2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtYWR2YW5jZWQjZ2V0Zm9yd2FyZGZlZQovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1hZHZh' + - 'bmNlZCNjb250ZXh0cmVhZGZvcndhcmRmZWUKLy8vCmFzbSBmdW4gZ2V0T3JpZ2luYWxGd2RGZWUoZndkRmVlOiBJbnQsIGlzTWFzdGVyY2hhaW46IEJvb2wpOiBJbnQg' + - 'eyBHRVRPUklHSU5BTEZXREZFRSB9CgovLy8gU3RydWN0IHJlcHJlc2VudGluZyB0aGUgc3RhbmRhcmQgYWRkcmVzcyBvbiBUT04gQmxvY2tjaGFpbiB3aXRoIHNpZ25l' + - 'ZCA4LWJpdCBgd29ya2NoYWluYCBJRCBhbmQgYW4gdW5zaWduZWQgMjU2LWJpdCBgYWRkcmVzc2AgaW4gdGhlIHNwZWNpZmllZCBgd29ya2NoYWluYC4gQXZhaWxhYmxl' + - 'IHNpbmNlIFRhY3QgMS41LjAuCi8vLwovLy8gQXQgdGhlIG1vbWVudCwgb25seSBgd29ya2NoYWluYCBJRHMgdXNlZCBvbiBUT04gYXJlIDAgb2YgdGhlIGJhc2VjaGFp' + - 'biBhbmQgLTEgb2YgdGhlIG1hc3RlcmNoYWluLgovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtYWR2YW5jZWQjcGFy' + - 'c2VzdGRhZGRyZXNzCi8vLyAqIGh0dHBzOi8vZ2l0aHViLmNvbS90b24tYmxvY2tjaGFpbi90b24vYmxvYi9tYXN0ZXIvY3J5cHRvL2Jsb2NrL2Jsb2NrLnRsYiNMMTA1' + - 'LUwxMDYKLy8vCnN0cnVjdCBTdGRBZGRyZXNzIHsKICAgIHdvcmtjaGFpbjogSW50IGFzIGludDg7CiAgICBhZGRyZXNzOiBJbnQgYXMgdWludDI1NjsKfQoKLy8vIFN0' + - 'cnVjdCByZXByZXNlbnRpbmcgdGhlIGFkZHJlc3Mgb2YgdmFyaWFibGUgbGVuZ3RoIHdpdGggc2lnbmVkIDMyLWJpdCBgd29ya2NoYWluYCBJRCBhbmQgYSBgU2xpY2Vg' + - 'IGNvbnRhaW5pbmcgdW5zaWduZWQgYGFkZHJlc3NgIGluIHRoZSBzcGVjaWZpZWQgYHdvcmtjaGFpbmAuIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNS4wLgovLy8KLy8v' + - 'IFZhcmlhYmxlLWxlbmd0aCBhZGRyZXNzZXMgYXJlIGludGVuZGVkIGZvciBmdXR1cmUgZXh0ZW5zaW9ucywgYW5kIHdoaWxlIHZhbGlkYXRvcnMgbXVzdCBiZSByZWFk' + - 'eSB0byBhY2NlcHQgdGhlbSBpbiBpbmJvdW5kIG1lc3NhZ2VzLCB0aGUgc3RhbmRhcmQgKG5vbi12YXJpYWJsZSkgYWRkcmVzc2VzIGFyZSB1c2VkIHdoZW5ldmVyIHBv' + - 'c3NpYmxlLgovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtYWR2YW5jZWQjcGFyc2V2YXJhZGRyZXNzCi8vLyAqIGh0' + - 'dHBzOi8vZ2l0aHViLmNvbS90b24tYmxvY2tjaGFpbi90b24vYmxvYi9tYXN0ZXIvY3J5cHRvL2Jsb2NrL2Jsb2NrLnRsYiNMMTA3LUwxMDgKLy8vCnN0cnVjdCBWYXJB' + - 'ZGRyZXNzIHsKICAgIHdvcmtjaGFpbjogSW50IGFzIGludDMyOwogICAgYWRkcmVzczogU2xpY2U7Cn0KCi8vLyBBc3NlbWJseSBmdW5jdGlvbi4gQXZhaWxhYmxlIHNp' + - 'bmNlIFRhY3QgMS41LjAuCi8vLwovLy8gQ29udmVydHMgYSBgU2xpY2VgIGNvbnRhaW5pbmcgYW4gYWRkcmVzcyBpbnRvIHRoZSBgU3RkQWRkcmVzc2AgU3RydWN0IGFu' + - 'ZCByZXR1cm5zIGl0LgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBhZGRyID0gYWRkcmVzcygiRVFEdEZwRXdjRkFFY1JlNW1M' + - 'VmgyTjZDMHgtX2hKRU03VzYxX0pMblNGNzRwNHEyIik7Ci8vLyAgICAgbGV0IHBhcnNlZEFkZHIgPSBwYXJzZVN0ZEFkZHJlc3MoYWRkci5hc1NsaWNlKCkpOwovLy8K' + - 'Ly8vICAgICBwYXJzZWRBZGRyLndvcmtjaGFpbjsgLy8gMAovLy8gICAgIHBhcnNlZEFkZHIuYWRkcmVzczsgICAvLyAxMDcuLi4yODcKLy8vIH0KLy8vIGBgYAovLy8K' + - 'Ly8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtYWR2YW5jZWQjcGFyc2VzdGRhZGRyZXNzCi8vLwphc20gZnVuIHBhcnNlU3RkQWRkcmVz' + - 'cyhzbGljZTogU2xpY2UpOiBTdGRBZGRyZXNzIHsgUkVXUklURVNUREFERFIgfQoKLy8vIEFzc2VtYmx5IGZ1bmN0aW9uLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjUu' + - 'MC4KLy8vCi8vLyBDb252ZXJ0cyBhIGBTbGljZWAgY29udGFpbmluZyBhbiBhZGRyZXNzIG9mIHZhcmlhYmxlIGxlbmd0aCBpbnRvIHRoZSBgVmFyQWRkcmVzc2AgU3Ry' + - 'dWN0IGFuZCByZXR1cm5zIGl0LgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCB2YXJBZGRyU2xpY2UgPSBiZWdpbkNlbGwoKQov' + - 'Ly8gICAgICAgICAuc3RvcmVVaW50KDYsIDMpICAgICAvLyB0byByZWNvZ25pemUgdGhlIGZvbGxvd2luZyBhcyBhIFZhckFkZHJlc3MKLy8vICAgICAgICAgLnN0b3Jl' + - 'VWludCgxMjMsIDkpICAgLy8gbWFrZSBhZGRyZXNzIG9jY3VweSAxMjMgYml0cwovLy8gICAgICAgICAuc3RvcmVVaW50KDIzNCwgMzIpICAvLyBzcGVjaWZ5IHdvcmtj' + - 'aGFpbiBJRCBvZiAyMzQKLy8vICAgICAgICAgLnN0b3JlVWludCgzNDUsIDEyMykgLy8gc3BlY2lmeSBhZGRyZXNzIG9mIDM0NQovLy8gICAgICAgICAuYXNTbGljZSgp' + - 'OwovLy8gICAgIGxldCBwYXJzZWRWYXJBZGRyID0gcGFyc2VWYXJBZGRyZXNzKHZhckFkZHJTbGljZSk7Ci8vLwovLy8gICAgIHBhcnNlZFZhckFkZHIud29ya2NoYWlu' + - 'OyAgICAgICAgICAgICAvLyAyMzQKLy8vICAgICBwYXJzZWRWYXJBZGRyLmFkZHJlc3M7ICAgICAgICAgICAgICAgLy8gQ1N7Q2VsbHswMDIuLi4yYjN9IGJpdHM6IDQ0' + - 'Li4xNjc7IHJlZnM6IDAuLjB9Ci8vLyAgICAgcGFyc2VkVmFyQWRkci5hZGRyZXNzLmxvYWRVaW50KDEyMyk7IC8vIDM0NQovLy8gfQovLy8gYGBgCi8vLwovLy8gU2Vl' + - 'OiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1hZHZhbmNlZCNwYXJzZXZhcmFkZHJlc3MKLy8vCmFzbSBmdW4gcGFyc2VWYXJBZGRyZXNzKHNsaWNl' + - 'OiBTbGljZSk6IFZhckFkZHJlc3MgeyBSRVdSSVRFVkFSQUREUiB9Cg=='; -files['std/crypto.tact'] = - 'YXNtIGV4dGVuZHMgZnVuIGhhc2goc2VsZjogQ2VsbCk6IEludCB7IEhBU0hDVSB9Cgphc20gZXh0ZW5kcyBmdW4gaGFzaChzZWxmOiBTbGljZSk6IEludCB7IEhBU0hT' + - 'VSB9Cgphc20gZnVuIGNoZWNrU2lnbmF0dXJlKGhhc2g6IEludCwgc2lnbmF0dXJlOiBTbGljZSwgcHVibGljX2tleTogSW50KTogQm9vbCB7IENIS1NJR05VIH0KCmFz' + - 'bSBmdW4gY2hlY2tEYXRhU2lnbmF0dXJlKGRhdGE6IFNsaWNlLCBzaWduYXR1cmU6IFNsaWNlLCBwdWJsaWNfa2V5OiBJbnQpOiBCb29sIHsgQ0hLU0lHTlMgfQo='; -files['std/debug.tact'] = - 'Ly8gdGhlc2UgYXJlIGJ1aWx0aW4gZnVuY3Rpb25zLCB0aGVzZSBnZXQgc3BlY2lhbCB0cmVhdG1lbnQgZnJvbSBGdW5DCi8vIGhlbmNlLCBubyBhc20gaGVyZQoKQG5h' + - 'bWUodGhyb3cpCm5hdGl2ZSBuYXRpdmVUaHJvdyhjb2RlOiBJbnQpOwoKQG5hbWUodGhyb3dfaWYpCm5hdGl2ZSBuYXRpdmVUaHJvd0lmKGNvZGU6IEludCwgY29uZGl0' + - 'aW9uOiBCb29sKTsKCkBuYW1lKHRocm93KQpuYXRpdmUgdGhyb3coY29kZTogSW50KTsKCkBuYW1lKHRocm93X3VubGVzcykKbmF0aXZlIG5hdGl2ZVRocm93VW5sZXNz' + - 'KGNvZGU6IEludCwgY29uZGl0aW9uOiBCb29sKTs='; -files['std/math.tact'] = - 'Ly8gUHJlcGFyZSByYW5kb20KCi8vIE1peGVzIHVuc2lnbmVkIDI1Ni1iaXQgaW50ZWdlciB4IGludG8gdGhlIHJhbmRvbSBzZWVkIHIgYnkgc2V0dGluZyB0aGUgcmFu' + - 'ZG9tIHNlZWQKLy8gdG8gc2hhMjU2IG9mIHRoZSBjb25jYXRlbmF0aW9uIG9mIHR3byAzMi1ieXRlIHN0cmluZ3M6Ci8vIHRoZSBmaXJzdCB3aXRoIHRoZSBiaWctZW5k' + - 'aWFuIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvbGQgc2VlZCByLCBhbmQKLy8gdGhlIHNlY29uZCB3aXRoIHRoZSBiaWctZW5kaWFuIHJlcHJlc2VudGF0aW9uIG9mIHgu' + - 'CmFzbSBmdW4gbmF0aXZlUmFuZG9taXplKHg6IEludCkgeyBBRERSQU5EIH0KCi8vLyBFcXVpdmFsZW50IHRvIGBuYXRpdmVSYW5kb21pemUoY3VyX2x0KCkpYCwKLy8v' + - 'IHdoZXJlIGBjdXJfbHQoKWAgaXMgdGhlIGxvZ2ljYWwgdGltZSBvZiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbgphc20gZnVuIG5hdGl2ZVJhbmRvbWl6ZUx0KCkgeyBM' + - 'VElNRSBBRERSQU5EIH0KCkBuYW1lKF9fdGFjdF9wcmVwYXJlX3JhbmRvbSkKbmF0aXZlIG5hdGl2ZVByZXBhcmVSYW5kb20oKTsKCi8vIFJhbmRvbQoKLy8gR2VuZXJh' + - 'dGVzIGEgbmV3IHBzZXVkby1yYW5kb20gdW5zaWduZWQgMjU2LWJpdCBpbnRlZ2VyIHguCi8vIFRoZSBhbGdvcml0aG0gaXMgYXMgZm9sbG93czogaWYgciBpcyB0aGUg' + - 'b2xkIHZhbHVlIG9mIHRoZSByYW5kb20gc2VlZCwKLy8gY29uc2lkZXJlZCBhcyBhIDMyLWJ5dGUgYXJyYXkgKGJ5IGNvbnN0cnVjdGluZyB0aGUgYmlnLWVuZGlhbiBy' + - 'ZXByZXNlbnRhdGlvbgovLyBvZiBhbiB1bnNpZ25lZCAyNTYtYml0IGludGVnZXIpLCB0aGVuIGl0cyBzaGE1MTIocikgaXMgY29tcHV0ZWQ7Ci8vIHRoZSBmaXJzdCAz' + - 'MiBieXRlcyBvZiB0aGlzIGhhc2ggYXJlIHN0b3JlZCBhcyB0aGUgbmV3IHZhbHVlIHInIG9mIHRoZSByYW5kb20gc2VlZCwKLy8gYW5kIHRoZSByZW1haW5pbmcgMzIg' + - 'Ynl0ZXMgYXJlIHJldHVybmVkIGFzIHRoZSBuZXh0IHJhbmRvbSB2YWx1ZSB4Lgphc20gZnVuIG5hdGl2ZVJhbmRvbSgpOiBJbnQgeyBSQU5EVTI1NiB9CgovLyBHZW5l' + - 'cmF0ZXMgYSBuZXcgcHNldWRvLXJhbmRvbSBpbnRlZ2VyIHogaW4gdGhlIHJhbmdlIDAuLnJhbmdl4oiSMQovLyAob3IgcmFuZ2UuLuKIkjEsIGlmIHJhbmdlIDwgMCku' + - 'Ci8vIE1vcmUgcHJlY2lzZWx5LCBhbiB1bnNpZ25lZCByYW5kb20gdmFsdWUgeCBpcyBnZW5lcmF0ZWQgYXMgaW4gYG5hdGl2ZVJhbmRvbWA7Ci8vIHRoZW4geiA6PSB4' + - 'ICogcmFuZ2UgLyAyXjI1NiBpcyBjb21wdXRlZC4KYXNtIGZ1biBuYXRpdmVSYW5kb21JbnRlcnZhbChtYXg6IEludCk6IEludCB7IFJBTkQgfQoKaW5saW5lIGZ1biBy' + - 'YW5kb21JbnQoKTogSW50IHsKICAgIG5hdGl2ZVByZXBhcmVSYW5kb20oKTsKICAgIHJldHVybiBuYXRpdmVSYW5kb20oKTsKfQoKaW5saW5lIGZ1biByYW5kb20obWlu' + - 'OiBJbnQsIG1heDogSW50KTogSW50IHsKICAgIG5hdGl2ZVByZXBhcmVSYW5kb20oKTsKICAgIHJldHVybiBtaW4gKyBuYXRpdmVSYW5kb21JbnRlcnZhbChtYXggLSBt' + - 'aW4pOwp9CgovLyBNYXRoCgphc20gZnVuIG1pbih4OiBJbnQsIHk6IEludCk6IEludCB7IE1JTiB9Cgphc20gZnVuIG1heCh4OiBJbnQsIHk6IEludCk6IEludCB7IE1B' + - 'WCB9Cgphc20gZnVuIGFicyh4OiBJbnQpOiBJbnQgeyBBQlMgfQoKYXNtIGZ1biBub3coKTogSW50IHsgTk9XIH0KCmFzbSBmdW4gbG9nMihudW06IEludCk6IEludCB7' + - 'CiAgICBEVVAgNSBUSFJPV0lGTk9UIFVCSVRTSVpFIERFQwp9CgpAbmFtZShfX3RhY3RfbG9nKQpuYXRpdmUgbG9nKG51bTogSW50LCBiYXNlOiBJbnQpOiBJbnQ7CgpA' + - 'bmFtZShfX3RhY3RfcG93KQpuYXRpdmUgcG93KGJhc2U6IEludCwgZXhwOiBJbnQpOiBJbnQ7Cgphc20gZnVuIHBvdzIoZXhwOiBJbnQpOiBJbnQgeyBQT1cyIH0='; -files['std/primitives.tact'] = - 'cHJpbWl0aXZlIEludDsKcHJpbWl0aXZlIEJvb2w7CnByaW1pdGl2ZSBCdWlsZGVyOwpwcmltaXRpdmUgU2xpY2U7CnByaW1pdGl2ZSBDZWxsOwpwcmltaXRpdmUgQWRk' + - 'cmVzczsKcHJpbWl0aXZlIFN0cmluZzsKcHJpbWl0aXZlIFN0cmluZ0J1aWxkZXI7'; -files['std/reserve.tact'] = - 'YXNtIGZ1biBuYXRpdmVSZXNlcnZlKGFtb3VudDogSW50LCBtb2RlOiBJbnQpIHsgUkFXUkVTRVJWRSB9Cgpjb25zdCBSZXNlcnZlRXhhY3Q6IEludCA9IDA7CmNvbnN0' + - 'IFJlc2VydmVBbGxFeGNlcHQ6IEludCA9IDE7CmNvbnN0IFJlc2VydmVBdE1vc3Q6IEludCA9IDI7CmNvbnN0IFJlc2VydmVBZGRPcmlnaW5hbEJhbGFuY2U6IEludCA9' + - 'IDQ7CmNvbnN0IFJlc2VydmVJbnZlcnRTaWduOiBJbnQgPSA4Owpjb25zdCBSZXNlcnZlQm91bmNlSWZBY3Rpb25GYWlsOiBJbnQgPSAxNjs='; -files['std/send.tact'] = - 'YXNtIGZ1biBuYXRpdmVTZW5kTWVzc2FnZShjZWxsOiBDZWxsLCBtb2RlOiBJbnQpIHsgU0VORFJBV01TRyB9Cgphc20gZnVuIG5hdGl2ZVNlbmRNZXNzYWdlUmV0dXJu' + - 'Rm9yd2FyZEZlZShtc2c6IENlbGwsIG1vZGU6IEludCk6IEludCB7IFNFTkRNU0cgfQoKY29uc3QgU2VuZFJlbWFpbmluZ0JhbGFuY2U6IEludCA9IDEyODsKY29uc3Qg' + - 'U2VuZFJlbWFpbmluZ1ZhbHVlOiBJbnQgPSA2NDsKY29uc3QgU2VuZERlZmF1bHRNb2RlOiBJbnQgPSAwOwpjb25zdCBTZW5kSWdub3JlRXJyb3JzOiBJbnQgPSAyOwpj' + - 'b25zdCBTZW5kUGF5R2FzU2VwYXJhdGVseTogSW50ID0gMTsKY29uc3QgU2VuZERlc3Ryb3lJZlplcm86IEludCA9IDMyOwpjb25zdCBTZW5kQm91bmNlSWZBY3Rpb25G' + - 'YWlsOiBJbnQgPSAxNjsKY29uc3QgU2VuZE9ubHlFc3RpbWF0ZUZlZTogSW50ID0gMTAyNDsKCnN0cnVjdCBTZW5kUGFyYW1ldGVycyB7CiAgICBib3VuY2U6IEJvb2wg' + - 'PSB0cnVlOwogICAgdG86IEFkZHJlc3M7CiAgICB2YWx1ZTogSW50OwogICAgbW9kZTogSW50ID0gMDsKICAgIGJvZHk6IENlbGw/ID0gbnVsbDsKICAgIGNvZGU6IENl' + - 'bGw/ID0gbnVsbDsKICAgIGRhdGE6IENlbGw/ID0gbnVsbDsKfQoKZnVuIHNlbmQocGFyYW1zOiBTZW5kUGFyYW1ldGVycyk6IEludCB7IC8vIHJldHVybnMgZm9yd2Fy' + - 'ZCBmZWUKICAgIGxldCBiOiBCdWlsZGVyID0gYmVnaW5DZWxsKCk7CiAgICBiID0gYi5zdG9yZUludCgxLCAyKTsgLy8gaW50ZXJuYWxfbWVzc2FnZSArIGloZF9kaXNh' + - 'YmxlZAogICAgYiA9IGIuc3RvcmVCb29sKHBhcmFtcy5ib3VuY2UpOyAvLyBib3VuY2UKICAgIGIgPSBiLnN0b3JlSW50KDAsIDMpOyAvLyBib3VuY2VkICsgZnJvbQog' + - 'ICAgYiA9IGIuc3RvcmVBZGRyZXNzKHBhcmFtcy50byk7IC8vIFRvCiAgICBiID0gYi5zdG9yZUNvaW5zKHBhcmFtcy52YWx1ZSk7IC8vIFZhbHVlCiAgICBiID0gYi5z' + - 'dG9yZUludCgwLCAxICsgNCArIDQgKyA2NCArIDMyKTsgLy8gY3VycmVuY3lfY29sbGVjdGlvbiArIElIUiBmZWVzICsgRndkIGZlZXMgKyBDcmVhdGVkTFQgKyBDcmVh' + - 'dGVkQXQKCiAgICAvLyBTdGF0ZWluaXQKICAgIGlmIChwYXJhbXMuY29kZSAhPSBudWxsIHx8IHBhcmFtcy5kYXRhICE9IG51bGwpIHsKICAgICAgICBiID0gYi5zdG9y' + - 'ZUJvb2wodHJ1ZSk7IC8vIFN0YXRlIGluaXQKCiAgICAgICAgLy8gQXNzZW1ibGUgc3RhdGUgaW5pdCBjZWxsCiAgICAgICAgbGV0IGJjOiBCdWlsZGVyID0gYmVnaW5D' + - 'ZWxsKCk7CiAgICAgICAgYmMgPSBiYy5zdG9yZUJvb2woZmFsc2UpOyAvLyBTcGxpdERlcHRoCiAgICAgICAgYmMgPSBiYy5zdG9yZUJvb2woZmFsc2UpOyAvLyBUaWNr' + - 'VG9jawogICAgICAgIGlmIChwYXJhbXMuY29kZSAhPSBudWxsKSB7CiAgICAgICAgICAgIGJjID0gYmMuc3RvcmVCb29sKHRydWUpOyAvLyBDb2RlIHByZXNlbmNlCiAg' + - 'ICAgICAgICAgIGJjID0gYmMuc3RvcmVSZWYocGFyYW1zLmNvZGUhISk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYmMgPSBiYy5zdG9yZUJvb2woZmFsc2Up' + - 'OyAvLyBDb2RlIHByZXNlbmNlCiAgICAgICAgfQogICAgICAgIGlmIChwYXJhbXMuZGF0YSAhPSBudWxsKSB7CiAgICAgICAgICAgIGJjID0gYmMuc3RvcmVCb29sKHRy' + - 'dWUpOyAvLyBEYXRhIHByZXNlbmNlCiAgICAgICAgICAgIGJjID0gYmMuc3RvcmVSZWYocGFyYW1zLmRhdGEhISk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg' + - 'YmMgPSBiYy5zdG9yZUJvb2woZmFsc2UpOyAvLyBEYXRhIHByZXNlbmNlCiAgICAgICAgfQogICAgICAgIGJjID0gYmMuc3RvcmVCb29sKGZhbHNlKTsgLy8gTGlicmFy' + - 'eQoKICAgICAgICBiID0gYi5zdG9yZUJvb2wodHJ1ZSk7IC8vIFN0b3JlIGFzIHJlZgogICAgICAgIGIgPSBiLnN0b3JlUmVmKGJjLmVuZENlbGwoKSk7CiAgICB9IGVs' + - 'c2UgewogICAgICAgIGIgPSBiLnN0b3JlQm9vbChmYWxzZSk7IC8vIE5vIHN0YXRlIGluaXQKICAgIH0KCiAgICAvLyBCb2R5CiAgICBsZXQgYm9keTogQ2VsbD8gPSBw' + - 'YXJhbXMuYm9keTsKICAgIGlmIChib2R5ICE9IG51bGwpIHsKICAgICAgICBiID0gYi5zdG9yZUJvb2wodHJ1ZSk7CiAgICAgICAgYiA9IGIuc3RvcmVSZWYoYm9keSEh' + - 'KTsKICAgIH0gZWxzZSB7CiAgICAgICAgYiA9IGIuc3RvcmVCb29sKGZhbHNlKTsgLy8gTm8gYm9keQogICAgfQoKICAgIC8vIFNlbmQKICAgIGxldCBjOiBDZWxsID0g' + - 'Yi5lbmRDZWxsKCk7CiAgICByZXR1cm4gbmF0aXZlU2VuZE1lc3NhZ2VSZXR1cm5Gb3J3YXJkRmVlKGMsIHBhcmFtcy5tb2RlKTsKfQoKaW5saW5lIGZ1biBlbWl0KGJv' + - 'ZHk6IENlbGwpIHsKICAgIC8vIGV4dF9vdXRfbXNnX2luZm8kMTEgc3JjOk1zZ0FkZHJlc3NJbnQgZGVzdDpNc2dBZGRyZXNzRXh0IGNyZWF0ZWRfbHQ6dWludDY0IGNy' + - 'ZWF0ZWRfYXQ6dWludDMyCiAgICAvLyAgICAgICAgICAgICAgICAgICAgIG1heWJlOiBzdGF0ZUluaXQgKGZhbHNlKSBib2R5UmVmOiBib29sICh0cnVlKQogICAgbGV0' + - 'IGM6IENlbGwgPSBiZWdpbkNlbGwoKQogICAgICAgIC5zdG9yZVVpbnQoMTUyMTE4MDcyMDI3Mzg3NTI4MTc5NjA0Mzg0NjQ1MTMsIDEwNCkKICAgICAgICAuc3RvcmVS' + - 'ZWYoYm9keSkKICAgICAgICAuZW5kQ2VsbCgpOwogICAgbmF0aXZlU2VuZE1lc3NhZ2UoYywgMCk7Cn0KCmFzbSBmdW4gYWNjZXB0TWVzc2FnZSgpIHsgQUNDRVBUIH0K' + - 'CmFzbSBmdW4gY29tbWl0KCkgeyBDT01NSVQgfQo='; -files['std/text.tact'] = - 'Ly8KLy8gU3RyaW5nIGJ1aWxkZXIKLy8KCkBuYW1lKF9fdGFjdF9zdHJpbmdfYnVpbGRlcl9zdGFydF9zdHJpbmcpCm5hdGl2ZSBiZWdpblN0cmluZygpOiBTdHJpbmdC' + - 'dWlsZGVyOwoKQG5hbWUoX190YWN0X3N0cmluZ19idWlsZGVyX3N0YXJ0X2NvbW1lbnQpCm5hdGl2ZSBiZWdpbkNvbW1lbnQoKTogU3RyaW5nQnVpbGRlcjsKCkBuYW1l' + - 'KF9fdGFjdF9zdHJpbmdfYnVpbGRlcl9zdGFydF90YWlsX3N0cmluZykKbmF0aXZlIGJlZ2luVGFpbFN0cmluZygpOiBTdHJpbmdCdWlsZGVyOwoKQG5hbWUoX190YWN0' + - 'X3N0cmluZ19idWlsZGVyX3N0YXJ0KQpuYXRpdmUgYmVnaW5TdHJpbmdGcm9tQnVpbGRlcihiOiBCdWlsZGVyKTogU3RyaW5nQnVpbGRlcjsKCkBuYW1lKF9fdGFjdF9z' + - 'dHJpbmdfYnVpbGRlcl9hcHBlbmQpCmV4dGVuZHMgbXV0YXRlcyBuYXRpdmUgYXBwZW5kKHNlbGY6IFN0cmluZ0J1aWxkZXIsIHM6IFN0cmluZyk7CgpAbmFtZShfX3Rh' + - 'Y3Rfc3RyaW5nX2J1aWxkZXJfYXBwZW5kX25vdF9tdXQpCmV4dGVuZHMgbmF0aXZlIGNvbmNhdChzZWxmOiBTdHJpbmdCdWlsZGVyLCBzOiBTdHJpbmcpOiBTdHJpbmdC' + - 'dWlsZGVyOwoKQG5hbWUoX190YWN0X3N0cmluZ19idWlsZGVyX2VuZCkKZXh0ZW5kcyBuYXRpdmUgdG9DZWxsKHNlbGY6IFN0cmluZ0J1aWxkZXIpOiBDZWxsOwoKQG5h' + - 'bWUoX190YWN0X3N0cmluZ19idWlsZGVyX2VuZF9zbGljZSkKZXh0ZW5kcyBuYXRpdmUgdG9TdHJpbmcoc2VsZjogU3RyaW5nQnVpbGRlcik6IFN0cmluZzsKCkBuYW1l' + - 'KF9fdGFjdF9zdHJpbmdfYnVpbGRlcl9lbmRfc2xpY2UpCmV4dGVuZHMgbmF0aXZlIHRvU2xpY2Uoc2VsZjogU3RyaW5nQnVpbGRlcik6IFNsaWNlOwoKLy8KLy8gU3Ry' + - 'aW5nIGNvbnZlcnNpb24KLy8KCkBuYW1lKF9fdGFjdF9pbnRfdG9fc3RyaW5nKQpleHRlbmRzIG5hdGl2ZSB0b1N0cmluZyhzZWxmOiBJbnQpOiBTdHJpbmc7CgpAbmFt' + - 'ZShfX3RhY3RfZmxvYXRfdG9fc3RyaW5nKQpleHRlbmRzIG5hdGl2ZSB0b0Zsb2F0U3RyaW5nKHNlbGY6IEludCwgZGlnaXRzOiBJbnQpOiBTdHJpbmc7CgppbmxpbmUg' + - 'ZXh0ZW5kcyBmdW4gdG9Db2luc1N0cmluZyhzZWxmOiBJbnQpOiBTdHJpbmcgewogICAgcmV0dXJuIHNlbGYudG9GbG9hdFN0cmluZyg5KTsKfQoKZXh0ZW5kcyBmdW4g' + - 'YXNDb21tZW50KHNlbGY6IFN0cmluZyk6IENlbGwgewogICAgbGV0IGI6IFN0cmluZ0J1aWxkZXIgPSBiZWdpbkNvbW1lbnQoKTsKICAgIGIuYXBwZW5kKHNlbGYpOwog' + - 'ICAgcmV0dXJuIGIudG9DZWxsKCk7Cn0KCkBuYW1lKF9fdGFjdF9zdHJfdG9fc2xpY2UpCmV4dGVuZHMgbmF0aXZlIGFzU2xpY2Uoc2VsZjogU3RyaW5nKTogU2xpY2U7' + - 'CgpAbmFtZShfX3RhY3Rfc2xpY2VfdG9fc3RyKQpleHRlbmRzIG5hdGl2ZSBhc1N0cmluZyhzZWxmOiBTbGljZSk6IFN0cmluZzsKCmlubGluZSBleHRlbmRzIGZ1biBm' + - 'cm9tQmFzZTY0KHNlbGY6IFN0cmluZyk6IFNsaWNlIHsKICAgIHJldHVybiBzZWxmLmFzU2xpY2UoKS5mcm9tQmFzZTY0KCk7Cn0KCmV4dGVuZHMgZnVuIGZyb21CYXNl' + - 'NjQoc2VsZjogU2xpY2UpOiBTbGljZSB7CiAgICBsZXQgc2l6ZTogSW50ID0gc2VsZi5iaXRzKCkgLyA4OwogICAgbGV0IHJlc3VsdDogQnVpbGRlciA9IGJlZ2luQ2Vs' + - 'bCgpOwoKICAgIHJlcGVhdCAoc2l6ZSkgewogICAgICAgIGxldCBjb2RlOiBJbnQgPSBzZWxmLmxvYWRVaW50KDgpOwogICAgICAgIGlmIChjb2RlID49IDY1ICYmIGNv' + - 'ZGUgPD0gOTApIHsgLy8gQS1aCiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zdG9yZVVpbnQoY29kZSAtIDY1LCA2KTsKICAgICAgICB9IGVsc2UgaWYgKGNvZGUg' + - 'Pj0gOTcgJiYgY29kZSA8PSAxMjIpIHsgLy8gYS16CiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zdG9yZVVpbnQoY29kZSAtICg5NyAtIDI2KSwgNik7CiAgICAg' + - 'ICAgfSBlbHNlIGlmIChjb2RlID49IDQ4ICYmIGNvZGUgPD0gNTcpIHsgLy8gMC05CiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zdG9yZVVpbnQoY29kZSArICg1' + - 'MiAtIDQ4KSwgNik7CiAgICAgICAgfSBlbHNlIGlmIChjb2RlID09IDQ1IHx8IGNvZGUgPT0gNDMpIHsgLy8gLSBvciArCiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3Vs' + - 'dC5zdG9yZVVpbnQoNjIsIDYpOwogICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSA5NSB8fCBjb2RlID09IDQ3KSB7IC8vIF8gb3IgLwogICAgICAgICAgICByZXN1bHQg' + - 'PSByZXN1bHQuc3RvcmVVaW50KDYzLCA2KTsKICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gNjEpIHsgLy8gPQogICAgICAgICAgICAvLyBTa2lwCiAgICAgICAgfSBl' + - 'bHNlIHsKICAgICAgICAgICAgdGhyb3coMTM0KTsKICAgICAgICB9CiAgICB9CgogICAgLy8gUGFkZGluZwogICAgbGV0IHRvdGFsOiBJbnQgPSByZXN1bHQuYml0cygp' + - 'OwogICAgbGV0IHBhZGRpbmc6IEludCA9IHRvdGFsICUgODsKICAgIGlmIChwYWRkaW5nICE9IDApIHsKICAgICAgICBsZXQgczogU2xpY2UgPSByZXN1bHQuYXNTbGlj' + - 'ZSgpOwogICAgICAgIHJldHVybiBzLmxvYWRCaXRzKHRvdGFsIC0gcGFkZGluZyk7CiAgICB9IGVsc2UgewogICAgICAgIHJldHVybiByZXN1bHQuYXNTbGljZSgpOwog' + - 'ICAgfQp9CgovLwovLyBBZGRyZXNzIGNvbnZlcnNpb24KLy8KCkBuYW1lKF9fdGFjdF9hZGRyZXNzX3RvX3VzZXJfZnJpZW5kbHkpCmV4dGVuZHMgbmF0aXZlIHRvU3Ry' + - 'aW5nKHNlbGY6IEFkZHJlc3MpOiBTdHJpbmc7'; -files['stdlib_ex.fc'] = - 'Zm9yYWxsIFggLT4gdHVwbGUgX190YWN0X3NldCh0dXBsZSB4LCBYIHYsIGludCBpKSBhc20gIlNFVElOREVYVkFSUSI7CigpIF9fdGFjdF9ub3AoKSBhc20gIk5PUCI7' + - 'CnNsaWNlIF9fdGFjdF9zdHJfdG9fc2xpY2Uoc2xpY2UgcykgYXNtICJOT1AiOwpzbGljZSBfX3RhY3Rfc2xpY2VfdG9fc3RyKHNsaWNlIHMpIGFzbSAiTk9QIjsKc2xp' + - 'Y2UgX190YWN0X2FkZHJlc3NfdG9fc2xpY2Uoc2xpY2UgcykgYXNtICJOT1AiOw=='; -files['stdlib.fc'] = - 'OzsgU3RhbmRhcmQgbGlicmFyeSBmb3IgZnVuQwo7OwoKey0KICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFRPTiBGdW5DIFN0YW5kYXJkIExpYnJhcnkuCgogICAgRnVu' + - 'QyBTdGFuZGFyZCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJt' + - 'cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0' + - 'aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCgogICAgRnVuQyBTdGFuZGFyZCBMaWJy' + - 'YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl' + - 'biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAg' + - 'R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCgotfQoKey0KICAjIFR1cGxlIG1hbmlwdWxhdGlvbiBwcmltaXRpdmVzCiAg' + - 'VGhlIG5hbWVzIGFuZCB0aGUgdHlwZXMgYXJlIG1vc3RseSBzZWxmLWV4cGxhaW5pbmcuCiAgU2VlIFtwb2x5bW9yaGlzbSB3aXRoIGZvcmFsbF0oaHR0cHM6Ly90b24u' + - 'b3JnL2RvY3MvIy9mdW5jL2Z1bmN0aW9ucz9pZD1wb2x5bW9ycGhpc20td2l0aC1mb3JhbGwpCiAgZm9yIG1vcmUgaW5mbyBvbiB0aGUgcG9seW1vcnBoaWMgZnVuY3Rp' + - 'b25zLgoKICBOb3RlIHRoYXQgY3VycmVudGx5IHZhbHVlcyBvZiBhdG9taWMgdHlwZSBgdHVwbGVgIGNhbid0IGJlIGNhc3QgdG8gY29tcG9zaXRlIHR1cGxlIHR5cGUg' + - 'KGUuZy4gYFtpbnQsIGNlbGxdYCkKICBhbmQgdmlzZSB2ZXJzYS4KLX0KCnstCiAgIyBMaXNwLXN0eWxlIGxpc3RzCgogIExpc3RzIGNhbiBiZSByZXByZXNlbnRlZCBh' + - 'cyBuZXN0ZWQgMi1lbGVtZW50cyB0dXBsZXMuCiAgRW1wdHkgbGlzdCBpcyBjb252ZW50aW9uYWxseSByZXByZXNlbnRlZCBhcyBUVk0gYG51bGxgIHZhbHVlIChpdCBj' + - 'YW4gYmUgb2J0YWluZWQgYnkgY2FsbGluZyBbbnVsbCgpXSkuCiAgRm9yIGV4YW1wbGUsIHR1cGxlIGAoMSwgKDIsICgzLCBudWxsKSkpYCByZXByZXNlbnRzIGxpc3Qg' + - 'YFsxLCAyLCAzXWAuIEVsZW1lbnRzIG9mIGEgbGlzdCBjYW4gYmUgb2YgZGlmZmVyZW50IHR5cGVzLgotfQoKOzs7IEFkZHMgYW4gZWxlbWVudCB0byB0aGUgYmVnaW5u' + - 'aW5nIG9mIGxpc3Atc3R5bGUgbGlzdC4KZm9yYWxsIFggLT4gdHVwbGUgY29ucyhYIGhlYWQsIHR1cGxlIHRhaWwpIGFzbSAiQ09OUyI7Cgo7OzsgRXh0cmFjdHMgdGhl' + - 'IGhlYWQgYW5kIHRoZSB0YWlsIG9mIGxpc3Atc3R5bGUgbGlzdC4KZm9yYWxsIFggLT4gKFgsIHR1cGxlKSB1bmNvbnModHVwbGUgbGlzdCkgYXNtICJVTkNPTlMiOwoK' + - 'Ozs7IEV4dHJhY3RzIHRoZSB0YWlsIGFuZCB0aGUgaGVhZCBvZiBsaXNwLXN0eWxlIGxpc3QuCmZvcmFsbCBYIC0+ICh0dXBsZSwgWCkgbGlzdF9uZXh0KHR1cGxlIGxp' + - 'c3QpIGFzbSgtPiAxIDApICJVTkNPTlMiOwoKOzs7IFJldHVybnMgdGhlIGhlYWQgb2YgbGlzcC1zdHlsZSBsaXN0Lgpmb3JhbGwgWCAtPiBYIGNhcih0dXBsZSBsaXN0' + - 'KSBhc20gIkNBUiI7Cgo7OzsgUmV0dXJucyB0aGUgdGFpbCBvZiBsaXNwLXN0eWxlIGxpc3QuCnR1cGxlIGNkcih0dXBsZSBsaXN0KSBhc20gIkNEUiI7Cgo7OzsgQ3Jl' + - 'YXRlcyB0dXBsZSB3aXRoIHplcm8gZWxlbWVudHMuCnR1cGxlIGVtcHR5X3R1cGxlKCkgYXNtICJOSUwiOwoKOzs7IEFwcGVuZHMgYSB2YWx1ZSBgeGAgdG8gYSBgVHVw' + - 'bGUgdCA9ICh4MSwgLi4uLCB4bilgLCBidXQgb25seSBpZiB0aGUgcmVzdWx0aW5nIGBUdXBsZSB0JyA9ICh4MSwgLi4uLCB4biwgeClgCjs7OyBpcyBvZiBsZW5ndGgg' + - 'YXQgbW9zdCAyNTUuIE90aGVyd2lzZSB0aHJvd3MgYSB0eXBlIGNoZWNrIGV4Y2VwdGlvbi4KZm9yYWxsIFggLT4gdHVwbGUgdHB1c2godHVwbGUgdCwgWCB2YWx1ZSkg' + - 'YXNtICJUUFVTSCI7CmZvcmFsbCBYIC0+ICh0dXBsZSwgKCkpIH50cHVzaCh0dXBsZSB0LCBYIHZhbHVlKSBhc20gIlRQVVNIIjsKCjs7OyBDcmVhdGVzIGEgdHVwbGUg' + - 'b2YgbGVuZ3RoIG9uZSB3aXRoIGdpdmVuIGFyZ3VtZW50IGFzIGVsZW1lbnQuCmZvcmFsbCBYIC0+IFtYXSBzaW5nbGUoWCB4KSBhc20gIlNJTkdMRSI7Cgo7OzsgVW5w' + - 'YWNrcyBhIHR1cGxlIG9mIGxlbmd0aCBvbmUKZm9yYWxsIFggLT4gWCB1bnNpbmdsZShbWF0gdCkgYXNtICJVTlNJTkdMRSI7Cgo7OzsgQ3JlYXRlcyBhIHR1cGxlIG9m' + - 'IGxlbmd0aCB0d28gd2l0aCBnaXZlbiBhcmd1bWVudHMgYXMgZWxlbWVudHMuCmZvcmFsbCBYLCBZIC0+IFtYLCBZXSBwYWlyKFggeCwgWSB5KSBhc20gIlBBSVIiOwoK' + - 'Ozs7IFVucGFja3MgYSB0dXBsZSBvZiBsZW5ndGggdHdvCmZvcmFsbCBYLCBZIC0+IChYLCBZKSB1bnBhaXIoW1gsIFldIHQpIGFzbSAiVU5QQUlSIjsKCjs7OyBDcmVh' + - 'dGVzIGEgdHVwbGUgb2YgbGVuZ3RoIHRocmVlIHdpdGggZ2l2ZW4gYXJndW1lbnRzIGFzIGVsZW1lbnRzLgpmb3JhbGwgWCwgWSwgWiAtPiBbWCwgWSwgWl0gdHJpcGxl' + - 'KFggeCwgWSB5LCBaIHopIGFzbSAiVFJJUExFIjsKCjs7OyBVbnBhY2tzIGEgdHVwbGUgb2YgbGVuZ3RoIHRocmVlCmZvcmFsbCBYLCBZLCBaIC0+IChYLCBZLCBaKSB1' + - 'bnRyaXBsZShbWCwgWSwgWl0gdCkgYXNtICJVTlRSSVBMRSI7Cgo7OzsgQ3JlYXRlcyBhIHR1cGxlIG9mIGxlbmd0aCBmb3VyIHdpdGggZ2l2ZW4gYXJndW1lbnRzIGFz' + - 'IGVsZW1lbnRzLgpmb3JhbGwgWCwgWSwgWiwgVyAtPiBbWCwgWSwgWiwgV10gdHVwbGU0KFggeCwgWSB5LCBaIHosIFcgdykgYXNtICI0IFRVUExFIjsKCjs7OyBVbnBh' + - 'Y2tzIGEgdHVwbGUgb2YgbGVuZ3RoIGZvdXIKZm9yYWxsIFgsIFksIFosIFcgLT4gKFgsIFksIFosIFcpIHVudHVwbGU0KFtYLCBZLCBaLCBXXSB0KSBhc20gIjQgVU5U' + - 'VVBMRSI7Cgo7OzsgUmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCBvZiBhIHR1cGxlICh3aXRoIHVua25vd24gZWxlbWVudCB0eXBlcykuCmZvcmFsbCBYIC0+IFggZmly' + - 'c3QodHVwbGUgdCkgYXNtICJGSVJTVCI7Cgo7OzsgUmV0dXJucyB0aGUgc2Vjb25kIGVsZW1lbnQgb2YgYSB0dXBsZSAod2l0aCB1bmtub3duIGVsZW1lbnQgdHlwZXMp' + - 'Lgpmb3JhbGwgWCAtPiBYIHNlY29uZCh0dXBsZSB0KSBhc20gIlNFQ09ORCI7Cgo7OzsgUmV0dXJucyB0aGUgdGhpcmQgZWxlbWVudCBvZiBhIHR1cGxlICh3aXRoIHVu' + - 'a25vd24gZWxlbWVudCB0eXBlcykuCmZvcmFsbCBYIC0+IFggdGhpcmQodHVwbGUgdCkgYXNtICJUSElSRCI7Cgo7OzsgUmV0dXJucyB0aGUgZm91cnRoIGVsZW1lbnQg' + - 'b2YgYSB0dXBsZSAod2l0aCB1bmtub3duIGVsZW1lbnQgdHlwZXMpLgpmb3JhbGwgWCAtPiBYIGZvdXJ0aCh0dXBsZSB0KSBhc20gIjMgSU5ERVgiOwoKOzs7IFJldHVy' + - 'bnMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYSBwYWlyIHR1cGxlLgpmb3JhbGwgWCwgWSAtPiBYIHBhaXJfZmlyc3QoW1gsIFldIHApIGFzbSAiRklSU1QiOwoKOzs7IFJl' + - 'dHVybnMgdGhlIHNlY29uZCBlbGVtZW50IG9mIGEgcGFpciB0dXBsZS4KZm9yYWxsIFgsIFkgLT4gWSBwYWlyX3NlY29uZChbWCwgWV0gcCkgYXNtICJTRUNPTkQiOwoK' + - 'Ozs7IFJldHVybnMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYSB0cmlwbGUgdHVwbGUuCmZvcmFsbCBYLCBZLCBaIC0+IFggdHJpcGxlX2ZpcnN0KFtYLCBZLCBaXSBwKSBh' + - 'c20gIkZJUlNUIjsKCjs7OyBSZXR1cm5zIHRoZSBzZWNvbmQgZWxlbWVudCBvZiBhIHRyaXBsZSB0dXBsZS4KZm9yYWxsIFgsIFksIFogLT4gWSB0cmlwbGVfc2Vjb25k' + - 'KFtYLCBZLCBaXSBwKSBhc20gIlNFQ09ORCI7Cgo7OzsgUmV0dXJucyB0aGUgdGhpcmQgZWxlbWVudCBvZiBhIHRyaXBsZSB0dXBsZS4KZm9yYWxsIFgsIFksIFogLT4g' + - 'WiB0cmlwbGVfdGhpcmQoW1gsIFksIFpdIHApIGFzbSAiVEhJUkQiOwoKCjs7OyBQdXNoIG51bGwgZWxlbWVudCAoY2FzdGVkIHRvIGdpdmVuIHR5cGUpCjs7OyBCeSB0' + - 'aGUgVFZNIHR5cGUgYE51bGxgIEZ1bkMgcmVwcmVzZW50cyBhYnNlbmNlIG9mIGEgdmFsdWUgb2Ygc29tZSBhdG9taWMgdHlwZS4KOzs7IFNvIGBudWxsYCBjYW4gYWN0' + - 'dWFsbHkgaGF2ZSBhbnkgYXRvbWljIHR5cGUuCmZvcmFsbCBYIC0+IFggbnVsbCgpIGFzbSAiUFVTSE5VTEwiOwoKOzs7IE1vdmVzIGEgdmFyaWFibGUgW3hdIHRvIHRo' + - 'ZSB0b3Agb2YgdGhlIHN0YWNrCmZvcmFsbCBYIC0+IChYLCAoKSkgfmltcHVyZV90b3VjaChYIHgpIGltcHVyZSBhc20gIk5PUCI7CgoKCjs7OyBSZXR1cm5zIHRoZSBj' + - 'dXJyZW50IFVuaXggdGltZSBhcyBhbiBJbnRlZ2VyCmludCBub3coKSBhc20gIk5PVyI7Cgo7OzsgUmV0dXJucyB0aGUgaW50ZXJuYWwgYWRkcmVzcyBvZiB0aGUgY3Vy' + - 'cmVudCBzbWFydCBjb250cmFjdCBhcyBhIFNsaWNlIHdpdGggYSBgTXNnQWRkcmVzc0ludGAuCjs7OyBJZiBuZWNlc3NhcnksIGl0IGNhbiBiZSBwYXJzZWQgZnVydGhl' + - 'ciB1c2luZyBwcmltaXRpdmVzIHN1Y2ggYXMgW3BhcnNlX3N0ZF9hZGRyXS4Kc2xpY2UgbXlfYWRkcmVzcygpIGFzbSAiTVlBRERSIjsKCjs7OyBSZXR1cm5zIHRoZSBi' + - 'YWxhbmNlIG9mIHRoZSBzbWFydCBjb250cmFjdCBhcyBhIHR1cGxlIGNvbnNpc3Rpbmcgb2YgYW4gaW50Cjs7OyAoYmFsYW5jZSBpbiBuYW5vdG9uY29pbnMpIGFuZCBh' + - 'IGBjZWxsYAo7OzsgKGEgZGljdGlvbmFyeSB3aXRoIDMyLWJpdCBrZXlzIHJlcHJlc2VudGluZyB0aGUgYmFsYW5jZSBvZiAiZXh0cmEgY3VycmVuY2llcyIpCjs7OyBh' + - 'dCB0aGUgc3RhcnQgb2YgQ29tcHV0YXRpb24gUGhhc2UuCjs7OyBOb3RlIHRoYXQgUkFXIHByaW1pdGl2ZXMgc3VjaCBhcyBbc2VuZF9yYXdfbWVzc2FnZV0gZG8gbm90' + - 'IHVwZGF0ZSB0aGlzIGZpZWxkLgpbaW50LCBjZWxsXSBnZXRfYmFsYW5jZSgpIGFzbSAiQkFMQU5DRSI7Cgo7OzsgUmV0dXJucyB0aGUgbG9naWNhbCB0aW1lIG9mIHRo' + - 'ZSBjdXJyZW50IHRyYW5zYWN0aW9uLgppbnQgY3VyX2x0KCkgYXNtICJMVElNRSI7Cgo7OzsgUmV0dXJucyB0aGUgc3RhcnRpbmcgbG9naWNhbCB0aW1lIG9mIHRoZSBj' + - 'dXJyZW50IGJsb2NrLgppbnQgYmxvY2tfbHQoKSBhc20gIkJMT0NLTFQiOwoKOzs7IENvbXB1dGVzIHRoZSByZXByZXNlbnRhdGlvbiBoYXNoIG9mIGEgYGNlbGxgIFtj' + - 'XSBhbmQgcmV0dXJucyBpdCBhcyBhIDI1Ni1iaXQgdW5zaWduZWQgaW50ZWdlciBgeGAuCjs7OyBVc2VmdWwgZm9yIHNpZ25pbmcgYW5kIGNoZWNraW5nIHNpZ25hdHVy' + - 'ZXMgb2YgYXJiaXRyYXJ5IGVudGl0aWVzIHJlcHJlc2VudGVkIGJ5IGEgdHJlZSBvZiBjZWxscy4KaW50IGNlbGxfaGFzaChjZWxsIGMpIGFzbSAiSEFTSENVIjsKCjs7' + - 'OyBDb21wdXRlcyB0aGUgaGFzaCBvZiBhIGBzbGljZSBzYCBhbmQgcmV0dXJucyBpdCBhcyBhIDI1Ni1iaXQgdW5zaWduZWQgaW50ZWdlciBgeGAuCjs7OyBUaGUgcmVz' + - 'dWx0IGlzIHRoZSBzYW1lIGFzIGlmIGFuIG9yZGluYXJ5IGNlbGwgY29udGFpbmluZyBvbmx5IGRhdGEgYW5kIHJlZmVyZW5jZXMgZnJvbSBgc2AgaGFkIGJlZW4gY3Jl' + - 'YXRlZAo7OzsgYW5kIGl0cyBoYXNoIGNvbXB1dGVkIGJ5IFtjZWxsX2hhc2hdLgppbnQgc2xpY2VfaGFzaChzbGljZSBzKSBhc20gIkhBU0hTVSI7Cgo7OzsgQ29tcHV0' + - 'ZXMgc2hhMjU2IG9mIHRoZSBkYXRhIGJpdHMgb2YgYHNsaWNlYCBbc10uIElmIHRoZSBiaXQgbGVuZ3RoIG9mIGBzYCBpcyBub3QgZGl2aXNpYmxlIGJ5IGVpZ2h0LAo7' + - 'OzsgdGhyb3dzIGEgY2VsbCB1bmRlcmZsb3cgZXhjZXB0aW9uLiBUaGUgaGFzaCB2YWx1ZSBpcyByZXR1cm5lZCBhcyBhIDI1Ni1iaXQgdW5zaWduZWQgaW50ZWdlciBg' + - 'eGAuCmludCBzdHJpbmdfaGFzaChzbGljZSBzKSBhc20gIlNIQTI1NlUiOwoKey0KICAjIFNpZ25hdHVyZSBjaGVja3MKLX0KCjs7OyBDaGVja3MgdGhlIEVkMjU1MTkt' + - 'YHNpZ25hdHVyZWAgb2YgYSBgaGFzaGAgKGEgMjU2LWJpdCB1bnNpZ25lZCBpbnRlZ2VyLCB1c3VhbGx5IGNvbXB1dGVkIGFzIHRoZSBoYXNoIG9mIHNvbWUgZGF0YSkK' + - 'Ozs7IHVzaW5nIFtwdWJsaWNfa2V5XSAoYWxzbyByZXByZXNlbnRlZCBieSBhIDI1Ni1iaXQgdW5zaWduZWQgaW50ZWdlcikuCjs7OyBUaGUgc2lnbmF0dXJlIG11c3Qg' + - 'Y29udGFpbiBhdCBsZWFzdCA1MTIgZGF0YSBiaXRzOyBvbmx5IHRoZSBmaXJzdCA1MTIgYml0cyBhcmUgdXNlZC4KOzs7IFRoZSByZXN1bHQgaXMgYOKIkjFgIGlmIHRo' + - 'ZSBzaWduYXR1cmUgaXMgdmFsaWQsIGAwYCBvdGhlcndpc2UuCjs7OyBOb3RlIHRoYXQgYENIS1NJR05VYCBjcmVhdGVzIGEgMjU2LWJpdCBzbGljZSB3aXRoIHRoZSBo' + - 'YXNoIGFuZCBjYWxscyBgQ0hLU0lHTlNgLgo7OzsgVGhhdCBpcywgaWYgW2hhc2hdIGlzIGNvbXB1dGVkIGFzIHRoZSBoYXNoIG9mIHNvbWUgZGF0YSwgdGhlc2UgZGF0' + - 'YSBhcmUgaGFzaGVkIHR3aWNlLAo7OzsgdGhlIHNlY29uZCBoYXNoaW5nIG9jY3VycmluZyBpbnNpZGUgYENIS1NJR05TYC4KaW50IGNoZWNrX3NpZ25hdHVyZShpbnQg' + - 'aGFzaCwgc2xpY2Ugc2lnbmF0dXJlLCBpbnQgcHVibGljX2tleSkgYXNtICJDSEtTSUdOVSI7Cgo7OzsgQ2hlY2tzIHdoZXRoZXIgW3NpZ25hdHVyZV0gaXMgYSB2YWxp' + - 'ZCBFZDI1NTE5LXNpZ25hdHVyZSBvZiB0aGUgZGF0YSBwb3J0aW9uIG9mIGBzbGljZSBkYXRhYCB1c2luZyBgcHVibGljX2tleWAsCjs7OyBzaW1pbGFybHkgdG8gW2No' + - 'ZWNrX3NpZ25hdHVyZV0uCjs7OyBJZiB0aGUgYml0IGxlbmd0aCBvZiBbZGF0YV0gaXMgbm90IGRpdmlzaWJsZSBieSBlaWdodCwgdGhyb3dzIGEgY2VsbCB1bmRlcmZs' + - 'b3cgZXhjZXB0aW9uLgo7OzsgVGhlIHZlcmlmaWNhdGlvbiBvZiBFZDI1NTE5IHNpZ25hdHVyZXMgaXMgdGhlIHN0YW5kYXJkIG9uZSwKOzs7IHdpdGggc2hhMjU2IHVz' + - 'ZWQgdG8gcmVkdWNlIFtkYXRhXSB0byB0aGUgMjU2LWJpdCBudW1iZXIgdGhhdCBpcyBhY3R1YWxseSBzaWduZWQuCmludCBjaGVja19kYXRhX3NpZ25hdHVyZShzbGlj' + - 'ZSBkYXRhLCBzbGljZSBzaWduYXR1cmUsIGludCBwdWJsaWNfa2V5KSBhc20gIkNIS1NJR05TIjsKCnstLS0KICAjIENvbXB1dGF0aW9uIG9mIGJvYyBzaXplCiAgVGhl' + - 'IHByaW1pdGl2ZXMgYmVsb3cgbWF5IGJlIHVzZWZ1bCBmb3IgY29tcHV0aW5nIHN0b3JhZ2UgZmVlcyBvZiB1c2VyLXByb3ZpZGVkIGRhdGEuCi19Cgo7OzsgUmV0dXJu' + - 'cyBgKHgsIHksIHosIC0xKWAgb3IgYChudWxsLCBudWxsLCBudWxsLCAwKWAuCjs7OyBSZWN1cnNpdmVseSBjb21wdXRlcyB0aGUgY291bnQgb2YgZGlzdGluY3QgY2Vs' + - 'bHMgYHhgLCBkYXRhIGJpdHMgYHlgLCBhbmQgY2VsbCByZWZlcmVuY2VzIGB6YAo7OzsgaW4gdGhlIERBRyByb290ZWQgYXQgYGNlbGxgIFtjXSwgZWZmZWN0aXZlbHkg' + - 'cmV0dXJuaW5nIHRoZSB0b3RhbCBzdG9yYWdlIHVzZWQgYnkgdGhpcyBEQUcgdGFraW5nIGludG8gYWNjb3VudAo7OzsgdGhlIGlkZW50aWZpY2F0aW9uIG9mIGVxdWFs' + - 'IGNlbGxzLgo7OzsgVGhlIHZhbHVlcyBvZiBgeGAsIGB5YCwgYW5kIGB6YCBhcmUgY29tcHV0ZWQgYnkgYSBkZXB0aC1maXJzdCB0cmF2ZXJzYWwgb2YgdGhpcyBEQUcs' + - 'Cjs7OyB3aXRoIGEgaGFzaCB0YWJsZSBvZiB2aXNpdGVkIGNlbGwgaGFzaGVzIHVzZWQgdG8gcHJldmVudCB2aXNpdHMgb2YgYWxyZWFkeS12aXNpdGVkIGNlbGxzLgo7' + - 'OzsgVGhlIHRvdGFsIGNvdW50IG9mIHZpc2l0ZWQgY2VsbHMgYHhgIGNhbm5vdCBleGNlZWQgbm9uLW5lZ2F0aXZlIFttYXhfY2VsbHNdOwo7Ozsgb3RoZXJ3aXNlIHRo' + - 'ZSBjb21wdXRhdGlvbiBpcyBhYm9ydGVkIGJlZm9yZSB2aXNpdGluZyB0aGUgYChtYXhfY2VsbHMgKyAxKWAtc3QgY2VsbCBhbmQKOzs7IGEgemVybyBmbGFnIGlzIHJl' + - 'dHVybmVkIHRvIGluZGljYXRlIGZhaWx1cmUuIElmIFtjXSBpcyBgbnVsbGAsIHJldHVybnMgYHggPSB5ID0geiA9IDBgLgooaW50LCBpbnQsIGludCkgY29tcHV0ZV9k' + - 'YXRhX3NpemUoY2VsbCBjLCBpbnQgbWF4X2NlbGxzKSBpbXB1cmUgYXNtICJDREFUQVNJWkUiOwoKOzs7IFNpbWlsYXIgdG8gW2NvbXB1dGVfZGF0YV9zaXplP10sIGJ1' + - 'dCBhY2NlcHRpbmcgYSBgc2xpY2VgIFtzXSBpbnN0ZWFkIG9mIGEgYGNlbGxgLgo7OzsgVGhlIHJldHVybmVkIHZhbHVlIG9mIGB4YCBkb2VzIG5vdCB0YWtlIGludG8g' + - 'YWNjb3VudCB0aGUgY2VsbCB0aGF0IGNvbnRhaW5zIHRoZSBgc2xpY2VgIFtzXSBpdHNlbGY7Cjs7OyBob3dldmVyLCB0aGUgZGF0YSBiaXRzIGFuZCB0aGUgY2VsbCBy' + - 'ZWZlcmVuY2VzIG9mIFtzXSBhcmUgYWNjb3VudGVkIGZvciBpbiBgeWAgYW5kIGB6YC4KKGludCwgaW50LCBpbnQpIHNsaWNlX2NvbXB1dGVfZGF0YV9zaXplKHNsaWNl' + - 'IHMsIGludCBtYXhfY2VsbHMpIGltcHVyZSBhc20gIlNEQVRBU0laRSI7Cgo7OzsgQSBub24tcXVpZXQgdmVyc2lvbiBvZiBbY29tcHV0ZV9kYXRhX3NpemU/XSB0aGF0' + - 'IHRocm93cyBhIGNlbGwgb3ZlcmZsb3cgZXhjZXB0aW9uIChgOGApIG9uIGZhaWx1cmUuCihpbnQsIGludCwgaW50LCBpbnQpIGNvbXB1dGVfZGF0YV9zaXplPyhjZWxs' + - 'IGMsIGludCBtYXhfY2VsbHMpIGFzbSAiQ0RBVEFTSVpFUSBOVUxMU1dBUElGTk9UMiBOVUxMU1dBUElGTk9UIjsKCjs7OyBBIG5vbi1xdWlldCB2ZXJzaW9uIG9mIFtz' + - 'bGljZV9jb21wdXRlX2RhdGFfc2l6ZT9dIHRoYXQgdGhyb3dzIGEgY2VsbCBvdmVyZmxvdyBleGNlcHRpb24gKDgpIG9uIGZhaWx1cmUuCihpbnQsIGludCwgaW50LCBp' + - 'bnQpIHNsaWNlX2NvbXB1dGVfZGF0YV9zaXplPyhjZWxsIGMsIGludCBtYXhfY2VsbHMpIGFzbSAiU0RBVEFTSVpFUSBOVUxMU1dBUElGTk9UMiBOVUxMU1dBUElGTk9U' + - 'IjsKCjs7OyBUaHJvd3MgYW4gZXhjZXB0aW9uIHdpdGggZXhpdF9jb2RlIGV4Y25vIGlmIGNvbmQgaXMgbm90IDAgKGNvbW1lbnRlZCBzaW5jZSBpbXBsZW1lbnRlZCBp' + - 'biBjb21waWxhdG9yKQo7OyAoKSB0aHJvd19pZihpbnQgZXhjbm8sIGludCBjb25kKSBpbXB1cmUgYXNtICJUSFJPV0FSR0lGIjsKCnstLQogICMgRGVidWcgcHJpbWl0' + - 'aXZlcwogIE9ubHkgd29ya3MgZm9yIGxvY2FsIFRWTSBleGVjdXRpb24gd2l0aCBkZWJ1ZyBsZXZlbCB2ZXJib3NpdHkKLX0KOzs7IER1bXBzIHRoZSBzdGFjayAoYXQg' + - 'bW9zdCB0aGUgdG9wIDI1NSB2YWx1ZXMpIGFuZCBzaG93cyB0aGUgdG90YWwgc3RhY2sgZGVwdGguCigpIGR1bXBfc3RhY2soKSBpbXB1cmUgYXNtICJEVU1QU1RLIjsK' + - 'CnstCiAgIyBQZXJzaXN0ZW50IHN0b3JhZ2Ugc2F2ZSBhbmQgbG9hZAotfQoKOzs7IFJldHVybnMgdGhlIHBlcnNpc3RlbnQgY29udHJhY3Qgc3RvcmFnZSBjZWxsLiBJ' + - 'dCBjYW4gYmUgcGFyc2VkIG9yIG1vZGlmaWVkIHdpdGggc2xpY2UgYW5kIGJ1aWxkZXIgcHJpbWl0aXZlcyBsYXRlci4KY2VsbCBnZXRfZGF0YSgpIGFzbSAiYzQgUFVT' + - 'SCI7Cgo7OzsgU2V0cyBgY2VsbGAgW2NdIGFzIHBlcnNpc3RlbnQgY29udHJhY3QgZGF0YS4gWW91IGNhbiB1cGRhdGUgcGVyc2lzdGVudCBjb250cmFjdCBzdG9yYWdl' + - 'IHdpdGggdGhpcyBwcmltaXRpdmUuCigpIHNldF9kYXRhKGNlbGwgYykgaW1wdXJlIGFzbSAiYzQgUE9QIjsKCnstCiAgIyBDb250aW51YXRpb24gcHJpbWl0aXZlcwot' + - 'fQo7OzsgVXN1YWxseSBgYzNgIGhhcyBhIGNvbnRpbnVhdGlvbiBpbml0aWFsaXplZCBieSB0aGUgd2hvbGUgY29kZSBvZiB0aGUgY29udHJhY3QuIEl0IGlzIHVzZWQg' + - 'Zm9yIGZ1bmN0aW9uIGNhbGxzLgo7OzsgVGhlIHByaW1pdGl2ZSByZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIGBjM2AuCmNvbnQgZ2V0X2MzKCkgaW1wdXJlIGFz' + - 'bSAiYzMgUFVTSCI7Cgo7OzsgVXBkYXRlcyB0aGUgY3VycmVudCB2YWx1ZSBvZiBgYzNgLiBVc3VhbGx5LCBpdCBpcyB1c2VkIGZvciB1cGRhdGluZyBzbWFydCBjb250' + - 'cmFjdCBjb2RlIGluIHJ1bi10aW1lLgo7OzsgTm90ZSB0aGF0IGFmdGVyIGV4ZWN1dGlvbiBvZiB0aGlzIHByaW1pdGl2ZSB0aGUgY3VycmVudCBjb2RlCjs7OyAoYW5k' + - 'IHRoZSBzdGFjayBvZiByZWN1cnNpdmUgZnVuY3Rpb24gY2FsbHMpIHdvbid0IGNoYW5nZSwKOzs7IGJ1dCBhbnkgb3RoZXIgZnVuY3Rpb24gY2FsbCB3aWxsIHVzZSBh' + - 'IGZ1bmN0aW9uIGZyb20gdGhlIG5ldyBjb2RlLgooKSBzZXRfYzMoY29udCBjKSBpbXB1cmUgYXNtICJjMyBQT1AiOwoKOzs7IFRyYW5zZm9ybXMgYSBgc2xpY2VgIFtz' + - 'XSBpbnRvIGEgc2ltcGxlIG9yZGluYXJ5IGNvbnRpbnVhdGlvbiBgY2AsIHdpdGggYGMuY29kZSA9IHNgIGFuZCBhbiBlbXB0eSBzdGFjayBhbmQgc2F2ZWxpc3QuCmNv' + - 'bnQgYmxlc3Moc2xpY2UgcykgaW1wdXJlIGFzbSAiQkxFU1MiOwoKey0tLQogICMgR2FzIHJlbGF0ZWQgcHJpbWl0aXZlcwotfQoKOzs7IFNldHMgY3VycmVudCBnYXMg' + - 'bGltaXQgYGdsYCB0byBpdHMgbWF4aW1hbCBhbGxvd2VkIHZhbHVlIGBnbWAsIGFuZCByZXNldHMgdGhlIGdhcyBjcmVkaXQgYGdjYCB0byB6ZXJvLAo7OzsgZGVjcmVh' + - 'c2luZyB0aGUgdmFsdWUgb2YgYGdyYCBieSBgZ2NgIGluIHRoZSBwcm9jZXNzLgo7OzsgSW4gb3RoZXIgd29yZHMsIHRoZSBjdXJyZW50IHNtYXJ0IGNvbnRyYWN0IGFn' + - 'cmVlcyB0byBidXkgc29tZSBnYXMgdG8gZmluaXNoIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLgo7OzsgVGhpcyBhY3Rpb24gaXMgcmVxdWlyZWQgdG8gcHJvY2VzcyBl' + - 'eHRlcm5hbCBtZXNzYWdlcywgd2hpY2ggYnJpbmcgbm8gdmFsdWUgKGhlbmNlIG5vIGdhcykgd2l0aCB0aGVtc2VsdmVzLgo7OzsKOzs7IEZvciBtb3JlIGRldGFpbHMg' + - 'Y2hlY2sgW2FjY2VwdF9tZXNzYWdlIGVmZmVjdHNdKGh0dHBzOi8vdG9uLm9yZy9kb2NzLyMvc21hcnQtY29udHJhY3RzL2FjY2VwdCkuCigpIGFjY2VwdF9tZXNzYWdl' + - 'KCkgaW1wdXJlIGFzbSAiQUNDRVBUIjsKCjs7OyBTZXRzIGN1cnJlbnQgZ2FzIGxpbWl0IGBnbGAgdG8gdGhlIG1pbmltdW0gb2YgbGltaXQgYW5kIGBnbWAsIGFuZCBy' + - 'ZXNldHMgdGhlIGdhcyBjcmVkaXQgYGdjYCB0byB6ZXJvLgo7OzsgSWYgdGhlIGdhcyBjb25zdW1lZCBzbyBmYXIgKGluY2x1ZGluZyB0aGUgcHJlc2VudCBpbnN0cnVj' + - 'dGlvbikgZXhjZWVkcyB0aGUgcmVzdWx0aW5nIHZhbHVlIG9mIGBnbGAsCjs7OyBhbiAodW5oYW5kbGVkKSBvdXQgb2YgZ2FzIGV4Y2VwdGlvbiBpcyB0aHJvd24gYmVm' + - 'b3JlIHNldHRpbmcgbmV3IGdhcyBsaW1pdHMuCjs7OyBOb3RpY2UgdGhhdCBbc2V0X2dhc19saW1pdF0gd2l0aCBhbiBhcmd1bWVudCBgbGltaXQg4omlIDJeNjMg4oiS' + - 'IDFgIGlzIGVxdWl2YWxlbnQgdG8gW2FjY2VwdF9tZXNzYWdlXS4KKCkgc2V0X2dhc19saW1pdChpbnQgbGltaXQpIGltcHVyZSBhc20gIlNFVEdBU0xJTUlUIjsKCjs7' + - 'OyBDb21taXRzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHJlZ2lzdGVycyBgYzRgICjigJxwZXJzaXN0ZW50IGRhdGHigJ0pIGFuZCBgYzVgICjigJxhY3Rpb25z4oCdKQo7' + - 'Ozsgc28gdGhhdCB0aGUgY3VycmVudCBleGVjdXRpb24gaXMgY29uc2lkZXJlZCDigJxzdWNjZXNzZnVs4oCdIHdpdGggdGhlIHNhdmVkIHZhbHVlcyBldmVuIGlmIGFu' + - 'IGV4Y2VwdGlvbgo7OzsgaW4gQ29tcHV0YXRpb24gUGhhc2UgaXMgdGhyb3duIGxhdGVyLgooKSBjb21taXQoKSBpbXB1cmUgYXNtICJDT01NSVQiOwoKOzs7IE5vdCBp' + - 'bXBsZW1lbnRlZAo7OzsgQ29tcHV0ZXMgdGhlIGFtb3VudCBvZiBnYXMgdGhhdCBjYW4gYmUgYm91Z2h0IGZvciBgYW1vdW50YCBuYW5vVE9OcywKOzs7IGFuZCBzZXRz' + - 'IGBnbGAgYWNjb3JkaW5nbHkgaW4gdGhlIHNhbWUgd2F5IGFzIFtzZXRfZ2FzX2xpbWl0XS4KOzsoKSBidXlfZ2FzKGludCBhbW91bnQpIGltcHVyZSBhc20gIkJVWUdB' + - 'UyI7Cgo7OzsgQ29tcHV0ZXMgdGhlIG1pbmltdW0gb2YgdHdvIGludGVnZXJzIFt4XSBhbmQgW3ldLgppbnQgbWluKGludCB4LCBpbnQgeSkgYXNtICJNSU4iOwoKOzs7' + - 'IENvbXB1dGVzIHRoZSBtYXhpbXVtIG9mIHR3byBpbnRlZ2VycyBbeF0gYW5kIFt5XS4KaW50IG1heChpbnQgeCwgaW50IHkpIGFzbSAiTUFYIjsKCjs7OyBTb3J0cyB0' + - 'd28gaW50ZWdlcnMuCihpbnQsIGludCkgbWlubWF4KGludCB4LCBpbnQgeSkgYXNtICJNSU5NQVgiOwoKOzs7IENvbXB1dGVzIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBh' + - 'biBpbnRlZ2VyIFt4XS4KaW50IGFicyhpbnQgeCkgYXNtICJBQlMiOwoKey0KICAjIFNsaWNlIHByaW1pdGl2ZXMKCiAgSXQgaXMgc2FpZCB0aGF0IGEgcHJpbWl0aXZl' + - 'IF9sb2Fkc18gc29tZSBkYXRhLAogIGlmIGl0IHJldHVybnMgdGhlIGRhdGEgYW5kIHRoZSByZW1haW5kZXIgb2YgdGhlIHNsaWNlCiAgKHNvIGl0IGNhbiBhbHNvIGJl' + - 'IHVzZWQgYXMgW21vZGlmeWluZyBtZXRob2RdKGh0dHBzOi8vdG9uLm9yZy9kb2NzLyMvZnVuYy9zdGF0ZW1lbnRzP2lkPW1vZGlmeWluZy1tZXRob2RzKSkuCgogIEl0' + - 'IGlzIHNhaWQgdGhhdCBhIHByaW1pdGl2ZSBfcHJlbG9hZHNfIHNvbWUgZGF0YSwgaWYgaXQgcmV0dXJucyBvbmx5IHRoZSBkYXRhCiAgKGl0IGNhbiBiZSB1c2VkIGFz' + - 'IFtub24tbW9kaWZ5aW5nIG1ldGhvZF0oaHR0cHM6Ly90b24ub3JnL2RvY3MvIy9mdW5jL3N0YXRlbWVudHM/aWQ9bm9uLW1vZGlmeWluZy1tZXRob2RzKSkuCgogIFVu' + - 'bGVzcyBvdGhlcndpc2Ugc3RhdGVkLCBsb2FkaW5nIGFuZCBwcmVsb2FkaW5nIHByaW1pdGl2ZXMgcmVhZCB0aGUgZGF0YSBmcm9tIGEgcHJlZml4IG9mIHRoZSBzbGlj' + - 'ZS4KLX0KCgo7OzsgQ29udmVydHMgYSBgY2VsbGAgW2NdIGludG8gYSBgc2xpY2VgLiBOb3RpY2UgdGhhdCBbY10gbXVzdCBiZSBlaXRoZXIgYW4gb3JkaW5hcnkgY2Vs' + - 'bCwKOzs7IG9yIGFuIGV4b3RpYyBjZWxsIChzZWUgW1RWTS5wZGZdKGh0dHBzOi8vdG9uLWJsb2NrY2hhaW4uZ2l0aHViLmlvL2RvY3MvdHZtLnBkZiksIDMuMS4yKQo7' + - 'Ozsgd2hpY2ggaXMgYXV0b21hdGljYWxseSBsb2FkZWQgdG8geWllbGQgYW4gb3JkaW5hcnkgY2VsbCBgYydgLCBjb252ZXJ0ZWQgaW50byBhIGBzbGljZWAgYWZ0ZXJ3' + - 'YXJkcy4Kc2xpY2UgYmVnaW5fcGFyc2UoY2VsbCBjKSBhc20gIkNUT1MiOwoKOzs7IENoZWNrcyBpZiBbc10gaXMgZW1wdHkuIElmIG5vdCwgdGhyb3dzIGFuIGV4Y2Vw' + - 'dGlvbi4KKCkgZW5kX3BhcnNlKHNsaWNlIHMpIGltcHVyZSBhc20gIkVORFMiOwoKOzs7IExvYWRzIHRoZSBmaXJzdCByZWZlcmVuY2UgZnJvbSB0aGUgc2xpY2UuCihz' + - 'bGljZSwgY2VsbCkgbG9hZF9yZWYoc2xpY2UgcykgYXNtKC0+IDEgMCkgIkxEUkVGIjsKCjs7OyBQcmVsb2FkcyB0aGUgZmlyc3QgcmVmZXJlbmNlIGZyb20gdGhlIHNs' + - 'aWNlLgpjZWxsIHByZWxvYWRfcmVmKHNsaWNlIHMpIGFzbSAiUExEUkVGIjsKCnstIEZ1bmN0aW9ucyBiZWxvdyBhcmUgY29tbWVudGVkIGJlY2F1c2UgYXJlIGltcGxl' + - 'bWVudGVkIG9uIGNvbXBpbGF0b3IgbGV2ZWwgZm9yIG9wdGltaXNhdGlvbiAtfQoKOzs7IExvYWRzIGEgc2lnbmVkIFtsZW5dLWJpdCBpbnRlZ2VyIGZyb20gYSBzbGlj' + - 'ZSBbc10uCjs7IChzbGljZSwgaW50KSB+bG9hZF9pbnQoc2xpY2UgcywgaW50IGxlbikgYXNtKHMgbGVuIC0+IDEgMCkgIkxESVgiOwoKOzs7IExvYWRzIGFuIHVuc2ln' + - 'bmVkIFtsZW5dLWJpdCBpbnRlZ2VyIGZyb20gYSBzbGljZSBbc10uCjs7IChzbGljZSwgaW50KSB+bG9hZF91aW50KHNsaWNlIHMsIGludCBsZW4pIGFzbSggLT4gMSAw' + - 'KSAiTERVWCI7Cgo7OzsgUHJlbG9hZHMgYSBzaWduZWQgW2xlbl0tYml0IGludGVnZXIgZnJvbSBhIHNsaWNlIFtzXS4KOzsgaW50IHByZWxvYWRfaW50KHNsaWNlIHMs' + - 'IGludCBsZW4pIGFzbSAiUExESVgiOwoKOzs7IFByZWxvYWRzIGFuIHVuc2lnbmVkIFtsZW5dLWJpdCBpbnRlZ2VyIGZyb20gYSBzbGljZSBbc10uCjs7IGludCBwcmVs' + - 'b2FkX3VpbnQoc2xpY2UgcywgaW50IGxlbikgYXNtICJQTERVWCI7Cgo7OzsgTG9hZHMgdGhlIGZpcnN0IGAwIOKJpCBsZW4g4omkIDEwMjNgIGJpdHMgZnJvbSBzbGlj' + - 'ZSBbc10gaW50byBhIHNlcGFyYXRlIGBzbGljZSBzJydgLgo7OyAoc2xpY2UsIHNsaWNlKSBsb2FkX2JpdHMoc2xpY2UgcywgaW50IGxlbikgYXNtKHMgbGVuIC0+IDEg' + - 'MCkgIkxEU0xJQ0VYIjsKCjs7OyBQcmVsb2FkcyB0aGUgZmlyc3QgYDAg4omkIGxlbiDiiaQgMTAyM2AgYml0cyBmcm9tIHNsaWNlIFtzXSBpbnRvIGEgc2VwYXJhdGUg' + - 'YHNsaWNlIHMnJ2AuCjs7IHNsaWNlIHByZWxvYWRfYml0cyhzbGljZSBzLCBpbnQgbGVuKSBhc20gIlBMRFNMSUNFWCI7Cgo7OzsgTG9hZHMgc2VyaWFsaXplZCBhbW91' + - 'bnQgb2YgVG9uQ29pbnMgKGFueSB1bnNpZ25lZCBpbnRlZ2VyIHVwIHRvIGAyXjEyMCAtIDFgKS4KKHNsaWNlLCBpbnQpIGxvYWRfZ3JhbXMoc2xpY2UgcykgYXNtKC0+' + - 'IDEgMCkgIkxER1JBTVMiOwooc2xpY2UsIGludCkgbG9hZF9jb2lucyhzbGljZSBzKSBhc20oLT4gMSAwKSAiTERWQVJVSU5UMTYiOwoKKHNsaWNlLCBpbnQpIGxvYWRf' + - 'dmFyaW50MTYoc2xpY2UgcykgYXNtKC0+IDEgMCkgIkxEVkFSSU5UMTYiOwooc2xpY2UsIGludCkgbG9hZF92YXJpbnQzMihzbGljZSBzKSBhc20oLT4gMSAwKSAiTERW' + - 'QVJJTlQzMiI7CihzbGljZSwgaW50KSBsb2FkX3ZhcnVpbnQxNihzbGljZSBzKSBhc20oLT4gMSAwKSAiTERWQVJVSU5UMTYiOwooc2xpY2UsIGludCkgbG9hZF92YXJ1' + - 'aW50MzIoc2xpY2UgcykgYXNtKC0+IDEgMCkgIkxEVkFSVUlOVDMyIjsKCjs7OyBSZXR1cm5zIGFsbCBidXQgdGhlIGZpcnN0IGAwIOKJpCBsZW4g4omkIDEwMjNgIGJp' + - 'dHMgb2YgYHNsaWNlYCBbc10uCnNsaWNlIHNraXBfYml0cyhzbGljZSBzLCBpbnQgbGVuKSBhc20gIlNEU0tJUEZJUlNUIjsKKHNsaWNlLCAoKSkgfnNraXBfYml0cyhz' + - 'bGljZSBzLCBpbnQgbGVuKSBhc20gIlNEU0tJUEZJUlNUIjsKCjs7OyBSZXR1cm5zIHRoZSBmaXJzdCBgMCDiiaQgbGVuIOKJpCAxMDIzYCBiaXRzIG9mIGBzbGljZWAg' + - 'W3NdLgpzbGljZSBmaXJzdF9iaXRzKHNsaWNlIHMsIGludCBsZW4pIGFzbSAiU0RDVVRGSVJTVCI7Cgo7OzsgUmV0dXJucyBhbGwgYnV0IHRoZSBsYXN0IGAwIOKJpCBs' + - 'ZW4g4omkIDEwMjNgIGJpdHMgb2YgYHNsaWNlYCBbc10uCnNsaWNlIHNraXBfbGFzdF9iaXRzKHNsaWNlIHMsIGludCBsZW4pIGFzbSAiU0RTS0lQTEFTVCI7CihzbGlj' + - 'ZSwgKCkpIH5za2lwX2xhc3RfYml0cyhzbGljZSBzLCBpbnQgbGVuKSBhc20gIlNEU0tJUExBU1QiOwoKOzs7IFJldHVybnMgdGhlIGxhc3QgYDAg4omkIGxlbiDiiaQg' + - 'MTAyM2AgYml0cyBvZiBgc2xpY2VgIFtzXS4Kc2xpY2Ugc2xpY2VfbGFzdChzbGljZSBzLCBpbnQgbGVuKSBhc20gIlNEQ1VUTEFTVCI7Cgo7OzsgTG9hZHMgYSBkaWN0' + - 'aW9uYXJ5IGBEYCAoSGFzaE1hcEUpIGZyb20gYHNsaWNlYCBbc10uCjs7OyAocmV0dXJucyBgbnVsbGAgaWYgYG5vdGhpbmdgIGNvbnN0cnVjdG9yIGlzIHVzZWQpLgoo' + - 'c2xpY2UsIGNlbGwpIGxvYWRfZGljdChzbGljZSBzKSBhc20oLT4gMSAwKSAiTERESUNUIjsKCjs7OyBQcmVsb2FkcyBhIGRpY3Rpb25hcnkgYERgIGZyb20gYHNsaWNl' + - 'YCBbc10uCmNlbGwgcHJlbG9hZF9kaWN0KHNsaWNlIHMpIGFzbSAiUExERElDVCI7Cgo7OzsgTG9hZHMgYSBkaWN0aW9uYXJ5IGFzIFtsb2FkX2RpY3RdLCBidXQgcmV0' + - 'dXJucyBvbmx5IHRoZSByZW1haW5kZXIgb2YgdGhlIHNsaWNlLgpzbGljZSBza2lwX2RpY3Qoc2xpY2UgcykgYXNtICJTS0lQRElDVCI7CihzbGljZSwgKCkpIH5za2lw' + - 'X2RpY3Qoc2xpY2UgcykgYXNtICJTS0lQRElDVCI7Cgo7OzsgTG9hZHMgKE1heWJlIF5DZWxsKSBmcm9tIGBzbGljZWAgW3NdLgo7OzsgSW4gb3RoZXIgd29yZHMgbG9h' + - 'ZHMgMSBiaXQgYW5kIGlmIGl0IGlzIHRydWUKOzs7IGxvYWRzIGZpcnN0IHJlZiBhbmQgcmV0dXJuIGl0IHdpdGggc2xpY2UgcmVtYWluZGVyCjs7OyBvdGhlcndpc2Ug' + - 'cmV0dXJucyBgbnVsbGAgYW5kIHNsaWNlIHJlbWFpbmRlcgooc2xpY2UsIGNlbGwpIGxvYWRfbWF5YmVfcmVmKHNsaWNlIHMpIGFzbSgtPiAxIDApICJMRE9QVFJFRiI7' + - 'Cgo7OzsgUHJlbG9hZHMgKE1heWJlIF5DZWxsKSBmcm9tIGBzbGljZWAgW3NdLgpjZWxsIHByZWxvYWRfbWF5YmVfcmVmKHNsaWNlIHMpIGFzbSAiUExET1BUUkVGIjsK' + - 'Cgo7OzsgUmV0dXJucyB0aGUgZGVwdGggb2YgYGNlbGxgIFtjXS4KOzs7IElmIFtjXSBoYXMgbm8gcmVmZXJlbmNlcywgdGhlbiByZXR1cm4gYDBgOwo7Ozsgb3RoZXJ3' + - 'aXNlIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyBvbmUgcGx1cyB0aGUgbWF4aW11bSBvZiBkZXB0aHMgb2YgY2VsbHMgcmVmZXJyZWQgdG8gZnJvbSBbY10uCjs7OyBJZiBb' + - 'Y10gaXMgYSBgbnVsbGAgaW5zdGVhZCBvZiBhIGNlbGwsIHJldHVybnMgemVyby4KaW50IGNlbGxfZGVwdGgoY2VsbCBjKSBhc20gIkNERVBUSCI7CgoKey0KICAjIFNs' + - 'aWNlIHNpemUgcHJpbWl0aXZlcwotfQoKOzs7IFJldHVybnMgdGhlIG51bWJlciBvZiByZWZlcmVuY2VzIGluIGBzbGljZWAgW3NdLgppbnQgc2xpY2VfcmVmcyhzbGlj' + - 'ZSBzKSBhc20gIlNSRUZTIjsKCjs7OyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGF0YSBiaXRzIGluIGBzbGljZWAgW3NdLgppbnQgc2xpY2VfYml0cyhzbGljZSBzKSBh' + - 'c20gIlNCSVRTIjsKCjs7OyBSZXR1cm5zIGJvdGggdGhlIG51bWJlciBvZiBkYXRhIGJpdHMgYW5kIHRoZSBudW1iZXIgb2YgcmVmZXJlbmNlcyBpbiBgc2xpY2VgIFtz' + - 'XS4KKGludCwgaW50KSBzbGljZV9iaXRzX3JlZnMoc2xpY2UgcykgYXNtICJTQklUUkVGUyI7Cgo7OzsgQ2hlY2tzIHdoZXRoZXIgYSBgc2xpY2VgIFtzXSBpcyBlbXB0' + - 'eSAoaS5lLiwgY29udGFpbnMgbm8gYml0cyBvZiBkYXRhIGFuZCBubyBjZWxsIHJlZmVyZW5jZXMpLgppbnQgc2xpY2VfZW1wdHk/KHNsaWNlIHMpIGFzbSAiU0VNUFRZ' + - 'IjsKCjs7OyBDaGVja3Mgd2hldGhlciBgc2xpY2VgIFtzXSBoYXMgbm8gYml0cyBvZiBkYXRhLgppbnQgc2xpY2VfZGF0YV9lbXB0eT8oc2xpY2UgcykgYXNtICJTREVN' + - 'UFRZIjsKCjs7OyBDaGVja3Mgd2hldGhlciBgc2xpY2VgIFtzXSBoYXMgbm8gcmVmZXJlbmNlcy4KaW50IHNsaWNlX3JlZnNfZW1wdHk/KHNsaWNlIHMpIGFzbSAiU1JF' + - 'TVBUWSI7Cgo7OzsgUmV0dXJucyB0aGUgZGVwdGggb2YgYHNsaWNlYCBbc10uCjs7OyBJZiBbc10gaGFzIG5vIHJlZmVyZW5jZXMsIHRoZW4gcmV0dXJucyBgMGA7Cjs7' + - 'OyBvdGhlcndpc2UgdGhlIHJldHVybmVkIHZhbHVlIGlzIG9uZSBwbHVzIHRoZSBtYXhpbXVtIG9mIGRlcHRocyBvZiBjZWxscyByZWZlcnJlZCB0byBmcm9tIFtzXS4K' + - 'aW50IHNsaWNlX2RlcHRoKHNsaWNlIHMpIGFzbSAiU0RFUFRIIjsKCnstCiAgIyBCdWlsZGVyIHNpemUgcHJpbWl0aXZlcwotfQoKOzs7IFJldHVybnMgdGhlIG51bWJl' + - 'ciBvZiBjZWxsIHJlZmVyZW5jZXMgYWxyZWFkeSBzdG9yZWQgaW4gYGJ1aWxkZXJgIFtiXQppbnQgYnVpbGRlcl9yZWZzKGJ1aWxkZXIgYikgYXNtICJCUkVGUyI7Cgo7' + - 'OzsgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRhdGEgYml0cyBhbHJlYWR5IHN0b3JlZCBpbiBgYnVpbGRlcmAgW2JdLgppbnQgYnVpbGRlcl9iaXRzKGJ1aWxkZXIgYikg' + - 'YXNtICJCQklUUyI7Cgo7OzsgUmV0dXJucyB0aGUgZGVwdGggb2YgYGJ1aWxkZXJgIFtiXS4KOzs7IElmIG5vIGNlbGwgcmVmZXJlbmNlcyBhcmUgc3RvcmVkIGluIFti' + - 'XSwgdGhlbiByZXR1cm5zIDA7Cjs7OyBvdGhlcndpc2UgdGhlIHJldHVybmVkIHZhbHVlIGlzIG9uZSBwbHVzIHRoZSBtYXhpbXVtIG9mIGRlcHRocyBvZiBjZWxscyBy' + - 'ZWZlcnJlZCB0byBmcm9tIFtiXS4KaW50IGJ1aWxkZXJfZGVwdGgoYnVpbGRlciBiKSBhc20gIkJERVBUSCI7Cgp7LQogICMgQnVpbGRlciBwcmltaXRpdmVzCiAgSXQg' + - 'aXMgc2FpZCB0aGF0IGEgcHJpbWl0aXZlIF9zdG9yZXNfIGEgdmFsdWUgYHhgIGludG8gYSBidWlsZGVyIGBiYAogIGlmIGl0IHJldHVybnMgYSBtb2RpZmllZCB2ZXJz' + - 'aW9uIG9mIHRoZSBidWlsZGVyIGBiJ2Agd2l0aCB0aGUgdmFsdWUgYHhgIHN0b3JlZCBhdCB0aGUgZW5kIG9mIGl0LgogIEl0IGNhbiBiZSB1c2VkIGFzIFtub24tbW9k' + - 'aWZ5aW5nIG1ldGhvZF0oaHR0cHM6Ly90b24ub3JnL2RvY3MvIy9mdW5jL3N0YXRlbWVudHM/aWQ9bm9uLW1vZGlmeWluZy1tZXRob2RzKS4KCiAgQWxsIHRoZSBwcmlt' + - 'aXRpdmVzIGJlbG93IGZpcnN0IGNoZWNrIHdoZXRoZXIgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGluIHRoZSBgYnVpbGRlcmAsCiAgYW5kIG9ubHkgdGhlbiBjaGVjayB0' + - 'aGUgcmFuZ2Ugb2YgdGhlIHZhbHVlIGJlaW5nIHNlcmlhbGl6ZWQuCi19Cgo7OzsgQ3JlYXRlcyBhIG5ldyBlbXB0eSBgYnVpbGRlcmAuCmJ1aWxkZXIgYmVnaW5fY2Vs' + - 'bCgpIGFzbSAiTkVXQyI7Cgo7OzsgQ29udmVydHMgYSBgYnVpbGRlcmAgaW50byBhbiBvcmRpbmFyeSBgY2VsbGAuCmNlbGwgZW5kX2NlbGwoYnVpbGRlciBiKSBhc20g' + - 'IkVOREMiOwoKOzs7IFN0b3JlcyBhIHJlZmVyZW5jZSB0byBgY2VsbGAgW2NdIGludG8gYGJ1aWxkZXJgIFtiXS4KYnVpbGRlciBzdG9yZV9yZWYoYnVpbGRlciBiLCBj' + - 'ZWxsIGMpIGFzbShjIGIpICJTVFJFRiI7Cgo7OzsgU3RvcmVzIGFuIHVuc2lnbmVkIFtsZW5dLWJpdCBpbnRlZ2VyIGB4YCBpbnRvIGBiYCBmb3IgYDAg4omkIGxlbiDi' + - 'iaQgMjU2YC4KOzsgYnVpbGRlciBzdG9yZV91aW50KGJ1aWxkZXIgYiwgaW50IHgsIGludCBsZW4pIGFzbSh4IGIgbGVuKSAiU1RVWCI7Cgo7OzsgU3RvcmVzIGEgc2ln' + - 'bmVkIFtsZW5dLWJpdCBpbnRlZ2VyIGB4YCBpbnRvIGBiYCBmb3JgIDAg4omkIGxlbiDiiaQgMjU3YC4KOzsgYnVpbGRlciBzdG9yZV9pbnQoYnVpbGRlciBiLCBpbnQg' + - 'eCwgaW50IGxlbikgYXNtKHggYiBsZW4pICJTVElYIjsKCgo7OzsgU3RvcmVzIGBzbGljZWAgW3NdIGludG8gYGJ1aWxkZXJgIFtiXQpidWlsZGVyIHN0b3JlX3NsaWNl' + - 'KGJ1aWxkZXIgYiwgc2xpY2UgcykgYXNtICJTVFNMSUNFUiI7Cgo7OzsgU3RvcmVzIChzZXJpYWxpemVzKSBhbiBpbnRlZ2VyIFt4XSBpbiB0aGUgcmFuZ2UgYDAuLjJe' + - 'MTIwIOKIkiAxYCBpbnRvIGBidWlsZGVyYCBbYl0uCjs7OyBUaGUgc2VyaWFsaXphdGlvbiBvZiBbeF0gY29uc2lzdHMgb2YgYSA0LWJpdCB1bnNpZ25lZCBiaWctZW5k' + - 'aWFuIGludGVnZXIgYGxgLAo7Ozsgd2hpY2ggaXMgdGhlIHNtYWxsZXN0IGludGVnZXIgYGwg4omlIDBgLCBzdWNoIHRoYXQgYHggPCAyXjhsYCwKOzs7IGZvbGxvd2Vk' + - 'IGJ5IGFuIGA4bGAtYml0IHVuc2lnbmVkIGJpZy1lbmRpYW4gcmVwcmVzZW50YXRpb24gb2YgW3hdLgo7OzsgSWYgW3hdIGRvZXMgbm90IGJlbG9uZyB0byB0aGUgc3Vw' + - 'cG9ydGVkIHJhbmdlLCBhIHJhbmdlIGNoZWNrIGV4Y2VwdGlvbiBpcyB0aHJvd24uCjs7Owo7OzsgU3RvcmUgYW1vdW50cyBvZiBUb25Db2lucyB0byB0aGUgYnVpbGRl' + - 'ciBhcyBWYXJVSW50ZWdlciAxNgpidWlsZGVyIHN0b3JlX2dyYW1zKGJ1aWxkZXIgYiwgaW50IHgpIGFzbSAiU1RHUkFNUyI7CmJ1aWxkZXIgc3RvcmVfY29pbnMoYnVp' + - 'bGRlciBiLCBpbnQgeCkgYXNtICJTVFZBUlVJTlQxNiI7CgpidWlsZGVyIHN0b3JlX3ZhcmludDE2KGJ1aWxkZXIgYiwgaW50IHgpIGFzbSAiU1RWQVJJTlQxNiI7CmJ1' + - 'aWxkZXIgc3RvcmVfdmFyaW50MzIoYnVpbGRlciBiLCBpbnQgeCkgYXNtICJTVFZBUklOVDMyIjsKYnVpbGRlciBzdG9yZV92YXJ1aW50MTYoYnVpbGRlciBiLCBpbnQg' + - 'eCkgYXNtICJTVFZBUlVJTlQxNiI7CmJ1aWxkZXIgc3RvcmVfdmFydWludDMyKGJ1aWxkZXIgYiwgaW50IHgpIGFzbSAiU1RWQVJVSU5UMzIiOwoKOzs7IFN0b3JlcyBk' + - 'aWN0aW9uYXJ5IGBEYCByZXByZXNlbnRlZCBieSBgY2VsbGAgW2NdIG9yIGBudWxsYCBpbnRvIGBidWlsZGVyYCBbYl0uCjs7OyBJbiBvdGhlciB3b3Jkcywgc3RvcmVz' + - 'IGEgYDFgLWJpdCBhbmQgYSByZWZlcmVuY2UgdG8gW2NdIGlmIFtjXSBpcyBub3QgYG51bGxgIGFuZCBgMGAtYml0IG90aGVyd2lzZS4KYnVpbGRlciBzdG9yZV9kaWN0' + - 'KGJ1aWxkZXIgYiwgY2VsbCBjKSBhc20oYyBiKSAiU1RESUNUIjsKCjs7OyBTdG9yZXMgKE1heWJlIF5DZWxsKSB0byBidWlsZGVyOgo7OzsgaWYgY2VsbCBpcyBudWxs' + - 'IHN0b3JlIDEgemVybyBiaXQKOzs7IG90aGVyd2lzZSBzdG9yZSAxIHRydWUgYml0IGFuZCByZWYgdG8gY2VsbApidWlsZGVyIHN0b3JlX21heWJlX3JlZihidWlsZGVy' + - 'IGIsIGNlbGwgYykgYXNtKGMgYikgIlNUT1BUUkVGIjsKCgp7LQogICMgQWRkcmVzcyBtYW5pcHVsYXRpb24gcHJpbWl0aXZlcwogIFRoZSBhZGRyZXNzIG1hbmlwdWxh' + - 'dGlvbiBwcmltaXRpdmVzIGxpc3RlZCBiZWxvdyBzZXJpYWxpemUgYW5kIGRlc2VyaWFsaXplIHZhbHVlcyBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyBUTC1CIHNj' + - 'aGVtZToKICBgYGBUTC1CCiAgYWRkcl9ub25lJDAwID0gTXNnQWRkcmVzc0V4dDsKICBhZGRyX2V4dGVybiQwMSBsZW46KCMjIDgpIGV4dGVybmFsX2FkZHJlc3M6KGJp' + - 'dHMgbGVuKQogICAgICAgICAgICAgICA9IE1zZ0FkZHJlc3NFeHQ7CiAgYW55Y2FzdF9pbmZvJF8gZGVwdGg6KCM8PSAzMCkgeyBkZXB0aCA+PSAxIH0KICAgIHJld3Jp' + - 'dGVfcGZ4OihiaXRzIGRlcHRoKSA9IEFueWNhc3Q7CiAgYWRkcl9zdGQkMTAgYW55Y2FzdDooTWF5YmUgQW55Y2FzdCkKICAgIHdvcmtjaGFpbl9pZDppbnQ4IGFkZHJl' + - 'c3M6Yml0czI1NiA9IE1zZ0FkZHJlc3NJbnQ7CiAgYWRkcl92YXIkMTEgYW55Y2FzdDooTWF5YmUgQW55Y2FzdCkgYWRkcl9sZW46KCMjIDkpCiAgICB3b3JrY2hhaW5f' + - 'aWQ6aW50MzIgYWRkcmVzczooYml0cyBhZGRyX2xlbikgPSBNc2dBZGRyZXNzSW50OwogIF8gXzpNc2dBZGRyZXNzSW50ID0gTXNnQWRkcmVzczsKICBfIF86TXNnQWRk' + - 'cmVzc0V4dCA9IE1zZ0FkZHJlc3M7CgogIGludF9tc2dfaW5mbyQwIGlocl9kaXNhYmxlZDpCb29sIGJvdW5jZTpCb29sIGJvdW5jZWQ6Qm9vbAogICAgc3JjOk1zZ0Fk' + - 'ZHJlc3MgZGVzdDpNc2dBZGRyZXNzSW50CiAgICB2YWx1ZTpDdXJyZW5jeUNvbGxlY3Rpb24gaWhyX2ZlZTpHcmFtcyBmd2RfZmVlOkdyYW1zCiAgICBjcmVhdGVkX2x0' + - 'OnVpbnQ2NCBjcmVhdGVkX2F0OnVpbnQzMiA9IENvbW1vbk1zZ0luZm9SZWxheGVkOwogIGV4dF9vdXRfbXNnX2luZm8kMTEgc3JjOk1zZ0FkZHJlc3MgZGVzdDpNc2dB' + - 'ZGRyZXNzRXh0CiAgICBjcmVhdGVkX2x0OnVpbnQ2NCBjcmVhdGVkX2F0OnVpbnQzMiA9IENvbW1vbk1zZ0luZm9SZWxheGVkOwogIGBgYAogIEEgZGVzZXJpYWxpemVk' + - 'IGBNc2dBZGRyZXNzYCBpcyByZXByZXNlbnRlZCBieSBhIHR1cGxlIGB0YCBhcyBmb2xsb3dzOgoKICAtIGBhZGRyX25vbmVgIGlzIHJlcHJlc2VudGVkIGJ5IGB0ID0g' + - 'KDApYCwKICAgIGkuZS4sIGEgdHVwbGUgY29udGFpbmluZyBleGFjdGx5IG9uZSBpbnRlZ2VyIGVxdWFsIHRvIHplcm8uCiAgLSBgYWRkcl9leHRlcm5gIGlzIHJlcHJl' + - 'c2VudGVkIGJ5IGB0ID0gKDEsIHMpYCwKICAgIHdoZXJlIHNsaWNlIGBzYCBjb250YWlucyB0aGUgZmllbGQgYGV4dGVybmFsX2FkZHJlc3NgLiBJbiBvdGhlciB3b3Jk' + - 'cywgYAogICAgdGAgaXMgYSBwYWlyIChhIHR1cGxlIGNvbnNpc3Rpbmcgb2YgdHdvIGVudHJpZXMpLCBjb250YWluaW5nIGFuIGludGVnZXIgZXF1YWwgdG8gb25lIGFu' + - 'ZCBzbGljZSBgc2AuCiAgLSBgYWRkcl9zdGRgIGlzIHJlcHJlc2VudGVkIGJ5IGB0ID0gKDIsIHUsIHgsIHMpYCwKICAgIHdoZXJlIGB1YCBpcyBlaXRoZXIgYSBgbnVs' + - 'bGAgKGlmIGBhbnljYXN0YCBpcyBhYnNlbnQpIG9yIGEgc2xpY2UgYHMnYCBjb250YWluaW5nIGByZXdyaXRlX3BmeGAgKGlmIGFueWNhc3QgaXMgcHJlc2VudCkuCiAg' + - 'ICBOZXh0LCBpbnRlZ2VyIGB4YCBpcyB0aGUgYHdvcmtjaGFpbl9pZGAsIGFuZCBzbGljZSBgc2AgY29udGFpbnMgdGhlIGFkZHJlc3MuCiAgLSBgYWRkcl92YXJgIGlz' + - 'IHJlcHJlc2VudGVkIGJ5IGB0ID0gKDMsIHUsIHgsIHMpYCwKICAgIHdoZXJlIGB1YCwgYHhgLCBhbmQgYHNgIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyBmb3IgYGFk' + - 'ZHJfc3RkYC4KLX0KCjs7OyBMb2FkcyBmcm9tIHNsaWNlIFtzXSB0aGUgb25seSBwcmVmaXggdGhhdCBpcyBhIHZhbGlkIGBNc2dBZGRyZXNzYCwKOzs7IGFuZCByZXR1' + - 'cm5zIGJvdGggdGhpcyBwcmVmaXggYHMnYCBhbmQgdGhlIHJlbWFpbmRlciBgcycnYCBvZiBbc10gYXMgc2xpY2VzLgooc2xpY2UsIHNsaWNlKSBsb2FkX21zZ19hZGRy' + - 'KHNsaWNlIHMpIGFzbSgtPiAxIDApICJMRE1TR0FERFIiOwoKOzs7IERlY29tcG9zZXMgc2xpY2UgW3NdIGNvbnRhaW5pbmcgYSB2YWxpZCBgTXNnQWRkcmVzc2AgaW50' + - 'byBhIGB0dXBsZSB0YCB3aXRoIHNlcGFyYXRlIGZpZWxkcyBvZiB0aGlzIGBNc2dBZGRyZXNzYC4KOzs7IElmIFtzXSBpcyBub3QgYSB2YWxpZCBgTXNnQWRkcmVzc2As' + - 'IGEgY2VsbCBkZXNlcmlhbGl6YXRpb24gZXhjZXB0aW9uIGlzIHRocm93bi4KdHVwbGUgcGFyc2VfYWRkcihzbGljZSBzKSBhc20gIlBBUlNFTVNHQUREUiI7Cgo7Ozsg' + - 'UGFyc2VzIHNsaWNlIFtzXSBjb250YWluaW5nIGEgdmFsaWQgYE1zZ0FkZHJlc3NJbnRgICh1c3VhbGx5IGEgYG1zZ19hZGRyX3N0ZGApLAo7OzsgYXBwbGllcyByZXdy' + - 'aXRpbmcgZnJvbSB0aGUgYW55Y2FzdCAoaWYgcHJlc2VudCkgdG8gdGhlIHNhbWUtbGVuZ3RoIHByZWZpeCBvZiB0aGUgYWRkcmVzcywKOzs7IGFuZCByZXR1cm5zIGJv' + - 'dGggdGhlIHdvcmtjaGFpbiBhbmQgdGhlIDI1Ni1iaXQgYWRkcmVzcyBhcyBpbnRlZ2Vycy4KOzs7IElmIHRoZSBhZGRyZXNzIGlzIG5vdCAyNTYtYml0LCBvciBpZiBb' + - 'c10gaXMgbm90IGEgdmFsaWQgc2VyaWFsaXphdGlvbiBvZiBgTXNnQWRkcmVzc0ludGAsCjs7OyB0aHJvd3MgYSBjZWxsIGRlc2VyaWFsaXphdGlvbiBleGNlcHRpb24u' + - 'CihpbnQsIGludCkgcGFyc2Vfc3RkX2FkZHIoc2xpY2UgcykgYXNtICJSRVdSSVRFU1REQUREUiI7Cgo7OzsgQSB2YXJpYW50IG9mIFtwYXJzZV9zdGRfYWRkcl0gdGhh' + - 'dCByZXR1cm5zIHRoZSAocmV3cml0dGVuKSBhZGRyZXNzIGFzIGEgc2xpY2UgW3NdLAo7OzsgZXZlbiBpZiBpdCBpcyBub3QgZXhhY3RseSAyNTYgYml0IGxvbmcgKHJl' + - 'cHJlc2VudGVkIGJ5IGEgYG1zZ19hZGRyX3ZhcmApLgooaW50LCBzbGljZSkgcGFyc2VfdmFyX2FkZHIoc2xpY2UgcykgYXNtICJSRVdSSVRFVkFSQUREUiI7Cgp7LQog' + - 'ICMgRGljdGlvbmFyeSBwcmltaXRpdmVzCi19CgoKOzs7IFNldHMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBba2V5X2xlbl0tYml0IGtleSBzaWduZWQgaW5kZXgg' + - 'aW4gZGljdGlvbmFyeSBbZGljdF0gdG8gW3ZhbHVlXSAoY2VsbCksCjs7OyBhbmQgcmV0dXJucyB0aGUgcmVzdWx0aW5nIGRpY3Rpb25hcnkuCmNlbGwgaWRpY3Rfc2V0' + - 'X3JlZihjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBpbnQgaW5kZXgsIGNlbGwgdmFsdWUpIGFzbSh2YWx1ZSBpbmRleCBkaWN0IGtleV9sZW4pICJESUNUSVNFVFJFRiI7' + - 'CihjZWxsLCAoKSkgfmlkaWN0X3NldF9yZWYoY2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgaW50IGluZGV4LCBjZWxsIHZhbHVlKSBhc20odmFsdWUgaW5kZXggZGljdCBr' + - 'ZXlfbGVuKSAiRElDVElTRVRSRUYiOwoKOzs7IFNldHMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBba2V5X2xlbl0tYml0IGtleSB1bnNpZ25lZCBpbmRleCBpbiBk' + - 'aWN0aW9uYXJ5IFtkaWN0XSB0byBbdmFsdWVdIChjZWxsKSwKOzs7IGFuZCByZXR1cm5zIHRoZSByZXN1bHRpbmcgZGljdGlvbmFyeS4KY2VsbCB1ZGljdF9zZXRfcmVm' + - 'KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIGludCBpbmRleCwgY2VsbCB2YWx1ZSkgYXNtKHZhbHVlIGluZGV4IGRpY3Qga2V5X2xlbikgIkRJQ1RVU0VUUkVGIjsKKGNl' + - 'bGwsICgpKSB+dWRpY3Rfc2V0X3JlZihjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBpbnQgaW5kZXgsIGNlbGwgdmFsdWUpIGFzbSh2YWx1ZSBpbmRleCBkaWN0IGtleV9s' + - 'ZW4pICJESUNUVVNFVFJFRiI7CgpjZWxsIGlkaWN0X2dldF9yZWYoY2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgaW50IGluZGV4KSBhc20oaW5kZXggZGljdCBrZXlfbGVu' + - 'KSAiRElDVElHRVRPUFRSRUYiOwooY2VsbCwgaW50KSBpZGljdF9nZXRfcmVmPyhjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBpbnQgaW5kZXgpIGFzbShpbmRleCBkaWN0' + - 'IGtleV9sZW4pICJESUNUSUdFVFJFRiIgIk5VTExTV0FQSUZOT1QiOwooY2VsbCwgaW50KSB1ZGljdF9nZXRfcmVmPyhjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBpbnQg' + - 'aW5kZXgpIGFzbShpbmRleCBkaWN0IGtleV9sZW4pICJESUNUVUdFVFJFRiIgIk5VTExTV0FQSUZOT1QiOwooY2VsbCwgY2VsbCkgaWRpY3Rfc2V0X2dldF9yZWYoY2Vs' + - 'bCBkaWN0LCBpbnQga2V5X2xlbiwgaW50IGluZGV4LCBjZWxsIHZhbHVlKSBhc20odmFsdWUgaW5kZXggZGljdCBrZXlfbGVuKSAiRElDVElTRVRHRVRPUFRSRUYiOwoo' + - 'Y2VsbCwgY2VsbCkgdWRpY3Rfc2V0X2dldF9yZWYoY2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgaW50IGluZGV4LCBjZWxsIHZhbHVlKSBhc20odmFsdWUgaW5kZXggZGlj' + - 'dCBrZXlfbGVuKSAiRElDVFVTRVRHRVRPUFRSRUYiOwooY2VsbCwgaW50KSBpZGljdF9kZWxldGU/KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIGludCBpbmRleCkgYXNt' + - 'KGluZGV4IGRpY3Qga2V5X2xlbikgIkRJQ1RJREVMIjsKKGNlbGwsIGludCkgdWRpY3RfZGVsZXRlPyhjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBpbnQgaW5kZXgpIGFz' + - 'bShpbmRleCBkaWN0IGtleV9sZW4pICJESUNUVURFTCI7CihzbGljZSwgaW50KSBpZGljdF9nZXQ/KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIGludCBpbmRleCkgYXNt' + - 'KGluZGV4IGRpY3Qga2V5X2xlbikgIkRJQ1RJR0VUIiAiTlVMTFNXQVBJRk5PVCI7CihzbGljZSwgaW50KSB1ZGljdF9nZXQ/KGNlbGwgZGljdCwgaW50IGtleV9sZW4s' + - 'IGludCBpbmRleCkgYXNtKGluZGV4IGRpY3Qga2V5X2xlbikgIkRJQ1RVR0VUIiAiTlVMTFNXQVBJRk5PVCI7CihjZWxsLCBzbGljZSwgaW50KSBpZGljdF9kZWxldGVf' + - 'Z2V0PyhjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBpbnQgaW5kZXgpIGFzbShpbmRleCBkaWN0IGtleV9sZW4pICJESUNUSURFTEdFVCIgIk5VTExTV0FQSUZOT1QiOwoo' + - 'Y2VsbCwgc2xpY2UsIGludCkgdWRpY3RfZGVsZXRlX2dldD8oY2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgaW50IGluZGV4KSBhc20oaW5kZXggZGljdCBrZXlfbGVuKSAi' + - 'RElDVFVERUxHRVQiICJOVUxMU1dBUElGTk9UIjsKKGNlbGwsIChzbGljZSwgaW50KSkgfmlkaWN0X2RlbGV0ZV9nZXQ/KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIGlu' + - 'dCBpbmRleCkgYXNtKGluZGV4IGRpY3Qga2V5X2xlbikgIkRJQ1RJREVMR0VUIiAiTlVMTFNXQVBJRk5PVCI7CihjZWxsLCAoc2xpY2UsIGludCkpIH51ZGljdF9kZWxl' + - 'dGVfZ2V0PyhjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBpbnQgaW5kZXgpIGFzbShpbmRleCBkaWN0IGtleV9sZW4pICJESUNUVURFTEdFVCIgIk5VTExTV0FQSUZOT1Qi' + - 'OwooY2VsbCwgY2VsbCwgaW50KSBpZGljdF9kZWxldGVfZ2V0X3JlZj8oY2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgaW50IGluZGV4KSBhc20oaW5kZXggZGljdCBrZXlf' + - 'bGVuKSAiRElDVElERUxHRVRSRUYiICJOVUxMU1dBUElGTk9UIjsKKGNlbGwsIGNlbGwsIGludCkgdWRpY3RfZGVsZXRlX2dldF9yZWY/KGNlbGwgZGljdCwgaW50IGtl' + - 'eV9sZW4sIGludCBpbmRleCkgYXNtKGluZGV4IGRpY3Qga2V5X2xlbikgIkRJQ1RVREVMR0VUUkVGIiAiTlVMTFNXQVBJRk5PVCI7CihjZWxsLCAoY2VsbCwgaW50KSkg' + - 'fmlkaWN0X2RlbGV0ZV9nZXRfcmVmPyhjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBpbnQgaW5kZXgpIGFzbShpbmRleCBkaWN0IGtleV9sZW4pICJESUNUSURFTEdFVFJF' + - 'RiIgIk5VTExTV0FQSUZOT1QiOwooY2VsbCwgKGNlbGwsIGludCkpIH51ZGljdF9kZWxldGVfZ2V0X3JlZj8oY2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgaW50IGluZGV4' + - 'KSBhc20oaW5kZXggZGljdCBrZXlfbGVuKSAiRElDVFVERUxHRVRSRUYiICJOVUxMU1dBUElGTk9UIjsKY2VsbCB1ZGljdF9zZXQoY2VsbCBkaWN0LCBpbnQga2V5X2xl' + - 'biwgaW50IGluZGV4LCBzbGljZSB2YWx1ZSkgYXNtKHZhbHVlIGluZGV4IGRpY3Qga2V5X2xlbikgIkRJQ1RVU0VUIjsKKGNlbGwsICgpKSB+dWRpY3Rfc2V0KGNlbGwg' + - 'ZGljdCwgaW50IGtleV9sZW4sIGludCBpbmRleCwgc2xpY2UgdmFsdWUpIGFzbSh2YWx1ZSBpbmRleCBkaWN0IGtleV9sZW4pICJESUNUVVNFVCI7CmNlbGwgaWRpY3Rf' + - 'c2V0KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIGludCBpbmRleCwgc2xpY2UgdmFsdWUpIGFzbSh2YWx1ZSBpbmRleCBkaWN0IGtleV9sZW4pICJESUNUSVNFVCI7Cihj' + - 'ZWxsLCAoKSkgfmlkaWN0X3NldChjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBpbnQgaW5kZXgsIHNsaWNlIHZhbHVlKSBhc20odmFsdWUgaW5kZXggZGljdCBrZXlfbGVu' + - 'KSAiRElDVElTRVQiOwpjZWxsIGRpY3Rfc2V0KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIHNsaWNlIGluZGV4LCBzbGljZSB2YWx1ZSkgYXNtKHZhbHVlIGluZGV4IGRp' + - 'Y3Qga2V5X2xlbikgIkRJQ1RTRVQiOwooY2VsbCwgKCkpIH5kaWN0X3NldChjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBzbGljZSBpbmRleCwgc2xpY2UgdmFsdWUpIGFz' + - 'bSh2YWx1ZSBpbmRleCBkaWN0IGtleV9sZW4pICJESUNUU0VUIjsKKGNlbGwsIGludCkgdWRpY3RfYWRkPyhjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBpbnQgaW5kZXgs' + - 'IHNsaWNlIHZhbHVlKSBhc20odmFsdWUgaW5kZXggZGljdCBrZXlfbGVuKSAiRElDVFVBREQiOwooY2VsbCwgaW50KSB1ZGljdF9yZXBsYWNlPyhjZWxsIGRpY3QsIGlu' + - 'dCBrZXlfbGVuLCBpbnQgaW5kZXgsIHNsaWNlIHZhbHVlKSBhc20odmFsdWUgaW5kZXggZGljdCBrZXlfbGVuKSAiRElDVFVSRVBMQUNFIjsKKGNlbGwsIGludCkgdWRp' + - 'Y3RfcmVwbGFjZV9yZWY/KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIGludCBpbmRleCwgY2VsbCB2YWx1ZSkgYXNtKHZhbHVlIGluZGV4IGRpY3Qga2V5X2xlbikgIkRJ' + - 'Q1RVUkVQTEFDRVJFRiI7CihjZWxsLCBzbGljZSwgaW50KSB1ZGljdF9yZXBsYWNlZ2V0PyhjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBpbnQgaW5kZXgsIHNsaWNlIHZh' + - 'bHVlKSBhc20odmFsdWUgaW5kZXggZGljdCBrZXlfbGVuKSAiRElDVFVSRVBMQUNFR0VUIiAiTlVMTFNXQVBJRk5PVCI7CihjZWxsLCBjZWxsLCBpbnQpIHVkaWN0X3Jl' + - 'cGxhY2VnZXRfcmVmPyhjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBpbnQgaW5kZXgsIGNlbGwgdmFsdWUpIGFzbSh2YWx1ZSBpbmRleCBkaWN0IGtleV9sZW4pICJESUNU' + - 'VVJFUExBQ0VHRVRSRUYiICJOVUxMU1dBUElGTk9UIjsKKGNlbGwsIChzbGljZSwgaW50KSkgfnVkaWN0X3JlcGxhY2VnZXQ/KGNlbGwgZGljdCwgaW50IGtleV9sZW4s' + - 'IGludCBpbmRleCwgc2xpY2UgdmFsdWUpIGFzbSh2YWx1ZSBpbmRleCBkaWN0IGtleV9sZW4pICJESUNUVVJFUExBQ0VHRVQiICJOVUxMU1dBUElGTk9UIjsKKGNlbGws' + - 'IChjZWxsLCBpbnQpKSB+dWRpY3RfcmVwbGFjZWdldF9yZWY/KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIGludCBpbmRleCwgY2VsbCB2YWx1ZSkgYXNtKHZhbHVlIGlu' + - 'ZGV4IGRpY3Qga2V5X2xlbikgIkRJQ1RVUkVQTEFDRUdFVFJFRiIgIk5VTExTV0FQSUZOT1QiOwooY2VsbCwgaW50KSBpZGljdF9hZGQ/KGNlbGwgZGljdCwgaW50IGtl' + - 'eV9sZW4sIGludCBpbmRleCwgc2xpY2UgdmFsdWUpIGFzbSh2YWx1ZSBpbmRleCBkaWN0IGtleV9sZW4pICJESUNUSUFERCI7CihjZWxsLCBpbnQpIGlkaWN0X3JlcGxh' + - 'Y2U/KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIGludCBpbmRleCwgc2xpY2UgdmFsdWUpIGFzbSh2YWx1ZSBpbmRleCBkaWN0IGtleV9sZW4pICJESUNUSVJFUExBQ0Ui' + - 'OwooY2VsbCwgaW50KSBpZGljdF9yZXBsYWNlX3JlZj8oY2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgaW50IGluZGV4LCBjZWxsIHZhbHVlKSBhc20odmFsdWUgaW5kZXgg' + - 'ZGljdCBrZXlfbGVuKSAiRElDVElSRVBMQUNFUkVGIjsKKGNlbGwsIHNsaWNlLCBpbnQpIGlkaWN0X3JlcGxhY2VnZXQ/KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIGlu' + - 'dCBpbmRleCwgc2xpY2UgdmFsdWUpIGFzbSh2YWx1ZSBpbmRleCBkaWN0IGtleV9sZW4pICJESUNUSVJFUExBQ0VHRVQiICJOVUxMU1dBUElGTk9UIjsKKGNlbGwsIGNl' + - 'bGwsIGludCkgaWRpY3RfcmVwbGFjZWdldF9yZWY/KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIGludCBpbmRleCwgY2VsbCB2YWx1ZSkgYXNtKHZhbHVlIGluZGV4IGRp' + - 'Y3Qga2V5X2xlbikgIkRJQ1RJUkVQTEFDRUdFVFJFRiIgIk5VTExTV0FQSUZOT1QiOwooY2VsbCwgKHNsaWNlLCBpbnQpKSB+aWRpY3RfcmVwbGFjZWdldD8oY2VsbCBk' + - 'aWN0LCBpbnQga2V5X2xlbiwgaW50IGluZGV4LCBzbGljZSB2YWx1ZSkgYXNtKHZhbHVlIGluZGV4IGRpY3Qga2V5X2xlbikgIkRJQ1RJUkVQTEFDRUdFVCIgIk5VTExT' + - 'V0FQSUZOT1QiOwooY2VsbCwgKGNlbGwsIGludCkpIH5pZGljdF9yZXBsYWNlZ2V0X3JlZj8oY2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgaW50IGluZGV4LCBjZWxsIHZh' + - 'bHVlKSBhc20odmFsdWUgaW5kZXggZGljdCBrZXlfbGVuKSAiRElDVElSRVBMQUNFR0VUUkVGIiAiTlVMTFNXQVBJRk5PVCI7CmNlbGwgdWRpY3Rfc2V0X2J1aWxkZXIo' + - 'Y2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgaW50IGluZGV4LCBidWlsZGVyIHZhbHVlKSBhc20odmFsdWUgaW5kZXggZGljdCBrZXlfbGVuKSAiRElDVFVTRVRCIjsKKGNl' + - 'bGwsICgpKSB+dWRpY3Rfc2V0X2J1aWxkZXIoY2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgaW50IGluZGV4LCBidWlsZGVyIHZhbHVlKSBhc20odmFsdWUgaW5kZXggZGlj' + - 'dCBrZXlfbGVuKSAiRElDVFVTRVRCIjsKY2VsbCBpZGljdF9zZXRfYnVpbGRlcihjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBpbnQgaW5kZXgsIGJ1aWxkZXIgdmFsdWUp' + - 'IGFzbSh2YWx1ZSBpbmRleCBkaWN0IGtleV9sZW4pICJESUNUSVNFVEIiOwooY2VsbCwgKCkpIH5pZGljdF9zZXRfYnVpbGRlcihjZWxsIGRpY3QsIGludCBrZXlfbGVu' + - 'LCBpbnQgaW5kZXgsIGJ1aWxkZXIgdmFsdWUpIGFzbSh2YWx1ZSBpbmRleCBkaWN0IGtleV9sZW4pICJESUNUSVNFVEIiOwpjZWxsIGRpY3Rfc2V0X2J1aWxkZXIoY2Vs' + - 'bCBkaWN0LCBpbnQga2V5X2xlbiwgc2xpY2UgaW5kZXgsIGJ1aWxkZXIgdmFsdWUpIGFzbSh2YWx1ZSBpbmRleCBkaWN0IGtleV9sZW4pICJESUNUU0VUQiI7CihjZWxs' + - 'LCAoKSkgfmRpY3Rfc2V0X2J1aWxkZXIoY2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgc2xpY2UgaW5kZXgsIGJ1aWxkZXIgdmFsdWUpIGFzbSh2YWx1ZSBpbmRleCBkaWN0' + - 'IGtleV9sZW4pICJESUNUU0VUQiI7CihjZWxsLCBpbnQpIGRpY3RfcmVwbGFjZV9idWlsZGVyPyhjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBzbGljZSBpbmRleCwgYnVp' + - 'bGRlciB2YWx1ZSkgYXNtKHZhbHVlIGluZGV4IGRpY3Qga2V5X2xlbikgIkRJQ1RSRVBMQUNFQiI7CihjZWxsLCBidWlsZGVyLCBpbnQpIGRpY3RfcmVwbGFjZWdldF9i' + - 'dWlsZGVyPyhjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBzbGljZSBpbmRleCwgYnVpbGRlciB2YWx1ZSkgYXNtKHZhbHVlIGluZGV4IGRpY3Qga2V5X2xlbikgIkRJQ1RS' + - 'RVBMQUNFR0VUQiIgIk5VTExTV0FQSUZOT1QiOwooY2VsbCwgc2xpY2UsIGludCkgZGljdF9yZXBsYWNlZ2V0PyhjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBzbGljZSBp' + - 'bmRleCwgc2xpY2UgdmFsdWUpIGFzbSh2YWx1ZSBpbmRleCBkaWN0IGtleV9sZW4pICJESUNUUkVQTEFDRUdFVCIgIk5VTExTV0FQSUZOT1QiOwooY2VsbCwgKGJ1aWxk' + - 'ZXIsIGludCkpIH5kaWN0X3JlcGxhY2VnZXRfYnVpbGRlcj8oY2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgc2xpY2UgaW5kZXgsIGJ1aWxkZXIgdmFsdWUpIGFzbSh2YWx1' + - 'ZSBpbmRleCBkaWN0IGtleV9sZW4pICJESUNUUkVQTEFDRUdFVEIiICJOVUxMU1dBUElGTk9UIjsKKGNlbGwsIChzbGljZSwgaW50KSkgfmRpY3RfcmVwbGFjZWdldD8o' + - 'Y2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgc2xpY2UgaW5kZXgsIHNsaWNlIHZhbHVlKSBhc20odmFsdWUgaW5kZXggZGljdCBrZXlfbGVuKSAiRElDVFJFUExBQ0VHRVQi' + - 'ICJOVUxMU1dBUElGTk9UIjsKKGNlbGwsIGludCkgdWRpY3RfYWRkX2J1aWxkZXI/KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIGludCBpbmRleCwgYnVpbGRlciB2YWx1' + - 'ZSkgYXNtKHZhbHVlIGluZGV4IGRpY3Qga2V5X2xlbikgIkRJQ1RVQUREQiI7CihjZWxsLCBpbnQpIHVkaWN0X3JlcGxhY2VfYnVpbGRlcj8oY2VsbCBkaWN0LCBpbnQg' + - 'a2V5X2xlbiwgaW50IGluZGV4LCBidWlsZGVyIHZhbHVlKSBhc20odmFsdWUgaW5kZXggZGljdCBrZXlfbGVuKSAiRElDVFVSRVBMQUNFQiI7CihjZWxsLCBidWlsZGVy' + - 'LCBpbnQpIHVkaWN0X3JlcGxhY2VnZXRfYnVpbGRlcj8oY2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgaW50IGluZGV4LCBidWlsZGVyIHZhbHVlKSBhc20odmFsdWUgaW5k' + - 'ZXggZGljdCBrZXlfbGVuKSAiRElDVFVSRVBMQUNFR0VUQiIgIk5VTExTV0FQSUZOT1QiOwooY2VsbCwgKGJ1aWxkZXIsIGludCkpIH51ZGljdF9yZXBsYWNlZ2V0X2J1' + - 'aWxkZXI/KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIGludCBpbmRleCwgYnVpbGRlciB2YWx1ZSkgYXNtKHZhbHVlIGluZGV4IGRpY3Qga2V5X2xlbikgIkRJQ1RVUkVQ' + - 'TEFDRUdFVEIiICJOVUxMU1dBUElGTk9UIjsKKGNlbGwsIGludCkgaWRpY3RfYWRkX2J1aWxkZXI/KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIGludCBpbmRleCwgYnVp' + - 'bGRlciB2YWx1ZSkgYXNtKHZhbHVlIGluZGV4IGRpY3Qga2V5X2xlbikgIkRJQ1RJQUREQiI7CihjZWxsLCBpbnQpIGlkaWN0X3JlcGxhY2VfYnVpbGRlcj8oY2VsbCBk' + - 'aWN0LCBpbnQga2V5X2xlbiwgaW50IGluZGV4LCBidWlsZGVyIHZhbHVlKSBhc20odmFsdWUgaW5kZXggZGljdCBrZXlfbGVuKSAiRElDVElSRVBMQUNFQiI7CihjZWxs' + - 'LCBidWlsZGVyLCBpbnQpIGlkaWN0X3JlcGxhY2VnZXRfYnVpbGRlcj8oY2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgaW50IGluZGV4LCBidWlsZGVyIHZhbHVlKSBhc20o' + - 'dmFsdWUgaW5kZXggZGljdCBrZXlfbGVuKSAiRElDVElSRVBMQUNFR0VUQiIgIk5VTExTV0FQSUZOT1QiOwooY2VsbCwgKGJ1aWxkZXIsIGludCkpIH5pZGljdF9yZXBs' + - 'YWNlZ2V0X2J1aWxkZXI/KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIGludCBpbmRleCwgYnVpbGRlciB2YWx1ZSkgYXNtKHZhbHVlIGluZGV4IGRpY3Qga2V5X2xlbikg' + - 'IkRJQ1RJUkVQTEFDRUdFVEIiICJOVUxMU1dBUElGTk9UIjsKKGNlbGwsIGludCwgc2xpY2UsIGludCkgdWRpY3RfZGVsZXRlX2dldF9taW4oY2VsbCBkaWN0LCBpbnQg' + - 'a2V5X2xlbikgYXNtKC0+IDAgMiAxIDMpICJESUNUVVJFTU1JTiIgIk5VTExTV0FQSUZOT1QyIjsKKGNlbGwsIChpbnQsIHNsaWNlLCBpbnQpKSB+dWRpY3Q6OmRlbGV0' + - 'ZV9nZXRfbWluKGNlbGwgZGljdCwgaW50IGtleV9sZW4pIGFzbSgtPiAwIDIgMSAzKSAiRElDVFVSRU1NSU4iICJOVUxMU1dBUElGTk9UMiI7CihjZWxsLCBpbnQsIHNs' + - 'aWNlLCBpbnQpIGlkaWN0X2RlbGV0ZV9nZXRfbWluKGNlbGwgZGljdCwgaW50IGtleV9sZW4pIGFzbSgtPiAwIDIgMSAzKSAiRElDVElSRU1NSU4iICJOVUxMU1dBUElG' + - 'Tk9UMiI7CihjZWxsLCAoaW50LCBzbGljZSwgaW50KSkgfmlkaWN0OjpkZWxldGVfZ2V0X21pbihjZWxsIGRpY3QsIGludCBrZXlfbGVuKSBhc20oLT4gMCAyIDEgMykg' + - 'IkRJQ1RJUkVNTUlOIiAiTlVMTFNXQVBJRk5PVDIiOwooY2VsbCwgc2xpY2UsIHNsaWNlLCBpbnQpIGRpY3RfZGVsZXRlX2dldF9taW4oY2VsbCBkaWN0LCBpbnQga2V5' + - 'X2xlbikgYXNtKC0+IDAgMiAxIDMpICJESUNUUkVNTUlOIiAiTlVMTFNXQVBJRk5PVDIiOwooY2VsbCwgKHNsaWNlLCBzbGljZSwgaW50KSkgfmRpY3Q6OmRlbGV0ZV9n' + - 'ZXRfbWluKGNlbGwgZGljdCwgaW50IGtleV9sZW4pIGFzbSgtPiAwIDIgMSAzKSAiRElDVFJFTU1JTiIgIk5VTExTV0FQSUZOT1QyIjsKKGNlbGwsIGludCwgc2xpY2Us' + - 'IGludCkgdWRpY3RfZGVsZXRlX2dldF9tYXgoY2VsbCBkaWN0LCBpbnQga2V5X2xlbikgYXNtKC0+IDAgMiAxIDMpICJESUNUVVJFTU1BWCIgIk5VTExTV0FQSUZOT1Qy' + - 'IjsKKGNlbGwsIChpbnQsIHNsaWNlLCBpbnQpKSB+dWRpY3Q6OmRlbGV0ZV9nZXRfbWF4KGNlbGwgZGljdCwgaW50IGtleV9sZW4pIGFzbSgtPiAwIDIgMSAzKSAiRElD' + - 'VFVSRU1NQVgiICJOVUxMU1dBUElGTk9UMiI7CihjZWxsLCBpbnQsIHNsaWNlLCBpbnQpIGlkaWN0X2RlbGV0ZV9nZXRfbWF4KGNlbGwgZGljdCwgaW50IGtleV9sZW4p' + - 'IGFzbSgtPiAwIDIgMSAzKSAiRElDVElSRU1NQVgiICJOVUxMU1dBUElGTk9UMiI7CihjZWxsLCAoaW50LCBzbGljZSwgaW50KSkgfmlkaWN0OjpkZWxldGVfZ2V0X21h' + - 'eChjZWxsIGRpY3QsIGludCBrZXlfbGVuKSBhc20oLT4gMCAyIDEgMykgIkRJQ1RJUkVNTUFYIiAiTlVMTFNXQVBJRk5PVDIiOwooY2VsbCwgc2xpY2UsIHNsaWNlLCBp' + - 'bnQpIGRpY3RfZGVsZXRlX2dldF9tYXgoY2VsbCBkaWN0LCBpbnQga2V5X2xlbikgYXNtKC0+IDAgMiAxIDMpICJESUNUUkVNTUFYIiAiTlVMTFNXQVBJRk5PVDIiOwoo' + - 'Y2VsbCwgKHNsaWNlLCBzbGljZSwgaW50KSkgfmRpY3Q6OmRlbGV0ZV9nZXRfbWF4KGNlbGwgZGljdCwgaW50IGtleV9sZW4pIGFzbSgtPiAwIDIgMSAzKSAiRElDVFJF' + - 'TU1BWCIgIk5VTExTV0FQSUZOT1QyIjsKKGludCwgc2xpY2UsIGludCkgdWRpY3RfZ2V0X21pbj8oY2VsbCBkaWN0LCBpbnQga2V5X2xlbikgYXNtICgtPiAxIDAgMikg' + - 'IkRJQ1RVTUlOIiAiTlVMTFNXQVBJRk5PVDIiOwooaW50LCBzbGljZSwgaW50KSB1ZGljdF9nZXRfbWF4PyhjZWxsIGRpY3QsIGludCBrZXlfbGVuKSBhc20gKC0+IDEg' + - 'MCAyKSAiRElDVFVNQVgiICJOVUxMU1dBUElGTk9UMiI7CihpbnQsIGNlbGwsIGludCkgdWRpY3RfZ2V0X21pbl9yZWY/KGNlbGwgZGljdCwgaW50IGtleV9sZW4pIGFz' + - 'bSAoLT4gMSAwIDIpICJESUNUVU1JTlJFRiIgIk5VTExTV0FQSUZOT1QyIjsKKGludCwgY2VsbCwgaW50KSB1ZGljdF9nZXRfbWF4X3JlZj8oY2VsbCBkaWN0LCBpbnQg' + - 'a2V5X2xlbikgYXNtICgtPiAxIDAgMikgIkRJQ1RVTUFYUkVGIiAiTlVMTFNXQVBJRk5PVDIiOwooaW50LCBzbGljZSwgaW50KSBpZGljdF9nZXRfbWluPyhjZWxsIGRp' + - 'Y3QsIGludCBrZXlfbGVuKSBhc20gKC0+IDEgMCAyKSAiRElDVElNSU4iICJOVUxMU1dBUElGTk9UMiI7CihpbnQsIHNsaWNlLCBpbnQpIGlkaWN0X2dldF9tYXg/KGNl' + - 'bGwgZGljdCwgaW50IGtleV9sZW4pIGFzbSAoLT4gMSAwIDIpICJESUNUSU1BWCIgIk5VTExTV0FQSUZOT1QyIjsKKGludCwgY2VsbCwgaW50KSBpZGljdF9nZXRfbWlu' + - 'X3JlZj8oY2VsbCBkaWN0LCBpbnQga2V5X2xlbikgYXNtICgtPiAxIDAgMikgIkRJQ1RJTUlOUkVGIiAiTlVMTFNXQVBJRk5PVDIiOwooaW50LCBjZWxsLCBpbnQpIGlk' + - 'aWN0X2dldF9tYXhfcmVmPyhjZWxsIGRpY3QsIGludCBrZXlfbGVuKSBhc20gKC0+IDEgMCAyKSAiRElDVElNQVhSRUYiICJOVUxMU1dBUElGTk9UMiI7CihpbnQsIHNs' + - 'aWNlLCBpbnQpIHVkaWN0X2dldF9uZXh0PyhjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBpbnQgcGl2b3QpIGFzbShwaXZvdCBkaWN0IGtleV9sZW4gLT4gMSAwIDIpICJE' + - 'SUNUVUdFVE5FWFQiICJOVUxMU1dBUElGTk9UMiI7CihpbnQsIHNsaWNlLCBpbnQpIHVkaWN0X2dldF9uZXh0ZXE/KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIGludCBw' + - 'aXZvdCkgYXNtKHBpdm90IGRpY3Qga2V5X2xlbiAtPiAxIDAgMikgIkRJQ1RVR0VUTkVYVEVRIiAiTlVMTFNXQVBJRk5PVDIiOwooaW50LCBzbGljZSwgaW50KSB1ZGlj' + - 'dF9nZXRfcHJldj8oY2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgaW50IHBpdm90KSBhc20ocGl2b3QgZGljdCBrZXlfbGVuIC0+IDEgMCAyKSAiRElDVFVHRVRQUkVWIiAi' + - 'TlVMTFNXQVBJRk5PVDIiOwooaW50LCBzbGljZSwgaW50KSB1ZGljdF9nZXRfcHJldmVxPyhjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBpbnQgcGl2b3QpIGFzbShwaXZv' + - 'dCBkaWN0IGtleV9sZW4gLT4gMSAwIDIpICJESUNUVUdFVFBSRVZFUSIgIk5VTExTV0FQSUZOT1QyIjsKKGludCwgc2xpY2UsIGludCkgaWRpY3RfZ2V0X25leHQ/KGNl' + - 'bGwgZGljdCwgaW50IGtleV9sZW4sIGludCBwaXZvdCkgYXNtKHBpdm90IGRpY3Qga2V5X2xlbiAtPiAxIDAgMikgIkRJQ1RJR0VUTkVYVCIgIk5VTExTV0FQSUZOT1Qy' + - 'IjsKKGludCwgc2xpY2UsIGludCkgaWRpY3RfZ2V0X25leHRlcT8oY2VsbCBkaWN0LCBpbnQga2V5X2xlbiwgaW50IHBpdm90KSBhc20ocGl2b3QgZGljdCBrZXlfbGVu' + - 'IC0+IDEgMCAyKSAiRElDVElHRVRORVhURVEiICJOVUxMU1dBUElGTk9UMiI7CihpbnQsIHNsaWNlLCBpbnQpIGlkaWN0X2dldF9wcmV2PyhjZWxsIGRpY3QsIGludCBr' + - 'ZXlfbGVuLCBpbnQgcGl2b3QpIGFzbShwaXZvdCBkaWN0IGtleV9sZW4gLT4gMSAwIDIpICJESUNUSUdFVFBSRVYiICJOVUxMU1dBUElGTk9UMiI7CihpbnQsIHNsaWNl' + - 'LCBpbnQpIGlkaWN0X2dldF9wcmV2ZXE/KGNlbGwgZGljdCwgaW50IGtleV9sZW4sIGludCBwaXZvdCkgYXNtKHBpdm90IGRpY3Qga2V5X2xlbiAtPiAxIDAgMikgIkRJ' + - 'Q1RJR0VUUFJFVkVRIiAiTlVMTFNXQVBJRk5PVDIiOwoKOzs7IENyZWF0ZXMgYW4gZW1wdHkgZGljdGlvbmFyeSwgd2hpY2ggaXMgYWN0dWFsbHkgYSBudWxsIHZhbHVl' + - 'LiBFcXVpdmFsZW50IHRvIFBVU0hOVUxMCmNlbGwgbmV3X2RpY3QoKSBhc20gIk5FV0RJQ1QiOwo7OzsgQ2hlY2tzIHdoZXRoZXIgYSBkaWN0aW9uYXJ5IGlzIGVtcHR5' + - 'LiBFcXVpdmFsZW50IHRvIGNlbGxfbnVsbD8uCmludCBkaWN0X2VtcHR5PyhjZWxsIGMpIGFzbSAiRElDVEVNUFRZIjsKCgp7LSBQcmVmaXggZGljdGlvbmFyeSBwcmlt' + - 'aXRpdmVzIC19CihzbGljZSwgc2xpY2UsIHNsaWNlLCBpbnQpIHBmeGRpY3RfZ2V0PyhjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBzbGljZSBrZXkpIGFzbShrZXkgZGlj' + - 'dCBrZXlfbGVuKSAiUEZYRElDVEdFVFEiICJOVUxMU1dBUElGTk9UMiI7CihjZWxsLCBpbnQpIHBmeGRpY3Rfc2V0PyhjZWxsIGRpY3QsIGludCBrZXlfbGVuLCBzbGlj' + - 'ZSBrZXksIHNsaWNlIHZhbHVlKSBhc20odmFsdWUga2V5IGRpY3Qga2V5X2xlbikgIlBGWERJQ1RTRVQiOwooY2VsbCwgaW50KSBwZnhkaWN0X2RlbGV0ZT8oY2VsbCBk' + - 'aWN0LCBpbnQga2V5X2xlbiwgc2xpY2Uga2V5KSBhc20oa2V5IGRpY3Qga2V5X2xlbikgIlBGWERJQ1RERUwiOwoKOzs7IFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBn' + - 'bG9iYWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgd2l0aCBpbnRlZ2VyIGluZGV4IGBpYCBhcyBhIGBjZWxsYCBvciBgbnVsbGAgdmFsdWUuCmNlbGwgY29uZmlnX3Bh' + - 'cmFtKGludCB4KSBhc20gIkNPTkZJR09QVFBBUkFNIjsKOzs7IENoZWNrcyB3aGV0aGVyIGMgaXMgYSBudWxsLiBOb3RlLCB0aGF0IEZ1bkMgYWxzbyBoYXMgcG9seW1v' + - 'cnBoaWMgbnVsbD8gYnVpbHQtaW4uCmludCBjZWxsX251bGw/KGNlbGwgYykgYXNtICJJU05VTEwiOwoKOzs7IENyZWF0ZXMgYW4gb3V0cHV0IGFjdGlvbiB3aGljaCB3' + - 'b3VsZCByZXNlcnZlIGV4YWN0bHkgYW1vdW50IG5hbm90b25jb2lucyAoaWYgbW9kZSA9IDApLCBhdCBtb3N0IGFtb3VudCBuYW5vdG9uY29pbnMgKGlmIG1vZGUgPSAy' + - 'KSwgb3IgYWxsIGJ1dCBhbW91bnQgbmFub3RvbmNvaW5zIChpZiBtb2RlID0gMSBvciBtb2RlID0gMyksIGZyb20gdGhlIHJlbWFpbmluZyBiYWxhbmNlIG9mIHRoZSBh' + - 'Y2NvdW50LiBJdCBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gY3JlYXRpbmcgYW4gb3V0Ym91bmQgbWVzc2FnZSBjYXJyeWluZyBhbW91bnQgbmFub3RvbmNvaW5zIChv' + - 'ciBiIOKIkiBhbW91bnQgbmFub3RvbmNvaW5zLCB3aGVyZSBiIGlzIHRoZSByZW1haW5pbmcgYmFsYW5jZSkgdG8gb25lc2VsZiwgc28gdGhhdCB0aGUgc3Vic2VxdWVu' + - 'dCBvdXRwdXQgYWN0aW9ucyB3b3VsZCBub3QgYmUgYWJsZSB0byBzcGVuZCBtb3JlIG1vbmV5IHRoYW4gdGhlIHJlbWFpbmRlci4gQml0ICsyIGluIG1vZGUgbWVhbnMg' + - 'dGhhdCB0aGUgZXh0ZXJuYWwgYWN0aW9uIGRvZXMgbm90IGZhaWwgaWYgdGhlIHNwZWNpZmllZCBhbW91bnQgY2Fubm90IGJlIHJlc2VydmVkOyBpbnN0ZWFkLCBhbGwg' + - 'cmVtYWluaW5nIGJhbGFuY2UgaXMgcmVzZXJ2ZWQuIEJpdCArOCBpbiBtb2RlIG1lYW5zIGBhbW91bnQgPC0gLWFtb3VudGAgYmVmb3JlIHBlcmZvcm1pbmcgYW55IGZ1' + - 'cnRoZXIgYWN0aW9ucy4gQml0ICs0IGluIG1vZGUgbWVhbnMgdGhhdCBhbW91bnQgaXMgaW5jcmVhc2VkIGJ5IHRoZSBvcmlnaW5hbCBiYWxhbmNlIG9mIHRoZSBjdXJy' + - 'ZW50IGFjY291bnQgKGJlZm9yZSB0aGUgY29tcHV0ZSBwaGFzZSksIGluY2x1ZGluZyBhbGwgZXh0cmEgY3VycmVuY2llcywgYmVmb3JlIHBlcmZvcm1pbmcgYW55IG90' + - 'aGVyIGNoZWNrcyBhbmQgYWN0aW9ucy4gQ3VycmVudGx5LCBhbW91bnQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLCBhbmQgbW9kZSBtdXN0IGJlIGluIHRo' + - 'ZSByYW5nZSAwLi4xNS4KKCkgcmF3X3Jlc2VydmUoaW50IGFtb3VudCwgaW50IG1vZGUpIGltcHVyZSBhc20gIlJBV1JFU0VSVkUiOwo7OzsgU2ltaWxhciB0byByYXdf' + - 'cmVzZXJ2ZSwgYnV0IGFsc28gYWNjZXB0cyBhIGRpY3Rpb25hcnkgZXh0cmFfYW1vdW50IChyZXByZXNlbnRlZCBieSBhIGNlbGwgb3IgbnVsbCkgd2l0aCBleHRyYSBj' + - 'dXJyZW5jaWVzLiBJbiB0aGlzIHdheSBjdXJyZW5jaWVzIG90aGVyIHRoYW4gVG9uQ29pbiBjYW4gYmUgcmVzZXJ2ZWQuCigpIHJhd19yZXNlcnZlX2V4dHJhKGludCBh' + - 'bW91bnQsIGNlbGwgZXh0cmFfYW1vdW50LCBpbnQgbW9kZSkgaW1wdXJlIGFzbSAiUkFXUkVTRVJWRVgiOwo7OzsgU2VuZHMgYSByYXcgbWVzc2FnZSBjb250YWluZWQg' + - 'aW4gbXNnLCB3aGljaCBzaG91bGQgY29udGFpbiBhIGNvcnJlY3RseSBzZXJpYWxpemVkIG9iamVjdCBNZXNzYWdlIFgsIHdpdGggdGhlIG9ubHkgZXhjZXB0aW9uIHRo' + - 'YXQgdGhlIHNvdXJjZSBhZGRyZXNzIGlzIGFsbG93ZWQgdG8gaGF2ZSBkdW1teSB2YWx1ZSBhZGRyX25vbmUgKHRvIGJlIGF1dG9tYXRpY2FsbHkgcmVwbGFjZWQgd2l0' + - 'aCB0aGUgY3VycmVudCBzbWFydCBjb250cmFjdCBhZGRyZXNzKSwgYW5kIGlocl9mZWUsIGZ3ZF9mZWUsIGNyZWF0ZWRfbHQgYW5kIGNyZWF0ZWRfYXQgZmllbGRzIGNh' + - 'biBoYXZlIGFyYml0cmFyeSB2YWx1ZXMgKHRvIGJlIHJld3JpdHRlbiB3aXRoIGNvcnJlY3QgdmFsdWVzIGR1cmluZyB0aGUgYWN0aW9uIHBoYXNlIG9mIHRoZSBjdXJy' + - 'ZW50IHRyYW5zYWN0aW9uKS4gSW50ZWdlciBwYXJhbWV0ZXIgbW9kZSBjb250YWlucyB0aGUgZmxhZ3MuIEN1cnJlbnRseSBtb2RlID0gMCBpcyB1c2VkIGZvciBvcmRp' + - 'bmFyeSBtZXNzYWdlczsgbW9kZSA9IDEyOCBpcyB1c2VkIGZvciBtZXNzYWdlcyB0aGF0IGFyZSB0byBjYXJyeSBhbGwgdGhlIHJlbWFpbmluZyBiYWxhbmNlIG9mIHRo' + - 'ZSBjdXJyZW50IHNtYXJ0IGNvbnRyYWN0IChpbnN0ZWFkIG9mIHRoZSB2YWx1ZSBvcmlnaW5hbGx5IGluZGljYXRlZCBpbiB0aGUgbWVzc2FnZSk7IG1vZGUgPSA2NCBp' + - 'cyB1c2VkIGZvciBtZXNzYWdlcyB0aGF0IGNhcnJ5IGFsbCB0aGUgcmVtYWluaW5nIHZhbHVlIG9mIHRoZSBpbmJvdW5kIG1lc3NhZ2UgaW4gYWRkaXRpb24gdG8gdGhl' + - 'IHZhbHVlIGluaXRpYWxseSBpbmRpY2F0ZWQgaW4gdGhlIG5ldyBtZXNzYWdlIChpZiBiaXQgMCBpcyBub3Qgc2V0LCB0aGUgZ2FzIGZlZXMgYXJlIGRlZHVjdGVkIGZy' + - 'b20gdGhpcyBhbW91bnQpOyBtb2RlJyA9IG1vZGUgKyAxIG1lYW5zIHRoYXQgdGhlIHNlbmRlciB3YW50cyB0byBwYXkgdHJhbnNmZXIgZmVlcyBzZXBhcmF0ZWx5OyBt' + - 'b2RlJyA9IG1vZGUgKyAyIG1lYW5zIHRoYXQgYW55IGVycm9ycyBhcmlzaW5nIHdoaWxlIHByb2Nlc3NpbmcgdGhpcyBtZXNzYWdlIGR1cmluZyB0aGUgYWN0aW9uIHBo' + - 'YXNlIHNob3VsZCBiZSBpZ25vcmVkLiBGaW5hbGx5LCBtb2RlJyA9IG1vZGUgKyAzMiBtZWFucyB0aGF0IHRoZSBjdXJyZW50IGFjY291bnQgbXVzdCBiZSBkZXN0cm95' + - 'ZWQgaWYgaXRzIHJlc3VsdGluZyBiYWxhbmNlIGlzIHplcm8uIFRoaXMgZmxhZyBpcyB1c3VhbGx5IGVtcGxveWVkIHRvZ2V0aGVyIHdpdGggKzEyOC4KKCkgc2VuZF9y' + - 'YXdfbWVzc2FnZShjZWxsIG1zZywgaW50IG1vZGUpIGltcHVyZSBhc20gIlNFTkRSQVdNU0ciOwo7OzsgQ3JlYXRlcyBhbiBvdXRwdXQgYWN0aW9uIHRoYXQgd291bGQg' + - 'Y2hhbmdlIHRoaXMgc21hcnQgY29udHJhY3QgY29kZSB0byB0aGF0IGdpdmVuIGJ5IGNlbGwgbmV3X2NvZGUuIE5vdGljZSB0aGF0IHRoaXMgY2hhbmdlIHdpbGwgdGFr' + - 'ZSBlZmZlY3Qgb25seSBhZnRlciB0aGUgc3VjY2Vzc2Z1bCB0ZXJtaW5hdGlvbiBvZiB0aGUgY3VycmVudCBydW4gb2YgdGhlIHNtYXJ0IGNvbnRyYWN0CigpIHNldF9j' + - 'b2RlKGNlbGwgbmV3X2NvZGUpIGltcHVyZSBhc20gIlNFVENPREUiOwoKOzs7IEdlbmVyYXRlcyBhIG5ldyBwc2V1ZG8tcmFuZG9tIHVuc2lnbmVkIDI1Ni1iaXQgaW50' + - 'ZWdlciB4LiBUaGUgYWxnb3JpdGhtIGlzIGFzIGZvbGxvd3M6IGlmIHIgaXMgdGhlIG9sZCB2YWx1ZSBvZiB0aGUgcmFuZG9tIHNlZWQsIGNvbnNpZGVyZWQgYXMgYSAz' + - 'Mi1ieXRlIGFycmF5IChieSBjb25zdHJ1Y3RpbmcgdGhlIGJpZy1lbmRpYW4gcmVwcmVzZW50YXRpb24gb2YgYW4gdW5zaWduZWQgMjU2LWJpdCBpbnRlZ2VyKSwgdGhl' + - 'biBpdHMgc2hhNTEyKHIpIGlzIGNvbXB1dGVkOyB0aGUgZmlyc3QgMzIgYnl0ZXMgb2YgdGhpcyBoYXNoIGFyZSBzdG9yZWQgYXMgdGhlIG5ldyB2YWx1ZSByJyBvZiB0' + - 'aGUgcmFuZG9tIHNlZWQsIGFuZCB0aGUgcmVtYWluaW5nIDMyIGJ5dGVzIGFyZSByZXR1cm5lZCBhcyB0aGUgbmV4dCByYW5kb20gdmFsdWUgeC4KaW50IHJhbmRvbSgp' + - 'IGltcHVyZSBhc20gIlJBTkRVMjU2IjsKOzs7IEdlbmVyYXRlcyBhIG5ldyBwc2V1ZG8tcmFuZG9tIGludGVnZXIgeiBpbiB0aGUgcmFuZ2UgMC4ucmFuZ2XiiJIxIChv' + - 'ciByYW5nZS4u4oiSMSwgaWYgcmFuZ2UgPCAwKS4gTW9yZSBwcmVjaXNlbHksIGFuIHVuc2lnbmVkIHJhbmRvbSB2YWx1ZSB4IGlzIGdlbmVyYXRlZCBhcyBpbiByYW5k' + - 'b207IHRoZW4geiA6PSB4ICogcmFuZ2UgLyAyXjI1NiBpcyBjb21wdXRlZC4KaW50IHJhbmQoaW50IHJhbmdlKSBpbXB1cmUgYXNtICJSQU5EIjsKOzs7IFJldHVybnMg' + - 'dGhlIGN1cnJlbnQgcmFuZG9tIHNlZWQgYXMgYW4gdW5zaWduZWQgMjU2LWJpdCBJbnRlZ2VyLgppbnQgZ2V0X3NlZWQoKSBpbXB1cmUgYXNtICJSQU5EU0VFRCI7Cjs7' + - 'OyBTZXRzIHRoZSByYW5kb20gc2VlZCB0byB1bnNpZ25lZCAyNTYtYml0IHNlZWQuCigpIHNldF9zZWVkKGludCB4KSBpbXB1cmUgYXNtICJTRVRSQU5EIjsKOzs7IE1p' + - 'eGVzIHVuc2lnbmVkIDI1Ni1iaXQgaW50ZWdlciB4IGludG8gdGhlIHJhbmRvbSBzZWVkIHIgYnkgc2V0dGluZyB0aGUgcmFuZG9tIHNlZWQgdG8gc2hhMjU2IG9mIHRo' + - 'ZSBjb25jYXRlbmF0aW9uIG9mIHR3byAzMi1ieXRlIHN0cmluZ3M6IHRoZSBmaXJzdCB3aXRoIHRoZSBiaWctZW5kaWFuIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvbGQg' + - 'c2VlZCByLCBhbmQgdGhlIHNlY29uZCB3aXRoIHRoZSBiaWctZW5kaWFuIHJlcHJlc2VudGF0aW9uIG9mIHguCigpIHJhbmRvbWl6ZShpbnQgeCkgaW1wdXJlIGFzbSAi' + - 'QUREUkFORCI7Cjs7OyBFcXVpdmFsZW50IHRvIHJhbmRvbWl6ZShjdXJfbHQoKSk7LgooKSByYW5kb21pemVfbHQoKSBpbXB1cmUgYXNtICJMVElNRSIgIkFERFJBTkQi' + - 'OwoKOzs7IENoZWNrcyB3aGV0aGVyIHRoZSBkYXRhIHBhcnRzIG9mIHR3byBzbGljZXMgY29pbnNpZGUKaW50IGVxdWFsX3NsaWNlc19iaXRzKHNsaWNlIGEsIHNsaWNl' + - 'IGIpIGFzbSAiU0RFUSI7Cjs7OyBDaGVja3Mgd2hldGhlciBiIGlzIGEgbnVsbC4gTm90ZSwgdGhhdCBGdW5DIGFsc28gaGFzIHBvbHltb3JwaGljIG51bGw/IGJ1aWx0' + - 'LWluLgppbnQgYnVpbGRlcl9udWxsPyhidWlsZGVyIGIpIGFzbSAiSVNOVUxMIjsKOzs7IENvbmNhdGVuYXRlcyB0d28gYnVpbGRlcnMKYnVpbGRlciBzdG9yZV9idWls' + - 'ZGVyKGJ1aWxkZXIgdG8sIGJ1aWxkZXIgZnJvbSkgYXNtICJTVEJSIjsKCjs7IENVU1RPTToKCjs7IFRWTSBVUEdSQURFIDIwMjMtMDcgaHR0cHM6Ly9kb2NzLnRvbi5v' + - 'cmcvbGVhcm4vdHZtLWluc3RydWN0aW9ucy90dm0tdXBncmFkZS0yMDIzLTA3Cjs7IEluIG1haW5uZXQgc2luY2UgMjAgRGVjIDIwMjMgaHR0cHM6Ly90Lm1lL3RvbmJs' + - 'b2NrY2hhaW4vMjI2Cgo7OzsgUmV0cmlldmVzIGNvZGUgb2Ygc21hcnQtY29udHJhY3QgZnJvbSBjNwpjZWxsIG15X2NvZGUoKSBhc20gIk1ZQ09ERSI7Cg=='; -files['stdlib.tact'] = - 'aW1wb3J0ICIuL3N0ZC9wcmltaXRpdmVzIjsKaW1wb3J0ICIuL3N0ZC9jZWxscyI7CmltcG9ydCAiLi9zdGQvY3J5cHRvIjsKaW1wb3J0ICIuL3N0ZC90ZXh0IjsKaW1w' + - 'b3J0ICIuL3N0ZC9tYXRoIjsKaW1wb3J0ICIuL3N0ZC9jb250cmFjdCI7CmltcG9ydCAiLi9zdGQvZGVidWciOwppbXBvcnQgIi4vc3RkL2NvbnRleHQiOwppbXBvcnQg' + - 'Ii4vc3RkL3Jlc2VydmUiOwppbXBvcnQgIi4vc3RkL3NlbmQiOwppbXBvcnQgIi4vc3RkL2NvbmZpZyI7CmltcG9ydCAiLi9zdGQvYmFzZSI7'; -export default files; \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 15ec85cf7..e2f84e9c9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,18 +1,35 @@ -export { enableFeatures, build } from "./pipeline/build"; -export { precompile } from "./pipeline/precompile"; +export { enableFeatures, build } from "./010-pipeline/build"; +export { precompile } from "./010-pipeline/precompile"; export { TactError, TactCompilationError, TactInternalCompilerError, TactConstEvalError, TactErrorCollection, -} from "./errors"; +} from "./030-error/errors"; export { optionsSchema, projectSchema, configSchema, -} from "./config/parseConfig"; -export { AstSorter } from "./grammar/sort"; -export { AstRenamer } from "./grammar/rename"; -export { AstHasher } from "./grammar/hash"; -export { AstComparator } from "./grammar/compare"; +} from "./000-config/parseConfig"; +export { AstSorter } from "./050-grammar/sort"; +export { AstRenamer } from "./050-grammar/rename"; +export { AstHasher } from "./050-grammar/hash"; +export { AstComparator } from "./050-grammar/compare"; + +export { + Config, + ConfigProject, + parseConfig, + verifyConfig, +} from "./000-config/parseConfig"; + +export { PackageFileFormat } from "./110-packaging/fileFormat"; + +export { VirtualFileSystem } from "./020-vfs/VirtualFileSystem"; + +export { createVirtualFileSystem } from "./020-vfs/createVirtualFileSystem"; + +export * from "./browser"; +export * from "./010-pipeline/logger"; +export * from "./030-error/errors"; diff --git a/src/main.ts b/src/main.ts deleted file mode 100644 index 88816f83d..000000000 --- a/src/main.ts +++ /dev/null @@ -1,20 +0,0 @@ -export { - Config, - ConfigProject, - parseConfig, - verifyConfig, -} from "./config/parseConfig"; - -export { PackageFileFormat } from "./packaging/fileFormat"; - -export { build } from "./pipeline/build"; - -export { VirtualFileSystem } from "./vfs/VirtualFileSystem"; - -export { createVirtualFileSystem } from "./vfs/createVirtualFileSystem"; - -export * from "./browser"; -export * from "./verify"; -export * from "./logger"; -export * from "./errors"; -export * from "./check"; diff --git a/src/node.ts b/src/node.ts index 170330913..de390396b 100644 --- a/src/node.ts +++ b/src/node.ts @@ -1,10 +1,11 @@ import path from "path"; import fs from "fs"; -import { ConfigProject, Config, parseConfig } from "./config/parseConfig"; -import { createNodeFileSystem } from "./vfs/createNodeFileSystem"; -import { build } from "./pipeline/build"; -import { LogLevel, Logger } from "./logger"; -import { TactErrorCollection } from "./errors"; +import { ConfigProject, Config, parseConfig } from "./000-config/parseConfig"; +import { createNodeFileSystem } from "./020-vfs/createNodeFileSystem"; +import { build } from "./010-pipeline/build"; +import { LogLevel, Logger } from "./010-pipeline/logger"; +import { TactErrorCollection } from "./030-error/errors"; +import { stdlibPath } from "./040-imports/path"; type AdditionalCliOptions = { mode?: ConfigProject["mode"]; @@ -115,10 +116,7 @@ export async function run(args: { configWithRootPath.rootPath as string, false, ); - const stdlib = createNodeFileSystem( - path.resolve(__dirname, "..", "stdlib"), - false, - ); // Improves developer experience + const stdlib = createNodeFileSystem(stdlibPath, false); // Improves developer experience for (const config of projects) { logger.info(`💼 Compiling project ${config.name} ...`); let cliConfig = { ...config }; @@ -141,6 +139,6 @@ export async function run(args: { return { ok: success, error: errorMessages }; } -export { createNodeFileSystem } from "./vfs/createNodeFileSystem"; +export { createNodeFileSystem } from "./020-vfs/createNodeFileSystem"; -export { parseAndEvalExpression } from "./interpreter"; +export { parseAndEvalExpression } from "./070-optimizer/interpreter"; diff --git a/src/prettyPrinter.ts b/src/prettyPrinter/index.ts similarity index 99% rename from src/prettyPrinter.ts rename to src/prettyPrinter/index.ts index 04f9a441f..ed835b216 100644 --- a/src/prettyPrinter.ts +++ b/src/prettyPrinter/index.ts @@ -1,6 +1,6 @@ -import * as A from "./grammar/ast"; -import { groupBy, intercalate, isUndefined } from "./utils/array"; -import { makeVisitor } from "./utils/tricks"; +import * as A from "../050-grammar/ast"; +import { groupBy, intercalate, isUndefined } from "../utils/array"; +import { makeVisitor } from "../utils/tricks"; // // Types diff --git a/src/test/prettyPrinter.spec.ts b/src/prettyPrinter/prettyPrinter.spec.ts similarity index 89% rename from src/test/prettyPrinter.spec.ts rename to src/prettyPrinter/prettyPrinter.spec.ts index 832dbf455..b16cd2f32 100644 --- a/src/test/prettyPrinter.spec.ts +++ b/src/prettyPrinter/prettyPrinter.spec.ts @@ -1,12 +1,12 @@ import fs from "fs"; -import { prettyPrint } from "../prettyPrinter"; -import { getParser } from "../grammar"; +import { prettyPrint } from "./index"; +import { getParser } from "../050-grammar"; import { join } from "path"; -import { trimTrailingCR, CONTRACTS_DIR } from "./util"; +import { trimTrailingCR, CONTRACTS_DIR } from "../../test/util"; import * as assert from "assert"; import JSONBig from "json-bigint"; -import { getAstFactory } from "../grammar/ast"; -import { defaultParser } from "../grammar/grammar"; +import { getAstFactory } from "../050-grammar/ast"; +import { defaultParser } from "../050-grammar/grammar"; describe("formatter", () => { it.each(fs.readdirSync(CONTRACTS_DIR, { withFileTypes: true }))( diff --git a/src/utils/tricks.ts b/src/utils/tricks.ts index 40ca8578a..22ee2482a 100644 --- a/src/utils/tricks.ts +++ b/src/utils/tricks.ts @@ -89,7 +89,7 @@ export const match = ( }) as MV, never>; }; -import { throwInternalCompilerError } from "../errors"; +import { throwInternalCompilerError } from "../030-error/errors"; /** * Convert union to intersection. See https://stackoverflow.com/q/50374908 diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 8d3a45ec9..af311c362 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -1,4 +1,4 @@ -import { throwInternalCompilerError } from "../errors"; +import { throwInternalCompilerError } from "../030-error/errors"; export function topologicalSort(src: T[], references: (src: T) => T[]) { const result: T[] = []; diff --git a/tact.config.json b/tact.config.json deleted file mode 100644 index 3453dd029..000000000 --- a/tact.config.json +++ /dev/null @@ -1,446 +0,0 @@ -{ - "$schema": "http://raw.githubusercontent.com/tact-lang/tact/main/schemas/configSchema.json", - "projects": [ - { - "name": "echo", - "path": "./examples/echo.tact", - "output": "./examples/output" - }, - { - "name": "inheritance", - "path": "./examples/inheritance.tact", - "output": "./examples/output" - }, - { - "name": "large", - "path": "./examples/large.tact", - "output": "./examples/output" - }, - { - "name": "native", - "path": "./examples/native.tact", - "output": "./examples/output" - }, - { - "name": "maps", - "path": "./examples/maps.tact", - "output": "./examples/output" - }, - { - "name": "payouts", - "path": "./examples/payouts.tact", - "output": "./examples/output" - }, - { - "name": "external", - "path": "./examples/external.tact", - "output": "./examples/output", - "options": { - "external": true - } - }, - { - "name": "wallet", - "path": "./examples/wallet.tact", - "output": "./examples/output" - }, - { - "name": "wallet-opt", - "path": "./examples/wallet-opt.tact", - "output": "./examples/output", - "options": { - "experimental": { - "inline": true - } - } - }, - { - "name": "treasure", - "path": "./examples/treasure.tact", - "output": "./examples/output" - }, - { - "name": "multisig", - "path": "./examples/multisig.tact", - "output": "./examples/output" - }, - { - "name": "multisig-3", - "path": "./examples/multisig-3.tact", - "output": "./examples/output" - }, - { - "name": "increment", - "path": "./examples/increment.tact", - "output": "./examples/output" - }, - { - "name": "rugpull", - "path": "./examples/rugpull.tact", - "output": "./examples/output" - }, - { - "name": "maps1", - "path": "./src/test/e2e-emulated/contracts/maps1.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "maps2", - "path": "./src/test/e2e-emulated/contracts/maps2.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "map-traverse", - "path": "./src/test/e2e-emulated/contracts/map-traverse.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "map-comparison", - "path": "./src/test/e2e-emulated/contracts/map-comparison.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "mutating-methods", - "path": "./src/test/e2e-emulated/contracts/mutating-methods.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "non-mutating-methods", - "path": "./src/test/e2e-emulated/contracts/non-mutating-methods.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "underscore-variable", - "path": "./src/test/e2e-emulated/contracts/underscore-variable.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "optionals", - "path": "./src/test/e2e-emulated/contracts/optionals.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "sample-jetton", - "path": "./src/test/e2e-emulated/contracts/sample-jetton.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "serialization", - "path": "./src/test/e2e-emulated/contracts/serialization.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "serialization-2", - "path": "./src/test/e2e-emulated/contracts/serialization-2.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "serialization-3", - "path": "./src/test/e2e-emulated/contracts/serialization-3.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "strings", - "path": "./src/test/e2e-emulated/contracts/strings.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "constants", - "path": "./src/test/e2e-emulated/contracts/constants.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "math", - "path": "./src/test/e2e-emulated/contracts/math.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "dns", - "path": "./src/test/e2e-emulated/contracts/dns.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "integer-literals", - "path": "./src/test/e2e-emulated/contracts/integer-literals.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "random", - "path": "./src/test/e2e-emulated/contracts/random.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "ordering", - "path": "./src/test/e2e-emulated/contracts/ordering.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "deep", - "path": "./src/test/e2e-emulated/contracts/deep-sequence.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "bounced-routing", - "path": "./src/test/e2e-emulated/contracts/bounced-routing.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "external-fallbacks", - "path": "./src/test/e2e-emulated/contracts/external-fallbacks.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "external": true - } - }, - { - "name": "debug", - "path": "./src/test/e2e-emulated/contracts/debug.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "send", - "path": "./src/test/e2e-emulated/contracts/send.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "intrinsics", - "path": "./src/test/e2e-emulated/contracts/intrinsics.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "masterchain", - "path": "./src/test/e2e-emulated/contracts/masterchain.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "try-catch", - "path": "./src/test/e2e-emulated/contracts/try-catch.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "address", - "path": "./src/test/e2e-emulated/contracts/address.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "ternary", - "path": "./src/test/e2e-emulated/contracts/ternary.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "implicit-init", - "path": "./src/test/e2e-emulated/contracts/implicit-init.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "recursion", - "path": "./src/test/e2e-emulated/contracts/recursion.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "local-type-inference", - "path": "./src/test/e2e-emulated/contracts/local-type-inference.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "benchmark_functions", - "path": "./src/benchmarks/contracts/functions.tact", - "output": "./src/benchmarks/contracts/output" - }, - { - "name": "benchmark_functions_inline", - "path": "./src/benchmarks/contracts/functions.tact", - "output": "./src/benchmarks/contracts/output", - "options": { - "experimental": { - "inline": true - } - } - }, - { - "name": "codegen", - "path": "./src/test/codegen/all-contracts.tact", - "output": "./src/test/codegen/output", - "options": { - "debug": true - } - }, - { - "name": "stdlib", - "path": "./src/test/e2e-emulated/contracts/stdlib.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "structs", - "path": "./src/test/e2e-emulated/contracts/structs.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "initof", - "path": "./src/test/e2e-emulated/contracts/initof.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "initof-2", - "path": "./src/test/e2e-emulated/contracts/initof-2.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "initof-3", - "path": "./src/test/e2e-emulated/contracts/initof-3.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "getters", - "path": "./src/test/e2e-emulated/contracts/getters.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "allocation", - "path": "./src/test/e2e-emulated/contracts/allocation.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "traits", - "path": "./src/test/e2e-emulated/contracts/traits.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "receiver-empty", - "path": "./src/test/e2e-emulated/contracts/receiver-empty.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "init-of-message", - "path": "./src/test/e2e-emulated/contracts/init-of-message.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "init-return", - "path": "./src/test/e2e-emulated/contracts/init-return.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "repeat-range", - "path": "./src/test/exit-codes/contracts/repeat-range.tact", - "output": "./src/test/exit-codes/contracts/output" - }, - { - "name": "semantics", - "path": "./src/test/e2e-emulated/contracts/semantics.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "contract-methods", - "path": "./src/test/e2e-emulated/contracts/contract-methods.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "asm-functions", - "path": "./src/test/e2e-emulated/contracts/asm-functions.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "text-message-receivers", - "path": "./src/test/e2e-emulated/contracts/text-message-receivers.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "tact-reserved-contract-errors", - "path": "./src/test/exit-codes/contracts/tact-reserved-contract-errors.tact", - "output": "./src/test/exit-codes/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "compute-phase-errors", - "path": "./src/test/exit-codes/contracts/compute-phase-errors.tact", - "output": "./src/test/exit-codes/contracts/output" - } - ] -} diff --git a/src/benchmarks/benchmarks.spec.ts b/test/benchmarks/benchmarks.spec.ts similarity index 100% rename from src/benchmarks/benchmarks.spec.ts rename to test/benchmarks/benchmarks.spec.ts diff --git a/src/benchmarks/contracts/functions.tact b/test/benchmarks/contracts/functions.tact similarity index 100% rename from src/benchmarks/contracts/functions.tact rename to test/benchmarks/contracts/functions.tact diff --git a/src/test/codegen/all-contracts.tact b/test/codegen/all-contracts.tact similarity index 100% rename from src/test/codegen/all-contracts.tact rename to test/codegen/all-contracts.tact diff --git a/src/test/codegen/empty-message.tact b/test/codegen/empty-message.tact similarity index 100% rename from src/test/codegen/empty-message.tact rename to test/codegen/empty-message.tact diff --git a/src/test/codegen/emptyMap-in-equality.tact b/test/codegen/emptyMap-in-equality.tact similarity index 100% rename from src/test/codegen/emptyMap-in-equality.tact rename to test/codegen/emptyMap-in-equality.tact diff --git a/src/test/codegen/large-contract.tact b/test/codegen/large-contract.tact similarity index 100% rename from src/test/codegen/large-contract.tact rename to test/codegen/large-contract.tact diff --git a/src/test/codegen/map-uint-bool-get.tact b/test/codegen/map-uint-bool-get.tact similarity index 100% rename from src/test/codegen/map-uint-bool-get.tact rename to test/codegen/map-uint-bool-get.tact diff --git a/src/test/codegen/message-opcode-parsing.tact b/test/codegen/message-opcode-parsing.tact similarity index 100% rename from src/test/codegen/message-opcode-parsing.tact rename to test/codegen/message-opcode-parsing.tact diff --git a/src/test/codegen/mutating-method-on-non-lvalues.tact b/test/codegen/mutating-method-on-non-lvalues.tact similarity index 100% rename from src/test/codegen/mutating-method-on-non-lvalues.tact rename to test/codegen/mutating-method-on-non-lvalues.tact diff --git a/src/test/codegen/struct-field-func-keywords-name-clash.tact b/test/codegen/struct-field-func-keywords-name-clash.tact similarity index 100% rename from src/test/codegen/struct-field-func-keywords-name-clash.tact rename to test/codegen/struct-field-func-keywords-name-clash.tact diff --git a/src/test/codegen/struct-field-storage-annotation.tact b/test/codegen/struct-field-storage-annotation.tact similarity index 100% rename from src/test/codegen/struct-field-storage-annotation.tact rename to test/codegen/struct-field-storage-annotation.tact diff --git a/src/test/codegen/struct-with-default-and-optional-fields.tact b/test/codegen/struct-with-default-and-optional-fields.tact similarity index 100% rename from src/test/codegen/struct-with-default-and-optional-fields.tact rename to test/codegen/struct-with-default-and-optional-fields.tact diff --git a/src/test/codegen/var-scope-global-fun-shadowing-allowed.tact b/test/codegen/var-scope-global-fun-shadowing-allowed.tact similarity index 100% rename from src/test/codegen/var-scope-global-fun-shadowing-allowed.tact rename to test/codegen/var-scope-global-fun-shadowing-allowed.tact diff --git a/src/test/compare.spec.ts b/test/compare.spec.ts similarity index 80% rename from src/test/compare.spec.ts rename to test/compare.spec.ts index c8e0fcca7..f0996ff79 100644 --- a/src/test/compare.spec.ts +++ b/test/compare.spec.ts @@ -1,11 +1,11 @@ import fs from "fs"; -import { getParser } from "../grammar"; +import { getParser } from "../src/050-grammar"; import { join } from "path"; -import { AstComparator } from "../grammar/compare"; +import { AstComparator } from "../src/050-grammar/compare"; import { CONTRACTS_DIR } from "./util"; import * as assert from "assert"; -import { getAstFactory } from "../grammar/ast"; -import { defaultParser } from "../grammar/grammar"; +import { getAstFactory } from "../src/050-grammar/ast"; +import { defaultParser } from "../src/050-grammar/grammar"; describe("comparator", () => { it.each(fs.readdirSync(CONTRACTS_DIR, { withFileTypes: true }))( diff --git a/src/test/compilation-failed/abi-global-errors.spec.ts b/test/compilation-failed/abi-global-errors.spec.ts similarity index 100% rename from src/test/compilation-failed/abi-global-errors.spec.ts rename to test/compilation-failed/abi-global-errors.spec.ts diff --git a/src/test/compilation-failed/const-eval-failed.spec.ts b/test/compilation-failed/const-eval-failed.spec.ts similarity index 100% rename from src/test/compilation-failed/const-eval-failed.spec.ts rename to test/compilation-failed/const-eval-failed.spec.ts diff --git a/src/test/compilation-failed/contract-duplicate-opcodes.spec.ts b/test/compilation-failed/contract-duplicate-opcodes.spec.ts similarity index 100% rename from src/test/compilation-failed/contract-duplicate-opcodes.spec.ts rename to test/compilation-failed/contract-duplicate-opcodes.spec.ts diff --git a/src/test/compilation-failed/contracts/const-eval-ascii-empty.tact b/test/compilation-failed/contracts/const-eval-ascii-empty.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-ascii-empty.tact rename to test/compilation-failed/contracts/const-eval-ascii-empty.tact diff --git a/src/test/compilation-failed/contracts/const-eval-ascii-overflow-2.tact b/test/compilation-failed/contracts/const-eval-ascii-overflow-2.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-ascii-overflow-2.tact rename to test/compilation-failed/contracts/const-eval-ascii-overflow-2.tact diff --git a/src/test/compilation-failed/contracts/const-eval-ascii-overflow.tact b/test/compilation-failed/contracts/const-eval-ascii-overflow.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-ascii-overflow.tact rename to test/compilation-failed/contracts/const-eval-ascii-overflow.tact diff --git a/src/test/compilation-failed/contracts/const-eval-div-by-zero-in-fun.tact b/test/compilation-failed/contracts/const-eval-div-by-zero-in-fun.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-div-by-zero-in-fun.tact rename to test/compilation-failed/contracts/const-eval-div-by-zero-in-fun.tact diff --git a/src/test/compilation-failed/contracts/const-eval-div-by-zero.tact b/test/compilation-failed/contracts/const-eval-div-by-zero.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-div-by-zero.tact rename to test/compilation-failed/contracts/const-eval-div-by-zero.tact diff --git a/src/test/compilation-failed/contracts/const-eval-int-overflow-add-in-fun.tact b/test/compilation-failed/contracts/const-eval-int-overflow-add-in-fun.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-int-overflow-add-in-fun.tact rename to test/compilation-failed/contracts/const-eval-int-overflow-add-in-fun.tact diff --git a/src/test/compilation-failed/contracts/const-eval-int-overflow-add.tact b/test/compilation-failed/contracts/const-eval-int-overflow-add.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-int-overflow-add.tact rename to test/compilation-failed/contracts/const-eval-int-overflow-add.tact diff --git a/src/test/compilation-failed/contracts/const-eval-int-overflow-div-in-fun.tact b/test/compilation-failed/contracts/const-eval-int-overflow-div-in-fun.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-int-overflow-div-in-fun.tact rename to test/compilation-failed/contracts/const-eval-int-overflow-div-in-fun.tact diff --git a/src/test/compilation-failed/contracts/const-eval-int-overflow-div.tact b/test/compilation-failed/contracts/const-eval-int-overflow-div.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-int-overflow-div.tact rename to test/compilation-failed/contracts/const-eval-int-overflow-div.tact diff --git a/src/test/compilation-failed/contracts/const-eval-int-overflow-mul1-in-fun.tact b/test/compilation-failed/contracts/const-eval-int-overflow-mul1-in-fun.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-int-overflow-mul1-in-fun.tact rename to test/compilation-failed/contracts/const-eval-int-overflow-mul1-in-fun.tact diff --git a/src/test/compilation-failed/contracts/const-eval-int-overflow-mul1.tact b/test/compilation-failed/contracts/const-eval-int-overflow-mul1.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-int-overflow-mul1.tact rename to test/compilation-failed/contracts/const-eval-int-overflow-mul1.tact diff --git a/src/test/compilation-failed/contracts/const-eval-int-overflow-mul2-in-fun.tact b/test/compilation-failed/contracts/const-eval-int-overflow-mul2-in-fun.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-int-overflow-mul2-in-fun.tact rename to test/compilation-failed/contracts/const-eval-int-overflow-mul2-in-fun.tact diff --git a/src/test/compilation-failed/contracts/const-eval-int-overflow-mul2.tact b/test/compilation-failed/contracts/const-eval-int-overflow-mul2.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-int-overflow-mul2.tact rename to test/compilation-failed/contracts/const-eval-int-overflow-mul2.tact diff --git a/src/test/compilation-failed/contracts/const-eval-int-overflow-negative-literal-in-fun.tact b/test/compilation-failed/contracts/const-eval-int-overflow-negative-literal-in-fun.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-int-overflow-negative-literal-in-fun.tact rename to test/compilation-failed/contracts/const-eval-int-overflow-negative-literal-in-fun.tact diff --git a/src/test/compilation-failed/contracts/const-eval-int-overflow-negative-literal.tact b/test/compilation-failed/contracts/const-eval-int-overflow-negative-literal.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-int-overflow-negative-literal.tact rename to test/compilation-failed/contracts/const-eval-int-overflow-negative-literal.tact diff --git a/src/test/compilation-failed/contracts/const-eval-int-overflow-positive-literal-in-fun.tact b/test/compilation-failed/contracts/const-eval-int-overflow-positive-literal-in-fun.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-int-overflow-positive-literal-in-fun.tact rename to test/compilation-failed/contracts/const-eval-int-overflow-positive-literal-in-fun.tact diff --git a/src/test/compilation-failed/contracts/const-eval-int-overflow-positive-literal.tact b/test/compilation-failed/contracts/const-eval-int-overflow-positive-literal.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-int-overflow-positive-literal.tact rename to test/compilation-failed/contracts/const-eval-int-overflow-positive-literal.tact diff --git a/src/test/compilation-failed/contracts/const-eval-int-overflow-pow-1.tact b/test/compilation-failed/contracts/const-eval-int-overflow-pow-1.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-int-overflow-pow-1.tact rename to test/compilation-failed/contracts/const-eval-int-overflow-pow-1.tact diff --git a/src/test/compilation-failed/contracts/const-eval-int-overflow-pow-2.tact b/test/compilation-failed/contracts/const-eval-int-overflow-pow-2.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-int-overflow-pow-2.tact rename to test/compilation-failed/contracts/const-eval-int-overflow-pow-2.tact diff --git a/src/test/compilation-failed/contracts/const-eval-int-overflow-pow2-1.tact b/test/compilation-failed/contracts/const-eval-int-overflow-pow2-1.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-int-overflow-pow2-1.tact rename to test/compilation-failed/contracts/const-eval-int-overflow-pow2-1.tact diff --git a/src/test/compilation-failed/contracts/const-eval-int-overflow-pow2-2.tact b/test/compilation-failed/contracts/const-eval-int-overflow-pow2-2.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-int-overflow-pow2-2.tact rename to test/compilation-failed/contracts/const-eval-int-overflow-pow2-2.tact diff --git a/src/test/compilation-failed/contracts/const-eval-int-overflow-shl1.tact b/test/compilation-failed/contracts/const-eval-int-overflow-shl1.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-int-overflow-shl1.tact rename to test/compilation-failed/contracts/const-eval-int-overflow-shl1.tact diff --git a/src/test/compilation-failed/contracts/const-eval-int-overflow-shl2.tact b/test/compilation-failed/contracts/const-eval-int-overflow-shl2.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-int-overflow-shl2.tact rename to test/compilation-failed/contracts/const-eval-int-overflow-shl2.tact diff --git a/src/test/compilation-failed/contracts/const-eval-int-overflow-struct-instance-in-fun.tact b/test/compilation-failed/contracts/const-eval-int-overflow-struct-instance-in-fun.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-int-overflow-struct-instance-in-fun.tact rename to test/compilation-failed/contracts/const-eval-int-overflow-struct-instance-in-fun.tact diff --git a/src/test/compilation-failed/contracts/const-eval-int-overflow-struct-instance.tact b/test/compilation-failed/contracts/const-eval-int-overflow-struct-instance.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-int-overflow-struct-instance.tact rename to test/compilation-failed/contracts/const-eval-int-overflow-struct-instance.tact diff --git a/src/test/compilation-failed/contracts/const-eval-int-overflow-sub.tact b/test/compilation-failed/contracts/const-eval-int-overflow-sub.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-int-overflow-sub.tact rename to test/compilation-failed/contracts/const-eval-int-overflow-sub.tact diff --git a/src/test/compilation-failed/contracts/const-eval-int-overflow-ton1.tact b/test/compilation-failed/contracts/const-eval-int-overflow-ton1.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-int-overflow-ton1.tact rename to test/compilation-failed/contracts/const-eval-int-overflow-ton1.tact diff --git a/src/test/compilation-failed/contracts/const-eval-int-overflow-ton2.tact b/test/compilation-failed/contracts/const-eval-int-overflow-ton2.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-int-overflow-ton2.tact rename to test/compilation-failed/contracts/const-eval-int-overflow-ton2.tact diff --git a/src/test/compilation-failed/contracts/const-eval-invalid-address.tact b/test/compilation-failed/contracts/const-eval-invalid-address.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-invalid-address.tact rename to test/compilation-failed/contracts/const-eval-invalid-address.tact diff --git a/src/test/compilation-failed/contracts/const-eval-mod-by-zero.tact b/test/compilation-failed/contracts/const-eval-mod-by-zero.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-mod-by-zero.tact rename to test/compilation-failed/contracts/const-eval-mod-by-zero.tact diff --git a/src/test/compilation-failed/contracts/const-eval-rawslice-invalid.tact b/test/compilation-failed/contracts/const-eval-rawslice-invalid.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-rawslice-invalid.tact rename to test/compilation-failed/contracts/const-eval-rawslice-invalid.tact diff --git a/src/test/compilation-failed/contracts/const-eval-rawslice-not-hex.tact b/test/compilation-failed/contracts/const-eval-rawslice-not-hex.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-rawslice-not-hex.tact rename to test/compilation-failed/contracts/const-eval-rawslice-not-hex.tact diff --git a/src/test/compilation-failed/contracts/const-eval-rawslice-overflow-padded.tact b/test/compilation-failed/contracts/const-eval-rawslice-overflow-padded.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-rawslice-overflow-padded.tact rename to test/compilation-failed/contracts/const-eval-rawslice-overflow-padded.tact diff --git a/src/test/compilation-failed/contracts/const-eval-rawslice-overflow.tact b/test/compilation-failed/contracts/const-eval-rawslice-overflow.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-rawslice-overflow.tact rename to test/compilation-failed/contracts/const-eval-rawslice-overflow.tact diff --git a/src/test/compilation-failed/contracts/const-eval-repeat-lower-bound.tact b/test/compilation-failed/contracts/const-eval-repeat-lower-bound.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-repeat-lower-bound.tact rename to test/compilation-failed/contracts/const-eval-repeat-lower-bound.tact diff --git a/src/test/compilation-failed/contracts/const-eval-repeat-upper-bound.tact b/test/compilation-failed/contracts/const-eval-repeat-upper-bound.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-repeat-upper-bound.tact rename to test/compilation-failed/contracts/const-eval-repeat-upper-bound.tact diff --git a/src/test/compilation-failed/contracts/const-eval-shl-invalid-bits1.tact b/test/compilation-failed/contracts/const-eval-shl-invalid-bits1.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-shl-invalid-bits1.tact rename to test/compilation-failed/contracts/const-eval-shl-invalid-bits1.tact diff --git a/src/test/compilation-failed/contracts/const-eval-shl-invalid-bits2.tact b/test/compilation-failed/contracts/const-eval-shl-invalid-bits2.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-shl-invalid-bits2.tact rename to test/compilation-failed/contracts/const-eval-shl-invalid-bits2.tact diff --git a/src/test/compilation-failed/contracts/const-eval-unboxing-null.tact b/test/compilation-failed/contracts/const-eval-unboxing-null.tact similarity index 100% rename from src/test/compilation-failed/contracts/const-eval-unboxing-null.tact rename to test/compilation-failed/contracts/const-eval-unboxing-null.tact diff --git a/src/test/compilation-failed/contracts/contract-duplicate-bounced-opcode.tact b/test/compilation-failed/contracts/contract-duplicate-bounced-opcode.tact similarity index 100% rename from src/test/compilation-failed/contracts/contract-duplicate-bounced-opcode.tact rename to test/compilation-failed/contracts/contract-duplicate-bounced-opcode.tact diff --git a/src/test/compilation-failed/contracts/contract-duplicate-external-opcode.tact b/test/compilation-failed/contracts/contract-duplicate-external-opcode.tact similarity index 100% rename from src/test/compilation-failed/contracts/contract-duplicate-external-opcode.tact rename to test/compilation-failed/contracts/contract-duplicate-external-opcode.tact diff --git a/src/test/compilation-failed/contracts/contract-duplicate-receiver-opcode.tact b/test/compilation-failed/contracts/contract-duplicate-receiver-opcode.tact similarity index 100% rename from src/test/compilation-failed/contracts/contract-duplicate-receiver-opcode.tact rename to test/compilation-failed/contracts/contract-duplicate-receiver-opcode.tact diff --git a/src/test/compilation-failed/contracts/func-function-does-not-exist.tact b/test/compilation-failed/contracts/func-function-does-not-exist.tact similarity index 100% rename from src/test/compilation-failed/contracts/func-function-does-not-exist.tact rename to test/compilation-failed/contracts/func-function-does-not-exist.tact diff --git a/src/test/compilation-failed/contracts/scope-const-shadows-stdlib-ident.tact b/test/compilation-failed/contracts/scope-const-shadows-stdlib-ident.tact similarity index 100% rename from src/test/compilation-failed/contracts/scope-const-shadows-stdlib-ident.tact rename to test/compilation-failed/contracts/scope-const-shadows-stdlib-ident.tact diff --git a/src/test/compilation-failed/contracts/sha256-expects-string-or-slice.tact b/test/compilation-failed/contracts/sha256-expects-string-or-slice.tact similarity index 100% rename from src/test/compilation-failed/contracts/sha256-expects-string-or-slice.tact rename to test/compilation-failed/contracts/sha256-expects-string-or-slice.tact diff --git a/src/test/compilation-failed/contracts/stdlib-skipBits.tact b/test/compilation-failed/contracts/stdlib-skipBits.tact similarity index 100% rename from src/test/compilation-failed/contracts/stdlib-skipBits.tact rename to test/compilation-failed/contracts/stdlib-skipBits.tact diff --git a/src/test/compilation-failed/func-errors.spec.ts b/test/compilation-failed/func-errors.spec.ts similarity index 100% rename from src/test/compilation-failed/func-errors.spec.ts rename to test/compilation-failed/func-errors.spec.ts diff --git a/src/test/compilation-failed/scope-errors.spec.ts b/test/compilation-failed/scope-errors.spec.ts similarity index 100% rename from src/test/compilation-failed/scope-errors.spec.ts rename to test/compilation-failed/scope-errors.spec.ts diff --git a/src/test/compilation-failed/stdlib-bugs.spec.ts b/test/compilation-failed/stdlib-bugs.spec.ts similarity index 100% rename from src/test/compilation-failed/stdlib-bugs.spec.ts rename to test/compilation-failed/stdlib-bugs.spec.ts diff --git a/src/test/compilation-failed/tact.config.json b/test/compilation-failed/tact.config.json similarity index 100% rename from src/test/compilation-failed/tact.config.json rename to test/compilation-failed/tact.config.json diff --git a/src/test/compilation-failed/util.ts b/test/compilation-failed/util.ts similarity index 93% rename from src/test/compilation-failed/util.ts rename to test/compilation-failed/util.ts index 2d893de24..d37e77278 100644 --- a/src/test/compilation-failed/util.ts +++ b/test/compilation-failed/util.ts @@ -1,4 +1,4 @@ -import { run } from "../../node"; +import { run } from "../../src/node"; // helper to reduce boilerplate export function itShouldNotCompile(params: { diff --git a/test/contracts.build.ts b/test/contracts.build.ts new file mode 100644 index 000000000..2c9be778c --- /dev/null +++ b/test/contracts.build.ts @@ -0,0 +1,25 @@ +import { run } from "../src/node"; +import path from "path"; +import { Logger } from "../src/010-pipeline/logger"; +import { __DANGER__disableVersionNumber } from "../src/010-pipeline/version"; + +// Read cases +void (async () => { + // Disable version number in packages + __DANGER__disableVersionNumber(); + + const logger = new Logger(); + + try { + // Compile projects + const compileResult = await run({ + configPath: path.join(__dirname, "tact.config.json"), + }); + if (!compileResult.ok) { + throw new Error("Tact projects compilation failed"); + } + } catch (error) { + logger.error(error as Error); + process.exit(1); + } +})(); diff --git a/src/test/contracts/attributes.tact b/test/contracts/attributes.tact similarity index 100% rename from src/test/contracts/attributes.tact rename to test/contracts/attributes.tact diff --git a/src/test/contracts/case-1.tact b/test/contracts/case-1.tact similarity index 100% rename from src/test/contracts/case-1.tact rename to test/contracts/case-1.tact diff --git a/src/test/contracts/case-2.tact b/test/contracts/case-2.tact similarity index 100% rename from src/test/contracts/case-2.tact rename to test/contracts/case-2.tact diff --git a/src/test/contracts/case-3.tact b/test/contracts/case-3.tact similarity index 100% rename from src/test/contracts/case-3.tact rename to test/contracts/case-3.tact diff --git a/src/test/contracts/case-4.tact b/test/contracts/case-4.tact similarity index 100% rename from src/test/contracts/case-4.tact rename to test/contracts/case-4.tact diff --git a/src/test/contracts/case-asm-fun.tact b/test/contracts/case-asm-fun.tact similarity index 100% rename from src/test/contracts/case-asm-fun.tact rename to test/contracts/case-asm-fun.tact diff --git a/src/test/contracts/case-augmented-assign.tact b/test/contracts/case-augmented-assign.tact similarity index 100% rename from src/test/contracts/case-augmented-assign.tact rename to test/contracts/case-augmented-assign.tact diff --git a/src/test/contracts/case-bin-ops.tact b/test/contracts/case-bin-ops.tact similarity index 100% rename from src/test/contracts/case-bin-ops.tact rename to test/contracts/case-bin-ops.tact diff --git a/src/test/contracts/case-destructuring.tact b/test/contracts/case-destructuring.tact similarity index 100% rename from src/test/contracts/case-destructuring.tact rename to test/contracts/case-destructuring.tact diff --git a/src/test/contracts/case-if.tact b/test/contracts/case-if.tact similarity index 100% rename from src/test/contracts/case-if.tact rename to test/contracts/case-if.tact diff --git a/src/test/contracts/case-initOf.tact b/test/contracts/case-initOf.tact similarity index 100% rename from src/test/contracts/case-initOf.tact rename to test/contracts/case-initOf.tact diff --git a/src/test/contracts/case-loops.tact b/test/contracts/case-loops.tact similarity index 100% rename from src/test/contracts/case-loops.tact rename to test/contracts/case-loops.tact diff --git a/src/test/contracts/case-message-opcode.tact b/test/contracts/case-message-opcode.tact similarity index 100% rename from src/test/contracts/case-message-opcode.tact rename to test/contracts/case-message-opcode.tact diff --git a/src/test/contracts/case-priority.tact b/test/contracts/case-priority.tact similarity index 100% rename from src/test/contracts/case-priority.tact rename to test/contracts/case-priority.tact diff --git a/src/test/contracts/case-receive.tact b/test/contracts/case-receive.tact similarity index 100% rename from src/test/contracts/case-receive.tact rename to test/contracts/case-receive.tact diff --git a/src/test/contracts/case-traits.tact b/test/contracts/case-traits.tact similarity index 100% rename from src/test/contracts/case-traits.tact rename to test/contracts/case-traits.tact diff --git a/src/test/contracts/case-trycatch.tact b/test/contracts/case-trycatch.tact similarity index 100% rename from src/test/contracts/case-trycatch.tact rename to test/contracts/case-trycatch.tact diff --git a/src/test/contracts/getter-with-method-id-const.tact b/test/contracts/getter-with-method-id-const.tact similarity index 100% rename from src/test/contracts/getter-with-method-id-const.tact rename to test/contracts/getter-with-method-id-const.tact diff --git a/src/test/contracts/getter-with-method-id.tact b/test/contracts/getter-with-method-id.tact similarity index 100% rename from src/test/contracts/getter-with-method-id.tact rename to test/contracts/getter-with-method-id.tact diff --git a/src/test/contracts/native-functions.tact b/test/contracts/native-functions.tact similarity index 100% rename from src/test/contracts/native-functions.tact rename to test/contracts/native-functions.tact diff --git a/src/test/contracts/renamer-expected/attributes.tact b/test/contracts/renamer-expected/attributes.tact similarity index 100% rename from src/test/contracts/renamer-expected/attributes.tact rename to test/contracts/renamer-expected/attributes.tact diff --git a/src/test/contracts/renamer-expected/case-1.tact b/test/contracts/renamer-expected/case-1.tact similarity index 100% rename from src/test/contracts/renamer-expected/case-1.tact rename to test/contracts/renamer-expected/case-1.tact diff --git a/src/test/contracts/renamer-expected/case-2.tact b/test/contracts/renamer-expected/case-2.tact similarity index 100% rename from src/test/contracts/renamer-expected/case-2.tact rename to test/contracts/renamer-expected/case-2.tact diff --git a/src/test/contracts/renamer-expected/case-3.tact b/test/contracts/renamer-expected/case-3.tact similarity index 100% rename from src/test/contracts/renamer-expected/case-3.tact rename to test/contracts/renamer-expected/case-3.tact diff --git a/src/test/contracts/renamer-expected/case-4.tact b/test/contracts/renamer-expected/case-4.tact similarity index 100% rename from src/test/contracts/renamer-expected/case-4.tact rename to test/contracts/renamer-expected/case-4.tact diff --git a/src/test/contracts/renamer-expected/case-asm-fun.tact b/test/contracts/renamer-expected/case-asm-fun.tact similarity index 100% rename from src/test/contracts/renamer-expected/case-asm-fun.tact rename to test/contracts/renamer-expected/case-asm-fun.tact diff --git a/src/test/contracts/renamer-expected/case-augmented-assign.tact b/test/contracts/renamer-expected/case-augmented-assign.tact similarity index 100% rename from src/test/contracts/renamer-expected/case-augmented-assign.tact rename to test/contracts/renamer-expected/case-augmented-assign.tact diff --git a/src/test/contracts/renamer-expected/case-bin-ops.tact b/test/contracts/renamer-expected/case-bin-ops.tact similarity index 100% rename from src/test/contracts/renamer-expected/case-bin-ops.tact rename to test/contracts/renamer-expected/case-bin-ops.tact diff --git a/src/test/contracts/renamer-expected/case-destructuring.tact b/test/contracts/renamer-expected/case-destructuring.tact similarity index 100% rename from src/test/contracts/renamer-expected/case-destructuring.tact rename to test/contracts/renamer-expected/case-destructuring.tact diff --git a/src/test/contracts/renamer-expected/case-if.tact b/test/contracts/renamer-expected/case-if.tact similarity index 100% rename from src/test/contracts/renamer-expected/case-if.tact rename to test/contracts/renamer-expected/case-if.tact diff --git a/src/test/contracts/renamer-expected/case-initOf.tact b/test/contracts/renamer-expected/case-initOf.tact similarity index 100% rename from src/test/contracts/renamer-expected/case-initOf.tact rename to test/contracts/renamer-expected/case-initOf.tact diff --git a/src/test/contracts/renamer-expected/case-loops.tact b/test/contracts/renamer-expected/case-loops.tact similarity index 100% rename from src/test/contracts/renamer-expected/case-loops.tact rename to test/contracts/renamer-expected/case-loops.tact diff --git a/src/test/contracts/renamer-expected/case-message-opcode.tact b/test/contracts/renamer-expected/case-message-opcode.tact similarity index 100% rename from src/test/contracts/renamer-expected/case-message-opcode.tact rename to test/contracts/renamer-expected/case-message-opcode.tact diff --git a/src/test/contracts/renamer-expected/case-priority.tact b/test/contracts/renamer-expected/case-priority.tact similarity index 100% rename from src/test/contracts/renamer-expected/case-priority.tact rename to test/contracts/renamer-expected/case-priority.tact diff --git a/src/test/contracts/renamer-expected/case-receive.tact b/test/contracts/renamer-expected/case-receive.tact similarity index 100% rename from src/test/contracts/renamer-expected/case-receive.tact rename to test/contracts/renamer-expected/case-receive.tact diff --git a/src/test/contracts/renamer-expected/case-traits.tact b/test/contracts/renamer-expected/case-traits.tact similarity index 100% rename from src/test/contracts/renamer-expected/case-traits.tact rename to test/contracts/renamer-expected/case-traits.tact diff --git a/src/test/contracts/renamer-expected/case-trycatch.tact b/test/contracts/renamer-expected/case-trycatch.tact similarity index 100% rename from src/test/contracts/renamer-expected/case-trycatch.tact rename to test/contracts/renamer-expected/case-trycatch.tact diff --git a/src/test/contracts/renamer-expected/getter-with-method-id-const.tact b/test/contracts/renamer-expected/getter-with-method-id-const.tact similarity index 100% rename from src/test/contracts/renamer-expected/getter-with-method-id-const.tact rename to test/contracts/renamer-expected/getter-with-method-id-const.tact diff --git a/src/test/contracts/renamer-expected/getter-with-method-id.tact b/test/contracts/renamer-expected/getter-with-method-id.tact similarity index 100% rename from src/test/contracts/renamer-expected/getter-with-method-id.tact rename to test/contracts/renamer-expected/getter-with-method-id.tact diff --git a/src/test/contracts/renamer-expected/native-functions.tact b/test/contracts/renamer-expected/native-functions.tact similarity index 100% rename from src/test/contracts/renamer-expected/native-functions.tact rename to test/contracts/renamer-expected/native-functions.tact diff --git a/src/test/e2e-emulated/__snapshots__/getters.spec.ts.snap b/test/e2e-emulated/__snapshots__/getters.spec.ts.snap similarity index 100% rename from src/test/e2e-emulated/__snapshots__/getters.spec.ts.snap rename to test/e2e-emulated/__snapshots__/getters.spec.ts.snap diff --git a/src/test/e2e-emulated/__snapshots__/local-type-inference.spec.ts.snap b/test/e2e-emulated/__snapshots__/local-type-inference.spec.ts.snap similarity index 100% rename from src/test/e2e-emulated/__snapshots__/local-type-inference.spec.ts.snap rename to test/e2e-emulated/__snapshots__/local-type-inference.spec.ts.snap diff --git a/src/test/e2e-emulated/__snapshots__/structs.spec.ts.snap b/test/e2e-emulated/__snapshots__/structs.spec.ts.snap similarity index 100% rename from src/test/e2e-emulated/__snapshots__/structs.spec.ts.snap rename to test/e2e-emulated/__snapshots__/structs.spec.ts.snap diff --git a/src/test/e2e-emulated/address.spec.ts b/test/e2e-emulated/address.spec.ts similarity index 100% rename from src/test/e2e-emulated/address.spec.ts rename to test/e2e-emulated/address.spec.ts diff --git a/src/test/e2e-emulated/allocation.spec.ts b/test/e2e-emulated/allocation.spec.ts similarity index 100% rename from src/test/e2e-emulated/allocation.spec.ts rename to test/e2e-emulated/allocation.spec.ts diff --git a/src/test/e2e-emulated/asm-functions.spec.ts b/test/e2e-emulated/asm-functions.spec.ts similarity index 100% rename from src/test/e2e-emulated/asm-functions.spec.ts rename to test/e2e-emulated/asm-functions.spec.ts diff --git a/src/test/e2e-emulated/bounced-routing.spec.ts b/test/e2e-emulated/bounced-routing.spec.ts similarity index 100% rename from src/test/e2e-emulated/bounced-routing.spec.ts rename to test/e2e-emulated/bounced-routing.spec.ts diff --git a/src/test/e2e-emulated/constants.spec.ts b/test/e2e-emulated/constants.spec.ts similarity index 100% rename from src/test/e2e-emulated/constants.spec.ts rename to test/e2e-emulated/constants.spec.ts diff --git a/src/test/e2e-emulated/contract-methods.spec.ts b/test/e2e-emulated/contract-methods.spec.ts similarity index 100% rename from src/test/e2e-emulated/contract-methods.spec.ts rename to test/e2e-emulated/contract-methods.spec.ts diff --git a/src/test/e2e-emulated/contracts/address.tact b/test/e2e-emulated/contracts/address.tact similarity index 100% rename from src/test/e2e-emulated/contracts/address.tact rename to test/e2e-emulated/contracts/address.tact diff --git a/src/test/e2e-emulated/contracts/allocation.tact b/test/e2e-emulated/contracts/allocation.tact similarity index 100% rename from src/test/e2e-emulated/contracts/allocation.tact rename to test/e2e-emulated/contracts/allocation.tact diff --git a/src/test/e2e-emulated/contracts/asm-functions.tact b/test/e2e-emulated/contracts/asm-functions.tact similarity index 100% rename from src/test/e2e-emulated/contracts/asm-functions.tact rename to test/e2e-emulated/contracts/asm-functions.tact diff --git a/src/test/e2e-emulated/contracts/bounced-routing.tact b/test/e2e-emulated/contracts/bounced-routing.tact similarity index 100% rename from src/test/e2e-emulated/contracts/bounced-routing.tact rename to test/e2e-emulated/contracts/bounced-routing.tact diff --git a/src/test/e2e-emulated/contracts/constants.tact b/test/e2e-emulated/contracts/constants.tact similarity index 100% rename from src/test/e2e-emulated/contracts/constants.tact rename to test/e2e-emulated/contracts/constants.tact diff --git a/src/test/e2e-emulated/contracts/contract-methods.tact b/test/e2e-emulated/contracts/contract-methods.tact similarity index 100% rename from src/test/e2e-emulated/contracts/contract-methods.tact rename to test/e2e-emulated/contracts/contract-methods.tact diff --git a/src/test/e2e-emulated/contracts/debug.tact b/test/e2e-emulated/contracts/debug.tact similarity index 100% rename from src/test/e2e-emulated/contracts/debug.tact rename to test/e2e-emulated/contracts/debug.tact diff --git a/src/test/e2e-emulated/contracts/deep-sequence.tact b/test/e2e-emulated/contracts/deep-sequence.tact similarity index 100% rename from src/test/e2e-emulated/contracts/deep-sequence.tact rename to test/e2e-emulated/contracts/deep-sequence.tact diff --git a/src/test/e2e-emulated/contracts/dns.tact b/test/e2e-emulated/contracts/dns.tact similarity index 100% rename from src/test/e2e-emulated/contracts/dns.tact rename to test/e2e-emulated/contracts/dns.tact diff --git a/src/test/e2e-emulated/contracts/external-fallbacks.tact b/test/e2e-emulated/contracts/external-fallbacks.tact similarity index 100% rename from src/test/e2e-emulated/contracts/external-fallbacks.tact rename to test/e2e-emulated/contracts/external-fallbacks.tact diff --git a/src/test/e2e-emulated/contracts/getters.tact b/test/e2e-emulated/contracts/getters.tact similarity index 100% rename from src/test/e2e-emulated/contracts/getters.tact rename to test/e2e-emulated/contracts/getters.tact diff --git a/src/test/e2e-emulated/contracts/implicit-init.tact b/test/e2e-emulated/contracts/implicit-init.tact similarity index 100% rename from src/test/e2e-emulated/contracts/implicit-init.tact rename to test/e2e-emulated/contracts/implicit-init.tact diff --git a/src/test/e2e-emulated/contracts/init-of-message.tact b/test/e2e-emulated/contracts/init-of-message.tact similarity index 100% rename from src/test/e2e-emulated/contracts/init-of-message.tact rename to test/e2e-emulated/contracts/init-of-message.tact diff --git a/src/test/e2e-emulated/contracts/init-return.tact b/test/e2e-emulated/contracts/init-return.tact similarity index 100% rename from src/test/e2e-emulated/contracts/init-return.tact rename to test/e2e-emulated/contracts/init-return.tact diff --git a/src/test/e2e-emulated/contracts/initof-2.tact b/test/e2e-emulated/contracts/initof-2.tact similarity index 100% rename from src/test/e2e-emulated/contracts/initof-2.tact rename to test/e2e-emulated/contracts/initof-2.tact diff --git a/src/test/e2e-emulated/contracts/initof-3.tact b/test/e2e-emulated/contracts/initof-3.tact similarity index 100% rename from src/test/e2e-emulated/contracts/initof-3.tact rename to test/e2e-emulated/contracts/initof-3.tact diff --git a/src/test/e2e-emulated/contracts/initof.tact b/test/e2e-emulated/contracts/initof.tact similarity index 100% rename from src/test/e2e-emulated/contracts/initof.tact rename to test/e2e-emulated/contracts/initof.tact diff --git a/src/test/e2e-emulated/contracts/integer-literals.tact b/test/e2e-emulated/contracts/integer-literals.tact similarity index 100% rename from src/test/e2e-emulated/contracts/integer-literals.tact rename to test/e2e-emulated/contracts/integer-literals.tact diff --git a/src/test/e2e-emulated/contracts/intrinsics.tact b/test/e2e-emulated/contracts/intrinsics.tact similarity index 100% rename from src/test/e2e-emulated/contracts/intrinsics.tact rename to test/e2e-emulated/contracts/intrinsics.tact diff --git a/src/test/e2e-emulated/contracts/local-type-inference.tact b/test/e2e-emulated/contracts/local-type-inference.tact similarity index 100% rename from src/test/e2e-emulated/contracts/local-type-inference.tact rename to test/e2e-emulated/contracts/local-type-inference.tact diff --git a/src/test/e2e-emulated/contracts/map-comparison.tact b/test/e2e-emulated/contracts/map-comparison.tact similarity index 100% rename from src/test/e2e-emulated/contracts/map-comparison.tact rename to test/e2e-emulated/contracts/map-comparison.tact diff --git a/src/test/e2e-emulated/contracts/map-traverse.tact b/test/e2e-emulated/contracts/map-traverse.tact similarity index 100% rename from src/test/e2e-emulated/contracts/map-traverse.tact rename to test/e2e-emulated/contracts/map-traverse.tact diff --git a/src/test/e2e-emulated/contracts/maps1.tact b/test/e2e-emulated/contracts/maps1.tact similarity index 100% rename from src/test/e2e-emulated/contracts/maps1.tact rename to test/e2e-emulated/contracts/maps1.tact diff --git a/src/test/e2e-emulated/contracts/maps2.tact b/test/e2e-emulated/contracts/maps2.tact similarity index 100% rename from src/test/e2e-emulated/contracts/maps2.tact rename to test/e2e-emulated/contracts/maps2.tact diff --git a/src/test/e2e-emulated/contracts/masterchain.tact b/test/e2e-emulated/contracts/masterchain.tact similarity index 100% rename from src/test/e2e-emulated/contracts/masterchain.tact rename to test/e2e-emulated/contracts/masterchain.tact diff --git a/src/test/e2e-emulated/contracts/math.tact b/test/e2e-emulated/contracts/math.tact similarity index 100% rename from src/test/e2e-emulated/contracts/math.tact rename to test/e2e-emulated/contracts/math.tact diff --git a/src/test/e2e-emulated/contracts/mutating-methods.tact b/test/e2e-emulated/contracts/mutating-methods.tact similarity index 100% rename from src/test/e2e-emulated/contracts/mutating-methods.tact rename to test/e2e-emulated/contracts/mutating-methods.tact diff --git a/src/test/e2e-emulated/contracts/non-mutating-methods.tact b/test/e2e-emulated/contracts/non-mutating-methods.tact similarity index 100% rename from src/test/e2e-emulated/contracts/non-mutating-methods.tact rename to test/e2e-emulated/contracts/non-mutating-methods.tact diff --git a/src/test/e2e-emulated/contracts/optionals-2.tact b/test/e2e-emulated/contracts/optionals-2.tact similarity index 100% rename from src/test/e2e-emulated/contracts/optionals-2.tact rename to test/e2e-emulated/contracts/optionals-2.tact diff --git a/src/test/e2e-emulated/contracts/optionals.tact b/test/e2e-emulated/contracts/optionals.tact similarity index 100% rename from src/test/e2e-emulated/contracts/optionals.tact rename to test/e2e-emulated/contracts/optionals.tact diff --git a/src/test/e2e-emulated/contracts/ordering.tact b/test/e2e-emulated/contracts/ordering.tact similarity index 100% rename from src/test/e2e-emulated/contracts/ordering.tact rename to test/e2e-emulated/contracts/ordering.tact diff --git a/src/test/e2e-emulated/contracts/random.tact b/test/e2e-emulated/contracts/random.tact similarity index 100% rename from src/test/e2e-emulated/contracts/random.tact rename to test/e2e-emulated/contracts/random.tact diff --git a/src/test/e2e-emulated/contracts/receiver-empty.tact b/test/e2e-emulated/contracts/receiver-empty.tact similarity index 100% rename from src/test/e2e-emulated/contracts/receiver-empty.tact rename to test/e2e-emulated/contracts/receiver-empty.tact diff --git a/src/test/e2e-emulated/contracts/recursion.tact b/test/e2e-emulated/contracts/recursion.tact similarity index 100% rename from src/test/e2e-emulated/contracts/recursion.tact rename to test/e2e-emulated/contracts/recursion.tact diff --git a/src/test/e2e-emulated/contracts/sample-jetton.tact b/test/e2e-emulated/contracts/sample-jetton.tact similarity index 100% rename from src/test/e2e-emulated/contracts/sample-jetton.tact rename to test/e2e-emulated/contracts/sample-jetton.tact diff --git a/src/test/e2e-emulated/contracts/semantics.tact b/test/e2e-emulated/contracts/semantics.tact similarity index 100% rename from src/test/e2e-emulated/contracts/semantics.tact rename to test/e2e-emulated/contracts/semantics.tact diff --git a/src/test/e2e-emulated/contracts/send.tact b/test/e2e-emulated/contracts/send.tact similarity index 100% rename from src/test/e2e-emulated/contracts/send.tact rename to test/e2e-emulated/contracts/send.tact diff --git a/src/test/e2e-emulated/contracts/serialization-2.tact b/test/e2e-emulated/contracts/serialization-2.tact similarity index 100% rename from src/test/e2e-emulated/contracts/serialization-2.tact rename to test/e2e-emulated/contracts/serialization-2.tact diff --git a/src/test/e2e-emulated/contracts/serialization-3.tact b/test/e2e-emulated/contracts/serialization-3.tact similarity index 100% rename from src/test/e2e-emulated/contracts/serialization-3.tact rename to test/e2e-emulated/contracts/serialization-3.tact diff --git a/src/test/e2e-emulated/contracts/serialization.tact b/test/e2e-emulated/contracts/serialization.tact similarity index 100% rename from src/test/e2e-emulated/contracts/serialization.tact rename to test/e2e-emulated/contracts/serialization.tact diff --git a/src/test/e2e-emulated/contracts/stdlib.tact b/test/e2e-emulated/contracts/stdlib.tact similarity index 100% rename from src/test/e2e-emulated/contracts/stdlib.tact rename to test/e2e-emulated/contracts/stdlib.tact diff --git a/src/test/e2e-emulated/contracts/strings.tact b/test/e2e-emulated/contracts/strings.tact similarity index 100% rename from src/test/e2e-emulated/contracts/strings.tact rename to test/e2e-emulated/contracts/strings.tact diff --git a/src/test/e2e-emulated/contracts/structs.tact b/test/e2e-emulated/contracts/structs.tact similarity index 100% rename from src/test/e2e-emulated/contracts/structs.tact rename to test/e2e-emulated/contracts/structs.tact diff --git a/src/test/e2e-emulated/contracts/ternary.tact b/test/e2e-emulated/contracts/ternary.tact similarity index 100% rename from src/test/e2e-emulated/contracts/ternary.tact rename to test/e2e-emulated/contracts/ternary.tact diff --git a/src/test/e2e-emulated/contracts/text-message-receivers.tact b/test/e2e-emulated/contracts/text-message-receivers.tact similarity index 100% rename from src/test/e2e-emulated/contracts/text-message-receivers.tact rename to test/e2e-emulated/contracts/text-message-receivers.tact diff --git a/src/test/e2e-emulated/contracts/traits.tact b/test/e2e-emulated/contracts/traits.tact similarity index 100% rename from src/test/e2e-emulated/contracts/traits.tact rename to test/e2e-emulated/contracts/traits.tact diff --git a/src/test/e2e-emulated/contracts/try-catch.tact b/test/e2e-emulated/contracts/try-catch.tact similarity index 100% rename from src/test/e2e-emulated/contracts/try-catch.tact rename to test/e2e-emulated/contracts/try-catch.tact diff --git a/src/test/e2e-emulated/contracts/underscore-variable.tact b/test/e2e-emulated/contracts/underscore-variable.tact similarity index 100% rename from src/test/e2e-emulated/contracts/underscore-variable.tact rename to test/e2e-emulated/contracts/underscore-variable.tact diff --git a/src/test/e2e-emulated/debug.spec.ts b/test/e2e-emulated/debug.spec.ts similarity index 97% rename from src/test/e2e-emulated/debug.spec.ts rename to test/e2e-emulated/debug.spec.ts index 36a1d85bf..6f020bf32 100644 --- a/src/test/e2e-emulated/debug.spec.ts +++ b/test/e2e-emulated/debug.spec.ts @@ -1,7 +1,7 @@ import { Address, toNano } from "@ton/core"; import { Blockchain, SandboxContract, TreasuryContract } from "@ton/sandbox"; import { Debug } from "./contracts/output/debug_Debug"; -import { posixNormalize } from "../../utils/filePath"; +import { posixNormalize } from "../../src/utils/filePath"; import "@ton/test-utils"; describe("debug", () => { diff --git a/src/test/e2e-emulated/deep.spec.ts b/test/e2e-emulated/deep.spec.ts similarity index 100% rename from src/test/e2e-emulated/deep.spec.ts rename to test/e2e-emulated/deep.spec.ts diff --git a/src/test/e2e-emulated/dns.spec.ts b/test/e2e-emulated/dns.spec.ts similarity index 100% rename from src/test/e2e-emulated/dns.spec.ts rename to test/e2e-emulated/dns.spec.ts diff --git a/src/test/e2e-emulated/external-fallbacks.spec.ts b/test/e2e-emulated/external-fallbacks.spec.ts similarity index 100% rename from src/test/e2e-emulated/external-fallbacks.spec.ts rename to test/e2e-emulated/external-fallbacks.spec.ts diff --git a/src/test/e2e-emulated/getters.spec.ts b/test/e2e-emulated/getters.spec.ts similarity index 100% rename from src/test/e2e-emulated/getters.spec.ts rename to test/e2e-emulated/getters.spec.ts diff --git a/src/test/e2e-emulated/implicit-init.spec.ts b/test/e2e-emulated/implicit-init.spec.ts similarity index 100% rename from src/test/e2e-emulated/implicit-init.spec.ts rename to test/e2e-emulated/implicit-init.spec.ts diff --git a/src/test/e2e-emulated/init-of-message.spec.ts b/test/e2e-emulated/init-of-message.spec.ts similarity index 100% rename from src/test/e2e-emulated/init-of-message.spec.ts rename to test/e2e-emulated/init-of-message.spec.ts diff --git a/src/test/e2e-emulated/init-return.spec.ts b/test/e2e-emulated/init-return.spec.ts similarity index 100% rename from src/test/e2e-emulated/init-return.spec.ts rename to test/e2e-emulated/init-return.spec.ts diff --git a/src/test/e2e-emulated/initof.spec.ts b/test/e2e-emulated/initof.spec.ts similarity index 100% rename from src/test/e2e-emulated/initof.spec.ts rename to test/e2e-emulated/initof.spec.ts diff --git a/src/test/e2e-emulated/integer-literals.spec.ts b/test/e2e-emulated/integer-literals.spec.ts similarity index 100% rename from src/test/e2e-emulated/integer-literals.spec.ts rename to test/e2e-emulated/integer-literals.spec.ts diff --git a/src/test/e2e-emulated/intrinsics.spec.ts b/test/e2e-emulated/intrinsics.spec.ts similarity index 100% rename from src/test/e2e-emulated/intrinsics.spec.ts rename to test/e2e-emulated/intrinsics.spec.ts diff --git a/src/test/e2e-emulated/local-type-inference.spec.ts b/test/e2e-emulated/local-type-inference.spec.ts similarity index 100% rename from src/test/e2e-emulated/local-type-inference.spec.ts rename to test/e2e-emulated/local-type-inference.spec.ts diff --git a/src/test/e2e-emulated/map-comparison.spec.ts b/test/e2e-emulated/map-comparison.spec.ts similarity index 100% rename from src/test/e2e-emulated/map-comparison.spec.ts rename to test/e2e-emulated/map-comparison.spec.ts diff --git a/src/test/e2e-emulated/map-traverse.spec.ts b/test/e2e-emulated/map-traverse.spec.ts similarity index 100% rename from src/test/e2e-emulated/map-traverse.spec.ts rename to test/e2e-emulated/map-traverse.spec.ts diff --git a/src/test/e2e-emulated/map1.spec.ts b/test/e2e-emulated/map1.spec.ts similarity index 100% rename from src/test/e2e-emulated/map1.spec.ts rename to test/e2e-emulated/map1.spec.ts diff --git a/src/test/e2e-emulated/map2.spec.ts b/test/e2e-emulated/map2.spec.ts similarity index 100% rename from src/test/e2e-emulated/map2.spec.ts rename to test/e2e-emulated/map2.spec.ts diff --git a/src/test/e2e-emulated/masterchain.spec.ts b/test/e2e-emulated/masterchain.spec.ts similarity index 100% rename from src/test/e2e-emulated/masterchain.spec.ts rename to test/e2e-emulated/masterchain.spec.ts diff --git a/src/test/e2e-emulated/math.spec.ts b/test/e2e-emulated/math.spec.ts similarity index 100% rename from src/test/e2e-emulated/math.spec.ts rename to test/e2e-emulated/math.spec.ts diff --git a/src/test/e2e-emulated/mutating-methods.spec.ts b/test/e2e-emulated/mutating-methods.spec.ts similarity index 100% rename from src/test/e2e-emulated/mutating-methods.spec.ts rename to test/e2e-emulated/mutating-methods.spec.ts diff --git a/src/test/e2e-emulated/non-mutating-methods.spec.ts b/test/e2e-emulated/non-mutating-methods.spec.ts similarity index 100% rename from src/test/e2e-emulated/non-mutating-methods.spec.ts rename to test/e2e-emulated/non-mutating-methods.spec.ts diff --git a/src/test/e2e-emulated/optionals.spec.ts b/test/e2e-emulated/optionals.spec.ts similarity index 100% rename from src/test/e2e-emulated/optionals.spec.ts rename to test/e2e-emulated/optionals.spec.ts diff --git a/src/test/e2e-emulated/ordering.spec.ts b/test/e2e-emulated/ordering.spec.ts similarity index 100% rename from src/test/e2e-emulated/ordering.spec.ts rename to test/e2e-emulated/ordering.spec.ts diff --git a/src/test/e2e-emulated/random.spec.ts b/test/e2e-emulated/random.spec.ts similarity index 100% rename from src/test/e2e-emulated/random.spec.ts rename to test/e2e-emulated/random.spec.ts diff --git a/src/test/e2e-emulated/receiver-empty.spec.ts b/test/e2e-emulated/receiver-empty.spec.ts similarity index 100% rename from src/test/e2e-emulated/receiver-empty.spec.ts rename to test/e2e-emulated/receiver-empty.spec.ts diff --git a/src/test/e2e-emulated/recursion.spec.ts b/test/e2e-emulated/recursion.spec.ts similarity index 100% rename from src/test/e2e-emulated/recursion.spec.ts rename to test/e2e-emulated/recursion.spec.ts diff --git a/src/test/e2e-emulated/sample-jetton.spec.ts b/test/e2e-emulated/sample-jetton.spec.ts similarity index 100% rename from src/test/e2e-emulated/sample-jetton.spec.ts rename to test/e2e-emulated/sample-jetton.spec.ts diff --git a/src/test/e2e-emulated/semantics.spec.ts b/test/e2e-emulated/semantics.spec.ts similarity index 100% rename from src/test/e2e-emulated/semantics.spec.ts rename to test/e2e-emulated/semantics.spec.ts diff --git a/src/test/e2e-emulated/send.spec.ts b/test/e2e-emulated/send.spec.ts similarity index 100% rename from src/test/e2e-emulated/send.spec.ts rename to test/e2e-emulated/send.spec.ts diff --git a/src/test/e2e-emulated/serialization.spec.ts b/test/e2e-emulated/serialization.spec.ts similarity index 100% rename from src/test/e2e-emulated/serialization.spec.ts rename to test/e2e-emulated/serialization.spec.ts diff --git a/src/test/e2e-emulated/stdlib.spec.ts b/test/e2e-emulated/stdlib.spec.ts similarity index 100% rename from src/test/e2e-emulated/stdlib.spec.ts rename to test/e2e-emulated/stdlib.spec.ts diff --git a/src/test/e2e-emulated/strings.spec.ts b/test/e2e-emulated/strings.spec.ts similarity index 100% rename from src/test/e2e-emulated/strings.spec.ts rename to test/e2e-emulated/strings.spec.ts diff --git a/src/test/e2e-emulated/structs.spec.ts b/test/e2e-emulated/structs.spec.ts similarity index 100% rename from src/test/e2e-emulated/structs.spec.ts rename to test/e2e-emulated/structs.spec.ts diff --git a/src/test/e2e-emulated/ternary.spec.ts b/test/e2e-emulated/ternary.spec.ts similarity index 100% rename from src/test/e2e-emulated/ternary.spec.ts rename to test/e2e-emulated/ternary.spec.ts diff --git a/src/test/e2e-emulated/text-message-receivers.spec.ts b/test/e2e-emulated/text-message-receivers.spec.ts similarity index 100% rename from src/test/e2e-emulated/text-message-receivers.spec.ts rename to test/e2e-emulated/text-message-receivers.spec.ts diff --git a/src/test/e2e-emulated/traits.spec.ts b/test/e2e-emulated/traits.spec.ts similarity index 100% rename from src/test/e2e-emulated/traits.spec.ts rename to test/e2e-emulated/traits.spec.ts diff --git a/src/test/e2e-emulated/try-catch.spec.ts b/test/e2e-emulated/try-catch.spec.ts similarity index 100% rename from src/test/e2e-emulated/try-catch.spec.ts rename to test/e2e-emulated/try-catch.spec.ts diff --git a/src/test/e2e-emulated/underscore-variable.spec.ts b/test/e2e-emulated/underscore-variable.spec.ts similarity index 100% rename from src/test/e2e-emulated/underscore-variable.spec.ts rename to test/e2e-emulated/underscore-variable.spec.ts diff --git a/src/test/exit-codes/compute-phase-errors.spec.ts b/test/exit-codes/compute-phase-errors.spec.ts similarity index 100% rename from src/test/exit-codes/compute-phase-errors.spec.ts rename to test/exit-codes/compute-phase-errors.spec.ts diff --git a/src/test/exit-codes/contracts/compute-phase-errors.fc b/test/exit-codes/contracts/compute-phase-errors.fc similarity index 100% rename from src/test/exit-codes/contracts/compute-phase-errors.fc rename to test/exit-codes/contracts/compute-phase-errors.fc diff --git a/src/test/exit-codes/contracts/compute-phase-errors.tact b/test/exit-codes/contracts/compute-phase-errors.tact similarity index 100% rename from src/test/exit-codes/contracts/compute-phase-errors.tact rename to test/exit-codes/contracts/compute-phase-errors.tact diff --git a/src/test/exit-codes/contracts/repeat-range.tact b/test/exit-codes/contracts/repeat-range.tact similarity index 100% rename from src/test/exit-codes/contracts/repeat-range.tact rename to test/exit-codes/contracts/repeat-range.tact diff --git a/src/test/exit-codes/contracts/tact-reserved-contract-errors.tact b/test/exit-codes/contracts/tact-reserved-contract-errors.tact similarity index 100% rename from src/test/exit-codes/contracts/tact-reserved-contract-errors.tact rename to test/exit-codes/contracts/tact-reserved-contract-errors.tact diff --git a/src/test/exit-codes/repeat-range.spec.ts b/test/exit-codes/repeat-range.spec.ts similarity index 100% rename from src/test/exit-codes/repeat-range.spec.ts rename to test/exit-codes/repeat-range.spec.ts diff --git a/src/test/exit-codes/tact-reserved-contract-errors.spec.ts b/test/exit-codes/tact-reserved-contract-errors.spec.ts similarity index 100% rename from src/test/exit-codes/tact-reserved-contract-errors.spec.ts rename to test/exit-codes/tact-reserved-contract-errors.spec.ts diff --git a/src/test/rename.spec.ts b/test/rename.spec.ts similarity index 81% rename from src/test/rename.spec.ts rename to test/rename.spec.ts index c49e7b94a..003523145 100644 --- a/src/test/rename.spec.ts +++ b/test/rename.spec.ts @@ -1,12 +1,12 @@ import fs from "fs"; import { join } from "path"; -import { AstRenamer } from "../grammar/rename"; -import { prettyPrint } from "../prettyPrinter"; +import { AstRenamer } from "../src/050-grammar/rename"; +import { prettyPrint } from "../src/prettyPrinter"; import { trimTrailingCR, CONTRACTS_DIR } from "./util"; import * as assert from "assert"; -import { getParser } from "../grammar"; -import { getAstFactory } from "../grammar/ast"; -import { defaultParser } from "../grammar/grammar"; +import { getParser } from "../src/050-grammar"; +import { getAstFactory } from "../src/050-grammar/ast"; +import { defaultParser } from "../src/050-grammar/grammar"; const EXPECTED_DIR = join(CONTRACTS_DIR, "renamer-expected"); diff --git a/test/tact.config.json b/test/tact.config.json new file mode 100644 index 000000000..14f5b6794 --- /dev/null +++ b/test/tact.config.json @@ -0,0 +1,369 @@ +{ + "$schema": "http://raw.githubusercontent.com/tact-lang/tact/main/schemas/configSchema.json", + "projects": [ + { + "name": "benchmark_functions", + "path": "./benchmarks/contracts/functions.tact", + "output": "./benchmarks/contracts/output" + }, + { + "name": "benchmark_functions_inline", + "path": "./benchmarks/contracts/functions.tact", + "output": "./benchmarks/contracts/output", + "options": { + "experimental": { + "inline": true + } + } + }, + { + "name": "codegen", + "path": "./codegen/all-contracts.tact", + "output": "./codegen/output", + "options": { + "debug": true + } + }, + { + "name": "repeat-range", + "path": "./exit-codes/contracts/repeat-range.tact", + "output": "./exit-codes/contracts/output" + }, + { + "name": "tact-reserved-contract-errors", + "path": "./exit-codes/contracts/tact-reserved-contract-errors.tact", + "output": "./exit-codes/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "compute-phase-errors", + "path": "./exit-codes/contracts/compute-phase-errors.tact", + "output": "./exit-codes/contracts/output" + }, + + { + "name": "maps1", + "path": "./e2e-emulated/contracts/maps1.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "maps2", + "path": "./e2e-emulated/contracts/maps2.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "map-traverse", + "path": "./e2e-emulated/contracts/map-traverse.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "map-comparison", + "path": "./e2e-emulated/contracts/map-comparison.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "mutating-methods", + "path": "./e2e-emulated/contracts/mutating-methods.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "non-mutating-methods", + "path": "./e2e-emulated/contracts/non-mutating-methods.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "underscore-variable", + "path": "./e2e-emulated/contracts/underscore-variable.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "optionals", + "path": "./e2e-emulated/contracts/optionals.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "sample-jetton", + "path": "./e2e-emulated/contracts/sample-jetton.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "serialization", + "path": "./e2e-emulated/contracts/serialization.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "serialization-2", + "path": "./e2e-emulated/contracts/serialization-2.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "serialization-3", + "path": "./e2e-emulated/contracts/serialization-3.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "strings", + "path": "./e2e-emulated/contracts/strings.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "constants", + "path": "./e2e-emulated/contracts/constants.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "math", + "path": "./e2e-emulated/contracts/math.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "dns", + "path": "./e2e-emulated/contracts/dns.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "integer-literals", + "path": "./e2e-emulated/contracts/integer-literals.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "random", + "path": "./e2e-emulated/contracts/random.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "ordering", + "path": "./e2e-emulated/contracts/ordering.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "deep", + "path": "./e2e-emulated/contracts/deep-sequence.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "bounced-routing", + "path": "./e2e-emulated/contracts/bounced-routing.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "external-fallbacks", + "path": "./e2e-emulated/contracts/external-fallbacks.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "external": true + } + }, + { + "name": "debug", + "path": "./e2e-emulated/contracts/debug.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "send", + "path": "./e2e-emulated/contracts/send.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "intrinsics", + "path": "./e2e-emulated/contracts/intrinsics.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "masterchain", + "path": "./e2e-emulated/contracts/masterchain.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "try-catch", + "path": "./e2e-emulated/contracts/try-catch.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "address", + "path": "./e2e-emulated/contracts/address.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "ternary", + "path": "./e2e-emulated/contracts/ternary.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "implicit-init", + "path": "./e2e-emulated/contracts/implicit-init.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "recursion", + "path": "./e2e-emulated/contracts/recursion.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "local-type-inference", + "path": "./e2e-emulated/contracts/local-type-inference.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "stdlib", + "path": "./e2e-emulated/contracts/stdlib.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "structs", + "path": "./e2e-emulated/contracts/structs.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "initof", + "path": "./e2e-emulated/contracts/initof.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "initof-2", + "path": "./e2e-emulated/contracts/initof-2.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "initof-3", + "path": "./e2e-emulated/contracts/initof-3.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "getters", + "path": "./e2e-emulated/contracts/getters.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "allocation", + "path": "./e2e-emulated/contracts/allocation.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "traits", + "path": "./e2e-emulated/contracts/traits.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "receiver-empty", + "path": "./e2e-emulated/contracts/receiver-empty.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "init-of-message", + "path": "./e2e-emulated/contracts/init-of-message.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "init-return", + "path": "./e2e-emulated/contracts/init-return.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "semantics", + "path": "./e2e-emulated/contracts/semantics.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "contract-methods", + "path": "./e2e-emulated/contracts/contract-methods.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "asm-functions", + "path": "./e2e-emulated/contracts/asm-functions.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "text-message-receivers", + "path": "./e2e-emulated/contracts/text-message-receivers.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + } + ] +} diff --git a/scripts/tsconfig.json b/test/tsconfig.json similarity index 100% rename from scripts/tsconfig.json rename to test/tsconfig.json diff --git a/src/test/util.ts b/test/util.ts similarity index 100% rename from src/test/util.ts rename to test/util.ts diff --git a/src/test/utils/randomAddress.ts b/test/utils/randomAddress.ts similarity index 100% rename from src/test/utils/randomAddress.ts rename to test/utils/randomAddress.ts diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json index 50fff32bc..24e4cbe17 100644 --- a/tsconfig.eslint.json +++ b/tsconfig.eslint.json @@ -7,7 +7,8 @@ "include": [ "src/", "examples/", - "scripts/", + "func/", + "test/", "./jest.config.js", "bin/tact.js", "bin/unboc.js" diff --git a/tsconfig.json b/tsconfig.json index 12aa2324d..06a1099e4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,5 +4,5 @@ "outDir": "./dist" }, "include": ["src/**/*"], - "exclude": ["**/**.spec.ts", "**/**.bind.ts", "src/test/features/output/**/*"] + "exclude": ["**/**.spec.ts", "**/**.bind.ts", "test/features/output/**/*"] }